- 我说的是TDD意义上的单元测试。(不是自动的“集成”,或者您喜欢称之为测试的东西。)
- 遗留代码,如:(C ++)没有测试的代码。(请参阅:Michael Feathers的“ 旧版代码有效工作”)
- 但是还有一些遗留代码,例如:我们的团队在过去10到5年中一直在使用的代码,因此我们通常对将事物放置在何处可以改变事物有一个很好的认识。
- 我们确实对某些模块进行了单元测试(通过Boost.Test),这些模块后来出现或很自然地适合单元测试(常见的应用程序特定容器,字符串填充,网络助手等)。
- 我们尚未进行适当的自动化验收测试。
现在,最近,我很高兴地实现了3个新的面向用户的功能。
每个人花了我大约1-2个小时来快速掌握我需要更改的代码部分,花了1-2小时来实现我需要更改的(小)代码,另外花了1-2个小时来确保应用程序之后正确运行,并且确实应该这样做。
现在,我确实添加了很少的代码。(我认为每个功能都有一个方法和一些调用行。)
分解出这段代码(通过WEwLC中建议的任何一种方法),以使单元测试变得有意义(而不是完整的重言式)将很容易又花费2-4个小时,甚至更多。这将为每个功能增加50%-100%的时间,而没有立即的好处,因为
- 我不需要单元测试即可了解有关代码的任何信息
- 手动测试的工作量是相同的,因为我仍然需要测试代码是否正确集成到应用程序的其余部分中。
当然,如果,以后,“有人”走过来,碰到的代码,他理论上可以有从单元测试的一些好处。(仅从理论上讲,因为经过测试的代码孤岛将生活在未经测试的代码海洋中。)
因此,“这一次”,我选择不做添加单元测试的艰苦工作:对代码进行更改以使要测试的东西要比对代码进行更改(要正确(清晰地)实现功能)复杂得多。
这是强耦合旧代码的典型代表吗?我是不是很懒?我们是否将团队的优先顺序设置错了?还是我谨慎,只测试开销不太高的东西?