入门TDD?(Getting Started with TDD?)

2019-07-30 23:42发布

我们是在试图实现TDD的初始阶段。 我demo'd在Visual Studio Team System的代码覆盖率/ TDD工具和团队在准备兴奋。 目前我们使用Devpartner代码覆盖,但我们要消除它,因为它昂贵。 我们在TDD的经验非常有限,想要确保我们不走了错误的方向。 目前我们使用的源代码控制的SourceSafe,但在一年内将迁移到Team System中。

我可以告诉你,我们的应用程序为中心的数据非常。 我们有大约900台,6000个存储过程和有关数据的45GB。 我们有很多这是基于系统中的用户数据和不同的利率计算的。 也有很多的我们的代码是基于时间(计算利息为当前日期)。 一些计算非常复杂,非常密集的(只有少数人知道他们中的一些细节)。

我们要实现TDD解决QA问题。 很多开发商被迫以修复漏洞方面,他们不熟悉,最终打破东西。 也有开发商几乎不敢去碰,因为代码由系统中的所有领域。 我们要缓解这一问题。

我怕,因为我们的代码是这样的数据中心,实施TDD可能会有点比大多数系统更复杂。 我想拿出我可以呈现给管理Gameplan的,但我想不希望在一些TDD初学者的错误被抓到。 此外,如果在团队系统工具/设备使TDD更完整的,那么这将是很好的,但我们不希望等到团队系统开始。

第一个问题,我们问我们是应该我们只是在Visual Studio工具开始? 我看过后都人抱怨在Visual Studio中的内在工具( 需要创建一个单独的项目来创建测试 ),但有一件事大约在Visual Studio中的工具是他们是免费的,集成性好。 如果我们决定去使用类似的xUnit,MbUnit的,NUnit的或其他途径那么我们很可能将会有一些也许显著的成本:

1)如果我们想要IDE集成(没有提到我们的大部分代码是VB.Net)
---TestDriven.Net或ReSharper的或?????

2)如果我们想代码覆盖
--- NCover(似乎是相当昂贵的它的功能)

此外,我已经看到了在Visual Studio 2010中演示了喜欢做的事输入测试(表单上的数据输入时)或者记录用户做了什么,然后喂到这一点你的单元测试,以再现能力的能力,一些很酷的功能问题。

此外,虽然我还是不太懂的嘲讽对象的概念还没有,我知道有很多人觉得这是必须的。 现在的问题是所有的嘲讽框架可以插入到Visual Studio的版本TDD(MSTEST)的?

我已告知管理层,我们也许应该只是添加回归测试前进(新开发或发现的错误),但不尝试去通过我们所有的代码,并把单元测试。 这将是太大了项目。

不管怎么说,我将不胜感激任何人的帮助。

Answer 1:

首先要做的就是让这本书:

修改代码的工作

对于这样一个大的项目,阅读和内在化。 在数据驱动的应用TDD是够硬。 在旧式一个你需要一些严重的规划和努力。 值得在我看来,但它仍然是一个很大的曲线。



Answer 2:

不要急于和偏偏不要试图迫使开发商做TDD。

否则 - 你会得到凌乱低质量的“测试”,这将数个月,开发商将永远不想再听到关于TDD之后被删除。

对于TDD最重要的要求-如何编写测试良好的知识(很明显的原因)。

第二个要求-采用的技术的良好的知识。
这是因为,如果它是很难任何代码,在头设计的代码将是不可能的。

使用的工具其实是非常不重要的。

PS吨的传统代码和数据为中心的应用程序=>良好的模具用于灾难。



Answer 3:

嗯,我谨建议你在知道TDD来帮助你的团队开始一个咨询公司带来启动。 如果你没有在球队的任何人熟悉TDD,单元测试,嘲讽框架,等我不知道买多少你已经从管理层或团队,但你不这是特别重要的”不想你的第一次尝试失败,因为那可能被防止通过聘请专家,以帮助你把那些第一步的错误。

