65.9K
CodeProject 正在变化。 阅读更多。
Home

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

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.84/5 (138投票s)

2013 年 5 月 30 日

CPOL

8分钟阅读

viewsIcon

720394

downloadIcon

8270

这是一份针对 C# 开发者的通用代码审查清单和指南,可作为开发工作的参考。

引言

这是一份针对 C# 开发者的通用代码审查清单和指南,可作为开发过程中的参考。它旨在确保在编码时已考虑了大多数通用编码指南。特别是,它对初级和经验不足的开发者(0 到 3 年经验)非常有帮助,可以参考此清单,直到成为习惯。

清单

参考:http://msdn.microsoft.com/en-us/library/ms182131(v=vs.100).aspx 

  1. 确保不应该有任何项目警告
  2. 如果在项目上执行代码分析启用所有 Microsoft 规则)并消除警告,效果会更好。
  3. 所有未使用的using语句都需要移除。清理不必要的代码始终是良好的实践。

    参考: http://msdn.microsoft.com/en-us/magazine/ee335722.aspx

  4. 在适用之处需要执行“null”检查,以避免运行时出现空引用异常
  5. 始终遵循命名约定。通常,变量/参数遵循小驼峰命名法,方法名和类名遵循大驼峰命名法

    参考: http://msdn.microsoft.com/en-us/library/ms229043.aspx

  6. 确保您了解 SOLID 原则。

    维基百科定义:在计算机编程中,SOLID(单一职责、开闭原则、里氏替换、接口隔离和依赖反转)是由助记符 首字母缩略词,由Michael Feathers 引入,用于指代Robert C. Martin[1][2] 在 2000 年代早期确定的“前五个原则”[3],它代表了面向对象编程设计的五个基本原则。这些原则如果同时应用,旨在使程序员更有可能创建一个易于维护和扩展的系统。[3] SOLID 原则是在软件开发中可以应用的指南,通过使程序员重构软件的源代码,直到其既可读又可扩展,从而消除代码异味。它通常与测试驱动开发结合使用,是敏捷自适应编程整体策略的一部分。

    参考: http://en.wikipedia.org/wiki/SOLID_(object-oriented_design)

  7. 代码重用性:如果同一段代码被多次使用或预计将来会使用,则将其提取为方法。针对重复任务创建一些通用方法,并将它们放入相关类中,以便在您通知其他开发人员后他们可以开始使用。为常用功能开发用户控件,以便在整个项目中重复使用。

    参考

  8. 代码一致性:例如,如果 Int32 类型被编码为 int,而 String 类型被编码为 string,那么在整个应用程序中都应以相同的方式编码。而不是有时使用 int,有时使用 Int32
  9. 代码可读性:应保持良好的可读性,以便其他开发人员能够轻松理解您的代码。

    参考: http://msdn.microsoft.com/en-IN/library/aa291591(v=vs.100).aspx

  10. 非托管资源的释放,如文件 I/O、网络资源等。它们在使用完毕后必须被释放。如果希望在对象超出作用域后自动处理对象的释放,请使用 using 块来处理非托管代码。

    参考: http://msdn.microsoft.com/en-us/library/498928w2.aspx

  11. 正确实现异常处理try/catchfinally 块)和异常日志记录。

    参考: http://msdn.microsoft.com/en-us/library/vstudio/ms229005(v=vs.100).aspx

  12. 确保方法代码行数较少。不超过 30 到 40 行。
  13. 在源代码管理(如 TFS)中及时签入/签出文件/页面。

    参考: https://codeproject.org.cn/Tips/593014/Steps-Check-in-Check-Out-Mechanism-for-TFS-To-avoi

  14. 同行代码审查。与同事交换代码文件/页面以进行内部代码审查。
  15. 单元测试。编写开发人员测试用例并执行单元测试,以确保在进入 QA 测试之前完成基本级别的测试。

    参考: https://msdn.microsoft.com/en-us/library/hh694602.aspx

  16. 尽可能避免嵌套的 for/foreach 循环和嵌套的 if 条件。
  17. 如果代码只使用一次,请使用匿名类型

    参考: http://msdn.microsoft.com/en-us/library/vstudio/bb397696.aspx

  18. 尝试使用 LINQ 查询和 Lambda 表达式来提高可读性。

    参考: http://msdn.microsoft.com/en-us/library/bb308959.aspx

  19. 正确使用 varobjectdynamic 关键字。它们有一些相似之处,导致大多数开发人员感到困惑或不太了解它们,因此他们互换使用它们,这不应该发生。

    参考: http://blogs.msdn.com/b/csharpfaq/archive/2010/01/25/what-is-the-difference-between-dynamic-and-object-keywords.aspx

  20. 根据方法、类或变量的作用域需求,使用访问修饰符private、public、protected、internal、protected internal)。例如,如果一个类仅用于程序集内部,那么将其标记为 internal 就足够了。

    参考: http://msdn.microsoft.com/en-us/library/kktasw36.aspx

  21. 在需要维护解耦的地方使用接口。一些设计模式因接口的使用而诞生。

    参考: http://msdn.microsoft.com/en-IN/library/3b5b8ezk(v=vs.100).aspx

  22. 根据使用情况和需求,将类标记为 sealedstaticabstract

    参考: http://msdn.microsoft.com/en-us/library/ms173150(v=vs.100).aspx

  23. 如果需要多次拼接字符串,请使用 StringBuilder 而不是 string,以节省堆内存
  24. 检查是否存在不可达代码,如果存在则修改代码。
  25. 在所有方法顶部编写注释,描述其用途、预期输入类型和返回类型信息。
  26. 使用 Silverlight Spy 等工具检查和操作 Silverlight 应用程序运行时的渲染 XAML,以提高生产力。这节省了设计视图和运行视图之间大量来回切换的时间。
  27. 使用 Fiddler 工具检查 HTTP/网络流量和带宽信息,以追踪 Web 应用程序和服务的性能。
  28. 如果要在 Visual Studio 之外验证服务方法,或者通过将其进程附加到 Visual Studio 进行调试,请使用 WCFTestClient.exe 工具。
  29. 在适用的地方使用常量和只读

    参考

  30. 尽可能避免类型转换和类型转换;因为这会影响性能。

    参考: http://msdn.microsoft.com/en-us/library/ms173105.aspx

  31. 为您希望提供自定义信息的类型重写 ToString(来自 Object 类)方法。

    参考: http://msdn.microsoft.com/en-us/library/ms173154(v=vs.100).aspx

  32. 避免直接复制/粘贴代码。即使您参考了其他来源的代码,也始终建议手写代码。通过这样做,您将获得良好的编写代码的实践,并且您也将理解该代码的正确用法;最终您将永远不会忘记它。
  33. 始终养成阅读书籍/文章的习惯,并遵循行业专家(如微软专家)和知名作者(如 Martin Fowler、Kent Beck、Jeffrey Ritcher、Ward Cunningham、Scott Hanselman、Scott Guthrie、Donald E Knuth)的最佳实践和指南。
  34. 验证您的代码是否存在内存泄漏。如果存在,请确保已修复。

    参考: http://blogs.msdn.com/b/davidklinems/archive/2005/11/16/493580.aspx

  35. 尝试参加专家技术研讨会,以了解最新的软件趋势、技术和最佳实践。
  36. 彻底理解面向对象编程概念,并尝试在代码中实现。
  37. 了解您的项目设计和架构,以便更好地理解整个应用程序的流程
  38. 采取必要措施阻止并避免任何跨站脚本攻击、SQL 注入和其他安全漏洞。
  39. 在保存到数据库时,始终加密(使用良好的加密算法)密码等秘密/敏感信息,并将连接字符串存储在 web.config 文件中,以避免未经授权的用户篡改。
  40. 对于已知类型(原始类型),如 intdecimalbool 等,应避免使用 default 关键字。大多数情况下,它应该用于泛型类型(T),因为我们可能不确定该类型是值类型还是引用类型。

    参考: http://msdn.microsoft.com/en-us/library/xwth0h0d(v=vs.100).aspx

  41. 根据微软的建议(在代码分析规则和指南中),应避免使用“out”和“ref”关键字。这些关键字用于通过引用传递参数。请注意,“ref”参数在传递给被调用方法之前,应在调用方法中进行初始化,但对于“out”参数,这不是强制性的。

 

另一篇关于审查指南的文章参考

今天,我偶然发现了 Code Project 上另一篇关于代码审查指南的文章,我觉得它非常有趣。作者完美地解释了什么是代码审查,作为开发人员或审查人员需要注意什么,代码审查的重要性给开发人员和审查人员的提示,以及审查清单。我建议我的读者阅读一下。

文章链接:https://codeproject.org.cn/Articles/524235/Codeplusreviewplusguidelines

[更新]

1. 添加了另一篇关于审查指南的文章参考和结论部分。

2. 添加了本文内容的 PDF 下载链接。

3. 在列表中添加了关于“out”和“ref”关键字使用的一个要点。

结论

我欢迎读者的反馈、疑问和建议,以便我能进一步改进,并使开发人员从中受益。我的目标是逐步将其打造成一个完整的代码审查指南,特别是针对 C# 开发人员,在下一个版本中,我计划添加支持代码示例和屏幕截图,以便更好地理解。

免责声明:本文档不保证所有提及的指南和实践在今天仍然适用。因此,始终建议查阅 MSDN、与专家讨论并查阅其他门户以获取当前和修改后的指南和实践。另请注意,某些提供的参考链接可能无法工作。

© . All rights reserved.