QCon 演讲火热征集中,快来分享技术实践与洞见! 了解详情
写点什么

TDD 真的可以确保质量?

  • 2008-01-31
  • 本文字数:1772 字

    阅读完需:约 6 分钟

加拿大国家研究委员会发表过一篇题为“测试先行方法对于编程的效果”的论文,其中有一些值得关注的评注。这项研究由 24 位 IT 专业的毕业生参加,它丰富了正在升温的关于测试先行领域的研究。尽管出于快速了解领域知识的目的,TDD 作为一种卓越的学习工具已被认可,但至于它是否真与软件质量直接相关,这个问题仍然没有得到证明。这次研究不具有最终的权威性,不过它仍然揭示出一些有趣的结论——尤其是在对实验结果进行分析时,存在有不同的声音。

下面的内容摘自于研究报告的摘要:

测试驱动开发(TDD)的基础是:首先用一个测试将一项功能规范地表示出来,然后实现这项功能,让测试通过,最后不断地重复这个过程。本论文描述了一次对照实验,它评估了 TDD 这个重要方面:即在 TDD 中,程序员首先会编写功能测试,然后才编写相应的实现代码。

多位大学毕业生参与了这次实验。其中实验组开发时运用了测试先行的策略,而对照组运用的是更为传统的开发技术——实现功能在先,编写测试在后。两组人员都遵循增量的过程,一次增加一项新功能,然后执行回归测试。

研究者对此的评注道:“实验的结果证实了测试先行技术的一个抉择理论——测试先行通常选择以生产力为中心,而不是质量。”

我们的主要结论是,坚持测试先行的程序员会为每个程序单元编写更多的测试。更进一步的,随着程序员测试的增加,生产力通常会按照比例达到更高的级别。因此,通过一系列的级联反应,测试先行似乎能够提高生产力。

……我们同时还注意到,随着程序员测试数量的递增,软件的最低质量在线性地增加。而它与采用的开发策略无关。

但是也有不同的声音。Jacob Proffitt 是一位博客作者,自称是一位“充满热情的程序员,偶尔当一下管理人员,总的来说是个多才多艺的技术人员”。他研究了这篇论文后,在 blog 上发表了对论文的质疑。他认为,这篇论文在下结论时存在着强烈的确认偏袒 [译注 *](confirmation bias)——比如,文中的结论忽视了很多实验中的调查事实。他相信,“TDD 与质量的关系仍然有很多值得怀疑的地方”,比如:

  • 对照组(非 TDD,“后测试”)在每个方面上都获得了更高的质量——他们的质量有更高的上限、下限、平均值和中值。
  • 对照组坚持更少的测试,却获得了更好的质量。
  • 质量在 TDD 组才更显著地与测试的数量相关联(这是一个有趣的不同点,我不确定作者是否意识到了这一点)。
  • 对照组的生产力可以作为测试量的函数,因此是高度可预见的,而且它比 TDD 组拥有更强的测试相关性。

Jacob 指出,这些学生的数据告诉我们的唯一事实是:

  • 坚持测试先行的学生平均会写更多的测试。
  • 学生写的测试越多,生产率越高。
  • 软件的最低质量随着测试数量的提高而线性地提升。

IEEE 软件杂志的编辑 Hakan Erdogmus 是原始论文的合著者。他从不同的视角审视了这些观点:

单独一个学生,尤其是像我们的那些没有经验的学生,无论怎样安排实验,都不能证明或者证伪任何事情。实验的观察结果最多只能轻轻揭开大谜团的一角。在很多情况下,它们引发的疑问远远多于它们所能回答的,希望随着我们在研究中提出越来越多的相关问题,能加深我们对于这些现象的理解……事实上,经验主义的软件工程术语里头并没有“证实”这种说法。我们研究一种技术,充其量只能丰富我们的“证据”,并且提出一个待驳倒的理论来。尽管通过少数的实践以及一些值得注意的观察结果,我们可以宣称证据已经很充分了。但是,“陪审团”还在屋中讨论着,一直没有定论。

随后,Hakan 向 InfoQ 展示了关于 TDD 更为深入的探讨,这些讨论是基于目前已经完成的大量研究之上的:

