读C#代码整洁之道笔记05_使用工具改善代码和单元测试
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框架