C# 小团队短期项目的TDD和单元测试?

C# 小团队短期项目的TDD和单元测试?,c#,unit-testing,tdd,C#,Unit Testing,Tdd,对于由4人以下的小型团队完成的小型和短期项目,TDD是一种好方法吗?这真的是一项有利可图的努力吗 那么单元测试呢?TDD意味着单元测试,但不是相反。在项目开发生命周期中,直到合理的代码覆盖率,单元测试还不够充分吗?答案是肯定的!原因如下。 想象一下下面的情景。您和您的项目团队已经创建了一个很棒的应用程序,并决定将其投入生产。过了一会儿,一个用户过来对你们说:嘿,伙计们,我在你们的应用程序中发现了一个bug,你们能修复它吗?当然,如果你说“是”,修复错误,用户会很高兴。过了一会儿,他回来说,很好,

对于由4人以下的小型团队完成的小型和短期项目,TDD是一种好方法吗?这真的是一项有利可图的努力吗


那么单元测试呢?TDD意味着单元测试,但不是相反。在项目开发生命周期中,直到合理的代码覆盖率,单元测试还不够充分吗?

答案是肯定的!原因如下。 想象一下下面的情景。您和您的项目团队已经创建了一个很棒的应用程序,并决定将其投入生产。过了一会儿,一个用户过来对你们说:嘿,伙计们,我在你们的应用程序中发现了一个bug,你们能修复它吗?当然,如果你说“是”,修复错误,用户会很高兴。过了一会儿,他回来说,很好,你解决了这个问题,但是现在一些有用的东西再也不能用了,你能修复它吗

如果您使用了TDD并对应用程序进行了单元测试,那么场景就不会是这样了。这是因为您对整个应用程序进行了测试。在解决一个bug之后,您只需再次运行单元测试,看看您的“修复”是否不会破坏应用程序中的任何其他东西

这个答案更多的是针对单元测试的使用。以下是TDD本身的缩写


TDD使您作为一个个体所做的是思考我将在下面编写什么代码(对象、类、函数等等)。还有,我的代码的边缘是什么?如果/否则,我需要什么?我需要检查什么。如果你独自一人或是在一个20人的项目团队中,这并不重要。TDD的关键在于你的思维过程,而不是你项目中的其他人。

如果你正在进行单元测试,那么采用TDD只是一小步。但你会从中受益更多


只有一个例子:TDD定义您首先实现测试。这意味着您在开始实施之前要考虑您想要实现的目标。这会产生更好的代码。

对我来说,这并不能归结为项目是小还是短。正确完成的TDD是指能够快速运行一组测试,以提供对代码的完全信任。也有很多关于TDD帮助推动项目适当设计的文章

因此,您可以认为TDD最适合小型和短期项目,因为您最终只编写了使测试通过所需的代码,而没有编写其他代码。因此,要降低成本。然后,当您稍后进行更改时,对测试和代码有信心还有一个额外的好处


我要说的下一个要点是,许多项目都是从小型和短期开始的。这些临时解决方案有办法成为发展的战略平台(如果成功的话)

TDD和单元测试不是相互替代的。在每个项目中,您都应该测试代码,这是您进行单元测试、集成和系统测试的地方

然而,TDD是一种开发模式。与瀑布和其他开发方法一样,TDD也是一种方法。在TDD中,您有一些基本需求,您编写单元测试以确保这些需求得到实现和工作。但是当您编写单元测试时,您会意识到为了实现主要需求,您需要实现更多的函数和类。因此,在此上下文中的单元测试使其他需求更清晰

假设您需要编写一个应用程序来打印运行该应用程序的计算机的名称。首先编写一个单元测试:

[Test]
public void ProducedMessage_IsCorrect()
{
    AreEqual(BusinessLibrary.ProduceMessage(), System.Environment.MachineName);
}
然后您意识到需要实现ProduceMessage功能。您尽可能简单地实现它,以便单元测试通过。您可以这样编写方法:

public string ProduceMessage()
{
    return "MyComputer";
}
然后运行测试,测试通过。然后提交代码,团队的其他成员将获得代码。当他们运行测试时,测试失败,因为您在代码中硬编码了计算机的名称

因此,您团队中的某位明智的成员将代码更改为正确的形式,您就可以继续了


这完全是关于选择具有TDD经验的开发人员。我认为至少他们中的一些人应该是有经验的TDD开发人员。

最近我读了Szymon Pobiega的一篇很好的博客文章,标题是。我真的鼓励大家看看这个。这是因为我对TDD有点怀疑,并把它放在开发生命周期的好习惯中,作为项目安全的最终解决方案,除了项目的性质之外。我喜欢这个片段:

当你完全不知道物体的形状时,TDD是最有用的 密码。在这种情况下,你最好不要像你那样快地破解代码 可以而不是每次只迈出一小步 结果。理想情况下,两人一组做。你做的每一步都让你 发现更多需要编写的测试。我喜欢这个比喻,丹 在他的演讲中使用:就像游泳和步行一样 1.50米深的游泳池。你可以全程步行,确保每次你的一只脚在地上,或者你可以游泳,这是最重要的 风险更大(与地面无接触),但会让你移动得更快。 TDD就像走路


他引用了。

看看这个关于TDD与单元测试的链接:TDD是设计的唯一方法,它可能会导致良好的设计,但其他方法也可能。单元测试是保持代码一致性和易于修改的一种方法,这是必要的。当单元测试本身将验证单个组件的逻辑时,TDD应该驱动您的设计决策。查看本博客中的s&s-spike and stabilize方法:+1。完全同意TDD是关于自信的,至少在编程上,代码做了您期望的事情。关于小项目开始的观点很好!我工作过的很多项目都是从小开始的,由于bug和糟糕的体系结构,要修复或扩展它们绝对是一场噩梦。TDD在这两方面都有帮助。