何与舟
摘 要:随着自动化技术的不断发展,近年来,嵌入式软件测试变得越来越重要。由于嵌入式软件自身的复杂性、多样性,软件开发成本高、周期短等特点,先进的软件测试方法的应用是十分必要的。
【关键词】软件测试 嵌入式 应用
1 抽象解释技术方法
近几年,软件应用日趋完善,软件功能日益多样化。在这种背景下,行业内对嵌入式软件“释放关键的运行错误空间,减少测试费用”的要求越来越高,所以测试技术的改进迫在眉睫。
抽象解释是一个比较成熟,相对可靠的数学方法。有了这种方法,就能在程序的编译阶段静态验证软件的动态属性。所以可以把它当作另一种编译技术,这种技术比原有的编译技术更加强大。这种编译技术可以使测试人员在执行一个软件之前预言这个软件未来的运行情况。综上所述,抽象解释可以把传统的静态分析技术和动态测试有机的联系在一起。对一个程序而言,这样可以在不运行它的前提下提供更大范围的可以重复利用的动态特性。
在以前,我们为了查找程序运行错误,需要做代码审查。虽然代码审查是一个非常有效的方法,但是它需要花费大量的时间和人力。并且它有着非常苛刻的要求,只有经验丰富的软件测试工程师才能有较的查找缺陷。而现在,抽象解释技术的引进,解决了这些难题。
那么,什么是抽象解释呢?在我看来,首先这项技术离不开大量的数学定理,而这些数学定理制定了规则来服务于复杂的动态系统——嵌入式应用软件。这样,抽象解释并没有具体地分析这个程序的每一个细节,而是使用了更加全面的方法——抽象来表示这个程序的状态。而且,它为此指定了使用时的规范——对抽象的解释,即抽象解释。
有了抽象解释,运行错误这个一直困扰着程序员的难题就基本解开了。当使用抽象解释检测运行错误的时候,它会在这个程序运行、调试甚至加载之前,就完成对该程序中所有可能出现的错误操作的分析与检测,然后生成一个运行错误的列表。这一系列操作的结果会在最早的测试阶段——编译阶段就可以获得。
就因为抽象解释具有静态验证应用软件动态特性的功能,所以它有着以下的优点:
(1)可实现自动化测试,只需要提供源代码,无需设计用例和代码插桩。
(2)使测试工作提前到编译阶段,错误发现的越早,软件修改的成本就越低,不仅提高了效率,也节省了财力人力和整个软件的开发时间。
(3)与众不同的检测方法,可以得到一些以前得不到的结果。
(4)执行彻底,检测出的错误都是运行错误。
对嵌入式软件测试技术而言,抽象解释的引入将会是一场大的变革,对当前大部分棘手的、无法解决的问题会有较大的作用和成效。但是,任何技术都有局限性,不可能是万能的。这就需要我们长期的实验,验证和完善。作为用户,我们需要根据自己的具体需求来选择适合自己的测试技术和工具。
2 CODETEST测试方法
CODETEST是专为嵌入式系统设计的软件测试工具。它通过采用和改进软件打点技术,不像纯软件那样插入一个函数,而是直接插入一条赋值语句。因此,它的执行时间非常短,对被检测系统的影响也非常小。纯硬件工具从总线捕获数据的技术,CODETEST也进行了采用,并且比其更加完善。它不再使用采样的方法,而是直接监视系统总线,只有程序运行到它的插入点时才会主动在数据总线上把数据捕捉回来。所以,CODETEST可以同时对多个任务进行分析,而且还可以精确地得出被检测程序执行的最大、最小和平均时间。对于各个函数或者任务之间的调用情况,也能够精确地显示出来。同时它还可以动态地跟踪内存的分配情况。另外,CODETEST还能够实时的在系统环境下测试各种覆盖率指标,掌握当前代码测试覆盖的真实情况。
基于CODETEST的这一种嵌入式软件测试技术对诸如软件打点技术、从总线捕捉数据技术等进行了改进。这些原理上的优势,使得CODETEST测试方法具有了强大的性能分析、内存分析、覆盖率分析和代码跟踪能力。如果可以适当地借助CODETEST测试工具,将可以获得大量的、实时的、可靠的测试结果,借此来发现嵌入式软件运行过程以及实现中的不足之处,并对其进行进一步的优化、改进。
3 探索性测试方法
对嵌入式系统来说,软件的作用越来越大。因此,一个软件的质量,将直接关系到系统运行的成败,甚至关系到设备以及人员的安全。如今用户对嵌入式系统软件质量要求越来越高,因此,软件测试也成为嵌入式系统完成中必不可少的环节。
探索性测试可以在短时间内,甚至在文档不完善的情况下,充分发挥测试人员的经验和能力,快速并且高质量地完成软件测试的任务。到目前为止,这种测试方法已经形成了一套管理方法和应用模型,并且已经在微软等多个公司开展了成功的实践。可以说,探索性测试方法比其他方法更注重实用性,所以对它大部分的研究也都集中于实际应用方面而非理论研究。
嵌入式系统软件有着一系列现实问题,比如需求变化快,软件文档缺乏,测试周期短等等。而解决这一系列问题,探索性测试就是可行的手段之一。为了让人们恰当地使用,需要积累和总结探索性测试的一般性应用方法体系,并且要探讨它与嵌入式系统软件测试体系的联系和冲突。然后在这样的基础上,提出更加适用于嵌入式系统软件测试的探索性测试应用模型。
如今,探索性测试已经成功在互联网和桌面应用上完成了实践,但是在嵌入式领域的应用还并不是很多。所以在进行嵌入式系统软件测试中使用探索性测试技术时,应该注意:
(1)要重视探索性测试的过程管理和注意更新相应的文档。以保证测试过程受控,保留测试阶段性成果。
(2)结合具体的领域的相关信息,有助于团队新成员快速熟悉被测系统,也可以提高探索性测试的效率。
(3)要针对特定的测试团队和项目制定具体的策略。
4 结语
除了以上说的这三种测试方法,较为先进的还有交互式开发测试方法,使用它的优点在于可以更为全面的检测系统,到达系统深层的部分。另外,我们大部分测试时测试的都不是单独一个项目,而是许多项目需要同时进行,交互式开发方法能够完美的解决这个问题,可以单项同时进行,大大的减少了测试人员的工作量,节约了时间和成本。
这些方法都各有各的优势,但是,不管是哪一种,都得经过长期的实践研究,需要时间去改正,去完善。
参考文献
[1]常硕.抽象解释技术在嵌入式软件测试中的应用[J].中国测试技术,2007(06).
[2]任志伟.嵌入式软件测试技术研究[J].软件导刊,2013(09).
[3]王庆江.嵌入式系统及其开发领域典型特征[J].计算机应用研究,2002(08).
作者单位
中航工业金城南京机电液压工程研究中心 江苏省南京市 211106