APP下载

数控系统软件缺陷自定位方法研究

2017-09-22王力超耿树巧

关键词:软件缺陷控制流谓词

王力超,耿树巧

(安徽工程大学 皖江高端装备制造协同创新中心,安徽 芜湖 241000)

数控系统软件缺陷自定位方法研究

王力超,耿树巧

(安徽工程大学 皖江高端装备制造协同创新中心,安徽 芜湖 241000)

针对传统的数控系统软件缺陷人工定位方法效率低下的问题,提出了一种数控系统软件缺陷自定位方法。首先设计数控系统软件黑匣子,用于实时记录软件的执行信息;然后根据代码的谓词节点和有向边创建控制流图,并根据控制流图生成相似路径集;最后建立基于朴素贝叶斯分类器的有向边可疑度模型,计算得出执行路径中每个有向边含有缺陷的概率,从而完成对软件缺陷的定位。实验以一个含有缺陷的直线插补模块为对象,计算每一条有向边含有缺陷的概率,将怀疑度最高的有向边代码进行更正并重新实验,得到了与预期相同的结果,证明缺陷已被排除。实验结果表明该方法是可行的,可以有效提高数控系统的可用度。

数控系统;软件缺陷;自定位

引言

近些年来,随着计算机技术的飞速发展,数控系统的功能也越来越多地由软件来实现。如今,数控系统的功能越来越强大,导致其软件规模也不断地扩大,同时,带来的负面影响是数控系统软件的可靠性越来越难以保证。[1]113-120数控系统软件发生失效的主要原因是在使用过程中,在某个特定的输入域下,软件中的缺陷被激活而导致的。[2]234-246缺陷是否被激活直接决定于输入域的取值。[3]438-444所以,在数控系统的研发测试阶段,不太可能发现并排除所有软件缺陷,而在用户使用过程中缺陷被激活,导致数控系统软件发生故障。

在软件发生故障后,数控系统的用户会将故障情况反馈给研发人员,研发人员通常会通过内存信息转储和打印中间结果的方法来对软件缺陷进行定位。[4]2262-2278这种传统的定位方法的效率取决于研发人员的水平以及数控系统软件规模的大小,同时调试过程中还会受到各种因素的制约与影响,难以实现对数控系统软件缺陷快速且准确地定位。[5]对故障的排除效率低下会降低数控系统的MTTR,也直接降低了该系统的可用度,导致用户蒙受损失。所以,研究一种数控系统软件缺陷快速准确地自定位方法是非常有必要的。

于是,本文提出了一种数控系统软件缺陷自定位方法。首先从设计缺陷自定位功能体系结构;其次以一个有缺陷的直线插补模块为例,提取其发生失效时的速度曲线和位移曲线;随后,以该直线插补模块为对象,通过植入软件黑匣子、生成相似路径集、计算代码可疑度等步骤,确定了缺陷代码的位置;将缺陷代码改正后,再次取相同输入域,最终得到的速度曲线和位移曲线满足期望,证明缺陷已被排除,表明数控系统软件缺陷自定位方法是有效的。

1 数控系统软件失效实例

为了方便说明,本文假设用户使用某型滚齿数控系统的直线插补功能,期望X轴从坐标10插补到坐标20,其他轴保持不变,进给速度为700mm/min,加速类型为S型加速,加减速时间为300ms,插补周期为1ms。运行后得到实际速度曲线如图1所示,实际位移曲线如图2所示。

图1 发生软件失效时X轴的速度曲线

图2 发生软件失效时X轴的位移曲线

从图中可以明显看出,X轴最终位置远未达到预期的坐标20(只插补到13.5)。从用户角度来说,实际输出与期望输出不符,也就是说数控系统软件发生了失效。

2 数控系统软件缺陷自定位方法

2.1 数控系统软件黑匣子

数控系统软件黑匣子的设计需要遵循以下原则:实时记录的信息尽可能丰富,有助于分析缺陷代码;对系统资源的占用要尽可能小,且对软件模块源代码的影响足够小,尽可能减少对数控系统正常运行的干扰。

