APP下载

基于高斯过程的安全攸关系统缺陷定位方法

2019-07-08颜培皓路红

软件导刊 2019年6期

颜培皓 路红

摘 要:软件缺陷定位的有效性和及时性是提升软件质量的关键因素,现有自动缺陷定位方法和手工调试方法具有一定局限性。为解决这一问题,基于高斯过程的缺陷定位方法和软件自动修复对缺陷定位的有效性评估机制,设计了一种新的面向安全攸关系统的缺陷定位框架。基于ManyBugs和 IntroClass设计了软件缺陷定位测试数据集构造方法和实验方案。实验结果表明,该设计方案有效可行。

关键词:缺陷定位;反调试;反动态跟踪;抗静态分析;高斯过程

DOI:10. 11907/rjdk. 191445

中图分类号:TP309

文献标识码:A文章编号:1672-7800(2019)006-0200-04

Abstract: The effectiveness and timeliness of software defect location is a key factor in improving software quality. The existing automatic defect location method and manual debugging method have certain limitations in defect location. Based on this, this paper proposes a method based on Gaussian process for security critical software defect location by combining the Gaussian process-based defect location method and the automatic evaluation mechanism for the effectiveness of software automatic repair for defect locatio. It analyzes the basic principles and framework design of the method. Finally, based on ManyBugs and IntroClass, the software defect location test data set construction method and experimental scheme are designed. The results show that the design is effective and feasible.

Key Words: defect location; anti-debugging; anti-dynamic tracking; anti-static analysis; gaussian process

0 引言

軟件可靠性是提高软件质量的关键,软件维护愈来愈重要[1],其已占整个软件生命周期的2/3,定位并修复软件缺陷是其一项重要工作。因此,能使软件系统更可靠的自动调试方法成为研究热点。软件缺陷定位作为其中的一种方法,虽然实现困难且成本较高,但随着软件规模和复杂度的不断增加,其地位越来越重要[2-4]。因为软件系统错误的原因越早发现越能及时处理,而且发现程序错误并进行处理的速度越快,系统故障修复的时间就越少,软件系统可靠性也能得到提高[5-6]。

在航空航天、武器装备、医疗设备、交通、核能、金融等安全攸关应用领域,软件系统失效将导致灾难性的后果[7]。安全攸关系统(Safety-critical System)指由于不确定条件的发生或功能缺陷导致人员伤亡、财产损失、环境破坏的软件系统。安全攸关系统开发越来越多地采用模块化方式,其软件和硬件可能来自不同生产厂商,这种开发方式的转变使安全攸关系统出现缺陷的概率明显增加,严重威胁到整个系统运行。

软件调试是软件开发和维护过程中的一项重要任务,其关键是缺陷语句的定位、理解和修复[8]。软件定位是软件修复的第一个环节,也是最困难、最繁琐、最耗时、成本最昂贵的一项活动。当软件开发者发现测试用例执行失败时,传统的缺陷定位方法是从中选出某一个失败测试用例,然后依次在不同的可疑语句处设置程序断点,采用手工调试方法执行该测试用例并观察程序断点处的变量值,直至找到真正的缺陷语句为止。然而,这种采用设置断点和手工调试方法定位缺陷语句的代价高、费时费力,不能充分利用测试用例的执行行为和执行结果[9]。

研究人员就自动软件缺陷定位技术进行了广泛的研究并取得一定成果[10]。当前软件工程领域绝大数自动缺陷定位方法普遍存在依赖测试用例集问题,即利用测试用例集执行目标程序,根据程序执行过程中收集的信息判断可能存在缺陷的程序语句。然而,许多新开发的软件系统或开源软件测试用例集较少或不成熟,但这些软件在开发和升级过程中积累了一些历史缺陷信息(缺陷库)和代码变化历史记录(代码库),根据缺陷库和代码更新日志提取缺陷修复所对应修改的源文件,利用缺陷与源文件的链接关系建立缺陷与源文件之间的关系图,就把软件缺陷定位转变为对应缺陷与源文件之间的链接预测问题。在机器学习领域,高斯过程(Gaussian process)是解决链接预测问题的有效方法[11-12]。陈理国等 [13]基于高斯过程提出了一种高斯过程缺陷定位方法(Gaussian processes bug localization,简称GPBL),用于预测新产生的缺陷可能发生在软件系统的哪些源文件中。

虽然这种软件缺陷定位方法不需要测试用例集,也不需要收集程序执行信息,但其缺陷定位的准确性与训练数据的质量关系较大。如果历史缺陷信息记录不规范、源文件中标识符的命名没有统一规则,高斯过程缺陷定位方法效果就会受到很大影响。此外,训练数据只有达到一定规模才能保证准确定位缺陷所在的源文件。由于一个源文件可能包含数百条语句,仅指出缺陷所在源文件信息并不能定位缺陷可能存在的具体程序语句,这对帮助程序开发者准确定位缺陷语句、调试和修复程序意义并不大。