Code analysis rule set
Bài đăng này đã không được cập nhật trong 9 năm
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