在设计数控系统软件黑匣子时,需要在每个模块分支路径处插桩,记录模块的执行路径。[6]882-885在保证模块原有功能基础上,在模块程序代码中插入一些检查语句,通过对检查语句地执行并输出程序的运行特征数据,就可以获得模块的动态行为。插桩语句需要紧挨在分支谓词的后面,使其在分支谓词执行后立即执行,并且准确获得分支谓词的状态。对于循环结构,需要插入两条语句:一条放置在循环语句之外,紧挨循环结构执行之前,用来探测分支谓词的状态;另一条放在循环结构体内部的最前端,能够探测在每次循环之前分支谓词的状态。

对该直线插补模块,可执行路径有p0p1p3p13p14p25p28、p0p2p3p24p26p27、p0p1p27p28等。在每个分支处插桩,采用二进制编码的方式,用SoftwareBlackBox.path来记录程序代码的运行路径,1表示经过该分支,0表示没有经过该分支。例如,路径p0p1p3p13p14p25p28会被表示为二进制11010000000001100000000001001。根据软件黑匣子的记录,在发生上节中所述的失效时的运行路径为p0p1p3p4p6p7p10p12p26p28,表示成二进制编码方式为11011011001010000000000000101。

2.2 数控系统软件相似路径集生成

2.2.1 源程序分析

数控系统的软件代码非常复杂且难以理解,人工分析效率低下。采用控制流图法对数控系统软件源程序进行分析,可以更加效率地分析功能模块的特征和行为。[5]

控制流图是一个由谓词结点和有向边组成的有向图,用图的形式描述程序源代码,方便地分析程序代码间的支配关系、蕴含关系以及软件的执行轨迹等。[7]51-63控制流图可以用G=(P,B)来表示,其中是有向图,是所有有向边的集合,是所有谓词节点的集合。有向图G=(P,B)通常有唯一的入口边e0和出口边ek,入口边e0可以到达控制流图中的任何一条有向边,而控制流图中的任何一条有向边都会经过出口边ek。

控制流图法主要分为5个步骤,分别是:划分代码的有向边和谓词节点,构造控制流图,找出代码的运行路径,分析执行路径的有向边,根据输入和输出找出成功路径和失效路径。下面以第2节中展示的直线插补模块程序(见表1)为例进行详细说明。该直线插补模块程序代码一共包含11个谓词节点,29条有向边,如表1所示。

按照直线插补模块程序的谓词节点和有向边构建控制流图如图3所示。

2.2.2 无约束边的确定

在控制流图中,有向边之间存在支配关系和蕴含关系。[8]401-413假设0

表1直线插补模块的谓词节点和有向边

图3 直线插补模块的控制流图

图4 直线插补模块的支配树

有向边pi蕴含着有向边pj,当且仅当所有从有向边pi到有向边pk(唯一的出口边)的路径都经过有向边pj,即称有向边pi和有向边pj存在蕴含关系。通过蕴含关系,可以将直线插补模块的控制流图(图3)转化成一个蕴含树I(G),如图5所示。

图5 直线插补模块的蕴含树

如果有向边pu是控制流图中的一条无约束边,意味着在控制流图中至少有一条从入口边p0到出口边pk的路径中没有包含有向边pu。根据无约束边的定义可知,无约束边的集合即为支配树中叶子节点与蕴含树中叶子节点的交集。于是可知,在如图5所示的直线插补程序的控制流图中,无约束边分别为p1、p2、p5、p7、p8、p9、p11、p12、p14、p15、p18、p19、p21、p22、p24、p25、p26、p27。

2.2.3 相似路径集生成算法

相似路径生成算法的主要思想就是对无约束边进行替换。[9]2168-2173

由于该直线插补模块的失效路径为π=p0p1p3p4p6p7p10p12p26p28,于是可以标记其中的无约束边分别为p1、p7、p12和p26。根据相似路径生成算法,分别对无约束边进行替换,可以得出失效路径的相似路径集如表2所示。

