`
goodsense
  • 浏览: 30505 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

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

阅读更多

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

 

TDD(Test-Driven Development,测试驱动开发)

分享到:
评论

相关推荐

    TDD团队中的测试人员

    测试驱动开发(TDD)是一种开发方式,它改变了传统软件开发的流程,即首先设计程序,再进行编码与测试工作。TDD采取了很小的增量式开发方式:首先编写一个测试,再...这样一来,我们就需要重新反思是否有必要在TDD团队中

    测试驱动开发的3项修炼-走出TDD丛林

    从TDD为什么实践起来非常困难等最根源的问题入手,循序渐进地介绍了构筑TDD的三项修炼,涉及到未雨绸缪的单元及自动化测试、结构化、敏捷以及平衡式的开发迁移、软件开发和重构设计以及大量的实践心得和经验总结归纳...

    android-tdd-bootstrap

    对于单元测试,我将使用可用的JUnit支持,对于平台测试,我将使用Espresso。 android-tdd-bootstrap ##目标: 将提供TDD引导Android项目 启用preL设备的材料设计(使用appcompat-v7) 我喜欢TDD,所以我想为...

    -Hands-on-Test-Driven-Development-with-Python:Packt发行的Python动手测试驱动开发

    接下来,您将了解单元测试和TDD中的一些最佳实践,并通过在Python中使用TDD实现单元测试来获得一些编程方面的实践经验。 在本课程结束时,您将能够每天应用单元测试和TDD的实践,从根本上提高代码质量,并帮助您和...

    swift-MockFive一个Mocking框架用于Swift单元测试

    在 TDD 开发中,需要先跑通测试然后再写具体实现,因此需要先伪造出实现类和函数来通过测试,这就是 Mock。如果你的团队使用 TDD 开发流程,这个框架会非常有用。

    软件测试应该注意的几大误解

    对测试的误解1."你只需要做单元测试——TDD测试已经足 软件测试应该注意的几大误解 软件测试 最近看了网络上所谓专家写的文章,发现了一些对TDD与QA部门的误解。本文将解释部分误区,并集中讨论QA团队要在敏捷的...

    wcci-columbus-2017-fall:9月25日至12月15日运行的全职Java全栈编码Bootcamp

    单元测试/ TDD(Junit)* 职业服务: 第三周 集合概述(*迭代器/迭代器) 清单 地图 继承与多态 封装形式 职业服务: 第四周 依赖注入/ Spring 测试双打(Mockito)* 例外情况 使用Gradle构建自动化* 职业服务...

    毕业设计源码java-columbus-2018-spring:哥伦布-2018-Spring

    单元测试/TDD (Junit)* 职业服务:周五爆头 第 3 周 集合概述 (*Iterables/Iterators) 列表 地图 继承与多态 封装 就业服务: 第 4 周 依赖注入/Spring 测试双打 (Mockito)* 例外 使用 Gradle* 构建自动化 就业服务...

    unittest-demo::blue_book: Node.js单元测试实例

    要在Nodejs中写单元测试的话,你需要知道用什么测试框架,怎么测试异步函数,怎么测试私有方法,怎么模拟测试环境,怎么测试依赖HTTP协议的web应用,需要了解TDD和BDD,还有需要提供测试的覆盖率。目录测试框架断言...

    毕业设计订餐系统源码-columbus-2018-summer:哥伦布-2018-夏季

    单元测试/TDD (Junit)* 就业服务: 集合概述 (*Iterables/Iterators) 列表 地图 就业服务: 在班上: 作业:复习 依赖注入/Spring 测试双打 (Mockito)* 继承与多态 封装 使用 Gradle* 构建自动化 就业服务: 春天 ...

    devoxx-tdd-puissance4

    根据 TDD 原则,您的类必须允许您通过功能团队在 Power4Test 类中定义的所有单元测试 - 这也是提供给您的。 如需更多详细信息,请参阅 Enonce.pdf 文件。 您将评估您的应用程序与这些规范的一致性(它必须通过所...

    create-react-app-redux-boilerplate:样板代码和安装说明,使用create-react-appReduxTravisCI为TDD流程创建步行框架

    它可以与TDD一起使用,并具有用于单元,集成和端到端测试的基本设置。 地位 CI服务 测验 现场演示 或者在Github Pages我的Storybook的。 科技栈 Create-react-app,其中包括:React,JSX,ES6,Webpack,Babel和...

    rex:Rails 中的 React 示例

    新前端的一个关键要求是向 JavaScript 添加单元测试,希望达到团队可以练习一些(尽管 DHH 宣布 TDD 已死)。 其他指南对要采取的方向提供了相当多的见解。 Oliver Lance 的文章特别有用。 但是,它没有解决测试...

    Projekt3-chess

    在项目中,每个参与者都应提供有关与TypeScript相关的以下问题的实践知识: 基本类型定义自己的类型折叠类型类型/类/接口接口的实现/继承/组成/实现访问修饰符通用类型单元测试和TDD 不要使用任何实现国际象棋引擎的...

    designing-cloud-native-microservices-on-aws

    在AWS上设计Cloud Native Microservices(通过DDD / EventStormingWorkshop) 来自的免费图片许可 ...单元测试环境中的TDD 生成单元测试代码框架 从代码框架实现领域模型 在端口适配器概念中设计每个微服

    tdd-exercises

    使用gulp gulp test (通过业力,摩卡,西农)运行单元测试。 在开发模式下运行 使用gulp serve-dev运行项目 在浏览器中将其打开,并使用所有文件更改来更新浏览器。 建立项目 使用gulp build来构建

    red-social-tdd

    如果您不想阅读, 包含1100多个视频教程,涉及各种主题,包括Laravel,现代PHP,单元测试,JavaScript等。 通过进入我们全面的视频库,提高自己和整个团队的技能水平。 Laravel赞助商 我们要感谢以下赞助商为不断...

    TDD论坛

    关于Laravel ... Laracasts包含有关各种主题的1100多个视频教程,包括Laravel,现代PHP,单元测试和JavaScript。 深入研究我们全面的视频库,提高您和您团队的技能。 Laravel赞助商 我们要感谢以下赞助商为Lar

    java8stream源码-watcher:观众项目。旨在展示技术实现示例、实现、错误、链接和文档

    和单元测试方法一起使用 看板 vs. Scrum 哪种工作方法最有效的问题并不容易 :哪种敏捷软件开发方法更适合... 关心 看板 争吵 角色和职责 没有为团队预先定义的角色 预定义角色 截止日期/交货时间表 持续交付 冲刺...

    Gatsby-Starter-TypeScript-Redux-TDD-BDD:一个很棒的Gatsby入门模板,它负责工具的设置,使您和您的团队可以直接致力于快速构建超快速的React应用程序,并放心地部署它们! :package:

    预先配置了Jest并可以进行的单元测试。 预先配置了赛普拉斯的端到端UI自动化测试。 预先将Cucumber插件安装到赛普拉斯中,以运行小Cucumber功能文件和步骤定义,以进行由内而外的行为驱动开发。 Linting已使用...

Global site tag (gtag.js) - Google Analytics