BT

如何利用碎片时间提升技术认知与能力? 点击获取答案

实际经验证明:TDD可以提高软件质量

| 作者 Chris Sims 关注 0 他的粉丝 ,译者 郑柯 关注 3 他的粉丝 发布于 2009年3月4日. 估计阅读时间: 4 分钟 | 如何结合区块链技术,帮助企业降本增效?让我们深度了解几个成功的案例。

Empirical Software Engineering杂志上首次发表的一篇研究报告声称:“看来TDD可以应用在多个领域中,并显著降低软件的缺陷密度,同时也不会明显降低开发团队的工作效率。”研究对比了4个在微软和IBM执行的项目,这些项目使用了TDD方式开发,并与没有使用TDD开发的类似项目进行了对比。

研究报告的作者包括:来自微软的Nachi Nagappan和Thirumalesh Bhat 、IBM的E. Michael Maximilien,以及北卡罗来纳大学的Laurie Williams,并发布在Empirical Software Engineering杂志的第13卷第3期上。读者也可以在微软研究院的Empirical Software Engineering Group中找到该报告。

报告中研究的4个案例,1个来自IBM,3个来自微软。每个案例研究都对比了开发同一个产品的两个团队,他们使用同样的开发语言和技术,处于同一级别的管理之下,唯一不同之处在于:一个团队使用TDD,另一个不用。在开发过程中,这些团队都不知道自己处于研究之下。IBM案例中的团队在开发设备驱动程序,微软的团队在开发Windows、MSN和Visual Studio的相关应用。

报告中讲述了团队使用的TDD实践,包括分钟级别的工作流程(minute-to-minute workflow)和任务级别的工作流程(task-level workflow)。

分钟级别的工作流程如下:

  • 编写一些新的小单元测试用例
  • 运行测试,看着它们失败
  • 编写实现代码以满足测试
  • 重新运行单元测试用例,确保它们现在可以通过

任务级别的工作流程是这样子的:

  • 将新的实现代码和单元测试集成到现有的代码库中
  • 重新运行所有的测试用例,确保新的代码不会导致任何测试失败
  • 重构实现代码和测试代码
  • 重新运行所有的测试用例,确保重构后的代码不会导致任何测试失败

缺陷密度是通过每千行代码的缺陷数目来衡量的。相较于不使用TDD的项目而言,这四个产品在发布前的缺陷密度降低了40%到90%。从团队管理层的主观报告看来,在开发的初始阶段,使用TDD的团队要多花15%到35%的时间;不过团队都同意一点:这个时间被减少的产品维护时间抵消掉了。

报告中的结果可以与Maria Siniaalto在2006年发布的一篇文章相对比。该文章中试图复审并总结其他13项有关TDD的研究,这些研究包括在纯商业背景、半商业背景和学院背景中进行的研究。在文章的结论中,作者写道:

基于这些现有研究的发现,可以得出结论:TDD看来可以提升软件质量,特别是在纯商业背景中。对于半商业背景或学院环境中的研究来说,结论不是那么明显,可这些研究没有提到任何软件质量的降低。TDD给工作效率带来的效果不是十分明显,而且结果会根据研究的环境发生变化。然而,有证据证明:TDD不一定会降低开发人员的工作效率,或是增加项目的交付时间。某些情况下,TDD会带来显著的工作效率提升;同时,在提到的13个案例研究中,只有两个案例指出工作效率降低了,不过这两个案例同时指明质量的提升。

您使用TDD有哪些经验?见到质量的提升了么?对于开发人员的工作效率和开发时间,您看到了哪些影响?请在文后留下您的评论,分享您的经验。

查看英文原文:Empirical Studies Show Test Driven Development Improves Quality

评价本文

专业度
风格

您好,朋友!

您需要 注册一个InfoQ账号 或者 才能进行评论。在您完成注册后还需要进行一些设置。

获得来自InfoQ的更多体验。

告诉我们您的想法

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

TDD 能提升质量在意料之中,那么效率呢? by Zhang Charlie

TDD 的测试部分其实是某种形式的回归测试(regression test)。与传统回归测试不同的是,TDD 测试频度更高,周期更短。然而,回归测试不是什么新概念,恐怕 25 年以前就有了,属于传统软件工程的精华。回归测试也是 TDD 中最有价值的部分。

TDD 测试更频繁,更全面,当然能尽早发现错误,减少错误,获得更稳定的软件,从而提高软件质量,这本在意料之中。作者们用实际案例、定量数据的分析验证了大家的推测,正是这篇研究报告的价值所在。

我的观点和问题是:

1、这项研究是否说明 TDD 可以用在非 XP 的过程之下?