表2失效路径的相似路径集

将相似路径与软件黑匣子的历史记录信息进行比对,分析各条相似路径的可行性,得出可行路径分别是π5、π6、π7、π8、π9、π11和π14。其中,非失效相似路径为π5、π6、π8、π9、π11和π14。

2.3 基于朴素贝叶斯分类器的有向边可疑度模型

数控系统软件代码缺陷可疑度分析实质上就是机器学习方法中的监督学习,用一组已知失效与否的执行路径作为训练样本,以期待模型可以对任意执行路径或有向边做出失效与否的判断。

(1)

根据贝叶斯定理:

(2)

于是可将式(1)转换为:

(3)

对于P(yi)的估计非常容易,只需要计算每个目标值yi在训练样本中出现的频率即可。但是,估计P(a1,a2,…,am|yi)的值会遇到数据稀疏问题,除非有一个非常庞大的训练样本集,否则很难获得可靠的估计值。而朴素贝叶斯分类器引入了一个十分简单的假设来避免数据稀疏问题,即在给定样本目标值时,属性值之间相互条件独立。也就是说,在给定样本目标值的情况下,观察到的属性值a1,a2,…,am的联合概率等于每个单独属性的概率乘积,即

(4)

将其代入式(3),即可得到朴素贝叶斯分类器的定义如下:

(5)

其中,YNB即表示朴素贝叶斯分类器输出的目标值。

借鉴朴素贝叶斯的思想,可以建立数控系统软件代码可疑度分类器如下:

假设用xi=(a1i,a2i,…,ani)T来表示第i条路径及路径执行结果,其中n=p+1(p为路径中包含的有向边的个数),aij(1≤j≤n-1)表示特征属性:

ani表示第i条路径是否为失效路径。当路径i为非失效路径时,ani=0;当路径i为失效路径时,ani=1。于是,可以用2.2节中得到的非失效相似路径与失效路径共同构成判定矩阵如下:

A=(x1x2…xm)

(6)

其中,判定矩阵的前n-1行依次表示有向边p0、p1、p2、p6、p7、p10、p11、p25和p28,判定矩阵的m列依次表示非失效相似路径π5、π6、π8、π9、π11、π14以及失效路径πf和失效相似路径π3。

每条有向边的可疑度统计分析度量公式被定义成如下形式:

(7)

于是,根据式(7)可以得出各条有向边的可疑度如表3所示。

表3失效路径中各条有向边的可疑度

根据表3可知,有向边可疑度最高的是p7。回到直线插补模块源代码中分析,有向边p7对应的语句是pm->GxxStatus = 0x0003;,其功能是进入减速阶段。分析源代码可知,在加减速阶段结束之后应当进入匀速阶段,并非减速阶段。于是可将其改正为pm->GxxStatus = 0x0002。采用同样的输入做测试,经过更正后的直线插补模块的处理,可以得到速度曲线与位移曲线如图6和图7所示。

图6 未发生软件失效时X轴的速度曲线

图7 未发生软件失效时X轴的位移曲线

从图6和图7中可以看出,改正后的直线插补模块输出与期望完全一致,可以认为缺陷已被排除。实验结果表明该数控系统软件缺陷自定位方法是有效的。

结语

本文提出了一种数控系统软件缺陷自定位方法,该方法可以帮助研发人员在发现数控系统软件发生失效后迅速准确地对缺陷进行定位。以一个有缺陷代码的直线插补模块为对象,对其进行缺陷自定位。首先,在数控系统软件体系结构的基础上,增加了一个体系结构扩展层,即软件黑匣子,用以跟踪记录软件的执行信息。其次,根据代码的谓词节点和有向边,创建了直线插补模块的控制流图,并根据控制流图生成了相似路径集。随后,借鉴了朴素贝叶斯算法的思想,建立了数控系统软件代码缺陷怀疑度分类器模型,并计算出失效路径中各条有向边的怀疑度。最后,将怀疑度最高的有向边代码进行更正并重新实验,得到了与预期相同的结果,证明缺陷已被排除。实验结果表明,该方法是可行的,可以有效提高故障排除效率,减少数控系统的MTTR,从而提高了数控系统的可用度。

