TDD可节省多少时间并计算成本。
我认为在项目生命周期中成本和报酬变化的百分比是多少。
我以为初始阶段的成本更高,但回报却很少。进一步(在重构期间),您将从测试中受益。
我听说您有30-50%的时间在编写单元测试。但是,这并未考虑编写这些测试所节省的时间。
大家对此有何经验?
韦斯
编辑节省了多少时间以及时间成本?在错误修复和重构中?
TDD可节省多少时间并计算成本。
我认为在项目生命周期中成本和报酬变化的百分比是多少。
我以为初始阶段的成本更高,但回报却很少。进一步(在重构期间),您将从测试中受益。
我听说您有30-50%的时间在编写单元测试。但是,这并未考虑编写这些测试所节省的时间。
大家对此有何经验?
韦斯
编辑节省了多少时间以及时间成本?在错误修复和重构中?
Answers:
我听说您有30-50%的时间在编写单元测试。但是,这没有考虑节省的时间
根据我的经验,这个比例超过50%。
一旦编写了测试,解决方案就会变得非常容易。因此,我不认为花费70%-75%的时间来编写测试是很奇怪的,但是您花费的时间却少得多,而无需花费时间在调试器中编写“生产代码”(经过代码测试) 。
您越早发现错误,修复起来越便宜,而TDD可以极大地帮助您解决问题。我从事的项目(过去8个月的项目中的最后2个月)用于修复错误,而使用TDD几乎可以完全消除该阶段。
对我而言,真正的价值在于维护。继承带有测试的代码库使您不必担心更改它。当测试仍然通过时,您觉得自己没有破坏任何东西。由于您不害怕进行更改,因此在某些不正确的地方您愿意进行重构。这意味着代码可以变得更简洁,设计可以更好地适应,并且在理论上可以进行更改。与伏都教密码相反,每个人都害怕碰触。
每次运行单元测试时,您都节省了手动测试代码所需的时间。
您引用了编写测试所需的30%到50%的时间,这也被拥有更好(可测试)软件设计的好处所抵消。
假设编写自动化测试所需的时间是手动执行测试所需时间的四倍。这意味着您第四次运行自动化测试,这是值得的。此后每次您运行自动测试时,它都是免费的。
无论测试是自动化的单元测试还是自动化的功能测试,这都是正确的。并非所有功能测试都可以自动化,但其中许多功能可以自动化。另外,自动化测试比人更可靠;每次都会以完全相同的方式运行测试。
进行单元测试意味着您可以重构方法的基础实现(出于性能或其他原因),并且单元测试将验证该方法的功能未更改。对于TDD尤其如此,其中的单元测试指定了方法的功能。
TDD通常是根据代码质量而不是时间和成本来衡量的。但是,有了更好的代码质量,开发人员和与之合作的任何人都可以更好地工作(花费的时间更少,所涉及的成本更少,更快乐等)。http://davidlongstreet.wordpress.com/2009/04/29/new-software-metric-wtfs-per-minute/
编写测试非常有助于自动验证功能需求和非功能需求。一部说服我采用TDD(实际上是BDD,是高级TDD)的视频:http : //video.google.com/videoplay?docid=8135690990081075324#
编写功能测试可以帮助在开发阶段更早地发现错误/问题。假设您有大量的代码库。使用单元测试/规格,您只需要查看“所有测试通过” /“ 2个测试失败,请参见xyz行”。您只需要一个开发人员团队即可进行开发和测试。如果没有单元测试/规范,则必须手动将打印的语句与预期的语句进行比较,并手动跟踪哪些方法/类存在错误。您可能需要两个独立的团队(开发人员和测试人员)来执行此操作。
书面测试可帮助开发人员解释进度和面临的问题。
TDD有助于实现代码的可维护性,适应性和灵活性。它鼓励开发人员编写小的可测试块,并将它们组合成更大的可测试块。反之亦然(重构实践的一部分)也可以工作,但前提是我们已经编写了可靠的测试。结果,我们可以编写出精美的模块化代码。
使用TDD,我们很高兴知道何时:
TDD可能很无聊,因为开发过程需要一些小步骤,因此变得可预测。
重要的长期措施不仅是代码质量和代码置信度,而且还应该使团队进行无意识的测试不致于疲倦
短期措施将是自动化测试的投资回报率
例如:上周,由于内部架构变更,我进行了1000多次代码更改,启动了自动化测试套件,然后入睡。
测试耗时28分钟;他们都通过了。手动执行相同的40多个验收测试大约需要6个小时。
另一个示例:在先前的迭代中,我用一种可能无法发现手动测试的细微错误(其中一种是自动测试执行了手动测试人员几乎从未执行过的数据库完整性检查)来弄乱了一个测试场景。在设法弄清楚并修复它之前,我不得不运行该测试方案大约50次。手动执行测试方案操作大约需要50分钟。这样一天就能节省41.6工时
您无法预先计算自动化测试的投资回报率,因为您无法确切知道运行测试所需的次数。
但是对我来说,自动化测试的投资回报率几乎是无限的