在团队中进行单元测试/TDD的12 条经验 读书笔记

深入理解图像处理中的内存对齐:Stride原理与实践 本文深入解析了图像处理中内存对齐的核心概念——Stride(行跨度)。通过剖析其诞生背景与原理,阐述了Stride如何通过优化内存访问来提升性能,并详细介绍了其计算方法、正负值含义以及在实战编程中的关键作用与性能优化技巧。 阅读详情


原文:http://pauloortins.com/lessons-unit-tests/

翻译:

在团队中进行单元测试/TDD的12 条经验

摘要:测试可以帮助项目团队找出代码中存在的问题,TDD方式更是将测试放在了开发工作的首位 。那么在团队中该如何应用单元测试和TDD呢?开发者Paulo Ortins结合自身经历给出了本文中的12个经验教训 。

测试可以帮助项目团队找出代码中存在的问题,TDD方式更是将测试放在了开发工作的首位。那么在团队中该如何应用单元测试和TDD呢?开发者Paulo Ortins结合自身经历给出了本文中的12个经验教训 。文章翻译如下。

背景

两年前,我在一个Web项目开发组中,项目的目标是编写一个类似Excel的、用来计算产品/服务价格的Web应用程序。项目团队被分成3部分——开发团队、需求团队和QA团队。随着项目越做越大,而我们没有使用任何形式的自动化测试(QA团队使用手工测试),结果导致项目的测试时间比开发时间还要多。每进行一次小的改动,QA团队都要花费几个小时来做测试。

有一天,我参加了一个开发者会议,并与其他程序员谈到了这些问题。他们建议我去学习单元测试、验收测试和TDD (Test-Driven Development,测试驱动开发)。

我的经验总结

下面是我在学习集成测试/TDD过程中的一些经验教训,希望能够对大家有所帮助。

1.  不要第一次就在真实项目中尝试TDD

这可能会让你的项目很难进展。在采用TDD之前,你必须要了解TDD的工作流程以及如何去模拟对象(mock objects)、如何去模拟框架内部、如何组织测试等方面知识。因此,如果你的团队还没有准备好,就采用TDD可能会拖慢你的项目,从而错过最终交付期限。

2.  采用编程道场 (Coding Dojo)方式学习TDD

我们发现编程道场是对新进入团队的开发者培训TDD以及提升他们编程技能的最好的方式。

编程道场是一种帮助提高编程技能的训练方法。一般是在一个会议室里,有一台连接投影仪的电脑。每次道场还要有一个挑战题目。每次有两个人在电脑前结对编程来试图解决挑战的题目,并且由其他参加者提供建议。所有的参加者都要轮换到结对编程里进行演练。(来自维基百科 )

3.  应用TDD之前尝试说服你的整个团队

没有什么比团队中存在“破坏者”角色更令人沮丧的了。如果团队中大部分人都在朝着TDD努力,而个别开发者所做的工作有可能毁掉这些努力,比如提交失败的测试代码等。我曾经就与这类人一起工作过。在团队开始TDD开发之前,一定要让所有人明白它的好处,并了解如何测试可以使软件减少bug、如何重构代码而不用担心破坏整个项目等等。

4.  写足够多的测试

构建一个测试套件,就等于构建了一个bug防护盾。当团队重构或改进软件时应该完全信任这个“盾”。如果这个盾有缺口,那么我们在更改代码时会增加引入未知bug的风险。不要强求测试套件覆盖100%的代码,这是不可能的,而且相当耗时,但是,覆盖大部分代码是完全可以实现的。一个好的准则就是测试所有可能会出现问题的地方。

5.  使用覆盖率工具

覆盖率工具将会报告测试套件的缺口。借助这些工具,可以很容易识别哪些代码没有测试。这些工具可以给我们一个直观的认识,比如蓝/绿着色线表示正在测试中的代码,红色着色线表示没有测试。如果你是一个.NET程序员,Visual Studio旗舰版会带有这个功能;如果你是一个Java程序员,你可以使用EclEmma 。

6.  测试速度要快

当在构建软件时,我们永远都在追赶最后的交付期限。我们的测试应该帮助我们实现这一目标,而不是耗时和延迟。

如果写测试用例花费太长时间,在最后期限到来之前,团队可能不会再花时间写测试。如果在运行测试上花费太长时间,团队可能不会在每次更改代码后都运行它们。