[1]叶佩青, 张勇, 张辉. 数控技术发展状况及策略综述[J]. 机械工程学报, 2015, 51(21).

[2]Yang X, Tang K, Yao X.ALearning-to-RankApproachtoSoftwareDefectPrediction[J].IEEETransactionsonReliability, 2015, 64(1).

[3]王力超, 韩江, 张魁榜,等. 基于加权组合模型的数控系统软件可靠性估计[J]. 中国机械工程, 2016, 27(4).

[4]王克朝, 王甜甜, 苏小红,等. 软件错误自动定位关键科学问题及研究进展[J]. 计算机学报, 2015(11).

[5]袁修华. 开放式数控系统软件故障自诊断、自愈合的研究[D]. 吉林大学, 2011.

[6]王克朝, 王甜甜, 任向民,等. 失效上下文统计分析的软件故障定位方法[J]. 计算机应用, 2015, 35(3).

[7]Ju X, Zhang H, Wang A.Errordetectionbysoftwaresignaturesbasedoncontrolflowgraph[J].FutureComputer&InformationTechnology, 2013.

[8]Shu X, Yao D, Ramakrishnan N. Unearthing Stealthy Program Attacks Buried in Extremely Long Execution Paths[C]// The, ACM Sigsac Conference. ACM, 2015.

[9]郭曦, 王盼. 基于动态协同双向映射的相似执行路径生成方法[J]. 电子学报, 2014(11).

[10]Berend D, Kontorovich A. A finite sample analysis of the Naive Bayes classifier[J]. Journal of Machine Learning Research, 2015, 16(1).

Self-localizationMethodofSoftwareDefectinCNCSystem

Wang Lichao,Geng Shuqiao

(WanJiang Collaborative Innovation Center for High-end Manufacturing Equipment, Anhui Polytechnic University, Wuhu, Anhui 241000,China)

In order to solve the low efficiency of traditional manual positioning method for CNC system software defects, a self-localization method is proposed. Firstly, the black box of CNC system software is designed to record the execution information of the software in real time. Then, the control flow graph is created according to the predicate nodes and directed edges, on this basis, a similar path set is generated. Finally, a directed edge suspicious degree model is established based on the naive Bayesian classifier, which is used to calculate the probability of each directed edge contains defect in the execution path, so that the positioning of software defects can be achieved. Taking a linear interpolation module contains defects as the experiment object, the probability of each directed edge contains defect is calculated, after that, correct the most suspicious directed edge code and re-experiment. The results is the same as expected, which proves that the defects have been excluded. The experiment results show that the method is feasible and can improve the availability of CNC system.

CNC system; software defect; self-localization

TP273+.5

:A

(责任编辑:蔡雪岚)

1672-6758(2017)09-0039-6

王力超,博士,讲师,安徽工程大学。研究方向:楼宇自动化系统。 通讯作者:耿树巧,硕士,工程师,安徽工程大学。研究方向:软件可靠性。

安徽工程大学引进人才科研启动基金(编号;2016YQQ017);安徽省高等教育提升计划自然科学研究一般项目(编号:TSKJ2017B24);安徽工程大学青年科研基金(编号:2017YQ03) 。

ClassNo.:TP273+.5DocumentMark:A

猜你喜欢

软件缺陷控制流谓词
抵御控制流分析的Python 程序混淆算法
基于返回地址签名的控制流攻击检测方法
被遮蔽的逻辑谓词
——论胡好对逻辑谓词的误读
基于源文件可疑度的静态软件缺陷检测方法研究
党项语谓词前缀的分裂式
基于控制流的盒图动态建模与测试
康德哲学中实在谓词难题的解决
基于Petri网数据流约束下的业务流程变化域分析
软件开发项目的质量管理策略探讨
基于度量元的静态软件缺陷预测技术*