Process 大型产品中的TFD TDD相关性

Process 大型产品中的TFD TDD相关性,process,tdd,sdlc,Process,Tdd,Sdlc,我想知道我们在更大的产品中采用测试优先的设计方法的可行性和实际收益 虽然我坚信在开始编码之前先确定范围,但对于更大的产品,我真的不确定TDD是否成立 较大产品的现实问题: 1.产品的尺寸使得维护所有测试用例变得更加困难。 2.单元边界慢慢变得不那么明确,有时不同单元之间会产生不必要的耦合。 3.测试单元可能不足以满足开发结构本身的功能(紧密耦合的可能结果) 4.最初的思维过程和愿景可能会随着产品的大小而被冲淡。这反过来冲淡了单元的定义,测试用例仅仅成为过程需求,而不是充当一段代码的监护人 我不认

我想知道我们在更大的产品中采用测试优先的设计方法的可行性和实际收益

虽然我坚信在开始编码之前先确定范围,但对于更大的产品,我真的不确定TDD是否成立

较大产品的现实问题:
1.产品的尺寸使得维护所有测试用例变得更加困难。
2.单元边界慢慢变得不那么明确,有时不同单元之间会产生不必要的耦合。
3.测试单元可能不足以满足开发结构本身的功能(紧密耦合的可能结果)
4.最初的思维过程和愿景可能会随着产品的大小而被冲淡。这反过来冲淡了单元的定义,测试用例仅仅成为过程需求,而不是充当一段代码的监护人

我不认为这种产品增长的情况是停止产品的增长并去除不需要的部分。开始清理产品,使其只具有定义产品的功能。其他功能,无论是已经开发的还是正在开发的,都可以作为附加组件提供。这些核心产品的一组功能需要使用一组强大的单元测试用例进行保护,这些测试用例单独定义了单元的功能

还有什么建议吗?我很想听听你们的意见,因为我目前面临着单元耦合和冗余测试用例的情况,而这些实际上做不了多少。所有这些都是因为产品的规模几乎每天都在增长

  • TDD将适用于任何规模的项目。就我个人而言,我在一个系统上工作,据我上次统计,大约有650000行C夏普。如果没有一套测试支持我们的更改并防止倒退,我们永远不会达到这样的规模
  • 请记住测试优先和测试驱动(TDD)之间的区别。如果您遵循测试驱动的开发,并让测试驱动您创建的代码,那么耦合不应该是一个问题。对于TFD来说,情况并非如此,而是由开发人员来控制这一质量级别
  • 请看第一点。事实上,单元测试是任何地方实现高级功能的最佳选择。请在代码中检查这一点。您可以使用集成测试,但正如本文所指出的,您需要的数量将超过您需要的单元测试数量
  • 这取决于团队。测试代码应该被视为一等公民。如果项目像您估计的那样“庞大”,这一点尤其正确,即使是最轻微的回归也可能代价高昂
  • 关于你的最后一个问题,我的建议是确保你的核心域逻辑尽可能地经过测试和稳定。这将取决于你和你的团队找出什么是“核心”“谢谢你的申请。其余的基础设施可能相当松散,但无论如何,这一层中应该很少甚至没有逻辑。锁定域名,其他人也应该这样做

  • TDD将适用于任何规模的项目。就我个人而言,我在一个系统上工作,在我最后一次计数时,大约有650000行C夏普。如果没有一套测试来支持我们的变化并防止倒退,我们永远不可能达到这样的规模
  • 记住测试优先和测试驱动(TDD)之间的区别。如果您遵循测试驱动的开发,并让测试驱动您创建的代码,那么耦合应该不是问题。对于TFD来说,情况并非如此,而是由开发人员来控制这一质量级别
  • 见第一点。事实上,单元测试是任何地方实现高级功能的最佳选择。在你的代码中检查这个。您可以使用集成测试,但正如本文所指出的,您需要的数量将超过您需要的单元测试数量
  • 这取决于团队。测试代码应被视为一等公民。如果项目像你估计的那样“庞大”,这一点尤其正确,最轻微的倒退可能代价高昂

  • 关于您的最后一个问题,我的建议是确保您的核心域逻辑尽可能经过测试和稳定。由您和您的团队来确定应用程序的“核心”是什么。其余的基础设施可能相当松散,但无论如何,这一层中应该很少甚至没有逻辑。锁定域名,其他人也应该这样做。

    谢谢你的详细回答。但我的具体问题是核心产品的视野被稀释了。您可以从一组核心功能开始。这些都是使用TDD开发的,慢慢地,你会增强你的核心。过了很长一段时间,你才意识到核心本身是相当大的。测试用例的维护成为一个更大的难题。我现在也在做一个有700000行代码的项目,这正是我面临的问题。@Unsung-测试用例的维护有什么问题?易碎测试?慢测试?等如果内核真的很难管理,您可能会像前面提到的那样将其分解,尽管这取决于测试难以管理的症状。通常,我们有一个核心项目,以及一个精简的web应用程序/服务层。我们发现测试很难管理的唯一一次是当它们开发得很差、测试太多等等的时候。问题是测试用例的数量和目的太多了。运行测试用例需要很多时间。此外,开发人员可能会从当前项目转移到另一个项目。对核心引擎所做的任何更改都可能需要对测试用例进行更改(这是完全可以接受的),但是仅仅修复测试用例所花费的精力实际上可能会减慢这个过程。这就是我认为作为一个管理项目的人,核心引擎的大小应该