首页 / 专利库 / 软件 / 白盒测试 / 一种改进的面向宿主的嵌入式软件白盒测试方法

一种改进的面向宿主的嵌入式软件白盒测试方法

阅读:1005发布:2020-06-30

专利汇可以提供一种改进的面向宿主的嵌入式软件白盒测试方法专利检索,专利查询,专利分析的服务。并且本 发明 公布了一种改进的面向宿主的嵌入式 软件 白盒测试 方法,属于嵌入式软件测试的技术领域。本发明所述方法包括如下步骤:1.第一阶段测试(粗预测),包括程序不变量的提取、基于 支持向量机 的 机器学习 与机器预测等,初步揭示隐含错误;2.第二阶段测试(传统白盒测试),将去除了可揭错误属性后的程序进行嵌入式软件白盒 覆盖 测试,去除测试过程中所出现的问题,白盒测试包括词法分析、语法分析、软件度量分析、覆盖率分析;3.第三阶段测试(精预测),将排除覆盖测试出现的问题后的程序再应用第一阶段中的机器预测步骤进行辨识,得到可能隐含更深的程序错误。本发明能够应用到不同的程序,通用性强。,下面是一种改进的面向宿主的嵌入式软件白盒测试方法专利的具体信息内容。

1.一种改进的面向宿主的嵌入式软件白盒测试方法,其特征在于包括如下步骤:
1.)第一阶段测试即粗预测,包括如下步骤:
(1)将含有已知错误的代码经过词法语法分析检测编配得到含有错误的属性不变量,将去除错误后的代码经过词法语法分析检测编配得到去除错误后的属性不变量;(2)将步骤(1)所述的含有错误的属性不变量和去除错误后的属性不变量分别经过槽的替换得到支持向量机输入的特征向量,其中槽包括变量类型槽、运算符类型槽、属性类型槽和程序变量槽;(3)将步骤(2)所述的特征向量经过SVM模式识别与回归进行机器学习得到能够辨识潜在错误的模型;(4)将用户程序依次经过词法语法分析检测编配、槽的替换后得到用户程序的属性特征向量,将用户程序的属性特征向量与步骤(3)所述的能够辨识潜在错误的模型匹配去除可揭错误属性,可揭错误属性就是那些真实不正确的代码而不是那些真实正确的代码;
2.)第二阶段测试即白盒测试:将去除了可揭错误属性后的程序进行预处理即将宏进行展开,然后将去除了可揭错误属性后的程序进行白盒测试,去除测试过程中所出现的问题,白盒测试包括词法分析、语法分析、动态运行分析、覆盖率分析;
3.)第三阶段测试即精预测:将排除白盒测试出现的问题后的程序再应用第一阶段(4)步骤进行辨识,得到可能隐含更深的程序错误。
2.根据权利要求1所述的一种改进的面向宿主的嵌入式软件白盒测试方法,其特征在于所述槽的个数为44。

说明书全文

一种改进的面向宿主的嵌入式软件白盒测试方法

技术领域

[0001] 发明涉及一种改进的面向宿主的嵌入式软件白盒测试方法,属于嵌入式软件测试的技术领域。

背景技术