2、案例中的 IBM、微软项目团队都是非常成熟的软件工程团队,Windows、MSN 和 Visual Studio 也都是非常成熟的产品架构。

如果 TDD 用在国内的典型项目上,增加的开发时间很可能要更多,大概在 50% 甚至 1 倍以上(我个人的估计)。

我曾经在 Kent Beck 和 Martin Fowler 的作品中看到,采用 TDD 代码之后,单元测试代码常常和实现代码的规模差不多,有 2 万行的实现代码,差不多也有 2 万行的(单元)测试代码。

编写高质量的单元测试,也是需要时间的。我估计国内的客户、开发商在做项目计划的时候,大多都没有把这个时间考虑在内,或低估了设计、编写测试、执行测试所需要的时间。

3、采用 TDD,在带来质量提升的同时,有可能降低开发效率,延长交付时间。当然,如果质量回报大于效率、时间损失,那么就值得尝试 TDD。

4、TDD 是可行的,而且可以提高开发质量,这些都没有问题,那么是否还有比 TDD 效率更高、风险更小、更加灵活、更符合大众习惯的开发方式?

我相信是有的。

资深敏捷 OO 教练 张恂
www.zhangxun.com

Re: TDD 能提升质量在意料之中,那么效率呢? by .H.Fu James

感觉Charlie说的很有道理!
把握业务,在实现代码之前写写重要流程的单元测试用例也可以很大程度上提高软件开发质量吧。。。
关键还在Team中的开发人员的质量。。。

Re: TDD 能提升质量在意料之中,那么效率呢? by guan jayden

Charlie
请问你有没有在实际项目中使用过TDD?

Re: 请问你有没有在实际项目中使用过TDD? by Zhang Charlie

2009年3月4日 下午9时21分 发表人 jayden guan

Charlie
请问你有没有在实际项目中使用过TDD?


jayden,

我不但用了 TDD 和 JUnit、NUnit,而且还自己开发了一个整合功能测试、单元测试的 Web 自动测试框架叫 UDD Tester(.NET)。

我觉得对于有经验的 OO 程序员来说,TDD 的效率其实不高,而且它的倡导者有贬低 modeling、architecture 的倾向,所以我提出了 UDD(user goal, use case or usage driven)。

charlie

Re: TDD 能提升质量在意料之中,那么效率呢? by Zhang Charlie

2009年3月4日 下午8时42分 发表人 James .H.Fu

感觉Charlie说的很有道理!
把握业务,在实现代码之前写写重要流程的单元测试用例也可以很大程度上提高软件开发质量吧。。。
关键还在Team中的开发人员的质量。。。


James, thanks.

在测试方面,我比较认同 ATDD、BDD 的做法,因为对于应用系统开发来说,系统测试比单元测试更重要。所以,我提出用户目标驱动的开发(UDD),而不是单元测试驱动(TDD)的开发。

当然,对于初级程序员为主的团队,如果单元开发老是出错,质量不高的话,采用 TDD 从单元测试开始写起,会是很好的帮助。

Re: TDD 能提升质量在意料之中,那么效率呢? by He Yiding

你说的这些东西 N 多年前就讨论过了,你好像从没看过 TDD 相关的文章和书。

Re: 你好像从没看过 TDD 相关的文章和书 by Zhang Charlie

2009年3月5日 下午9时27分 发表人 Yiding He

你说的这些东西 N 多年前就讨论过了,你好像从没看过 TDD 相关的文章和书。


Yiding,你的主观判断并不代表客观事实。你显然低估了别人的专业,最好多反思一下自己。

我决定TDD的好处有两个 by 一 刀

我决定TDD的好处有两个:
1、不断测试,提高软件质量
2、不断重构,提高软件处理变化的能力

Re: TDD 能提升质量在意料之中,那么效率呢? by Lee Vincent

不知张老师有多少深入一线开发的机会和经验,但是你根据“单元测试代码常常和实现代码的规模差不多”就推断TDD会增加开发时间,我觉得你这显然是主观臆断,
简单说吧,你觉得在软件开发过程中敲代码的时间占多大比例?
敲代码的时间增加一倍必然会导致开发效率降低么?
采用TDD的情况下,实现代码还跟原来一样多么?
写测试花的时间有没有可能在别处赚回来?

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

9 讨论

登陆InfoQ,与你最关心的话题互动。


找回密码....

Follow

关注你最喜爱的话题和作者

快速浏览网站内你所感兴趣话题的精选内容。

Like

内容自由定制

选择想要阅读的主题和喜爱的作者定制自己的新闻源。

Notifications

获取更新

设置通知机制以获取内容更新对您而言是否重要

BT