PHPUnit袖珍指南 第九章 测试优先编程

翻译 2006年05月25日 21:07:00

第九章 测试优先编程

单元测试是几种软件开发实践和过程至关重要的部份,譬如测试优先编程,极限编程[3],测试驱动开发[4] 单元测试也允许在结构上不支持的编程语言中支持契约式设计[5]

 

[3] http://en.wikipedia.org/wiki/Extreme_Programming

[4] http://en.wikipedia.org/wiki/Test-driven_development

[5] http://en.wikipedia.org/wiki/Design_by_Contract

 

您可以完成代码后使用PHPUnit。但是,代码有错误,越快找到它们,测试就越有价值。因此,与其在代码错误“完成”后几个月才写测试,我们可以在缺陷引入后几天,几小时甚至几分钟内就写好它们。对了,为什么这样就够了?为什么不在一个缺陷引入前就写好测试呢?

测试优先编程,是极限编程和测试驱动开发的一部分,基于这种想法并发挥到了极限。以今天的计算机能力,我们可以每天进行数千次的测试,每个测试运行数千遍。我们能使用所有这些测试的反馈来编程,就向小步跑,除了以前有的测试之外,每步都有自动化的测试作保证。测试就是岩钉一样,保证不管发生了,一旦取得了进展,就会固定已有的进展。

当你第一次写测试时,它可能无法运行,因为你在调用还未实现的对象和方法。这也许起初让人感到奇怪,但你会很快习惯它。测试优先编程被认为是一种有效的的实践,符合面向对象的编程技术原则:面向接口而不是面向实现。当你写测试时,你就在考虑正在测试的对象的接口。从外面看,对象应该什么样?当你真正地让测试可以运行,你就是在考虑纯实现。接口会被失败的测试固定下来。

接下来简单介绍一些必要的测试优先编程内容。你可以在其他其它的书中找到更多的议题,譬如《举例说明测试驱动开发-Kent Beck》(Addison Wesley)或《测试驱动开发:Dave Astels的实践指南》(Prentice Hall)。

 

--------------------------------------------------------------------------------------------------------------------

原文:

Chapter 9. Test-First Programming

Unit tests are a vital part of several software development practices and processes, such as test-first programming, Extreme Programming,[3] and test-driven development.[4] They also allow for design-by-contract[5] in programming languages that do not support this methodology with language constructs.

 

[3] http://en.wikipedia.org/wiki/Extreme_Programming

 

[4] http://en.wikipedia.org/wiki/Test-driven_development

 

[5] http://en.wikipedia.org/wiki/Design_by_Contract

 

You can use PHPUnit to write tests once you are done programming. However, the sooner a test is written after an error has been introduced, the more valuable the test is. So, instead of writing tests months after the code is "complete," we can write tests days, hours, or minutes after the possible introduction of a defect. Why stop there? Why not write the tests a little before the possible introduction of a defect?

 

Test-first programming, which is part of Extreme Programming and test-driven development, builds upon this idea and takes it to the extreme. With today's computational power, we have the opportunity to run thousands of tests, thousands of times per day. We can use the feedback from all of these tests to program in small steps, each of which carries with it the assurance of a new automated test, in addition to all the tests that have come before. The tests are like pitons, assuring you that no matter what happens, once you have made progress, you can only fall so far.

 

When you first write the test, it cannot possibly run because you are calling on objects and methods that have not been programmed yet. This might feel strange at first, but, after a while, you will get used to it. Think of test-first programming as a pragmatic approach to following the object-oriented programming principle of programming to an interface instead of programming to an implementation: while you are writing the test, you are thinking about the interface of the object you are testingwhat does this object look like from the outside? When you go to make the test really work, you are thinking about pure implementation. The interface is fixed by the failing test.

 

What follows is a necessarily abbreviated introduction to test-first programming. You can explore the topic further in other books, such as Test-Driven Development: By Example by Kent Beck (Addison Wesley) or Test-Driven Development: A Practical Guide by Dave Astels (Prentice Hall).

 

