首页 > 其他分享 >TDD(测试驱动开发)是否已死?

TDD(测试驱动开发)是否已死?

时间:2024-10-13 15:22:16浏览次数:8  
标签:实践 TDD 开发 测试 已死 其实

Rails 大神、创始人 David Heinemeier Hansson 曾发文抨击TDD。

TDD is dead. Long live testing. (DHH)

此后, Kent Beck、Martin Fowler、David Hansson 三人就这个观点还举行了系列对话(辩论)

Is TDD Dead?

笔者作为一个多年在软件测试领域摸索的人,其实更多是跟同行们澄清 "TDD并不是测试活动",“TDD是开发活动”, TDD这里的“测试”和我们正常理解的软件测试并不是一个东西。

倒是很少认真思考过 TDD 本身的价值在哪?是不是真的有用。

这里就谈谈自己的理解:

1. TDD本身是一个开发实践

或者说是一种产品设计实践,准确说应该是对应软件的详细设计。

思路其实就是先根据需求,将需求拆分到足够细。在代码实现之前,传统的研发流程中会有详细设计,到伪代码这个层级。TDD其实起到的是类似的目的,只是方式上变成先思考这个需求拆分到方法级别后,方法对应的产出是什么,方法到达到什么目的。思考的结果就是先完成这里的Test,对应的其实是单元测试。

在有了各种路径和场景的Test之后,再编写代码让这些测试通过,这样其实就完成了功能的实现。

这样带来的好处是,因为测试已经包含了需要的逻辑,这样就便于产品的不断迭代、重构,只要测试能够通过,就不会担心因为修改导致功能的不可用。会为产品的不断优化提供保障。

理论上听起来不错,而且似乎也受到行业的广泛推崇。不TDD似乎就落伍了

2. TDD在现实中并不成功

作为多年的测试工程师视角,也参与过大量软件项目,其中不乏很多项目重点推行TDD的实践,并引入咨询师进行指导。但就我的个人观察,没有成功的。也没有一线的开发人员能真正地坚持TDD,大部分实践TDD的项目,最终也就不了了之。

结合题主给出的线索,这里的答案可能就是 “TDD已死”,或者就我个人的体会,TDD是一个理想化的产物,在实际实践中,放到复杂的产品需求和团队合作中,很难把理想落地并发挥它预期的作用。(题外话,敏捷项目实践也有点类似,理想化的产物)

3. 为什么TDD难以真正落地?

1)ROI不高。要达到TDD的目的,测试代码会是实现代码的数倍,在软件项目大部分都是进度、资源稀缺的情况下,按理想情况去投入TDD并不现实。

2) 更多是只从最小的方法层面去覆盖。即便足够高的单元测试覆盖,依然会有集成测试、系统测试的场景遗漏,集成测试、系统测试依然不可或缺。TDD本身对质量的保障作用不明显。(这也是为什么我说TDD更多是设计实践,不是测试实践;是开发活动,不是测试活动)

3)方法层面进行测试覆盖,必然牵涉到大量依赖Mock,而mock本身其实就潜在数据、场景和实际有偏差的风险。

4)开发工程师的思维模式其实更趋向追求确定性,而测试的思维模式是需要基于各种不确定性去发现测试路径。开发和测试这两种活动,先天上是比较对立的。一定要让一个角色去同时完成这两种活动,有点勉为其难。

所以我的看法:确实 TDD已死,或者说 TDD 本身就是先天难产

标签:实践,TDD,开发,测试,已死,其实
From: https://blog.csdn.net/danmyw/article/details/142888346

相关文章

  • 慧通教育C++测试题 103662--103666(5题)
    103662.数据交换难度:1登录//103662.数据交换难度:1#include<bits/stdc++.h>usingnamespacestd;intm,n,a[105][105],x,y;intmain(){ cin>>m>>n; for(inti=1;i<=m;i++){ for(intj=1;j<=n;j++){ cin>>a[i][j]; } } cin>>x>......
  • 干货分享 | PCB测试点的用途
    ​PCB测试点长什么样子?请看下图:​如果你曾经用过NOKIA手机,每次你打开后盖换电池的时候,每次看到的那两排圆形的点——就是PCB测试点,oryoucancallitTestPointinEnglish.NOKIA手机的测试点有什么作用?为什么要留这两排测试点?大概可以猜测出来:SIM卡测试点:生产或维修......
  • 基于nodejs+vue基于Springboot的测试项目管理平台[开题+源码+程序+论文]计算机毕业设
    本系统(程序+源码+数据库+调试部署+开发环境)带文档lw万字以上,文末可获取源码系统程序文件列表开题报告内容研究背景随着信息技术的迅猛发展,软件开发已成为现代社会不可或缺的一部分。在软件开发过程中,测试环节扮演着至关重要的角色,它直接关系到软件的质量和用户体验。然而,......
  • 关于路径拼接测试脚本,测试加不加/
    importos#与操作系统交互模块importsys#与python解释器和运行环境相关的函数和变量importdjango#django框架模块#迭代版(无需更改,要保证此文件是:根目录/scripts/该脚本即可cwd=os.getcwd()#D:\d_pycharm_program\workshop_managerment\scriptsroot_path=......
  • 使用Python爬取免费代理并测试其有效性
    前言在本篇文章中,我们将使用Python编写一个脚本来爬取免费的代理IP地址,并对其进行有效性测试。我们将会用到playwright、aiohttp、pandas等库来完成这个任务。最终我们会得到一个包含有效代理IP地址的列表,并将其保存到本地文件中。1.环境准备首先,你需要确保你的Python环......
  • 基于SpringBoot的大学生体质测试管理系统设计与实现,LW+源码+讲解
    摘要大学生体质测试管理系统提供给用户一个简单方便体质测试管理信息,通过留言区互动更方便。本系统采用了B/S体系的结构,使用了java技术以及MYSQL作为后台数据库进行开发。系统主要分为系统管理员、教师和用户三个部分,系统管理员主要功能包括首页、个人中心、用户管理、教师管......
  • 如何将本地代码打包到测试环境?(前端和后端)
    前几天晚上,睿哥教了我如何将本地的代码打包并部署到测试环境上。然而,他讲得有点快,我可能还不是很熟悉。趁着现在有空,我决定把他讲的内容记录下来,以免以后忘记。由于我现在同时负责前端、后端和小程序的开发,这三种技术我都需要掌握。本文将首先讲解如何将后端代码打包并部署到......
  • ui自动化测试框架po框架(版本2)
    新建项目po 在编写如下包: 内容:importos#定义项目路径base_path=os.path.dirname(os.path.dirname(__file__))#项目所在的路径#data路径data_path=os.path.join(base_path,'data')#pages路径pages_path=os.path.join(base_path,'public','pages'......
  • 虚拟化溢出漏洞的安全测试
    使用源码编译方式通过安全测试对VMwareWorkstation进行缓冲区溢出与远程代码执行(RCE)测试的完整流程注意:VMwareWorkstation是一款商业软件,其源代码为闭源状态。未经授权进行逆向工程、漏洞挖掘或任何形式的安全测试可能违反相关法律法规和软件许可协议。以下内容仅供学......
  • Invicti v24.10.0 for Windows - Web 应用程序安全测试
    Invictiv24.10.0forWindows-Web应用程序安全测试InvictiStandardv24.10.0–8October2024请访问原文链接:https://sysin.org/blog/invicti/查看最新版。原创作品,转载请保留出处。作者主页:sysin.orgInvicti是一种自动化但完全可配置的Web应用程序安全扫描程序,使......