这个系列来自我读《Test-Driven Development in Microsoft .NET》这本书的一些内容,以及一些自己的体会。
1、什么是测试驱动开发?
可以用下面的两句话来定义。
- 在你已经写好一个测试失败的自动化测试用例之前,绝不写一行代码。
- 消除代码重复。
第一句话很好理解,就是在写代码之前,先写一些测试失败的自动化脚本,测试肯定是失败的,因为没有任何实现。因为测试包含代码必须满足和实现的需求。如果没有需求,就不需要实现任何功能。这条可以防止我们实现没有测试和不需要实现的功能。
但是我还是有一点疑问,就是如果一行代码都不写,连接口没有,自动化脚本又测试什么呢?也只能写一写手动测试脚本,功能性的测试脚本。针对具体实现的自动化脚本,也还是要等接口出来才可以写吧,你们说呢?
第二点是说在应用中不应该有重复的代码。代码重复是一种典型的不良软件设计,会导致矛盾问题。如果有代码重复,在看见的时候,程序员就应该消除它。
2、简单的设计
因为测试覆盖了需求,所以在写代码的时候,你的工作就是不多不少的满足需求。每个人都理解“不少”(因为少了软件没有办法工作了),但是不是每个人都理解“不多”。
“不多”是什么意思呢?想象回到有人让你在现有系统上添加功能的时候,然后你说“没有问题,在之前我就已经想到会发生这个了,我已经加入了这个功能的代码”。你被看做是英雄,因为你预料到了这个需求,并且在解决方案中已经实现了它。
想一下在你为了额外的功能增加复杂性的时候,抽象类,等等,那些没有人让你实现的功能。这些额外的代码必须随着那些使用中的代码一起维护。事实上,维护这个软件的负担在加重,因为它超过了实际的适用范围。因此你需要为不多、不少而奋斗,可以参考下面:
- 代码满足了当前客户的要求。
- 代码通过了所有的测试。
- 代码做了需要做的每一件事。
- 代码的类数量最少。
- 代码保持了最少数量的方法。
优先级最高的就是:代码满足了当前客户的要求。在你满足了适当的需求之后,下一个高优先级的是:代码通过了全部的测试。其次就是其他的了。
有一句话,原文是:
You might think that achieving simplicity is an easy process. Think again—it’s often very difficult. However, the simpler the code is, the more resilient it is and the easier it is to modify.
我是这么理解的:
你一定认为完成这些简单的事情是一个非常容易的过程。自己想想,通常它很困难。但是,代码越简单,它越有弹性,越容易修改。
我不知道是不是我理解错了,还是这句话本身就是错误的呢?我不认为代码越简单越好,应该保持适度,甚至是应该相对应该复杂一点。如果类最少就是好的,那就写几个类好了,每个类几个方法,方法要少吗,那就每个方法写上几千行。这样的代码还能有弹性吗?还能容易修改吗?这么说来的话,分层和设计模式是最扯蛋的了,他们会导致很多的类,很多的方法。还有就是设计原则:SRP,单一职责原则,更是要求类的职责要单一,每一个类只应该有一个改变它的理由。这不都是矛盾的吗?如何理解呢?还是我太极端的理解了书中的意思呢?
3、重构
重构可以理解为,改进代码本身,但是不影响功能。重构是TDD的关键环节,因为在增加测试的时候,需要重新定义代码的设计。例如:你在代码中看到了重复,你就要移除它。如果需要引入复杂性来移除重复,也是正确的,因为是实际需要的,而不是预期设计的。
4、红/绿/重构
红、绿、重构,定义了实现每一个测试的过程。这个过程的目标就是工作在一个小的,可验证的过程,可以提供及时的反馈。
- 编写测试代码。
- 编译测试代码,它肯定会失败,因为你还没有写任何实现的代码。
- 编写实现的代码。
- 运行测试,观察测试结果,可能是红色的。
- 使得测试通过。
- 运行测试,观察测试结果,直到变绿。
- 重构代码,消除重复代码。
- 重复上面的过程。
这就是著名的红绿条,不断的修改代码,直到进度条变成了绿色。因为,红色代表没有通过测试,绿色代表通过了测试。然后再对代码进行重构,消除代码中的重复。
分享到:
相关推荐
测试驱动开发(TDD)则是一种软件开发方法,通过编写测试代码来驱动软件的开发。 课程的主要内容包括: 1. 方法只使用一次缩进:在编写代码时,应该尽量减少缩进的使用,以提高代码的可读性和维护性。 2. 拒绝...
测试驱动开发(TDD)是极限编程的重要特点,它以不断的测试推动代码的开发,既简化了代码,又保证了软件质量。本文从开发人员使用的角度,介绍了 TDD 优势、原理、过程、原则、测试技术、Tips 等方面。 背景 一个...
TDD 测试驱动开发是一种软件开发方法,它强调通过编写自动化测试来驱动整个开发过程。TDD 是敏捷开发中的一个核心实践和技术,也是一种设计方法论。其主要包括两方面:测试先行和代码重构。测试主要针对单元(最小的...
测试驱动开发(Test Driven Development,简称TDD)是一种软件开发方法,强调在编写实际的生产代码之前,先编写能够失败的单元测试。TDD的核心理念是“先测试,后编码”,通过测试来驱动设计,确保软件的质量和可...
测试驱动开发 TDD ,将读者带入XP极限编程的神奇世界!
总结来说,测试驱动开发TDD是一种以测试为指导的开发模式,它通过编写测试来驱动功能代码的实现,强调代码的可测试性、可读性和可维护性。在实际应用中,TDD能够帮助开发者发现设计上的问题,提前预防错误,并提高...
测试驱动开发(Test-Driven Development, 简称TDD)是一种软件开发实践,强调在编写实际代码之前先编写测试用例。这种方法的核心理念是通过编写能够失败的测试来定义需求,然后编写足够的代码使测试通过,最后重构...
文件名中的“测试驱动开发TDD培训讲义.ppt”、“TDD_测试驱动开发.ppt”和“测试驱动开发—1.1_测试驱动开发简介.ppt”很可能包含了关于TDD的详细讲解,涵盖了TDD的概念、原则、实践技巧以及如何在实际项目中应用...
测试驱动开发(TDD)是一种先进的软件开发方法,它的核心理念是“先写测试,后写代码”。在TDD的流程中,开发人员首先编写测试用例,这些测试用例定义了所需功能的行为边界和预期结果。然后,他们会运行这些测试,...
测试驱动开发(TDD)是一种敏捷软件开发技术,它要求开发者在编写功能代码之前先编写测试代码。这种方法提倡先写失败的单元测试,然后编写刚好足够使测试通过的代码,最后通过重构来提高代码的质量。王晓毅所著的...
测试驱动开发(TDD)是一种开发流程,旨在通过编写测试代码来驱动开发过程。这种开发方法可以保证项目的健壮性,尽可能地排除未知的bug,并提高代码的可读性、可维护性和可扩展性。 TDD的流程可以分为两大块: 第...
测试驱动开发(Test-Driven Development,简称TDD)是一种软件开发方法,它的核心思想是“先写测试,再写代码”。TDD强调在编写实际功能代码之前,先编写能够失败的单元测试,确保测试覆盖了预期的功能需求。这种...
教程主题:Visual Studio 2010 TDD 测试驱动开发 实战 教程录制:柳永法 web:http://www.yongfa365.com/ 本教程旨在以最简单的hello world方式像您展示 Visual Studio 2010强大的TDD,推荐任何没接触过VS2010及TDD...
测试驱动开发(Test-Driven Development,简称TDD)是一种敏捷软件开发的技术,以测试作为开发过程的中心环节。它倡导在编写产品代码之前先编写测试代码,确保产品代码能够通过这些测试。这种方法与传统的开发方式...
测试驱动开发(Test-Driven Development,简称TDD)是一种软件开发方法,它强调先编写测试用例,再根据测试用例来实现功能代码。在这个简短的初学者一步一步教程中,我们将深入探讨如何在JavaScript环境中实践TDD。...
这份PPT教程主要介绍了两种软件开发实践:Code Kata和测试驱动开发(Test-Driven Development, TDD)。Code Kata是一种编程练习,旨在通过重复练习来提高技能和熟练度,类似于武术中的练习动作。而TDD是一种软件开发...
极限编程反其道而行之,主张采用测试驱动开发(TDD)的方法,即通过测试定义所要开发的功能的接口,然后实现功能的开发过程。TDD通过不断地测试推动代码的开发,既简化了代码,又保证了软件质量。本书采用“手把手”...