7.  不要忽略失败的测试

如果你的团队对第1次失败的测试不在意,那么他们对第2、3、4次失败的测试也不会太在意。这种情况下,测试套件反馈的问题将会被忽略,测试也不会对软件质量有太大帮助。

8.  结对编程有助于团队应用TDD

当我们首次试图采用TDD时,或者最终交付期限临近时,我们可能会忘了写测试,而只顾写生产代码。结对编程可以阻止这种偷工减料的现象,强制团队成员编写测试。

9.  保持你的测试代码整洁

为了提高工作效率,我们的测试代码可能不会像生产代码一样整洁。由于软件发生改变时,测试代码也必须改变,测试代码也会越积越多,这样一来,会导致最终测试代码也很难维护。

10  测试应该有且只有一个失败的理由

这个理由就是发现bug。如果你的测试代码有大量的断言,你就需要小心。如果生产代码中的函数和类只有一个响应,那我们的测试代码也应该只测试这一个事件。通过这种方式,将很容易找出失败的测试,并弄清楚什么地方出问题了。

11.  编写单元测试将节省调试时间

通常在调试代码、寻找bug时会花费大量的时间,一旦你编写了单元测试,你将会在代码的每一块得到一个实时反馈,这将让你更容易找到bug,节省调试时间。

12.  持之以恒

应用TDD可以改变我们的心态。对于部分开发者而言,开始写测试很难,而在写生产代码之前写测试就更难了。重要的是,要持之以恒地写测试,一旦你的团队完全适应了这种方法,生产效率会成倍提升。


Java 测试驱动开发(TDD):让你的代码更健壮 TDD 是一种科学、高效的开发方法,不仅能帮助你写出更健壮的代码,还能减少 Bug 和返工。当然,TDD 不是万能的,它更适合逻辑性强、需求清晰的模块开发。所以,别只埋头写代码,尝试用 TDD 先写测试,用一种“未雨绸缪”的心态开发项目,你会发现它的妙处。现在,试试 TDD 吧! 阅读详情

相关推荐

单元测试之mock使用

单元测试之mock使用

不甘于平凡的溃败的博客 2万+

在团队中进行单元测试/TDD的12条经验

摘要:测试可以帮助项目团队找出代码中存在的问题,TDD方式更是将测试放在了开发工作的首位。那么在团队中该如何应用单元测试和TDD呢?开发者Paulo Ortins结合自身经历给出了本文中的12个经验教训。 测试可以帮助项目团队找出代码中存在的问题,TDD方式更是将测试放在了开发工作的首位。那么在团队中该如何应用单元测试和TDD呢?开发者Paulo Ortins结合自身经历给出了本文中的1

lisq037的专栏 1086

TDD(测试驱动)调研

测试驱动开发(Test Driven Development, 简称TDD)是敏捷开发中的一项核心实践和技术,也是一种设计方法论。TDD的原理是在开发功能代码之前,先编写测试用例代码,测试代码确定需要编写什么产品代码。TDD的基本思路就是通过测试来推动整个开发的进行,但测试驱动开发并不只是单纯的测试工作,而是把需求分析,设计,质量控制量化的过程。可以帮助我们增量式的构建系统,也能保证代码在任何时刻都不会错的离谱。

专注技术;java、架构、项目交付流程... 1868

TDD golang实践上的部分个人经验谈

TDD 在我看来,使用TDD的一个好处是避免在程序中加入无关的代码。参考一个TDD的定义和TDD的开发feature的流程如下: You are not allowed to write any production code unless it is to make a failing unit test pass. You are not allowed to write any more of a unit test than is sufficient to fail; and compilati

oe1019的专栏 419

从玩具车到手机充电:手把手带你用Multisim仿真Buck/Boost电路(附工程文件)

本文通过Multisim仿真软件,手把手教你搭建Buck降压电路和Boost升压电路,实现从12V到5V或3.7V到5V的电压转换。文章详细介绍了电路搭建步骤、关键波形观测技巧及常见故障排查方法,并附赠工程文件,帮助电子爱好者快速掌握电源转换技术。

weixin_29159127的博客 242

Zynq 双核AMP 通信

