zoukankan      html  css  js  c++  java
  • TDD(测试驱动开发)学习一:初识TDD

    首先说一下名词解释,TDD,英文名称Test-Driven Development,中文名称测试驱动开发,简单的断下句“测试/驱动/开发”,简单的理解一下,就是测试驱动着开发,大白话就是说用一边测试一边来推动着项目的开发,类似我们平时说的一步一个脚印,做一件事就把他给做好,每一步都要认真的走下去,保质保量的完成项目。

    TDD是敏捷开发中的一项核心实践和技术,也是一种设计方法论。

    TDD开发的优点:

           1、可以保证代码的质量。可以对自己的所需要的业务功能的每一步设计进行验证,并得到正确的结果,减少bug的出现的,特别对于复杂业务逻辑的项目,以小步慢走的方式,避免后期繁重的测试和维护工作。

           2、找到了重构的信心,必要时候你还可以痛痛快快的并且满怀信心的对代码做一场大的变革。这样我们的代码变得干净了,扩展性、可以维护性以及易理解性纷至沓来。

           3、在团队建设中能够进行分工,以可执行的形式文档化你的需求,迫使你分清职责隔离依赖以驱动你的设计,编织安全网以便将Bug扼杀在在摇篮状态,防止其逃逸。不同于传统开发(传统的开发人员开发的软件的测试是为了找出已经逃逸得bug,可能这个bug已经长成了毒瘤)。注:这两种活动都是必要的,而且毫不冲突,互为补充。

           4、帮助你养成一个新的思维习惯,不光在你编程的道路上,在你的工作和生活中,你慢慢的会把自己的需求进行分析设计并不断地验证,最终更好去实现自己的人生目标。

    TDD开发的缺点:

           1、对于测试驱动不熟练或者喜欢偷懒的的人员,加大了代码的编写量,测试代码是系统代码的两倍或更多。

           2、可能不适合时间很紧的软件开发,更适合于产品和平台的开发。

    TDD原则:      

           独立测试:不同代码的测试应该相互独立,一个类对应一个测试类(对于C代码或C++全局函数,则一个文件对应一个测试文件),一个函数对应一个测试函数。用例也应各自独立,每个用例不能使用其他用例的结果数据,结果也不能依赖于用例执行顺序。 一个角色:开发过程包含多种工作,如:编写测试代码、编写产品代码、代码重构等。做不同的工作时,应专注于当前的角色,不要过多考虑其他方面的细节。
     
           测试列表:代码的功能点可能很多,并且需求可能是陆续出现的,任何阶段想添加功能时,应把相关功能点加到测试列表中,然后才能继续手头工作,避免疏漏。
    测试驱动:即利用测试来驱动开发,是TDD的核心。要实现某个功能,要编写某个类或某个函数,应首先编写测试代码,明确这个类、这个函数如何使用,如何测试,然后在对其进行设计、编码。
     
          先写断言:编写测试代码时,应该首先编写判断代码功能的断言语句,然后编写必要的辅助语句。
    可测试性:产品代码设计、开发时的应尽可能提高可测试性。每个代码单元的功能应该比较单纯,“各家自扫门前雪”,每个类、每个函数应该只做它该做的事,不要弄成大杂烩。尤其是增加新功能时,不要为了图一时之便,随便在原有代码中添加功能,对于C++编程,应多考虑使用子类、继承、重载等OO方法。
     
          及时重构:对结构不合理,重复等“味道”不好的代码,在测试通过后,应及时进行重构。
     
          小步前进:软件开发是复杂性非常高的工作,小步前进是降低复杂性的好办法。
     

    怎么做TDD(关键5步)

    1. 加入一个新的测试
    2. 运行下新加的测试,看到它失败(因为你还没写功能代码)
    3. 对开发代码做很小的修改,目的就是让新加的测试通过 (注意这里的目的)
    4. 运行所有的测试(test case),然后看到所有测试都通过了 (看到测试都变成绿色,一般都会小开心一下)
    5. 移掉重复的代码,对代码进行重构 (既包括功能代码,也包括测试代码。特别注意红色的字串 一般会有重复,还有一些代码可以抽出来变成公用方法,测试代码中同样的初始化和还原测试环境的代码,可以放到intilize和cleanup中去)

        而外还有一些步骤也是可以加入的,比方

    • 在写测试代码前,先从需求出发,准备一个Test list (需要测到的功能的列表)。忘掉你该怎么实现,那是后面的事情
    • 每测完一个就用横线划掉
    • 如果发现有漏掉的test 就加到这个列表中(列表测完你的功能也就完成了)

    总结: 

         通过一上午的学习,对TDD(测试驱动开发)有了基本的理解,对TDD的带来的优点有了初步的认识,接下来的学习中,我会转变思想,以“测试先行”的原则来开发稳定高质量的代码,把写测试像写代码注释一样,深入骨髓。

    参考资料:

    由衷向以下博客表示感谢,也以便以后查询方便

    http://www.cnblogs.com/xiadao521/p/4092846.html

    http://blog.csdn.net/m13666368773/article/details/7006912

    http://baike.baidu.com/link?url=pbvA3Y5wTfaUMJKHgKtSd3pNuWB08imkCRW0BTVAOc_9TZ5Z7mOn4T6No1Crxvb-Jmp1Wg4xr2uvRyi4cY3OoSqwgVNPkwqzJf-DrxTKQ9e

  • 相关阅读:
    poj 2488 A Knight's Journey( dfs )
    poj 2676 Sudoku ( dfs )
    poj 3087 Shuffle'm Up ( map 模拟 )
    poj 1426 Find The Multiple( bfs )
    poj 3126 Prime Path( bfs + 素数)
    Atcoder ARC-063
    Atcoder ARC-062
    Atcoder ARC-061
    Atcoder ARC-060
    Atcoder ARC-058
  • 原文地址:https://www.cnblogs.com/OlderBird/p/4322925.html
Copyright © 2011-2022 走看看