[0002] 软件测试是保证软件系统正确性的一个重要手段,也是计算机软件工程方法和技术的一个主要组成部分。虽然测试并不能证明软件系统的正确性,但是,它通过运行选定的测试用例来发现软件中的错误,并通过纠正错误使软件的质量达到令人以满意的程度。所以,在今后相当长的时间内测试仍是保证软件质量的主要手段。
[0003] 北京航空航天大学可靠性工程研究所提出了基于模糊神经网络的软件可靠性早期预测方法,从理论和实践上对基于模糊神经网络的软件可靠性早期预测模型进行了论证。而北京航空航天大学软件工程研究所在承担国防科工委“九五”重点预研课题“军用软件质量评测技术”期间,将理论研究与实践工作结合起来,对于预测模型的建模方法、预测模型共性与个性的统一、以及模型调整技术进行了较为深入的研究,取得了若干具有实用价值的研究成果。如文献:李虎.软件质量评测的定量分析技术研究[D].北京:北京航空航天大学博士论文.2001
[0004] 合肥工业大学李嘉研究了基于支持向量机的软件可靠性早期预测,在提出模型的基础上,设计了一个软件可靠性早期预测软件系统,该预测系统把支持向量机引入软件可靠性早期预测领域,可以对软件存在的缺陷数进行预测。但该系统不能对缺陷进行具体的定位,只能给软件开发人员一个预测的缺陷数量。如文献:李嘉.基于支持向量机的软件可靠性早期预测研究[D].合肥:合肥工业大学硕士学位论文.2005
[0005] 这些已有的软件测试理论及测试方法中,一般仍然或多或少存在以下不足: [0006] (1)只能针对某单一的软件进行测试,例如51系列的嵌入式软件,或者ARM嵌入式软件;
[0007] (2)对软件可靠性评价只是一个整体的概念,预测软件缺陷的个数,但不能具体指出缺陷存在的位置
[0008] (3)对隐含的代码错误测试效果不好,如果再次测试将花费大量的人物力; [0009] (4)人为参与的步骤太多,使用起来很不方便;
[0010] (5)得到的覆盖率指标比较单一,不能全面的反映软件的质量。 [0011] 发明内容
[0012] 本发明目的是针对现有技术存在的缺陷提供一种改进的面向宿主的嵌入式软件白盒测试方法。
[0013] 本发明是一种改进的面向宿主的嵌入式软件白盒测试方法,其特征在于包括如下步骤:
[0014] 1.)第一阶段测试即粗预测,包括如下步骤:
[0015] (1)将含有已知错误的代码经过词法语法分析检测编配得到含有错误的属性不变量,将去除错误后的代码经过词法语法分析检测编配得到去除错误后的属性不变量;(2)将步骤(1)所述的含有错误的属性不变量和去除错误后的属性不变量分别经过槽的替换得到支持向量机输入的特征向量,其中槽包括变量类型槽、运算符类型槽、属性类型槽和程序变量槽,下同;(3)将步骤(2)所述的特征向量经过SVM模式识别与回归进行机器学习得到能够辨识潜在错误的模型;(4)将用户程序依次经过词法语法分析检测编配、槽后得到用户程序的属性特征向量,将用户程序的属性特征向量与步骤(3)所述的能够辨识潜在错误的模型匹配去除可揭错误属性,可揭错误属性就是那些真实不正确的代码而不是那些真实正确的代码;
[0016] 2.)第二阶段测试即白盒测试:将去除了可揭错误属性后的程序进行预处理即将宏进行展开,然后将去除了可揭错误属性后的程序进行白盒测试,去除测试过程中所出现的问题,白盒测试包括词法分析、语法分析、动态运行分析、覆盖率分析; [0017] 3.)第三阶段测试即精预测:将排除白盒测试出现的问题后的程序再应用第一阶段(4)步骤进行辨识,得到可能隐含更深的程序错误。
[0018] 本发明方法除能进行常规的嵌入式软件覆盖测试外,还能够对代码潜在错误进行预测,能够定位到具体错误代码的位置,其中使用的支持向量机学习算法来对属性进行训练学习,学习得到的模式用来预测用户代码。本发明由一组程序产生的预测模型能够完全应用到不同的程序,通用性强。
[0019] 附图说明
[0020] 图1:本发明工作流程图
[0021] 图2:本发明体系结构图。
[0022] 具体实施方式
[0023] 1.工作流程
[0024] 下面结合附图1对本发明的工作流程进行详细说明。
[0025] SVM模式识别与回归采用支持向量机的LibSVM工具包,已经集成到我们开发的自动化软件测试工具中,用户可以很方便调用。
[0026] 如图1所示,改进的面向宿主的嵌入式软件白盒测试的工作流程,有如下软件测试步骤:
[0027] 1.1.第一阶段测试(粗预测)
[0028] 其中包括:(1)将含有已知错误的代码经过词法语法分析检测编配得到含有错误的属性不变量,将去除错误后的代码经过词法语法分析检测编配得到去除错误后的属性不变量;(2)将步骤(1)所述的含有错误的属性不变量和去除错误后的属性不变量分别经过槽的替换得到支持向量机输入的特征向量,其中槽包括变量类型槽、运算符类型槽、属性类型槽和程序变量槽,下同;(3)将步骤(2)所述的特征向量经过SVM模式识别与回归进行机器学习得到能够辨识潜在错误的模型;(4)将用户程序依次经过词法语法分析检测编配、槽后得到用户程序的属性特征向量,将用户程序属性与步骤(3)所述的能够辨识潜在错误的模型匹配去除可揭示性错误;
[0029] 1.2.第二阶段测试(传统白盒测试)
[0030] 将去除了可揭错误属性后的程序进行嵌入式软件白盒覆盖测试,去除测试过程中所出现的问题;
[0031] 1.3.第三阶段测试(精预测)
[0032] 将排除覆盖测试出现的问题后的程序再应用第一阶段(4)步骤进行辨识,得到可能隐含的错误。
[0033] 本发明提出一种较现有技术更易测试嵌入式软件中潜在错误的白盒测试方法,首先采用支持向量机对程序属性所产生的非函数依赖程序不变量进行学习并产生机器学习模型的方法,然后运用该模型对需预测的程序进行属性分类,并标示出程序可能存在的潜在错误。该方法的输入是一系列给定程序的属性,输出一些可能性大于给定可能性并指示错误的属性。程序属性通过对代码词法语法分析,得到程序结构信息进而提取出程序属性不变量。
[0034] 将原程序进行预处理,预处理过程将源代码中的存在的宏定义中的变量替换回原变量。然后将预处理之后的中间文件代码进行词法分析成单独的词的表示,语法分析是将词法分析的结果文件识别为单词符号流。通过语法分析出程序的结构后,在一些关键字段或函数处插入桩函数。然后通过嵌入式软件相对应的编译环境编译成含有插装函数的目标文件。将生成的插桩文件在Proteus仿真环境中动态运行,将产生的测试结果存放到记录文件或缓冲区中,此时可以动态生成覆盖率报告和GUI显示,并将测试的结果与测试用例库生成的测试用例期望值做比较,得出测试结果,并将测试结果保存与打 印。 [0035] 最后通过开始得到的预测模型对覆盖测试后的程序进行属性分类,并标示出程序可能存在的更深的潜在错误。
[0036] 在预测模型产生的训练阶段,使用支持向量机机器学习方法对具有错误的程序和另一个不具有该错误的版本的两种属性来训练产生一种模式,它产生一种可揭错误属性的支持向量机机器学习模型。可揭错误属性就是那些真实不正确的代码而不是那些真实正确的代码。在分类阶段,用户使用预先已经训练好的模型来辨识被测程序的属性,模型将会选择这些最有可能存在可以发现修改的错误,然后程序员根据分类结果去寻找那些可能存在的错误或以此查找来增加程序员对程序的信心。
[0037] 2.模功能描述
[0038] 下面结合附图2对本发明的模块功能进行详细说明。
[0039] 2.1粗预测
[0040] 在程序员完成一个程序之后,程序里存在着大量类似的错误。此时,可以通过粗预测对程序进行预测,这样可以减少在覆盖测试时的测试压力。具体预测步骤如体系结构图2。
[0041] 2.1.1属性不变量的提取
[0042] 不变量的定义:所谓不变量就是一些用于描述在程序运行时保持不变性质的逻辑断言,它经常出现在断言声明、形式化描述中。常见的不变量形式有程序的前置条件、后置条件、循环不变量和类不变量。
[0043] 程序中数据变量与变量之间存在的特定关系以及变量自身具有的某些性质的重要性是毋庸置疑的。这些重要性质主要可以表现为对数字变量关系的描述,也可以表现为非数字变量之间,序列变量、集合变量之间等关系描述。而这些关系主要可以分为大小关系,次序关系、不等关系、时序关系、范围关系等等。这些关系都属于简单非函数依赖不变量的范畴。
[0044] 下面列举比较重要而且也是非常常见且相对简单的非函数依赖程序不变量类型进行简单介绍。简单的非函数依赖程序不变量形式基本如下所示(其中x、y、z是变量,a、b、c是常量)。
[0045] 1.一个单一的数字变量的不变量
[0046] ①确定此数字变量的范围,例如
[0047] a.是否属于小集合:指出变量仅具有一个小数量的不同的值。例如x∈{a,b,c},其中a、b、c为常量。
[0048] b.范围界限:x≥a,x≤b和a≤x≤b,指出变量的最小值或最大值。 [0049] ②是否具有某种不等关系,例如
[0050] a.非常量:x不等于某个常量,指出变量从来都不是某个常量即x≠c(c为常量)。 [0051] b.非函数关系:x不满足于某个具体的函数表达式,指出x不满足某个具体的函数表达式即x≠f(y)。
[0052] 2.一个单一的非数字变量的不变量
[0053] ①确定此变量的范围,例如
[0054] 是否属于小集合:指出变量仅具有一个小数量的不同的值。例如x∈{a,b,c},其中a、b、c为常量。
[0055] ②是否具有某种不等关系,例如
[0056] a.非常量:x不等于某个常量,指出变量从来都不是某个常量即x≠c(c为常量)。 [0057] b.非函数关系:x不等于某个具体的函数表达式,指出x不满足某个具体的函数表达式即x≠f(y)。
[0058] 3.一个单一的序列变量的不变量
[0059] ①确定序列变量的范围,例如
[0060] 按字典顺序确定最小和最大的序列值(例如指出字符串或数组值的范围)。 [0061] ②确定此序列的增减性,例如
[0062] 指出序列的元素是不增的,不减的或相等的。
[0063] 4.两个序列变量的不变量
[0064] 确定序列间的某种关系用r(x,y)表示,其中x、y代表两个不同的序列。 [0065] r关系可以包含下面几种,例如:
[0066] a.子序列关系:x是y的子序列。
[0067] b.反向:x是y的反向。
[0068] c.不等关系:x<y,x≤y,x>y,x≥y,x=y,x≠y等
[0069] 上述的程序不变量的类型是非函数依赖程序不变量中比较典型、常见类型。当然用户也可以根据实际需要来检测符合用户指定的类型的程序不变量。
[0070] 2.1.2属性不变量转换为特征向量(机器学习的输入是特征向量) [0071] 支持向量机机器学习算法使用特征向量作为输入,需要将属性不变量转换为特征向量的形式。特征向量是一些关于布尔型(bool),整型(int),浮点型(float)等的值,它被认为在多维空间中的一个点。每维(dimension)叫做一槽(slot),这将在下面的详细介绍。
[0072] 举个例子,假如这有4槽指示一个等式,其中的3槽指示涉及变量的类型,还有另外1槽指示了变量的个数,其中相对应是和否用1和0来表示,变量个数用实际的个数值来表示。
[0073] 特征向量最好是能够捕获越多的属性特征越好。机器学习算法能够忽略了不相关的槽,因此有利于包含越多的槽越好。在本发明方法中,特征向量包含了44个槽。分别列举如下:
[0074] 1.变量类型槽
[0075] char(字符型),double(双精度),float(单精度),int(整形),long(长整形),short(短整形),void(空型),string(字符串型)共8个变 量类型。
[0076] 2.运算符类型槽
[0077] ==,≥,>,≤,<,≠,%(取模), ,∈共9个运算符类型。 [0078] 3.属性类型槽(cmp可以为==,≥,>,≤,<,≠)
[0079] (1)Stored:代表一系列数据进行排序
[0080] (2)Linear:代表变量之间成线性关系
[0081] (3)Constant:代表不变量之间有常量
[0082] (4)Min(x):代表不变量为最小值
[0083] (5)Max(x):代表不变量为最大值
[0084] (6)x≠0 or x≠null:代表变量不为零或空
[0085] (7)x==c:代表不变量恒为常量
[0086] (8)Array:代表不变量为数组
[0087] (9)x[0-n]cmp y[0-n]:代表变量为一对一的比较,并且长度一致 [0088] (10)x[]=-y[]:代表一个数组为另一个数组的逆序
[0089] (11)x[]cmp y:代表数组的每个量与一个变量比较大小
[0090] (12)x[i]cmp i:代表数组与自己的序号比大小
[0091] (13)x[]≠i:代表数组全都不等于自己的序号
[0092] (14)x[]cmp y[]:代表数组的所有值都比另一个大或小
[0093] (15)Subsequence:代表一个集合是另一个的连续一段子集
[0094] (16)x≤c:c为常量,x是标量。代表变量始终都小于一个常量 [0095] (17)Iff:代表不变量为当且仅当型
[0096] 4.程序变量槽
[0097] (1)NumVars:代表变量的个数
[0098] (2)VarinoIndex:代表变量含有索引值
[0099] (3)IsStaticConstant:代表是否为静态常量
[0100] (4)PrestateDerived:代表是否为派生变量
[0101] (5)DerivedDepth:代表派生的深度
[0102] (6)IsClosure:代表变量是否关闭
[0103] (7)IsParameter:代表是否是范围或参数
[0104] (8)IsReference:代表是否为引用
[0105] (9)IsIndex:代表是否为索引
[0106] (10)IsPinter:代表是否为指针
[0107] 训练阶段需要一个二元组其中P是包含至少一个错误的程序,P′去除了这些错误之后的程序版本。程序P′并不需要是完全正确无误的,只需去除相对应的错误,因为模型只是会去捕获那些在两个版本之间存在错误的信息。
[0108] 2.1.3基于支持向量机的机器学习
[0109] 支持向量机是从线性可分情况下的最佳超平面发展而来的。对于一组带 有类别n标记的训练样本集(xi,yi),xi∈R,yi∈{+1,-1},i=1,…,l,若超平面w·x+b=0能将样本正确分为两类,则最佳超平面应使两类样本到超平面最小距离之和最大。最佳超平面通过求解下面的优化问题得到
[0110]
[0111] 其中ξi为误差项,C为惩罚系数。
[0112] 利用Lagrange乘子法可以把上述求解最佳超平面的问题转化为对偶问题 [0113]
[0114] 其中ai是样本点xi的Lagrange乘子。这是一个典型的二次函数寻优问题,存在唯一解。可以证明解中只有一部分(通常是少部分)ai不为零,对应的样本就是支持向量。由此得到决策函数
[0115]
[0116] 对于线性不可分情形,先应用一个非线性映射φ:Rn→H将数据映射到一个高维的特征空间H,在特征空间中可以实现线性分类。通过定义函数k(xi,xj)=φ(xi)·φ(xj),式(2)的对偶规划变为
[0117]
[0118] 相应的决策函数变为
[0119]
[0120] 其中k(xi,xj)=φ(xi)·φ(xj)称为核函数,核函数的选取应使其为特征空间的一个内积。通常的核函数有:
[0121] (1)多项式核函数
[0122] k(xi,xj)=(xi·xj+1)d,d=1,2,…(6)
[0123] (2)Gauss径向基核函数
[0124] k(xi,xj)=exp(-γ||xi-xj||2) (7)
[0125] (3)Sigmoid核函数
[0126] k(xi,xj)=tanh(b(xi·xj)+c),b>0,c<0(8)
[0127] 本发明集成了LibSVM工具包,LibSVM是台湾大学林智仁(Lin Chih-Jen)副教授等开发设计的一个简单、易于使用和快速有效的SVM模式识别与回归的软件包,包含C-SVC,nu-SVC等多种支持向量机工具的实现,这个软件包可以通过互联网直接从相关的网站上获取。
[0128] 2.1.4基于支持向量机的机器预测
[0129] 在通过机器训练得到可揭错误属性模型之后,使用者就可以应用该模式分析同种语言编写的程序代码。首先,程序分析产生目标程序属性,然后,分类器分类预测出表示每个属性出错的可能性。尽管机器学习不能保证产生完美的模型,但是预测指示的标示属性比程序员随机选择的属性更有可能测试到程序的错误。
[0130] 使用者仅仅需要一个可揭错误属性来检测一个错误,因此用户要到指示存在错误的属性地方重新查看一遍,直到排除了该处程序错误。
[0131] 2.2白盒覆盖测试
[0132] 程序经过前面的潜在错误去除后,可进行该过程的测试,本过程主要在宿主机上对嵌入式软件进行覆盖测试,通过以下几个过程对嵌入式软件进行分析。 [0133] 2.2.1预处理
[0134] 由于源程序中存在宏定义、文件包含和条件编译等预处理命令,因此在进行词法分析前必须进行预处理,将宏进行展开,这样有利于变量的查找。
[0135] 2.2.2词法分析
[0136] 将预处理阶段产生的中间代码分解成单独的词的表示,形成初步的符号表,为语法分析做准备,表的结构主要有:标识符表、类型表、关键字表、常数表、运算符表和分界符表。
[0137] 2.2.3语法分析
[0138] 这一步主要是将输入字符串识别为单词符号流,这里主要是找出变量声明语句,并相应的分离出指针变量和数组变量。按照标准的C语法规则,对源程序作进一步分析,比如变量定义,赋值语句,函数等等。语法分析的结果是生成语法树,每一个语法规则对应一个相应的处理函数,并作为树的一个节点挂在语法树上,提供对外的接口。由语法树可以生成程序的控制流图和变量的定义使用链,同时定义一些相应的数据结构,逐渐添加和细化符号表的一些相关信息。
[0139] 2.2.4动态运行
[0140] 利用词法语法分析的结果对源代码进行插装,将生成的插桩文件动态运行后,将产生的测试结果存放到记录文件或缓冲区中。
[0141] 2.4.5覆盖率分析
[0142] 读取存放记录文件,分别对语句块数和执行分支数进行计算,根据覆盖率公式结合计算的结果得到测试语句覆盖、分支覆盖与程序的有效代码率并GUI显示,将测试的结果与测试用例库生成的测试用例期望值做比较,得出测试结果。
[0143] 2.3.精预测
[0144] 采用第一步得到的预测模型,再次对覆盖测试后的程序进行潜在错误预测,这样能得到存在更深的隐含错误,这样对测试更加全面,更能增加程序的可信性。 [0145] 3.优势与创新
[0146] 本发明对现有技术有以下的改进和创新:
[0147] (1)根据本发明的技术,我们已经开发了集成化面向宿主的嵌入式软件自动化测试工具;
[0148] (2)将经典白盒覆盖测试与运用机器学习的潜在错误预测相结合,使嵌入式软件测试技术较现在技术更为全面,但所花费的人力物力确未随之有较大的增加; [0149] (3)运用支持向量机对嵌入式软件潜在错误进行定位分析,在软件测试过程中可以反复使用,提高软件测试效率;
[0150] (4)通用性强,可以应用于常见的嵌入式软件,只需更换支持向量机训练时的训练样本;
[0151] (5)在预测阶段用来训练的不是具体的属性,而是学习一些特性槽,通过支持向量机学习之后可以完全应用于同语言的不同程序中。
高效检索全球专利

专利汇是专利免费检索,专利查询,专利分析-国家发明专利查询检索分析平台,是提供专利分析,专利查询,专利检索等数据服务功能的知识产权数据服务商。

我们的产品包含105个国家的1.26亿组数据,免费查、免费专利分析。

申请试用

分析报告

专利汇分析报告产品可以对行业情报数据进行梳理分析,涉及维度包括行业专利基本状况分析、地域分析、技术分析、发明人分析、申请人分析、专利权人分析、失效分析、核心专利分析、法律分析、研发重点分析、企业专利处境分析、技术处境分析、专利寿命分析、企业定位分析、引证分析等超过60个分析角度,系统通过AI智能系统对图表进行解读,只需1分钟,一键生成行业专利分析报告。

申请试用

QQ群二维码
意见反馈