@为什么需要TDD测试?

  0,记住,我们的程序代码,一定要先测试再运行,否则你会频频出丑。那怎么测试呢,如何随时随地的测试呢?单元测试。

  ---好的测试,是代码质量的保证。好的测试,是程序质量的保证。

  ---如果想不让别人频频发现你的问题,那就自己先把问题找出来。

  1,TDD测试保证了代码的质量和正确性,通过测试能让我们快速的找到问题并修正。

  2,兵马未动,粮草先行,TDD测试可以使我们任意的修改代码,然后迅速的测试代码正确性。TDD测试为以后代码的修改和重构打下了基础,修改完以后,可以立刻进行测试

  3,测试代码和生产代码一样重要,因为测试代码和生产代码成正比,所以要像生产代码一样,保证测试代码的整洁高效等等。

  

@TDD测试定义:

  1,测试驱动开发敏捷开发中的一项核心实践和技术,也是一种设计方法论。TDD的原理是在开发功能代码之前,先编写单元测试用例代码,测试代码确定需要编写什么产品代码

  2,TDD三定律

  (1),在编写不能通过的单元测试前,不可编写生产代码。(即单元测试代码没通过测试前,不能写生产代码--功能性代码。)(冰山之巅规则---在编写生产代码之前先编写单元测试。)   测试代码只比生产代码早些几秒钟。

   ---假如你首先编写测试用例,那么你将可以更早发现缺陷,同时也更容易修正它们。

   ---首先编写测试用例,将迫使你在开始写代码之前至少思考一下需求和设计,而这往往会催生更高质量的代码。

   ---在编写代码之前先编写测试用例,能更早地把需求上的问题暴露出来。

   ---先写测试,你就会站在代码用户的角度来思考,而不仅仅是一个单纯的实现者,因为你自己要使用它们,所以能设计一个更有用,更一致的接口。

   ---总结:测试先行与后行所花费的成本并不大,而测试先行却可以使程序员站在更高的角度上来审视代码,编写代码。不仅可以更早的发现问题的所在,还能以用户的角度发现更多的需求和设计。

  (2),You must stop writing that unit test as soon as it fails; and not compiling is failing. 单元测试(that unit test)一旦失败,你必须停止写代码,不能编译也算失败不通过。

  (3),You must stop writing production code as soon as the currently failing test passes.你必须停止写生产代码,一旦当前测试没有通过。(只可编写刚好足以通过当前测试的生产代码!)

  每个测试一个断言;每个测试一个概念

  整洁的测试还应遵守以下5条规则(FIRST):快速,独立,可重复,自主验证,及时

  《代码大全》最后做了总结

总而言之,我认为测试先行的编程是过去十年中所形成的最有用的软件开发实践之一,同时也是一个非常好的通用方法。

  

  3,TDD原则:

  独立测试:不同代码的测试应该相互独立,一个类对应一个测试类(对于C代码或C++全局函数,则一个文件对应一个测试文件),一个函数对应一个测试函数。用 例也应各自独立,每个用例不能使用其他用例的结果数据,结果也不能依赖于用例执行顺序。 一个角色:开发过程包含多种工作,如:编写测试代码、编写产品代码、代码重构等。做不同的工作时,应专注于当前的角色,不要过多考虑其他方面的细节。

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

  3,JUnit是Java的单元测试

  

posted on 2014-05-09 19:17  学到老死  阅读(824)  评论(0)    收藏  举报