Code analysis rule set

Phần này rât là rộng. Thế nên giới hiệu ở đây chỉ là một phần rất nhỏ được apply chủ yếu để self review cho việc check dead code Dưới đây là 1 bộ rule set cho việc check dead code

Untitled

1/ CA1302: Do not hardcode locale specific strings :

Đoạn code sau sẽ bị warning :

Shared Sub Main()

     Dim string0 As String = "C:"

     ' Each of the following three strings violates the rule.
     Dim string1 As String = "\Documents and Settings"
     Dim string2 As String = "\All Users"
     Dim string3 As String = "\Application Data"
     Console.WriteLine(string0 & string1 & string2 & string3)

     ' The following statement satisfies the rule.
     Console.WriteLine(Environment.GetFolderPath( _
        Environment.SpecialFolder.CommonApplicationData))

  End Sub

2/ CA1303: Do not pass literals as localized parameters Nguyên Nhân: Attribute của parameter or property is set to true The parameter or property name chứa "Text", "Message", or "Caption". The name of the string parameter that is passed to a Console.Write or Console.WriteLine

Hậu quả : String literals that are embedded in source code are difficult to localize.

Code sau raise lên CA này : If(hour < 0 Or hour > 23) Then MessageBox.Show( _ "The valid range is 0 - 23.") 'CA1303 fires because the parameter for method Show is Text End If maintaining 1/ CA1505: Avoid unmaintainable code

Nguyên nhân: Một kiểu code mà có tỉ lệ maintain lại là thấp nhất ví dụ như số lượng dòng code của 1 function quá lớn , mức độ hỗn hợp các chức năng trong một function cần phải chia nhỏ ra và focus vào từng chức năng riêng biệt

performance

1/ CA1804: Remove unused locals

Hậu quả : Việc sử dụng biến local và asignment mà ko được dùng tới sẽ dân đến tăng size of an assembly và giảm performance.

ví dụ sau chỉ ra biến local ko được sư dụng

Sub SomeMethod()

     Dim unusedInteger As Integer
     Dim unusedString As String = "hello"
     Dim unusedArray As String() = Environment.GetLogicalDrives()
     Dim unusedButton As New Button()

  End Sub

2/CA1811: Avoid uncalled private code Nguyên nhân : A private or internal (assembly-level) member ko được gọi trong assembly, ko được gọi bởi common language runtime, ko được gọi bởi delegate Ngoại trừ những items sau thì sẽ ko được check bởi rule này Explicit interface members. Static constructors. Serialization constructors. Methods marked with System.Runtime.InteropServices.ComRegisterFunctionAttribute or System.Runtime.InteropServices.ComUnregisterFunctionAttribute. Members that are overrides. Fix :Bỏ đi những items mà ko được gỏi bơi CLR, delegate

3/CA1812: Avoid uninstantiated internal classes Nguyên nhân :Nhưng class internal mà ko được khởi tạo bên trong asembly Ngoại trừ nhưng type sau sẽ ko bị check bởi rule này : Value types Abstract types Enumerations Delegates Compiler-emitted array types Types that cannot be instantiated and that define static (Shared in Visual Basic) methods only. Ví dụ cho việc code invoke rule này

internal class MyClass { public DoSomething() { } } public class MyGeneric<T> where T : new() { public T Create() { return new T(); } } // [...] MyGeneric<MyClass> mc = new MyGeneric<MyClass>(); mc.Create();

-----> Nó ko được khởi tạo rõ ràng mà lại được truyền như 1 parameter của lớp MyGeneric

4/ CA1823: Avoid unused private fields Nguyên nhân: Một private field tồn tại trong code nhưng ko được sử dụng

Usage 1/ CA1801: Review unused parameters

Parameter mà ko được dùng trong method body . Ngoại trư trường hợp sau

Methods referenced by a delegate. Methods used as event handlers. Methods declared with the abstract (MustOverride in Visual Basic) modifier. Methods declared with the virtual (Overridable in Visual Basic) modifier. Methods declared with the override (Overrides in Visual Basic) modifier. Methods declared with the extern (Declare statement in Visual Basic) modifier.

Parameter ko được used phải chịu chi phí maintain và vấn đề hiệu suất

Ví dụ sau :

// This method violates the rule. public static string GetSomething(int first, int second) { return first.ToString(CultureInfo.InvariantCulture); }

    // This method satisfies the rule.
    public static string GetSomethingElse(int first)
    {
        return first.ToString(CultureInfo.InvariantCulture);
    }

1/ CA2211: Non-constant fields should not be visible Những trường static mà ko phải là constants hay là read-only là không phải là những thread safe. Trường static là tốt nhất để lưu data không thay đổi Thế nên những trường loại này không nên là visible

Public Class SomeStaticFields ' Field này không phải constant hay readonly mà lại public -- rule này được raised Public Shared publicField As DateTime = DateTime.Now

' Satisfy hơn khi là readonly
Public Shared ReadOnly literalField As DateTime = DateTime.Now

' Satisfies: khi để nó là private
Private Shared privateField As DateTime = DateTime.Now

End Class

II, Chạy code analysic để check rule trên như sau analy Kết quả như sau :

result


All Rights Reserved