4、配置离线编译(这里不讲),配置linux的内核地址空间(0x4000_0000改为0x2000_0000),以及单核启动。CPU1设置为0x2000_0000~0x3FFF_FFFF(也可以小于0x3FFF_FFFF)如果禁用CPU1的L2 cache,在CPU1的bsp里面添加编译时候所需要的宏。3、配置工程,将vivado产生的.xsa文件复制到amp_com项目目录下。9、使用petalinux-package --boot 打包。一、vivado工程。5、编译u-boot。

y183128184的博客 1088

手把手教你实战TDD

本文介绍了TDD的基本概念和实施方法,并提供了贫血模型三层架构和DDD下的TDD实战案例。我们要理解做出任何改变都会有一个艰难的开始,将现有的软件开发方法转变为TDD也不例外,但只要我们坚持下去,最终必定能从TDD中受益。京东云技术团队。

kfashfasf的博客 1023

深入解析poi-tl自定义表格渲染插件中的多级子循环实现

本文深入解析了poi-tl自定义表格渲染插件中的多级子循环实现,详细介绍了其在处理复杂业务数据时的核心价值、实现原理及实战技巧。通过多级子循环机制,开发者可以高效地将层级数据结构渲染到Word表格中,显著提升代码简洁性和维护效率。文章还分享了性能优化和异常处理经验,帮助开发者更好地应用该插件。

weixin_33734785的博客 485

果断收藏!4个技巧成功实现测试驱动开发(TDD),使你的开发/测试资源得以最大化

您如何在组织中成功推出TDD?在此文中我们将揭示:最大化采用TDD的好处的技巧,以及从纯粹到TDD-ish的TDD采用范围的探索。 测试驱动开发(TDD)的全部目的在于编写具有高水平测试覆盖率的精益代码和平均代码。开发人员在编写代码之前就编写了针对需求的测试,并且只要测试通过,就认为代码已完成。听起来不错,但是如何在组织中成功推出TDD?我们将在这里进行探讨,并为您提供一些技巧,以最大程度地采用TDD。 为什么选择TDD? TDD的主要好处是可以帮助开发人员创建可维护和可测试的代码。TDD还通过确..

Pokemogo的博客 984

LangChain实战:Plan and Execute代理在智能预算规划中的应用

本文详细介绍了如何利用LangChain框架中的Plan and Execute代理实现智能预算规划。通过拆解复杂财务问题、调用多工具链协作,该代理能自动完成从个人月度预算到家庭年度综合预算的智能规划,并具备消费习惯学习和多目标优化等进阶功能,帮助用户实现精准财务管理和决策优化。

weixin_42530732的博客 382

FPGA之VGA转HDMI之编码模块的编写

VGA 图像信息到 HDMI 图像信息的转化需要对输入的 VGA 图像信息进行编码、并行串行转换、单端信号转差分信号、单沿采样转双沿采样。 其中,编码模块就是为了完成 VGA 图像数据 8b 转 10b 的编码。其结构框图如下所示: 图1 编码模块框图 图2 编码模块输入输出信号功能框图 图3 编码模块参考流程图 图4 编码模块参考流程图参数说明 下面我们依据HDMI官方手册中的流程图(图3)进行 HDMI 8b...

qq_51264805的博客 3024

在团队中进行单元测试的12条建议

原文出自优快云上的一篇文章,地址:http://www.youkuaiyun.com/article/2013-07-11/2816188-unit-test-tdd 因看到这些建议,觉不错,故记录于此,以便日后查阅。 1. 不要第一次就在真实项目中尝试TDD   这可能会让你的项目很难进展。在采用TDD之前,你必须要了解TDD的工作流程以及如何去模拟对象(mock objects)、如何...

agtoheqd08888的博客 192

FPGA面试题目笔记(一)——FPGA开发流程、亚稳态和竞争冒险、建立保持时间、异步FIFO深度等

同步异步电路、同步异步复位、时钟偏移和抖动、最小工作周期计算、触发器锁存器

H19981118的博客 1万+

(转)在团队中进行单元测试/TDD的12条经验

在团队中进行单元测试/TDD的12 条经验 摘要:测试可以帮助项目团队找出代码中存在的问题,TDD方式更是将测试放在了开发工作的首位。那么在团队中该如何应用单元测试和TDD呢?开发者Paulo Ortins结合自身经历给出了本文中的12个经验教训。 测试可以帮助项目团队找出代码中存在的问题,TDD方式更是将测试放在了开发工作的首位。那么在团队中该如何应用单元测试和TDD呢?开发者Paulo

