`
goodsense
  • 浏览: 31964 次
  • 性别: 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,测试驱动开发)

分享到:
评论

相关推荐

    EmbedC_TDD__1 Keil中搭建自动化单元测试框架Unity

    本主题将聚焦于如何在基于C语言的嵌入式环境,特别是在Keil IDE中,利用Unity这个轻量级的单元测试框架来搭建自动化测试流程。 Unity是一个专门为微控制器和嵌入式系统设计的开源单元测试框架。它的特点是小巧、...

    TDD单元测试

    综上所述,TDD单元测试是软件开发过程中的一个重要环节,它通过先编写测试用例,再编写实现代码的方式,促进了代码的质量和设计。通过熟练掌握TDD,开发者可以更好地控制项目的进度,减少后期维护的难题。

    关于测试和TDD

    在描述中提到的“我公司的测试规范”,意味着讨论的是公司内部的测试流程、标准和指南,这些规范可能包括单元测试、集成测试、系统测试等不同层次的测试策略,以及如何进行测试文档的编写和维护。博文链接指向了一个...

    VS2005单元测试TDD代码

    在VS2005中,微软引入了内置的单元测试框架,使得开发者能够方便地进行TDD实践。 **单元测试**是软件开发中的一个重要环节,它对程序的最小可测试单元进行验证,确保每个模块的功能正确无误。在VS2005中,我们可以...

    PHP 测试框架 TDD

    在PHP世界中,TDD可以帮助开发者构建更健壮、可维护的代码,通过不断的单元测试确保代码质量。本篇文章将深入探讨PHP测试框架在TDD环境下的应用。 首先,我们要理解TDD的基本流程:**红-绿-重构**。"红"阶段意味着...

    .Net 单元测试案例

    本案例将深入探讨如何在.NET环境中进行单元测试,以及如何利用各种工具和框架来创建和执行这些测试。 首先,我们要理解单元测试的基本概念。单元测试是一种软件测试方法,它针对程序中的最小可测试单元——通常是一...

    TDD测试驱动开发

    1. 编写测试:首先,开发者编写一个失败的单元测试,这个测试针对即将实现的功能。这称为"红"阶段,因为测试会因未实现的功能而失败。 2. 实现功能:然后,开发者编写最小的代码量,使刚刚创建的测试通过。这一步...

    TDD驱动测试开发培训

    测试驱动开发(TDD)是一种软件开发方法,它要求开发者首先编写失败的单元测试用例,然后再编写足够的代码以使测试通过。接下来,开发者会对代码进行重构以改善设计,同时确保测试依然能够通过。这个过程循环进行,...

    Android单元测试的小例子

    在Android开发中,单元测试是确保代码质量、可维护性和减少缺陷的重要环节。这个小例子将引导我们了解如何在Android项目中设置和执行单元测试。首先,我们需要知道Android的单元测试框架主要有两个:JUnit和 ...

    软件单元测试讲义ppt

    《软件单元测试讲义》是一份深入探讨软件开发中单元测试技术的重要资料,它由知名IT博主linkyou在CSDN上分享。这份PPT详细阐述了单元测试的基础概念、重要性以及实施方法,旨在帮助开发者提升代码质量,确保软件功能...

    敏捷开发必要技巧12:单元测试

    这篇博客文章“敏捷开发必要技巧12:单元测试”探讨了单元测试在敏捷开发中的应用和重要性,以及如何有效地进行单元测试。 首先,单元测试是对软件中的最小可测试单元进行检查和验证的过程,通常是函数、方法或类。...

    测试驱动开发TDD培训讲义

    在TDD的过程中,开发者首先会为待开发的功能编写一个简单的单元测试,这个测试最初肯定会失败,因为此时还没有对应的代码实现。然后,开发者编写最少的代码使测试通过,这个阶段被称为“红色”阶段,因为测试失败...

    测试入门--7单元测试

    在软件开发过程中,单元测试通常是TDD(Test-Driven Development,测试驱动开发)的一部分。在TDD中,开发者先编写测试用例,然后实现代码以使测试通过,最后重构代码以提高可读性和效率。这种方法促进了设计的改进...

    有关单元测试的培训资料

    单元测试是一种软件开发过程中的重要环节,它主要针对软件中的最小可测试单元——通常是函数、方法或类——进行验证,确保这些单元按照预期工作。在本“有关单元测试的培训资料”中,我们将深入探讨单元测试的核心...

    单元测试 单元测试 java

    单元测试是软件开发过程中的重要环节,特别是在Java编程中,它被视为确保代码质量、提高可维护性和降低缺陷率的关键步骤。单元测试是对程序中最小可测试单元进行检查和验证,通常是一个函数、方法或类。它的目的是...

    C# 进行单元测试实例

    本文将详细介绍如何在Visual Studio环境中使用Visual Studio Team Test (简称TeamTest)进行单元测试。 #### 二、概述 Visual Studio Team Test 是一款内置在 Visual Studio IDE 中的强大单元测试工具,它支持多种...

    [测试驱动开发的三项修炼——走出TDD丛林]

    测试驱动开发(Test-Driven Development,简称TDD)是一种软件开发方法,它强调在编写实际功能代码之前,先编写能够失败的单元测试。TDD的核心理念是“红、绿、重构”:首先写一个测试用例(红色阶段,因为测试会...

    单元测试 (C#代码)

    在本场景中,我们看到的文件列表包含了一个名为"NUnitExample"的项目,这通常是一个使用NUnit框架进行单元测试的例子。 NUnit是一个流行的开源测试框架,适用于.NET平台,包括C#语言。它提供了丰富的断言方法,使得...

    单元测试之道java版

    《单元测试之道Java版》这本书,正如它的标题所示,是一部关于如何进行Java单元测试的专业指南,它结合了丰富的实例和实际经验,旨在帮助开发者掌握单元测试的技巧,并在软件开发中应用这些技巧。 这本书的读者们,...

Global site tag (gtag.js) - Google Analytics