【算法学习】图相关算法编程实现-深度优先遍历和广度优先遍历

一、图的表示 图G=(V,E)。要表示一个图,通常有两种方法:邻接表和邻接矩阵。两种方法都既可以表示有向图,也可以表示无向图。 邻接表表示由一个包含|V|个列表的数组组成,其中每个列表对应V中的一...
  • xiajun07061225
  • xiajun07061225
  • 2013年03月29日 08:54
  • 3672

编程规范 --- 质量保证

1:在软件设计过程中构筑软件质量。 2:代码质量保证优先原则      (1)正确性,指程序要实现设计要求的功能。      (2)稳定性、安全性,指程序稳定、可靠、安全。      (3)可...
  • XiaoXiaoPengBo
  • XiaoXiaoPengBo
  • 2016年06月04日 15:01
  • 655

图的遍历(搜索)算法(深度优先算法DFS和广度优先算法BFS)

图的遍历(搜索)算法(深度优先算法DFS和广度优先算法BFS) 2015-04-08 16:15  图的遍历的定义:  从图的某个顶点出发访问遍图中所有顶点,且每个顶点仅被访问一次。(连通图与非连通图...
  • Jerry_Dui
  • Jerry_Dui
  • 2015年10月23日 10:06
  • 1610

编译原理(八) 算符优先分析法(分析过程的算法和C++实现)

前情提要算符优先分析法(构造算法优先关系表)算法描述算符优先关系主要用于界定右句型的句柄: 标记句柄的右端。 发现句柄的过程: 从左端开始扫描串,直到遇到第一个>为止。 向左扫描,跳过所有的=,直...
  • qq_24451605
  • qq_24451605
  • 2015年11月30日 10:49
  • 3068

深度优先算法和广度优先算法

深度优先搜索算法(Depth-First-Search),是搜索算法的一种。是沿着树的深度遍历树的节点,尽可能深的搜索树的分支。当节点v的所有边都己被探寻过,搜索将回溯到发现节点v的那条边的起始节点。...
  • zhu339111520
  • zhu339111520
  • 2014年02月28日 03:19
  • 2568

图之图的深度优先遍历

深度优先遍历是连通图的一种遍历策略。其基本思想如下: 设x是当前被访问顶点,在对x做过访问标记后,选择一条从x出发的未检测过的边(x,y)。若发现顶点y已访问过,则重新选择另一条从x出发的未检测过的...
  • TODD911
  • TODD911
  • 2013年06月27日 13:11
  • 53146

基于Tcl/Tk语言的自动化测试平台的实现

基于Tcl/Tk语言的自动化测试平台的实现 来源:电子技术应用2013年第1期 作者:李志报1,2, 袁 亮1,2 2013/3/13 16:34:55 关键词: 自动控制系统|DCS|...
  • qq_14935437
  • qq_14935437
  • 2017年05月25日 13:40
  • 646

简单算符优先文法分析程序(编译原理)

题目                       实现算符优先文法分析程序;完成对以下表达式文法的分析程序。        G[E]:             E->E+T             E...
  • khwkhwkhw
  • khwkhwkhw
  • 2015年11月28日 23:50
  • 3788

图的深度优先和广度优先搜索算法

图的深度优先和广度优先搜索算法     1.图的深度优先搜索算法:        图的深度优先搜索算法的基本思想是:从图G的某个顶点V0出发,访问V0,然后选择一个与V0相邻且未被访问过的顶点V...
  • wp1603710463
  • wp1603710463
  • 2016年03月13日 16:21
  • 2006

在线编程测试平台

1.牛客网    http://www.nowcoder.com/   app:http://www.nowcoder.com/app 2.浙大的Programming Ability Test   ...
  • liuuze5
  • liuuze5
  • 2015年10月10日 16:48
  • 1862
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:PHPUnit袖珍指南 第九章 测试优先编程
举报原因:
原因补充:

(最多只允许输入30个字)