MILY: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin">导读
其实并不想写关于理论的东西,理论性的东西网上有很多,更喜欢说一些实际操作性的话题。前几篇大多是说的关于单元测试方面,现在就对单元测试做个总结。纯属于个人理解,不足和巧合之处敬请大家指正。
什么是单元测试
在你要去做一件事情时,总得知道是什么事吧。做单元测试也是如此,得先知道什么是单元测试。OK,传统软件对“单元”一词有各种定义,对“单元测试”也是一如此。这里我取其一种,即单元是可以编译和执行的最小软件构件,是决不会指派给多个程序员开发的软件构件。对于结构化程序而言,程序单元是指程序中定义的函数和子程序,单元测试就是对函数或子程序进行的测试。但有些也可以把紧密相关的一组函数或过程看做一个单元,如函数A调用函数B,那么在执行测试时,可以将A和B合并为一个单元进行测试。对于面向对象设计程序而言,程序单元是指特定的一个具体的类或相关的多个类,单元测试就是对类的测试;有时候,在一个类特别复杂的时候,可以把类中的方法作为一个单元进行测试。
单元测试要测试程序中的哪些方面
现在你已经知道什么是单元测试了,但单元测试到底要测试程序中的哪些方面呢?有些人,包括本人一开始学习单元测试也犯过这样的错误,就是只写一个测试用例,让所有代码从头到尾跑一次,只测试一条能够正确执行的路径,如果测试通过了,就认为测试工作已经完成。实际上并非如此。单元测试的目的是根据可能是各种情况,确定测试内容,确定这段代码是否在任何情况下都和期望的一致。因此,在单元测试时,测试人员在依据详细设计规格说明书和源程序清单,理解程序的输入输出和模块的逻辑结构,从以下五个方面考虑:
1, 模块接口,主要测试数据在模块接口处是否出错,能否正确地输入输出。
2, 局部数据结构,主要检查临时存储在模块内部的数据在程序执行过程中是否完整,正确。
3, 独立路径,主要是为了发现因计算错误,比较不正确和控制流不适当而造成的错误而设计相应测试用例。
4, 出错处理,主要检查程序是否能预见各种出错条件,并进行相应的出错处理。
5, 边界条件,边界测试是单元测试中最后也是最重要的一项任务,主要检查软件在边界上是否失效。
怎样进行单元测试
到此处,或许你已经想跃跃欲试了。OK,现在就开始,对程序进行单元测试,方法大体上有两种,一是静态测试,另一种就是动态测试。涉及了白盒测试技术知识。
一,静态测试
在静态测试中,一般会用词法分析与语法分析和静态错误分析。
用词法分析与语法分析可以获得软件组成的重要因数,如变量标识符,常量等,组合这些基本因数可以得到软件的基本信息。
静态错误分析用于确定在源程序中是否有某类错误或不安全的结构,主要有四种类型:类型和单位分析,引用分析,表达式分析和接口分析。
在实际工作中,如果测试需求严格,可能还会对代码进行检查,如桌面检查,代码审查,走查,等等。不同的公司有不同的做法。
二,动态测试
动态测试,是一种需要执行原程序或测试类程序的一种测试方法。在软件动态测试中,程序插桩是一种基本的测试手段。借助在被测试程序中插入操作,来实现测试的目的。在单元测试中,最重要的莫过于逻辑覆盖率的测试。逻辑覆盖是通过对程序逻辑结构的遍历实现程序的覆盖,主要有语句覆盖(SC),判定覆盖(DC),条件覆盖(CC),条件判定组合覆盖(CDC),多条件覆盖(MCC)和修正判定条件覆盖(MCDC)。还有路径覆盖和基本路径测试法等等。关于这些覆盖的定义和用法这里就不做过多的述说了,因为很多测试资料及网上都可以很容易找到,也很容易看懂。关键的是在工作中,怎样设计一个成功的测试用例来提高被测程序的覆盖率,这才是作为一个测试工作者要思考的问题。与该文章一起,我会上传一个相关的文档,感兴趣的朋友可以下载看看。
怎样做好单元测试
在你知道为什么,怎样做时,你是否这样想过,怎样才能做得最好呢?当有很多方法可以同是实现时,你是否想过,用哪种方法可以以最快的速度达到最好的效果?先搞懂为什么,再思考怎么做,最后深入研究怎样才能做得最好。这是我一直以来的学习习惯,感觉很好,你们也可是试试。
怎样做好单元测试,除了你要懂得软件开发流程,测试基本知识,你还需要熟悉代码,懂得编程,具备良好的逻辑思维能力和洞查能力加上有良好的职业敏感度。除此之外,你还得有很强的学习能力,因为单元测试中对不同开发语言,不同技术,相对应的测试方法和技术都会不同,所用到的测试工具也不同,所以你要有很强的学习能力。
要做好一个单元测试,当然少不了应用工具,在这里举例一些
1, JUnit :一种测试java类的测试框架,可以ant结合,达到自动化测试,官网地址是:http://www.junit.org/ ant 下载地址是:http://ant.apache.org/
2, Jtest:和JUnit类似,只是JUnit是开源软件。官网地址是:http://www.parasoft.com/jsp/home.jsp
3, Cactus:一种测试servlet,jsp,taglibs,filter的框架,是apache开发的一个开源软件,官网地址是:http://www.apache.org
4, Strutstest:一种测试struts的框架,结合junit可以测试struts中的action。下载地址是:http://strutstestcase.sourceforge.net/
5, Jsunit:一种类似junit的测试框架,主要用来测试javascript。下载地址是:http://sourceforge.net/projects/jsunit/
6, httpUnit:httpUnit本身不是测试工具,而是协助进行功能单元测试的工具,与JUnit一起,可以整合cactus。官网地址为:http://httpunit.sourceforge.net/
7, C++test:一种C和C++的单元测试工具,官网地址是:http://www.parasoft.com/jsp/home.jsp
除了以上所要求具备的,会用的东西外,更少不了一个
好的测试计划。当这些都准备好了后,就开始Run吧。
OK,就说这些我所常用的了,还有很多,大家在网上都很容易找到,就不一一例举了。
这篇结束后,这类话题就不再说了,将转入功能测试,性能测试及自动化测试(LoadRunner,WAS,JMeter,WinRunner)相关话题,谢谢大家的支持,欢迎大家指正错误的地方,我的QQ是117293968,加时请注明“软件测试”,大家一起相互学习,相互帮助啦。