无论如何,我会建议你从小处着手,并选择一个新的项目,是不是非常大。 即使是一个大项目的一小部分会工作。 使用这个既是一个地方,让熟悉了TDD和显示管理,这是可行的球队。 然后,一旦球队更熟悉,你可以在较大的项目进行选择。 至于遗留代码,我建议在看这本书:

修改代码,迈克尔羽毛有效运作

此外,我一定会建议采取一看这本书:

单元测试,罗伊Osherove的艺术

这可能不是一个TDD的书,但它是伟大的书,了解单元测试,嘲讽的框架,它甚至对旧代码的章节。 此外,它提供了如何获得团队和管理层收购提出了一些建议,它并谈一下TDD,集成测试,组织你的代码,以及大量关于如何成为一名优秀的单元测试。 总而言之,一个伟大的阅读。

希望这可以帮助。



Answer 4:

1)我使用TestDriven.Net,我喜欢它这么一个+1从我为
2)时,请注意右侧的框架想过代码覆盖是有用的,:
高级代码覆盖并不一定意味着高品质的单元测试,但...
高品质的单元测试确实意味着高代码覆盖率

我只用NCover,所以不能推荐的替代品。

关于嘲弄 - 一旦你掌握它是什么和它真正的意思你,你会看到它提供的好处。 也就是说,这意味着你不依赖于你要与外部依赖性测试代码的整合,也有助于保持文本的执行时间下来(如嘲笑你的数据访问层防止与DB昂贵的交互)。 这是一个重要因素,在我看来,就好像测试需要很长的时间来运行,人们可以开始刻意运行它们,如果这意味着他们不得不等待太久! 我使用NUnit,这对于内置嘲笑支持。

李铁TDD方式进入持续集成环境(如CruiseControl.NET ),和你有一个非常强大的和富有成效的设置。

当在TDD /单元测试开始,我会一直写推荐从“现在”开始,而不是侧重于编写测试太多的传统/现有代码编写了代码测试。 这是一个困难得多做一般贵了不少时间,明智的,特别是如果代码是旧的/不新鲜在任何人的心!

更新:要远一点,说明我的最后一点响应罗伯特的评论......

当你试图站起来,与TDD /单元测试运行,并获得势头,整支球队,你希望那是为积极和富有成效地。 一个没有被此初始阶段改变了旧的代码写测试是昂贵相比,新的代码,因为代码是不新鲜,它的确切复杂更可能不得不再次而不是原来的程序员一定解决。 再加上事实,你可能会发现它难以自圆其说的业务,花重访旧代码来写,而不是致力于新功能/修复真正的bug /问题,为他们的测试中,所需要的时间。

它可以成为谁的任务是写旧代码,他知道测试负经验开发人员/记得一些关于会发现它更难以做到,因此他们的第一个经验是不是一个积极的。 你必须要小心太在这种情况下,你可以用微弱的测试,它给你假的信心而告终。 根据我的经验,这是绝对关键的是每个人都开了一个积极的开端这一点,否则信心/动机在它消失而最终的结果是差很多。

我其实说你不应该对原有的代码添加测试-我做我自己,当我在工作或周围没有任何测试,以逐位,提高测试覆盖率和质量较旧的代码。 所不同的是,我已经用船上的过程中,“信徒”。 这是它的早期阶段,这是关键的......因此,我点约在一开始不集中的遗留代码太多



Answer 5:

关于起步,我也建议读福勒的重构 。 第一章给出了一个很好的感受是什么意思,引进测试,然后安全地引入变化(虽然这里的重点是在保持行为的变化)。 此外, 这种谈话描述的一些做法,可以帮助提高你的代码的可测试性。 MISKO Hevery也有这个指南编写测试代码,它总结了谈话。

从你的描述,这听起来就好像你要测试你的系统的核心部件 - 有很多,其中的变化是可怕的依赖关系的部分。 根据不同的程度的数据访问与业务逻辑分离到,你可能需要向国家重构,其中代码的可测试性 - 在这里很容易和快速实例组测试数据,以验证在隔离的逻辑。 这可能是一项艰巨的任务,并且可能不值得的,如果这里的变化是罕见和代码库是很好的证明。

