崔建峰,黄智云
(厦门理工学院,福建厦门 361000)
软件可靠性是软件研发的重点,用户对于软件可信度要求随着计算机技术的迅速发展越来越高。软件中隐含的缺陷数目与系统可靠性具有直接关系,缺陷定位是软件应用可持续发展的主要步骤[1]。采用面向开源软件缺陷自定位系统的设计,需要程序员对目前软件运行状态进行分析,直到找到缺陷位置[2]。该系统不仅要求程序员熟练掌握软件内部结构,而且定位精准度较低,无法满足人们要求。
一个良好的设计方案需要通过测试分析阶段所产生的信息来确定软件中缺陷的位置,因此,提出基于执行轨迹的软件缺陷自定位系统设计。从缺陷不同角度发现软件存在的不同缺陷,由于程序员对程序进行了一定修改,并引入一定缺陷,导致程序版本间的差异分解为修改集合形式,通过对集合中的原程序进行修改,可定位到缺陷位置。
基于执行轨迹的软件缺陷自定位系统硬件结构如图1 所示。
图1 硬件结构设计Fig.1 Hardware structure design
硬件结构由故障定位装置、信号传感器、定位主机、显示屏组成,通过定位装置中的记录模块接收软件缺陷故障信号,一旦到达初始位置,启动定位系统时钟单元记录信号到达时间。确定软件存在缺陷后,定位装置将缺陷记录到定位装置中,通过下位机采集相关缺陷信息,再传至上位机中,由显示屏显示具体信息[3]。
传感器能够将感受到的软件缺陷信息按照一定规律转换为信号形式,满足信息传输、处理、显示与记录要求,是实现自动控制的主要环节[4]。因此,采用AM2301型号芯片为信号传感器主要芯片,它是一款含有已经校准的数字信号复合传感器,具有可靠性和稳定性。该传感器内部在检测信号处理过程中,调用校准系数,设置总线接口,使系统变得简易[5]。
故障定位装置主要应用于小电流接地形式,一旦系统检测出软件缺陷,那么该装置能够快速、准确地获取缺陷位置信息。该装置包括记录模块、下位机和上位机,依据记录的缺陷信息,利用下位机进行缺陷信息收集与定位,并将结果传至上位机中[6]。
1.2.1 下位机
下位机能够直接控制装置获取装置状况,读取装置状态模拟量,转化为数字信号形式反馈给上位机。下位机内部镶嵌Galileo GN100 型号定位芯片,通过NMEA-0183V4.1 协议能够精准获取数据信息,同时了解软件运行状态信息[7-9]。
当有不规则遮挡物存在时,该芯片可通过运营商基站信息进行快速定位[10]。芯片参数如表1 所示。
在Galileo GN100 型号定位芯片支持下,设计系统电路。系统电路主要由定位控制电路和通信电路组成,具体设计如下所示。
1)定位控制电路
设置固定标记点,集合线性部件进行软件缺陷位置定位与控制,电路设计如图2 所示。
表1 Galileo GN100 定位芯片设置Table 1 Setting of positioning chip Galileo GN100
图2 定位控制电路Fig.2 Design diagram of location control circuit
图2 中设置稳定环路电路,缩短动力响应时间,通过功率运算放大器修正输出数据。采用三相异步电动机具有较高的电动势,在晶体管处施加50 V 电压,适当转动电机方向,能够保证两个光电管电流大小一致[11]。
如果瞬时运动切换到放大器输入端时,电动机应按照顺时针方向旋转,输出正常电动势;如果瞬时运动未达到设定的标记点时,C2上电荷需为电动机提供动力,此时电动机应按照逆时针方向旋转,输出高电动势[12]。依据不同电容选择合适阻尼,实现软件缺陷精准定位。
2)通信电路
通信接口电路设计如图3 所示。
由图3 可知,该电路由从机、锁存器、随机存取器和接口器件组成。在该电路中,各个从机与上位机直接连接,一旦从机数量过多,那么上位机就会出现频繁的响应情况,由此说明系统正在定位。
图3 通信接口电路设计Fig.3 Design diagram of communication interface circuit
1.2.2 上位机
上位机可根据下位机传送过来的信息操控主机,通常上位机具备RS 232串口通信,采用该种通信方式适合工业控制双线通信,还可实现PLC与上位机的通信[13]。
使用电压互感器提取软件缺陷信号,传送至客户端进行统一处理,经过AT-16 型号触发器可将正弦信号转换为方波信号。经过转换后的信号传递给单片机,单片机接口与计算机接口相连接,可显示出软件缺陷信息。
整个系统技术路线的设计是通过上位机软件和下位机软件来实现的,其中,上位机主机运行软件可接收来自下位机传送过来的定位信息,针对该信息采用执行轨迹方法进行软件缺陷定位。
下位机软件工作流程如下所示:
1)初始化程序
中断服务开启驱动,设置源地址。
2)基于执行轨迹的缺陷自定位
定位过程分为三步,分别是执行轨迹组织、轨迹选择、怀疑率计算,通过整理初始源地址信息,按照一定组织方式测试信息执行轨迹。选择用于定位的执行轨迹滤除信息中存在的噪声信息,分析选定的执行轨迹,计算语句块中的怀疑率,由此实现高精准缺陷自定位。具体执行方案如下所示:
①执行轨迹组织
执行轨迹是测试所执行语句块中的序列,通过动态切片技术收集被测试的序列。如果出现信息量过大的问题,需按照代码静态结构组织执行轨迹。
将程序看成一个向量,其中每一维对应的程序是一个语句块,按照二值向量和多值向量组织缺陷定位执行轨迹。
二值向量:分析该向量中的语句块是否被执行,如果被执行,则向量中的维数值为1;否则,为0。设sus 为怀疑率,j为测试用例,则执行公式为:
多值向量:如果该向量中语句块被执行了λ次,那么对应维数的值为λ;否则,为0,执行公式为:
以下执行轨迹,都是按照上述两种向量方式组织执行的。
②轨迹选择
在执行过程中,存在大量冗余测试用例,由此形成大量冗余信息,降低了系统定位精准度。为了对程序中存在的多个缺陷进行高精准定位,可通过测试用例执行的相似性执行轨迹。
执行轨迹间距离越小,执行轨迹越相似,对于多值向量可以按照向量元素值大小进行排序。通过计算排列间相互转换步数,获取执行轨迹间距离。由于选择的轨迹只能关注语句块之间的关系,因此,需计算执行轨迹间排序距离。
设执行轨迹为:
对向量元素排序后为:
直接利用次数参数计算,受到语句块循环影响较大,及时发现执行次数相对关系,能够完整体现执行轨迹间的相似性。
③怀疑率计算
将测试用例中与某个语句块相关的用例组成一个集合,分析该集合中通过测试和未通过测试的怀疑率。如果集合中未通过测试用例执行比例大,则说明该语句块具有较高的怀疑率;否则,怀疑率较低。
各语句块怀疑率计算公式如下:
式中:R(aj)表示语句块aj所在的模块;Tf(b)表示经过执行b模块未通过测试的数量;Tg(b)表示经过执行b模块通过测试的数量;Tf(aj)为执行aj未通过测试的数量;Tg(aj)为执行aj通过测试的数量。
依据上述计算的sus 怀疑率结果,将语句块按照大小顺序排列。
3)计算坐标
将获取的怀疑率结果进行归一化整理,计算出缺陷位置坐标。
4)定位报告评价
针对软件缺陷自定位的意义在于缩短程序员找到缺陷位置的时间,根据步骤3)中的缺陷位置坐标,报告定位到实际缺陷情况,此时用所必需的审查语句块来评价系统定位效果,语句块数量越少,则说明定位效果越好。
依据坐标,将语句块按照由近及远的方式排序,并依次进行编号处理,根据实际缺陷语句块编号给系统未定效果进行打分,分数越高,则说明定位精准度越高。
如果报告的分数超过90 分,则说明程序员只需审核10%的语句块就能快速找到软件中的缺陷位置,计算公式为:
式中:p表示语句块总数;q表示缺陷语句块总数。
5)显示程序
通过硬件结构中的显示屏,显示程序完成缺陷位置坐标。
上位机程序流程如图4 所示。
图4 上位机程序流程Fig.4 Program flow of upper computer
下位机通过以太网与上位机连接,读取下位机传送过来的信息进行解析,形成信息包,读取下位机坐标数据,显示软件缺陷位置信息,实现显示功能。
对于系统测试分析就是对软件缺陷进行自定位精准度的测试,在已知缺陷条件下,分析系统定位精准度,如果测试结果精准度越高,则说明该系统性能越好。
在Windows 7.0 平台设计实验软硬件环境,如表2所示。
表2 软硬件环境设置Table 2 Software and hardware environment settings
当软件处于正常使用情况下,软件缺陷定位分别在冷启动和热启动条件下,将面向开源软件缺陷自定位系统与基于执行轨迹的软件缺陷自定位系统进行对比分析,结果如下所示。
1)冷启动
直接按重启动按钮进行冷启动,两种系统获取的缺陷信号波动幅值如图5 所示。
图5 冷启动模式下两种系统获取的缺陷信号波动幅值Fig.5 Amplitude of defect signal fluctuation acquired by two systems in cold start mode
面向开源软件缺陷自定位系统幅值变化较大,在时间为0.47 ms 时,幅值达到最低为-0.40;在时间为0.03 ms 时,幅值达到最高为0.59;基于执行轨迹的软件缺陷自定位系统幅值变化较小,在时间为0.08 ms 时,幅值达到最低为0;在时间为0.03 ms 时,幅值达到最高为0.59。
2)热启动
使用键盘Ctrl+Alt+Del 进行热启动,两种系统获取的缺陷信号波动幅值结果如图6 所示。
图6 热启动模式下两种系统获取的缺陷信号波动幅值Fig.6 Amplitude of defect signal fluctuation acquired by two systems in hot-start mode
面向开源软件缺陷自定位系统幅值变化在热启动情况下变化幅度变大,但具有一定规律性,在[-0.7,0.8]幅值内进行上下波动;基于执行轨迹的软件缺陷自定位系统幅值变化较小,也具有一定规律性,在[-0.1,0.2]幅值内进行上下波动。
在不同启动模式下,为了进一步验证基于执行轨迹的软件缺陷自定位系统具有精准的定位效果,需对这两种系统再次进行对比分析,结果如表3 所示。
表3 两种系统定位精准度Table 3 Positioning accuracy of two systems %
分析表3 可知,在冷启动模式下,面向开源软件缺陷自定位系统定位精准度最高为50%,而基于执行轨迹的软件缺陷自定位系统定位精准度最高为90%;在热启动模式下,面向开源软件缺陷自定位系统定位精准度最高为67%,而基于执行轨迹的软件缺陷自定位系统定位精准度最高为93%。由此说明,基于执行轨迹的软件缺陷自定位系统定位精准度较高。
针对以往采用的面向开源软件缺陷自定位系统存在定位精准度低的问题,设计了基于执行轨迹的软件缺陷自定位系统,详细设计系统的硬件结构和软件功能,并把传统系统与本文系统进行对比,由此证实本文系统设计的合理性。
目前,软件缺陷定位系统还需进行深化设计,比如,如何在海量数据中提高系统定位精准度,或者在有限数据条件下分析软件缺陷,并精准定位缺陷位置,这些问题都需要进一步完善。