1.发展进程
开发过程是bug和缺陷开始的地方。在发布之前,利用帮助您避免或发现这些问题的工具:
编码标准
标准的一致使用可以导致更易于维护的代码,特别是在由多个开发人员或团队编写和维护的代码库中。FxCop、StyleCop和ReSharper等工具通常用于执行编码标准。
开发人员:在抑制违规行为和分析结果之前,要仔细考虑它们。它们识别代码路径中的问题,这些问题不像您预期的那么不寻常。
代码评审
代码评审和对编程是开发人员通过仔细检查他人编写的源代码来执行任务的常见做法。其他人希望认识到作者所犯的错误,如编码或实现错误。
代码评审是一种很有价值的实践,但是依赖于人的本质是错误的,而且很难扩展。
静态分析
静态分析工具在不运行代码的情况下分析代码,查找违反编码标准或存在缺陷等问题,而无需编写测试用例。它在发现问题方面是有效的,但是您需要选择一些工具来识别有价值的问题,而不会出现太多的错误。C#静态分析工具包括Coverity、CAT.NET和VisualStudio代码分析。
动态分析
动态分析工具在代码运行时分析代码,帮助您查找安全漏洞、性能和并发问题等缺陷。它在运行时环境中分析代码,因此它的有效性受到测试工作量的限制。VisualStudio提供了许多动态分析工具,包括并发可视化器、智能跟踪和分析工具。
经理/团队领导:利用开发最佳实践来避免常见的陷阱。仔细考虑可用的工具,以确保它们与您的需要和文化兼容。让您的团队保持诊断噪音水平的可管理性。
测试
有许多类型的测试,例如:单元测试、系统集成测试、性能测试、渗透测试。在开发阶段,大多数测试由开发人员或测试人员编写,以验证应用程序是否满足其要求。
只有当测试执行正确的代码时,测试才是有效的。在实现功能和测试的同时保持开发速度可能是一项挑战。
发展最佳做法
投入时间来识别和配置工具,找出你关心的问题,而不为开发人员创造额外的工作。频繁和自动地运行分析工具和测试,以确保开发人员在代码还未被记住时解决问题。
尽快处理所有诊断输出--无论是编译器警告、标准冲突、通过静态分析识别的缺陷还是测试失败。如果有趣的新诊断在“不关心”或忽略诊断的海洋中丢失,那么检查结果的工作将会增加,直到开发人员不再费心为止。
采用这些最佳实践有助于提高代码的质量、安全性和可维护性,以及提高开发人员的一致性和生产力以及版本的可预测性。
2.Gotchas型
C#的主要优点之一是其灵活的类型系统;类型安全有助于及早发现错误。通过执行严格的类型规则,编译器能够帮助您维护正常的编码实践。C#语言和.NET框架提供了丰富的类型集合,以满足最常见的需求。大多数开发人员对常见类型及其使用有很好的理解,但也存在一些常见的误解和误用。
有关.NETFramework类库的更多信息可以在MSDN库中找到。
理解并使用标准接口
某些接口与惯用的C#特性有关。例如,IDisposable允许使用常见的资源处理习惯用法,例如“使用”关键字。理解何时使用接口将使您能够编写易于维护的惯用C#代码。
避免ICloneable-设计者从未明确指出克隆对象是打算是深拷贝还是浅拷贝。由于克隆对象的正确行为没有标准,因此没有能力将接口作为契约进行有意义的使用。
结构
尽量避免写到结构中。将它们视为不可变会防止混淆,并且在共享内存场景(如多线程应用程序)中更为安全。相反,如果需要更改值,则在创建结构和创建新实例时使用初始化器。
了解哪些标准类型/方法是不可变的,并返回新值(例如,String、datetime)和可变的值(清单.EnDigator)。
弦
字符串可能为空,因此在适当的时候使用方便的函数。计算(s.Length==0)可能抛出一个NullReferenceException,而String.IsNullOrempty(S)和String.NullOrWhitesspace(S)则优雅地处理NULL。
标记枚举
枚举类型和常量值通过将魔术数字替换为公开值含义的标识符,有助于提高代码的可读性。
如果发现需要创建枚举集合,则标记枚举可能是更简单的选择:
[Flag]
publicenumTag{
None=0x0,
Tip=0x1,
Example=0x2
}
这使您可以轻松地为一个片段拥有多个标记:
snippet.Tag=Tag.Tip
Tag.Example
这可以改进数据封装,因为您不必担心通过标记属性getter公开内部集合。
平等比较
有两种类型的平等:
引用相等,这意味着两个引用引用同一个对象。
值相等,这意味着两个引用上不同的对象应该被认为是相等的。
此外,C#提供了多种方法来测试等式。最常用的技术是:
=和!=运算符
从对象继承的虚拟相等方法
静态对象方法
IequableT接口的等号方法
静态对象.引用等式方法
很难知道引用或价值相等是有意的。检查msdn相等主题,以确保您的比较工作正常: