C# 开发者代码审查清单和指南






4.84/5 (138投票s)
这是一份针对 C# 开发者的通用代码审查清单和指南,可作为开发工作的参考。
引言
这是一份针对 C# 开发者的通用代码审查清单和指南,可作为开发过程中的参考。它旨在确保在编码时已考虑了大多数通用编码指南。特别是,它对初级和经验不足的开发者(0 到 3 年经验)非常有帮助,可以参考此清单,直到成为习惯。
清单
参考:http://msdn.microsoft.com/en-us/library/ms182131(v=vs.100).aspx
- 确保不应该有任何项目警告。
- 如果在项目上执行代码分析(启用所有 Microsoft 规则)并消除警告,效果会更好。
- 所有未使用的
using
语句都需要移除。清理不必要的代码始终是良好的实践。 - 在适用之处需要执行“null”检查,以避免运行时出现空引用异常。
- 始终遵循命名约定。通常,变量/参数遵循小驼峰命名法,方法名和类名遵循大驼峰命名法。
- 确保您了解 SOLID 原则。
维基百科定义:在计算机编程中,SOLID(单一职责、开闭原则、里氏替换、接口隔离和依赖反转)是由助记符 首字母缩略词,由Michael Feathers 引入,用于指代Robert C. Martin[1][2] 在 2000 年代早期确定的“前五个原则”[3],它代表了面向对象编程和设计的五个基本原则。这些原则如果同时应用,旨在使程序员更有可能创建一个易于维护和扩展的系统。[3] SOLID 原则是在软件开发中可以应用的指南,通过使程序员重构软件的源代码,直到其既可读又可扩展,从而消除代码异味。它通常与测试驱动开发结合使用,是敏捷和自适应编程整体策略的一部分。
参考: http://en.wikipedia.org/wiki/SOLID_(object-oriented_design)
- 代码重用性:如果同一段代码被多次使用或预计将来会使用,则将其提取为方法。针对重复任务创建一些通用方法,并将它们放入相关类中,以便在您通知其他开发人员后他们可以开始使用。为常用功能开发用户控件,以便在整个项目中重复使用。
参考
- 代码一致性:例如,如果
Int32
类型被编码为int
,而String
类型被编码为string
,那么在整个应用程序中都应以相同的方式编码。而不是有时使用int
,有时使用Int32
。 - 代码可读性:应保持良好的可读性,以便其他开发人员能够轻松理解您的代码。
参考: http://msdn.microsoft.com/en-IN/library/aa291591(v=vs.100).aspx
- 非托管资源的释放,如文件 I/O、网络资源等。它们在使用完毕后必须被释放。如果希望在对象超出作用域后自动处理对象的释放,请使用
using
块来处理非托管代码。 - 正确实现异常处理(
try
/catch
和finally
块)和异常日志记录。参考: http://msdn.microsoft.com/en-us/library/vstudio/ms229005(v=vs.100).aspx
- 确保方法代码行数较少。不超过 30 到 40 行。
- 在源代码管理(如 TFS)中及时签入/签出文件/页面。
参考: https://codeproject.org.cn/Tips/593014/Steps-Check-in-Check-Out-Mechanism-for-TFS-To-avoi
- 同行代码审查。与同事交换代码文件/页面以进行内部代码审查。
- 单元测试。编写开发人员测试用例并执行单元测试,以确保在进入 QA 测试之前完成基本级别的测试。
- 尽可能避免嵌套的 for/foreach 循环和嵌套的
if
条件。 - 如果代码只使用一次,请使用匿名类型。
参考: http://msdn.microsoft.com/en-us/library/vstudio/bb397696.aspx
- 尝试使用 LINQ 查询和 Lambda 表达式来提高可读性。
- 正确使用
var
、object
和dynamic
关键字。它们有一些相似之处,导致大多数开发人员感到困惑或不太了解它们,因此他们互换使用它们,这不应该发生。 - 根据方法、类或变量的作用域需求,使用访问修饰符(private、public、protected、internal、protected internal)。例如,如果一个类仅用于程序集内部,那么将其标记为 internal 就足够了。
- 在需要维护解耦的地方使用接口。一些设计模式因接口的使用而诞生。
参考: http://msdn.microsoft.com/en-IN/library/3b5b8ezk(v=vs.100).aspx
- 根据使用情况和需求,将类标记为
sealed
、static
或abstract
。参考: http://msdn.microsoft.com/en-us/library/ms173150(v=vs.100).aspx
- 如果需要多次拼接字符串,请使用
StringBuilder
而不是string
,以节省堆内存。 - 检查是否存在不可达代码,如果存在则修改代码。
- 在所有方法顶部编写注释,描述其用途、预期输入类型和返回类型信息。
- 使用 Silverlight Spy 等工具检查和操作 Silverlight 应用程序运行时的渲染 XAML,以提高生产力。这节省了设计视图和运行视图之间大量来回切换的时间。
- 使用 Fiddler 工具检查 HTTP/网络流量和带宽信息,以追踪 Web 应用程序和服务的性能。
- 如果要在 Visual Studio 之外验证服务方法,或者通过将其进程附加到 Visual Studio 进行调试,请使用 WCFTestClient.exe 工具。
- 在适用的地方使用常量和只读。
参考
- 尽可能避免类型转换和类型转换;因为这会影响性能。
- 为您希望提供自定义信息的类型重写
ToString
(来自Object
类)方法。参考: http://msdn.microsoft.com/en-us/library/ms173154(v=vs.100).aspx
- 避免直接复制/粘贴代码。即使您参考了其他来源的代码,也始终建议手写代码。通过这样做,您将获得良好的编写代码的实践,并且您也将理解该代码的正确用法;最终您将永远不会忘记它。
- 始终养成阅读书籍/文章的习惯,并遵循行业专家(如微软专家)和知名作者(如 Martin Fowler、Kent Beck、Jeffrey Ritcher、Ward Cunningham、Scott Hanselman、Scott Guthrie、Donald E Knuth)的最佳实践和指南。
- 验证您的代码是否存在内存泄漏。如果存在,请确保已修复。
参考: http://blogs.msdn.com/b/davidklinems/archive/2005/11/16/493580.aspx
- 尝试参加专家技术研讨会,以了解最新的软件趋势、技术和最佳实践。
- 彻底理解面向对象编程概念,并尝试在代码中实现。
- 了解您的项目设计和架构,以便更好地理解整个应用程序的流程。
- 采取必要措施阻止并避免任何跨站脚本攻击、SQL 注入和其他安全漏洞。
- 在保存到数据库时,始终加密(使用良好的加密算法)密码等秘密/敏感信息,并将连接字符串存储在 web.config 文件中,以避免未经授权的用户篡改。
- 对于已知类型(原始类型),如
int
、decimal
、bool
等,应避免使用default
关键字。大多数情况下,它应该用于泛型类型(T
),因为我们可能不确定该类型是值类型还是引用类型。参考: http://msdn.microsoft.com/en-us/library/xwth0h0d(v=vs.100).aspx
-
根据微软的建议(在代码分析规则和指南中),应避免使用“
out
”和“ref
”关键字。这些关键字用于通过引用传递参数。请注意,“ref
”参数在传递给被调用方法之前,应在调用方法中进行初始化,但对于“out
”参数,这不是强制性的。
另一篇关于审查指南的文章参考
今天,我偶然发现了 Code Project 上另一篇关于代码审查指南的文章,我觉得它非常有趣。作者完美地解释了什么是代码审查,作为开发人员或审查人员需要注意什么,代码审查的重要性,给开发人员和审查人员的提示,以及审查清单。我建议我的读者阅读一下。
文章链接:https://codeproject.org.cn/Articles/524235/Codeplusreviewplusguidelines
[更新]
1. 添加了另一篇关于审查指南的文章参考和结论部分。
2. 添加了本文内容的 PDF 下载链接。
3. 在列表中添加了关于“out
”和“ref
”关键字使用的一个要点。
结论
我欢迎读者的反馈、疑问和建议,以便我能进一步改进,并使开发人员从中受益。我的目标是逐步将其打造成一个完整的代码审查指南,特别是针对 C# 开发人员,在下一个版本中,我计划添加支持代码示例和屏幕截图,以便更好地理解。
免责声明:本文档不保证所有提及的指南和实践在今天仍然适用。因此,始终建议查阅 MSDN、与专家讨论并查阅其他门户以获取当前和修改后的指南和实践。另请注意,某些提供的参考链接可能无法工作。