我的建议是务实,并利用团队的经验寻找地区它是最简单的补充,增加值的测试。 我认为有很多聚焦单元测试是提高质量的最佳方法,但它可能是更容易使用的集成或场景测试,以测试在更高层次上的代码,肯定开始。 这样你就可以在你的核心系统早期发现大的故障。 在您的测试涵盖什么明确的。 情景测试将涵盖大量的代码,但可能不会浮出水面微妙的错误。

从SourceSafe迁移到Team System中迈出的一大步,有多大取决于你要多少团队制做。 我想你可以使用内置的测试框架Visual Studio的得到了很多的价值。 例如,作为第一步,你可以实现对系统的核心/核心用例一些基本的测试套件。 开发人员可以在Visual Studio中为他们的工作,并在检查前运行这些自己。这些套房可以随时间逐渐扩大。 后来,当你得到TFS,你可以看看,并作为自动构建过程的一部分运行在检查这些套房。 您可以按照类似的路径,无论具体的工具。

从一开始就存在维护测试代码,并有精心设计的测试可以支付股息开销清楚。 我曾经见过测试复制粘贴然后稍微编辑这样等测试代码的重复会导致您需要实现一个小产品代码变化时保持的测试代码的行数爆炸的情况。 这种麻烦的可能侵蚀其测试的感知到的利益。

Visual Studio 2008中只会显示你块覆盖,虽然代码分析也将给其他指标,如圈每组装/类/方法的复杂性。 获得高块覆盖与你的测试肯定是重要的,可以让你轻松识别那些没有经过测试的系统区域。

不过,我觉得要记住,高挡覆盖率仅为您的测试有效性的一个简单的测量是非常重要的。 例如,假设你写一个类来清除文件归档,并保持5页最新的文件。 那么你就写,如果你有10个文件开始运行,然后你会留下5.通过测试可以删除最新的文件的实现净化器,但可以很容易地给100%的覆盖,检查测试案例。 这个测试只验证的要求1。



Answer 6:

100个竖起大拇指与伊沙依建议修改代码的工作。 我还建议,单元测试在C#与NUnit的为你使用.NET(虽然我假设C#)。 它已经为教学单元测试的基础,提供了坚实的基础,从工作非常有用的。



Answer 7:

对于几年我意识到了,并编写单元测试涉猎。 是什么让我真正参与单元测试,当我开始与令人印象深刻的测试覆盖率的一个开源项目。 这真的让我吃惊,我是写软件的方式是“对历史错误的一边”。

你刚才提到了很多工具,其标榜的功能激发你,并想知道如何把它们放在一起。 我认为这些问题是由“xUnit的测试模式”解决得非常好,由Addison-Wesley出版社( http://xunitpatterns.com/ )。 这本书让我一起拉那些我过去了解的工具和技术。

这本书可以更好地服务于观众谁也欣赏其他书籍一样Four的设计模式,重构和重构到模式的团伙。 这些书也大,但他们并没有那么直接在我的编码方式后,我读他们的变化。 的xUnit测试模式的提出,虽然反映了本本的风格。 因为他们往往交叉引用章节任意方向,他们可能很难在第一次阅读。 我认为他们是非常稳固,但。

GoF的提出patterns-造物,结构和行为的类别。 这些类别作为一种方式来进行关联和对比所解释的模式。 通过试验设计模式与一个单元测试的典型寿命相关联,测试的xUnit模式也整合了一系列可用于单元测试的技术。 同样的步骤也用于关联和对比用于建筑单元测试的各种工具。

这将有助于与高级视图,并进入实际执行。

我的xUnit测试模式的唯一的批评是他们使用多少文本批评NUnit的。 NUnit的是一件优秀的节目,它的作者的信用NUNIT我们什么,我想会成为经典的一本书中提到如此突出。



文章来源: Getting Started with TDD?