单元测试需要多少额外时间?

Sla*_*ppy 19 project-management unit-testing

我正在寻找可能在常规编码与编码+单元测试的时差之间进行研究(尚未严格的TDD).我知道整个"从长远来看节省你的时间"的角度,但从项目规划的角度来看,从未做过的团队,我需要能够粗略估计分配多少额外时间.

这样的研究存在吗?有人可以根据经验评论吗?

Jon*_*nVD 17

我知道你还没有兴趣去完整的TDD,但我认为最好的性能和计划标记将在测试驱动开发案例研究中找到,例如微软和IBM都进行的研究.

案例研究由微软的三个开发团队和采用TDD的IBM的一个开发团队进行.案例研究的结果表明,相对于未使用TDD实践的类似项目,四种产品的预释放缺陷密度降低了40%至90%.主观上,采用TDD后,团队的初始开发时间增加了15-35%. 资源.

这是使用单元测试作为核心原则对正常开发与开发进行全面比较的前言的一部分.我们使用的前期开发计划添加量为20%,包括单元测试和集成测试.在所有诚实测试中,对于任何成功的软件都至关重要,单元测试只会消除一些硬码和手动操作.在完成一些功能并能够在几秒钟内测试系统后运行几百个单元和集成测试的能力是非常宝贵的.

有许多不同的"魔术"数字可供人们添加到他们的估计中,以便将额外的时间用于编写单元测试,但实际上这只是简单的权衡.基本上,您可以平衡开发时间的增加与错误修复/错误检查时间的增加,同时还要考虑停机时间的相似性和系统的关键性(如果它是主要收入或非必要系统).

如果你有兴趣在这里做更多的阅读是完整的微软研究.它很短,但提供了一些有趣的发现.如果你真的非常热衷于这里是一个单元测试幻灯片,它概述了合理细节的概念和好处(以前这是一个链接到这个演示文稿的源内容,但遗憾的是内容现在已经消失).


Chr*_*s O 5

我不能评论这个主题的研究。

根据经验,我会说你的幻数范围是 30-40%,因为你的团队是新手。您的团队将需要学习如何创建模拟和伪造,并习惯于编写测试,此外还需要设置基础设施和大量前期成本,直到您的团队跟上进度。如果您的主要语言是 C++,那么与 C# 相比,编写模拟和伪造需要更多的努力(根据我的经验)。如果您的项目都是全新的代码,那么与使用现有代码相比,它会花费更少的精力。如果您可以让您的团队快速加快测试速度,那么 TDD 将证明比事后编写测试更省力。有了足够的经验,测试的时间可能在 20% 左右,这又是一个神奇的数字。请原谅我缺乏确切的数字,根据我的经验,这里没有精确的指标。