📦 Tdd And Programming By Difference — Tdd 和 编程通过差异(Programming By Difference)
v1.0.0在经过测试的代码中使用TDD或Programming by Difference添加功能。当开发人员向已经有测试(或可以有测试)的类添加功能时,始终使用这种方法。
运行时依赖
安装命令
点击复制技能文档
TDD 和编程按差异 何时使用 该类已经在测试中 —— 或可以通过最小的努力将其纳入测试。 您需要添加一个新功能,并希望安全地执行此操作,从一开始就由测试驱动设计。 本技能涵盖两种互补的技术: Test-Driven Development (TDD):默认。语言无关。 直接向类添加功能,编写一个失败的测试,实现足够的代码使其通过,然后删除重复代码。 Programming by Difference (PbD):仅面向对象。 创建一个子类,编写针对它的测试,实现功能,然后规范化继承层次。 当您希望推迟集成决策,直到看到功能正常工作时很有用。 如果类尚未在测试中,请不要从这里开始。 先运行 characterization-test-writing 以建立安全网,然后返回。 如果类根本无法在测试中,请使用 legacy-code-addition-techniques (Sprout Method 或 Wrap Method) 代替。
上下文和输入收集 在选择方法之前,收集: 目标类 —— 确认它有通过的测试或可以快速进入测试套件。 功能规范 —— 新行为应该做什么,包括现在可以识别的边缘情况。 语言 —— PbD 需要具有单类继承的面向对象语言。 TDD 可以在任何语言中工作。 是否可以修改现有的类 —— 如果类是共享的、冻结的或由其他团队拥有,PbD 可能是更安全的路径。
过程 步骤 1:确认类在测试中 运行目标类的现有测试套件。 在编写一行新功能代码之前,所有测试都必须通过。 失败的测试基线是一个信号:停止,诊断并在继续之前修复。 如果该类没有测试,请立即调用 characterization-test-writing。 当您有一个通过的基线时,请返回此处。
步骤 2:决定 —— TDD 或编程按差异 使用此决策规则: 使用 TDD(默认)时: 您可以直接修改现有的类。 该功能属于该类 —— 它不是一个变体、覆盖或替代行为模式。 语言不需要面向对象继承模型(过程、函数等)。 使用编程按差异时: 您不能或不想直接修改现有的类(共享、冻结或对现有行为有复杂依赖)。 您希望在决定它在层次结构中的位置之前,在隔离中证明该功能的工作。 集成方向不明确 —— 您需要先看到功能,然后决定:向上推(共享行为)或向下推(专用子类)。 当不确定时,选择 TDD。 PbD 添加了一个 TDD 避免的规范化步骤。
步骤 3(TDD 路径):运行 5 步循环 对于功能的每个切片,在移动到下一个切片之前,完全执行此循环:
- 编写一个失败的测试用例。
- 使其编译。
- 使其通过。
- 删除重复代码。
- 重复。