Clean Code Chapter 17: Smells and HeuristicsJanuary 6, 2018CommentsC1: 不恰当的信息C2: 废弃的注释C3:冗余注释C4: 糟糕的注释C5: 注释掉的代码EnvironmentE1: 需要多步才能实现的构建E2: 需要多步才能做到的测试FunctionsF1: 过多的参数F2: 输出参数F3: 标识参数F4: 死函数GeneralG1: 一个源文件中存在多种语言G2: 明显的行为未被实现G3: 不正确的边界行为G4: 忽视安全G5: 重复G6: 在错误的抽象层级伤的代码G7: 基类以来于派生类G8: 信息过多G9: 死代码G10: 垂直分隔G11: 前后不一致G12: 混淆视听G13: 人为耦合G14: 特性依恋G15: 选择算子参数G16: 晦涩的意图G17: 位置错误的权责G18: 不恰当的静态方法G19: 使用解释性变量G20: 函数名称应该表达其行为G21: 理解算法G22: 把逻辑依赖改为物理依赖G23: 用多态替代 if/else 或者 switch/caseG24: 遵循标准约定G25: 用命名常量替代魔术数G26: 准确G27: 结构基于约定G28: 封装条件G29: 避免否定性条件G30: 函数只该做一件事G31: 遮蔽时序耦合G32: 别随意G33: 封装边界条件G34: 函数应该只在一个抽象层级上NamesN1: 采用描述性名称N2: 名称应与抽象层级相符N3: 尽可能使用标准命名法N4: 无歧义的名称N5: 为较大作用范围选用较长名称N6: 避免编码N7: 名称应该说明副作用TestsT1: Insufficient Tests 测试不足T2: Use a Coverage Tool 使用覆盖率工具T3: Don’t Skip Trivial Tests 别略过小测试T4: An Ignored Test Is a Question about an Ambiguity 被忽略的测试就是对不确定事物的疑问T5: Test Boundary Conditions 测试边界条件T6: Exhaustively Test Near Bugs 全面测试相近的缺陷T7: Patterns of Failure Are Revealing 测试失败的模式有启发性T8: Test Coverage Patterns Can Be Revealing 测试覆盖率的模式有启发性T9: Tests Should Be Fast 测试应该快速Conclusion