从 2001 年到 2008 初所公布的 23 个 TDD 研究案例表现出一些相互冲突的结果,但是总的趋势却在走向一个一致的结论。研究结果的不同产生于上下文因素的多样性,它们都会影响到接受测量的结论和变量。在质量面前,即使存在些许争议,但结果是非常有说服力的。其中的 22 项研究,评估了一些内部或者外部的质量在 TDD 的影响下,会产生什么不同。其中 13 项报告表明 TDD 带来了不同程度的提高,4 项表明 TDD 不是决定性的因素,4 项表明没有非常明显的不同(包括我们自己的研究)。只有一项报告表明 TDD 导致了质量的下降。

译注 * 人在争论或作出判断时,总是习惯倾向于接受有利于自己观点的证据,而忽略不利于自己观点的证据。这种现象被称为“确认偏袒(confirmation bias)”。

查看英文原文: Does TDD Really Ensure Quality?

2008-01-31 11:12966
用户头像

发布了 53 篇内容, 共 13.8 次阅读, 收获喜欢 2 次。

关注

评论

发布
暂无评论
发现更多内容

关键词搜索淘宝天猫商品列表数据接口(支持价格、销量排序)

tbapi

淘宝商品列表数据接口 淘宝API

一只黔灵山猴子,溜进「智能世界」

脑极体

AI

如何判断全面预算和EPM软件架构是否符合技术规范?

智达方通

数字化转型 多维数据库 企业绩效管理系统 管理会计信息化 新ERP

秒合约/量化合约/合约量化开发系统开发(成品案例源码)

V\TG【ch3nguang】

量化交易机器人

(约230个工具)野兔在线工具箱系统最新版本V4.0.1更新

网站,小程序,APP开发定制

JNPF低代码开发平台如何助力传统制造业破茧成蝶

EquatorCoco

低代码

VS Code 代码片段指南: 从基础到高级技巧

Immerse

vscode 开发 代码 CODING 开发人生

轻松解锁销售利润!使用淘宝商品关键词搜索API接口

联讯数据

为什么要使用TikTok直播专线?

Ogcloud

海外直播专线 tiktok直播 tiktok直播专线 tiktok直播网络 TikTok跨境直播

9月7-8日,Rust China Conf 2024 来啦!

Mike Tang

开源 rust 上海 rust conf rust开发者大会

一篇文章讲清楚Java中的反射

不在线第一只蜗牛

Java Python 反射

一只黔灵山猴子,溜进「智能世界」

白洞计划

AI

Python 项目及依赖管理工具技术选型

不在线第一只蜗牛

Python 开发语言

Java Script网页设计案例

EquatorCoco

Java JavaScript

阿里云数智服务创新挑战赛总决赛铜奖比赛攻略_NJUSME队

阿里云天池

情感共鸣:数业智能心大陆重塑AI心理交互新纪元

心大陆多智能体

智能体 AI大模型 心理健康 数字心理

用实时计算释放当下企业大数据潜能

Apache Flink

大数据 flink 实时计算 大数据计算与存储

openGauss- 索引推荐

Gauss松鼠会

opengauss

谈谈Function Calling

AIGC.TWang

大模型 人工智能’ AIGC GPT Function Calling

阿里巴巴商品详情API返回值中的关联商品推荐

技术冰糖葫芦

api 网关 API Explorer API 策略

实战演练:利用京东API一键抓取商品详情

技术冰糖葫芦

api 网关 API Explorer API 策略

前波士顿咨询Platinion董事总经理陈果加入望繁信科技

望繁信科技

流程挖掘 流程资产 流程智能

数博会聚焦:合合信息启信宝践行数据创新应用

合合技术团队

数据 科技 合合信息

海外云手机实现海外社媒矩阵营销

Ogcloud

云手机 海外云手机 云手机海外版 手机群控 矩阵运营

Oracle同一台服务器创建多个数据库

快乐非自愿限量之名

数据库 oracle 服务器

加速构建国际数据中心新生态,九章云极DataCanvas公司签署重要战略合作协议

九章云极DataCanvas

百度智能云一念:视频模型D&S-AI Video,秒级生成营销视频

爱AI的猫猫头

人工智能 音视频 大模型 办公效率 AI视频

【vue3】详解单向数据流,大家千万不用为了某某而某某了

快乐非自愿限量之名

JavaScript vue.js 前端

火山引擎携手Keep,让线上健身更快更稳

火山引擎边缘云

CDN 健身 CDN加速 CDN技术 CDN带宽

情绪低落难释怀?数业智能心大陆用 AI 来破局

心大陆多智能体

智能体 AI大模型 心理健康 数字心理

中国企业的数智化为何只成功了一半?

新消费日报

TDD真的可以确保质量?_研发效能_Ben Hughes_InfoQ精选文章