导入
测试驱动开发(TDD)的优势
了解TDD的优势和劣势。
设想两个人,A 和 B。他们正在处理同一个任务。两人都同样有能力、有魅力且乐于高效地完成高质量的工作。这个任务并不简单,但也不至于异常复杂。为了讨论方便,我们假设任务是:新用户登录网站并输入一些详细的相关信息。
...
TDD example
此时,我们可能会觉得 B 花了更长时间编写方法。然而,B 编写的代码更有可能具备以下特点:
- 正确
- 健壮
- 易于维护
但事实上,B 很可能在 A 还没完成之前就已经完成了任务,尽管 B 额外承担了编写测试的开销。
让我们继续观察这两位程序员的工作过程。
自动化测试的优势
运行多个自动化测试来验证代码,通常比每次都手动检查要快得多,而且随着代码复杂度的增加,这种优势会愈发明显。此外,自动化检查能更有效地确保不会遗漏任何步骤。
准确测试的好处
拥有准确的测试会带来诸多有益的附加效果。我们会写出设计更优的代码,并对代码更有信心。但最重要的好处在于:如果测试做得好,我们的工作效率反而会更高。起初可能难以察觉这一点,但在一个运行良好的测试驱动项目中,我们迟早会发现:出现的 bug 更少,而那些存在的 bug 也更容易被定位。新增功能或修改现有功能也会变得更加简单。更重要的是,我们将真正提升唯一具有实际意义的代码质量指标:发现错误行为和添加新行为的难易程度。测试的好处有时难以明确量化,因为优秀的测试往往让人感觉,我们只是在高效地编程而已。
测试的缺点
测试本身也可能存在缺陷。测试可能运行缓慢。环境差异可能导致某些在测试环境中能正常运行的内容,在开发环境中无法运行。代码的变更可能破坏现有的测试。向已有代码中添加测试会带来额外负担。与其他编程工具一样,测试也有许多可能让我们陷入麻烦的方式。