在 Empirical Software Engineering 杂志上首次发表的一篇研究报告声称:“看来 TDD 可以应用在多个领域中,并显著降低软件的缺陷密度,同时也不会明显降低开发团队的工作效率。”研究对比了 4 个在微软和 IBM 执行的项目,这些项目使用了 TDD 方式开发,并与没有使用 TDD 开发的类似项目进行了对比。
研究报告的作者包括:来自微软的 Nachi Nagappan 和 Thirumalesh Bhat 、IBM 的 E. Michael Maximilien ,以及北卡罗来纳大学的 Laurie Williams ,并发布在 Empirical Software Engineering 杂志的第 13 卷第 3 期上。读者也可以在微软研究院的 Empirical Software Engineering Group 中找到该报告。
报告中研究的 4 个案例,1 个来自 IBM,3 个来自微软。每个案例研究都对比了开发同一个产品的两个团队,他们使用同样的开发语言和技术,处于同一级别的管理之下,唯一不同之处在于:一个团队使用 TDD,另一个不用。在开发过程中,这些团队都不知道自己处于研究之下。IBM 案例中的团队在开发设备驱动程序,微软的团队在开发 Windows、MSN 和 Visual Studio 的相关应用。
报告中讲述了团队使用的 TDD 实践,包括分钟级别的工作流程(minute-to-minute workflow)和任务级别的工作流程(task-level workflow)。
分钟级别的工作流程如下:
- 编写一些新的小单元测试用例
- 运行测试,看着它们失败
- 编写实现代码以满足测试
- 重新运行单元测试用例,确保它们现在可以通过
任务级别的工作流程是这样子的:
- 将新的实现代码和单元测试集成到现有的代码库中
- 重新运行所有的测试用例,确保新的代码不会导致任何测试失败
- 重构实现代码和测试代码
- 重新运行所有的测试用例,确保重构后的代码不会导致任何测试失败
缺陷密度是通过每千行代码的缺陷数目来衡量的。相较于不使用 TDD 的项目而言,这四个产品在发布前的缺陷密度降低了 40% 到 90%。从团队管理层的主观报告看来,在开发的初始阶段,使用 TDD 的团队要多花 15% 到 35% 的时间;不过团队都同意一点:这个时间被减少的产品维护时间抵消掉了。
报告中的结果可以与 Maria Siniaalto 在 2006 年发布的一篇文章相对比。该文章中试图复审并总结其他 13 项有关 TDD 的研究,这些研究包括在纯商业背景、半商业背景和学院背景中进行的研究。在文章的结论中,作者写道:
基于这些现有研究的发现,可以得出结论:TDD 看来可以提升软件质量,特别是在纯商业背景中。对于半商业背景或学院环境中的研究来说,结论不是那么明显,可这些研究没有提到任何软件质量的降低。TDD 给工作效率带来的效果不是十分明显,而且结果会根据研究的环境发生变化。然而,有证据证明:TDD 不一定会降低开发人员的工作效率,或是增加项目的交付时间。某些情况下,TDD 会带来显著的工作效率提升;同时,在提到的 13 个案例研究中,只有两个案例指出工作效率降低了,不过这两个案例同时指明质量的提升。
您使用 TDD 有哪些经验?见到质量的提升了么?对于开发人员的工作效率和开发时间,您看到了哪些影响?请在文后留下您的评论,分享您的经验。
查看英文原文: Empirical Studies Show Test Driven Development Improves Quality
评论