读C#代码整洁之道笔记05_使用工具改善代码和单元测试

发布时间 2023-03-24 08:28:45作者: 躺柒

1. 高品质的代码

1.1. 性能(Performance)

  • 1.1.1. 只执行需要的操作,而且执行迅速

  • 1.1.2. 不会使系统陷入停顿

1.2. 可用性(Availability)

  • 1.2.1. 持续在所需的性能水平上保持可用

  • 1.2.2. Topic1

1.3. 安全性(Security)

  • 1.3.1. 正确验证输入

  • 1.3.2. 防止无效的数据格式或超范围的无效数据

  • 1.3.3. 防止恶意攻击代码

  • 1.3.4. 身份验证

  • 1.3.5. 鉴权操作

  • 1.3.6. 具备容错性

1.4. 可伸缩性(Scalability)

  • 1.4.1. 安全地处理指数级增长的用户数目,而不会令系统停顿

1.5. 可维护性(Maintainability)

  • 1.5.1. 修复缺陷并添加新功能的难易程度

  • 1.5.2. 低耦合高内聚

1.6. 可访问性(Accessibility)

  • 1.6.1. 能力受限的成员也能够根据自己的需要轻松地修改和使用软件

  • 1.6.2. 高对比度的用户界面

  • 1.6.3. 针对阅读困难者和盲人添加的旁白

1.7. 可部署性(Deployability)

  • 1.7.1. 针对软件的用户

  • 1.7.1.1. 独立用户

  • 1.7.1.2. 远程访问的用户

  • 1.7.1.3. 局域网用户

  • 1.7.2. 软件都应当易于部署而不会出现任何问题

1.8. 可扩展性(Extensibility)

  • 1.8.1. 添加新功能以进行扩展的容易程度

1.9. 简记为PASSMADE

2. 代码度量

2.1. 关注软件的复杂性与可维护性

2.2. 维护性指标

  • 2.2.1. 应用程序生命周期管理的重要组成部分

  • 2.2.1.1. (Application Lifecycle Management,ALM)

  • 2.2.2. 20及以上的分数颜色级别为绿色

  • 2.2.2.1. 良好的维护性

  • 2.2.3. 10分到19分的分数颜色级别为黄色

  • 2.2.3.1. 中等维护性

  • 2.2.4. 小于10分的分数颜色级别为红色

  • 2.2.4.1. 难以维护

2.3. 圈复杂度

  • 2.3.1. 路径越多,软件就越复杂

2.4. 继承深度

  • 2.4.1. 相互继承类的数量的度量值

  • 2.4.2. 理想的继承深度为1

2.5. 类耦合度

  • 2.5.1. 类的代码耦合度决定了类之间的耦合级别

  • 2.5.2. 基于接口编程

2.6. 面向对象编程编程范式的影响

  • 2.6.1. (Object-Oriented Programming,OOP)

2.7. 代码行数

  • 2.7.1. 源代码行(包括空行)的完整统计数目

2.8. 可执行代码行数

  • 2.8.1. 可执行代码中操作的数量

2.9. Visual Studio 自带

3. 工具

3.1. 使用快速操作

  • 3.1.1. VS自带

3.2. JetBrains dotTrace

3.3. JetBrains ReSharper

3.4. JetBrains dotPeek

  • 3.4.1. 免费

3.5. JetBrains dotCover

3.6. JetBrains dotMemory

3.7. JetBrains 全家桶

3.8. Telerik JustDecompile

  • 3.8.1. 开源

4. 单元测试

4.1. TDD绝对是提升程序能力的一个必要之选

  • 4.1.1. Test-Driven Development

4.2. 行为驱动开发(Behavior-Driven Development,BDD)

  • 4.2.1. BDD是由TDD演进而来的一种软件开发方法。

4.3. 软件越关键,就越需要重视单元测试技术(例如TDD和BDD)的使用

4.4. 在代码开发阶段,程序员应该始终测试自己的代码

4.5. 只有在代码完成并准备进入产品环境的前提下,“程序员永远不应该测试自己的代码”才是正确的

4.6. 正确的规划和设计实质上会加快编码速度,尤其在考虑维护和扩展的情况下

  • 4.6.1. 凡事预则立,不预则废。

  • 4.6.2. 越早考虑谋划、考虑谋划越全面,后期应对变化越从容

4.7. 单元测试不应当依赖在它之前运行的其他测试

4.8. 单元测试最好在毫秒时间内完成

5. 无法容忍缺陷的软件

5.1. 处理私人和商业投资的金融系统

5.2. 医疗设备

5.3. 交通管理和导航系统的运输信号系统

5.4. 空间飞行系统

5.5. 武器系统

6. 删除冗余

6.1. 无用代码

  • 6.1.1. 冗余又没有调用者的代码

6.2. “噪声”注释

  • 6.2.1. 程序员都会为这些注释所扰

6.3. 冗余测试

7. 测试工具

7.1. MSTest

7.2. NUnit

7.3. 测试框架

  • 7.3.1. NUnit比MSTest提供了更加细粒度的测试方法和更好的性能

7.4. Moq

7.5. Rhino Mocks

7.6. 测试替身框架

  • 7.6.1. Moq比Rhion Mock更加易于学习和使用

7.7. SpecFlow

  • 7.7.1. BDD框架