软件单元测试浅议
2010-09-21陈晶晶
陈晶晶
(龙岩学院物理与机电工程学院,福建龙岩364000)
软件单元测试浅议
陈晶晶
(龙岩学院物理与机电工程学院,福建龙岩364000)
本文首先介绍了单元测试的概念,阐述了单元测试的目的,然后着重分析了单元测试的重要性和实施现状,最后对单元测试技术的未来进行了展望.
单元测试;软件错误;软件质量
1 引言
在当今信息化的时代背景下,软件的使用越来越普及和深化.伴随着现代软件规模的日益扩大,软件的复杂程度也越来越大.这意味着在软件的开发过程中可能存在很多问题,甚至是未发现的问题.由于有问题存在而难以解决或者是存在而未发现的问题,软件在使用和开发的过程中轻则可能导致费用失控、进度延迟、执行代码臃肿、低效,重则可能导致整个软件项目的失败.因此,如何提高软件质量,保证软件运行的安全性是软件行业一直在探讨和关注的问题.高质量的软件开发技术将是未来软件业的追求,而单元测试正是确保高质量软件的关键技术之一[1].
2 单元测试的概念
从软件设计的思想上来说,软件设计思想可以分为面向对象的软件开发思想和面向过程的软件开发思想.但是不论是用面向对象的开发思想还是用面向过程写出来的程序,它们都可以划分为若干个相对独立的软件单元,因此,软件单元是构成软件的最小单位.在面向对象开发的程序中,最小软件单元是类,而在面向过程开发的程序中,最小软件单元是函数.可见,单元测试实质上是将软件划分为若干个独立的测试单元进行隔离测试,它是软件开发过程中最低级别的测试活动.在软件生命周期V模型中,它的依据是详细设计说明书[2].
3 单元测试的目的
单元测试是软件测试中的一种,IEEE对软件测试的定义为,使用人工或自动手段来运行或评价某个系统或系统部件的过程,其目的在于检验它是否满足规定的需求;或是弄清楚预期结果和实际结果之间的差别.这个定义明确的说明了软件测试目的,即检验所设计的软件能否满足设计时的需求,这也是单元测试的目的.通过确保软件设计中最小单元的正确性来提高软件产品的质量.
4 单元测试的重要性
软件错误是不可避免的[3].因为软件是人编写的,凡是由人编写的软件都不可能是完美无暇的,只能是无限的逼近完美.所以问题的关键就在于如何去避免错误的产生和纠正已经产生的错误.具体来说,引起软件错误的原因有[4]:(1)交流上面的误解或者是根本不进行交流;(2)软件的复杂性;(3)程序设计错误;(4)需求发生变化;(5)时间压力;(6)代码文档匮乏;(7)软件开发工具中的错误.曾经有些观点认为较好的程序开发语言可以解决这些问题,但是从程序开发语言的发展进程来看,较好的程序开发语言确实在一定程度上提高了软件开发效率并且也解决了一些难题.不过在软件可靠性的问题上,它所起的作用甚小.事实上,对于软件来讲,还没有像银弹那样的东西[5].不论采用什么技术,软件中仍然会有错误.采用新的语言、先进的开发方式、完善的开发过程,可以减少错误的引入,但是不可能完全杜绝软件中的错误,这些引入的错误需要通过测试将其找出来,软件中的错误密度也需要测试来评估[6].因此单元测试在整个软件开发过程中是非常重要的,它是所有软件测试的第一个环节,也是最基本的一个环节.同时,单元测试也是唯一一次能够保证代码覆盖率达到100%的测试,这样可以防止开发后期因bug过多或是加入新功能导致的程序框架改变而引起的失控.下图是微软公司统计的各种测试的数据图[7]:
图1 测试数据统计
从微软公司的统计图中不难看出,事后控制不如事中控制,事中控制不如事前控制.在测试中捕捉错误,定位问题的最佳时机应该是在项目开发的早期.并且修正一个软件错误所需的费用将随着软件生命周期的进展而上升,错误发现的越晚,修正它所需的费用就越高.需要强调的是,测试是一个贯穿于软件项目开发的持续过程,在软件生命周期中需要运行多种测试,充分发挥不同测试的优点.
5 单元测试的实施现状
单元测试是目前软件测试中研究的热点问题,许多学者提出了大批的测试方法和测试理论.John Watkins在《An Off-the-Shelf software Testing Process》中提出了软件单元测试通常覆盖的区域,执行单元测试应该遵循的基本方法等.但是总的来说,这些理论缺乏实际的工程解决方案.从软件组织对单元测试的实施现状来看,许多软件开发组织存在以下问题:
(1)没有单元测试,或单元测试不彻底.
(2)单元测试大多依赖手工进行,没有有效的自动化测试工具,导致软件测试效率低下,测试周期长,不能在软件开发的各个周期完整测试.
(3)测试驱动难以编写、测试程序难以管理、软件单元难以介定[8].
针对这些问题,有些厂家推出了一系列的单元测试工具.其中包括,Purify,CPPUnit,NUnit,junit等.这些工具的推出有效的推动了单元测试的实施.
6 总结与展望
虽然极限化编程方法和测试驱动开发的兴起使得单元测试的应用受到了更多的重视,但是从发展的眼光来看,未来不论是公司还是研究机构,在软件的开发过程中广泛的使用自动化单元测试技术还是有一定难度的,因为它需要测试人员具有相当丰富的软件测试和开发经验.不过,相信随着软件测试理论的发展和各种自动化单元测试工具的逐渐成熟,软件单元测试将在未来取得长足的发展.
〔1〕陈占华.软件单元测试[J].无线电通信技术, 2003,5(5):50-51.
〔2〕John Watkins.实用软件测试过程[M].北京:机械工业出版社,2004:10-20.
〔3〕James A.Whittaker.实用软件测试指南[M].北京:电子工业出版社,2003:51-70.
〔4〕John D.McGregor David A.sykes.面向对象的软
件测试.北京:机械工业出版社,2002:65-80.〔5〕Ron Patton.软件测试.北京:机械工业出版社,2002:70-79.
〔6〕陈和平.面向对象的自动化单元测试[D].武汉理工大学,2004.
〔7〕陈静.单元测试在软件开发过程中的作用.舰船电子对抗,2006(6).
〔8〕肖波.通讯系统嵌入式平台下的单元测试技术研究[D].华东师范大学,2006.
TP31
A
1673-260X(2010)11-0029-02