我对TDD方法非常陌生,我的第一个实验说编写1行功能代码意味着编写2-3行测试代码。因此,如果我要编写1000 LOC,则包括测试在内的整个代码库将达到〜3500 LOC。
这算正常吗?您编写的代码的比例是多少?
我对TDD方法非常陌生,我的第一个实验说编写1行功能代码意味着编写2-3行测试代码。因此,如果我要编写1000 LOC,则包括测试在内的整个代码库将达到〜3500 LOC。
这算正常吗?您编写的代码的比例是多少?
Answers:
TDD正常为1:3。
从我的经历,以及从其他引文中我都记得。
存在基于不同编码风格和语言的变体。但是,无论您使用哪种语言,最大的变化就是您。
罗伯特·马丁曾经说过:
“随着测试变得更加具体,代码变得更加通用。”
这让我思考。更具体的测试意味着更多的测试代码。通用的生产代码意味着更少的代码,因此,随着代码的发展,测试/代码比率应会提高。
但是,等等,这也不是一件好事。在某些特定情况下,例如,当您定义某种算法时,您可能只有6-10行代码,其中包含几个“ if”,一段时间和2-3个递归。我可以告诉您,该代码可能会有100多行测试代码。
在一个实际的项目中,除了一些算法之外,测试/代码比率应该在1:1到2:1之间。如果它超过2:1,这是一种气味,您有应该重构或删除的测试(或者可能是难以测试的代码)。您应该始终在测试中投入与生产代码中相同的精力和重构。
无论如何,对您问题的最佳答案可能是“循环复杂性”。方法的循环复杂度越高,就必须编写更多的测试来涵盖所有情况。
该比率将根据方法的大小而变化。方法的大小将根据编程样式,语言和问题域的不同而不同。
如果您的方法比较短,那么3:1是合理的。如果您的方法很长,则3:1偏高。
因此,要回答您的问题,取决于情况。:-)
我的测试代码的大小大约是整体“实际”代码的一半。否则,表明您的测试太复杂和/或代码太难测试和/或代码太密集/复杂。
否则,您只是在测试太多,而浪费时间在收益递减上。
我的比率是2-1到10-1(通过代码测试)。确保测试是关于价值/行为而不是实现。