关于单元测试本质的说明

原创 2011年01月11日 12:02:00

关于单元测试,很多人对它都存在误解,更多的关注“测试”,而忽略了它更本质的一面,下面我就对单元测试的本质,谈谈看法。以下几段话是在《敏捷软件开发-原则、模式与实践》中摘录下来的:

1.      编写单元测试是一种验证行为,更是一种设计行为。

2.      单元测试的作用分为以下几方面:

Ø  编写单元测试第一个明显影响是程序中每个功能都有测试来验证它的操作的正确性。

Ø  还有一个更重要但不那么明显的影响,是首先编写单元测试可以迫使我们使用不同的观察点。我们必须从程序调用者的有利视角去观察将要编写的程序。这样,我们就会在关注程序的功能的同时,直接关注它的接口,通过首先编写单元测试,我们就可设计出便于调用的软件。

Ø  此外,通过首先编写单元测试,我们就迫使用自己把程序设计为可测试的,把程序设计为易于调用和可测试的,是非常重要的,为了成为易于调用和可测试的,程序必须和它的周边环境解耦。

上面的阐述与我们的实践体验是基本一致的,也就是单元测试最重要、最本质的内容是设计。不同的地方是:不一定非要通过单元测试这种形式来提高设计水平,只要你充分考虑使用者的要求,即使不使用单元测试也一样可以设计出良好良好的结构。同时我们提高了模板代码的比重,模板代码是经过精心设计多处验证的“思想、结构、细节”的复合体,所以用它做出来的程序,错误会非常少,几乎可以无需专门的测试。并且模板代码是以过程为中心,服务于框架模式,所以远非设计模式所强调的内容能替代。另外,模板代码是以开源的形式提供,强调培训、运作,其“思想性整体协调性直观性、易接受性、灵活性、高度适应性、易改进性”都远非一般的工具所能比拟。在模板比较成熟以后也可以辅以一些代码生成工具来完成一些工作,这个时候做工具相对来说比较容易。所以模板代码并不排斥工具,只是它更关注反映整个“开发过程”,并随同“开发过程”的改进,用“代码”的形式来表达“改进后的过程”,强调“整体和谐”,而不是针对某一个方面做“最好的”。这遵循了一个指导思想:一个项目或团队要真正做好是由许多环节构成的,单一环节做得再好可能对事物本身也起不了太大的作用,我们必须权衡这些环节的投入与产出效益,力求管理中各环节的“和谐相处”,以“逐步渐进、平衡协调”的方式改善我们的过程

 

 注:我们也可以这样理解“模板代码”的作用,“开发过程控制”服务于“管理”,“架构模式”服务于“开发过程控制”,而“模板代码”是“架构模式的核心元素(不是所有元素)”,所以从这里我们可以看出“模板代码”是真正反应“管理中开发过程控制”的核心元素。如下图所示:

关于单元测试本质的说明

关于单元测试,很多人对它都存在误解,更多的关注“测试”,而忽略了它更本质的一面,下面我就对单元测试的本质,谈谈看法。以下几段话是在《敏捷软件开发-原则、模式与实践》中摘录下来的: 1.      编...
  • xiao_pingzi
  • xiao_pingzi
  • 2015年10月11日 22:10
  • 226

游戏的本质【转自网易】

一,游戏的本质:以内在的手段谋求内在的目的 ,生命体以各种手段谋求自足的目的的活动 二,游戏性:游戏的自足性的可实现性(包括可探索性和竞争性) 游戏规则可以表达如下:  1.研究不熟悉的...
  • u012723995
  • u012723995
  • 2016年09月07日 20:00
  • 833

关于技术的本质浅显探究

技术为改变世界而不断创造,技术来自自然现象,技术与经济的关系,人与自然的关系等等问题都亟需我们所有人去解决。...
  • bangdingshouji
  • bangdingshouji
  • 2015年11月13日 16:42
  • 709

敏捷开发与单元测试

在敏捷开发过程中,项目的开发周期特别短,因此在质量和开发进度上会出现一定的矛盾,最突出的就是单元测试用例的编写。从项目的长期角度来看,单元测试用例对提供团队整理开发效率都有比较大的提升,同时还能提高代...
  • xrqiu
  • xrqiu
  • 2009年06月23日 10:34
  • 570

致广大用户关于 iPhone 电池及性能的说明

致广大用户关于 iPhone 电池及性能的说明2017 年 12 月 28 日 致广大用户关于 iPhone 电池及性能的说明 最近,对我们在使用较早期电池 iPhone 性能表现上的处理方式,以...
  • u014275966
  • u014275966
  • 2017年12月29日 13:15
  • 1151

线性代数的本质-学习笔记

线性代数的几何意义。
  • dujiahei
  • dujiahei
  • 2017年06月15日 23:42
  • 1003

线性代数的本质与几何意义 01. 向量是什么?(3blue1brown 咪博士 图文注解版)

向量是线性代数最基础、最基本的概念之一,要深入理解线性代数的本质,首先就要搞清楚向量到底是什么? 向量之所以让人迷糊,是因为我们在物理、数学,以及计算机等许多地方都见过它,但又没有彻底弄懂,以至于似是...
  • ipaomi
  • ipaomi
  • 2017年11月21日 09:17
  • 201

21个小故事、透过现象看本质

引导语:活跃的思维是决定一个人在社会中的成功与否,有时一件事看似很简单,简单的让人以为选择只有一种。其实不然,对事不同的选择在左右着你的生活现状,每件事都有多方面,要看你怎么来对待。来看看这21个故事...
  • lb521200200
  • lb521200200
  • 2016年12月30日 23:44
  • 901

数组的本质(Java)

数组是基本上所有语言都会有的一种数据类型,它表示一组相同类型的数据的集合,具有固定的长度,并且在内存中占据连续的空间。在C,C++等语言中,数组的定义简洁清晰,而在java中确有一些会让人迷惑的特性。...
  • u013887236
  • u013887236
  • 2016年03月04日 11:44
  • 490

Spring项目单元测试

Spring项目单元测试探讨。
  • u013275741
  • u013275741
  • 2016年10月20日 11:50
  • 1709
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:关于单元测试本质的说明
举报原因:
原因补充:

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