千月星跡 962

Midscene.js(2):代码集成 + 桥接模式(Bridge Mode)的使用「喂饭教程」

本文将手把手教你从零开始搭建一个 Node.js 项目,集成 Midscene.js,并利用其桥接模式实现对 Chrome 浏览器的自动化操作。我们将通过具体的实例,来展示 Midscene.js 的便捷性与 AI 能力的结合。

blues_C的博客 1844

RDKit | 基于Pytorch和RDKit建立QSAR模型

QSAR 定量构效方法(quantitative structure-activity relationship, QSAR)是应用最为广泛的药物设计方法。所谓定量构效方法就是通过一些数理统计方法建立其一系列化合物的生理活性或某种性质与其物理化学性质之间的定量关系,通过这些定量关系。可以预测化合物的生理活性或某些性质,指导我们设计出具有更高活性的化合物。 早在...

DrugOne 5079

在团队中进行单元测试/TDD的12 条经验

摘要:测试可以帮助项目团队找出代码中存在的问题,TDD方式更是将测试放在了开发工作的首位。那么在团队中该如何应用单元测试和TDD呢?开发者Paulo Ortins结合自身经历给出了本文中的12个经验教训。 测试可以帮助项目团队找出代码中存在的问题,TDD方式更是将测试放在了开发工作的首位。那么在团队中该如何应用单元测试和TDD呢?开发者Paulo Ortins结合自身经历给出了本文中

睡猫的博客 571

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

谈谈什么是TDD?

TDD 的简单概念是在编写新代码之前(开发之前)编写和纠正失败的测试。这有助于避免代码重复,因为我们一次只编写少量代码以便通过测试。(测试只不过是我们需要测试以满足它们的需求条件)。测试驱动开发是在实际开发应用程序之前开发和运行自动化测试的过程。 TDD的主要目标是使代码更清晰、简单和无bug。 测试驱动开发从设计和开发应用程序的每个小功能的测试开始。在TDD方法中,首先,开发测试来指定和验证...

梅森上校的博客 业精于勤荒于嬉,形成于思毁于随。 2万+

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

手把手教你实战TDD | 京东云技术团队

本文将对测试驱动开发(TDD)进行探讨,主要内容有:TDD基本理解、TDD常见误区、TDD技术选型,以及案例实战。希望通过本文,读者能够理解掌握TDD并将其应用于实际开发中。

JDDTechTalk的博客 752

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

【实践篇】手把手教你落地TDD

一、前言领域驱动设计,测试驱动开发。我们在《手把手教你落地DDD》一文中介绍了领域驱动设计(DDD)的落地实战,本文将对测试驱动开发(TDD)进行探讨,主要内容有:TDD基本理解、TDD常见误区、TDD技术选型,以及案例实战。希望通过本文,读者能够理解掌握TDD并将其应用于实际开发中。二、TDD基本理解测试驱动开发(TDD)是一种软件开发方法,要求开发者在编写代码之前先编写测试用例,然后编写代码来...

京东科技开发者 3574

采用tdd实现计算器_在您的团队中成功采用了tdd

采用tdd实现计算器Test-Driven Development is a game-changing methodology for any software project with a life span more extensive than one year; unfortunately, many developers and companies fail to embrace it...

weixin_26729567的博客 363

单元测试与TDD:让你的Java代码不再成垃圾!

看完了单元测试和TDD的讲解,我敢打赌,你再也不会把测试当成可有可无的东西了。单元测试能够帮助你提前暴露bug,保证代码的质量,而TDD则帮助你养成写好代码的习惯,走出不清楚自己写了什么的黑暗。所以,亲爱的开发者们,摆脱那种每次改代码都不敢运行的恐惧,开始让单元测试走进你们的代码世界吧!🔥那么,今天就到这里了,赶紧去让你们的代码更健壮吧!

一碗黄焖鸡三碗米饭的博客 830
上一篇: 用Excel做敏捷项目中的燃尽图
下一篇: 职业经理人周刊 第52期 读书笔记
YearWang
博客等级 码龄20年 143粉丝 153原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值