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

文档序号:6481803阅读:207来源:国知局
专利名称:一种改进的面向宿主的嵌入式软件白盒测试方法
技术领域
发明涉及一种改进的面向宿主的嵌入式软件白盒测试方法,属于嵌入式 软件测试的技术领域。
背景技术
软件测试是保证软件系统正确性的一个重要手段,也是计算机软件工程 方法和技术的一个主要组成部分。虽然测试并不能证明软件系统的正确性, 但是,它通过运行选定的测试用例来发现软件中的错误,并通过纠正错误使 软件的质量达到令人以满意的程度。所以,在今后相当长的时间内测试仍是 保证软件质量的主要手段。
北京航空航天大学可靠性工程研究所提出了基于模糊神经网络的软件 可靠性早期预测方法,从理论和实践上对基于模糊神经网络的软件可靠性早 期预测模型进行了论证。而北京航空航天大学软件工程研究所在承担国防科
工委"九五"重点预研i果题"军用软件质量评测技术"期间,将理论研究与 实践工作结合起来,对于预测模型的建模方法、预测模型共性与个性的统一、 以及模型调整技术进行了较为深入的研究,取得了若干具有实用价值的研究 成果。如文献李虎.软件质量评测的定量分析技术研究[D].北京北京航空 航天大学博士i仑文.2001
合肥工业大学李嘉研究了基于支持向量机的软件可靠性早期预测,在提 出模型的基础上,设计了一个软件可靠性早期预测软件系统,该预测系统把 支持向量机引入软件可靠性早期预测领域,可以对软件存在的缺陷数进行预 测。但该系统不能对缺陷进行具体的定位,只能给软件开发人员一个预测的 缺陷数量。如文献李嘉.基于支持向量机的软件可靠性早期预测研究[D]. 合肥:合肥工业大学硕士学位i仑文.2005
这些已有的软件测试理i仑及测试方法中,一4殳仍然或多或少存在以下不

(1) 只能针对某单一的软件进行测试,例如51系列的嵌入式软件,或 者ARM嵌入式软件;
(2) 对软件可靠性评价只是一个整体的概念,预测软件缺陷的个数, 但不能具体指出缺陷存在的位置;
(3) 对隐含的代码错误测试效果不好,如果再次测试将花费大量的人力物力;
(4) 人为参与的步骤太多,使用起来很不方便;
(5) 得到的覆盖率指标比较单一,不能全面的反映软件的质量。

发明内容
本发明目的是针对现有技术存在的缺陷提供一种改进的面向宿主的嵌 入式库欠件白盒测试方法。
本发明是一种改进的面向宿主的嵌入式软件白盒测试方法,其特征在于 包括如下步骤
1. )第一阶段测试即粗预测,包括如下步骤
(1)将含有已知错误的代码经过词法语法分析检测编配得到含有错误 的属性不变量,将去除错误后的代码经过词法语法分析检测编配得到去除错 误后的属性不变量;(2)将步骤(l)所述的含有错误的属性不变量和去除错 误后的属性不变量分别经过槽的替换得到支持向量机输入的特征向量,其中 槽包括变量类型槽、运算符类型槽、属性类型槽和程序变量槽,下同;(3) 将步骤(2)所述的特征向量经过SVM模式识别与回归进行机器学习得到能够 辨识潜在错误的模型;(4)将用户程序依次经过词法语法分析检测编配、槽 后得到用户程序的属性特征向量,将用户程序属性与步骤(3)所述的能够辨 识潜在错误的模型匹配去除可揭示性错误;
2. )第二阶段测试即白盒测试将去除了可揭错误属性后的程序进行 嵌入式软件白盒覆盖测试,去除测试过程中所出现的问题,白盒测试包括词 法分析、语法分析、软件度量分析、覆盖率分析;
3. )第三阶段测试即精预测将排除覆盖测试出现的问题后的程序再 应用第一阶段(4)步骤进行辨识,得到可能隐含更深的程序错误。
本发明方法除能进行常规的嵌入式软件覆盖测试外,还能够对代码潜在 错误进行预测,能够定位到具体错误代码的位置,其中使用的支持向量机学 习算法来对属性进行训练学习,学习得到的模式用来预测用户代码。本发明 由一组程序产生的预测模型能够完全应用到不同的程序,通用性强。


图1:本发明工作流程图2:本发明体系结构图。
具体实施方式
1.工作流程
下面结合附图1对本发明的工作流程进行详细说明。
SVM模式识别与回归采用支持向量机的LibSVM工具包,已经集成到我们 开发的自动化软件测试工具中,用户可以很方便调用。
如图1所示,改进的面向宿主的嵌入式软件白盒测试的工作流程,有如 下软件测试步骤 1. 1.第一阶段测试(粗预测)
其中包括(1)将含有已知错误的代码经过词法语法分析检测编配得到 含有错误的属性不变量,将去除错误后的代码经过词法语法分析检测编配得 到去除错误后的属性不变量;(2 )将步骤(1)所述的含有错误的属性不变量 和去除错误后的属性不变量分别经过槽的替换得到支持向量机输入的特征 向量,其中槽包括变量类型槽、运算符类型槽、属性类型槽和程序变量槽, 下同;(3)将步骤(2)所述的特征向量经过SVM模式识别与回归进行机器学 习得到能够辨识潜在错误的模型;(4 )将用户程序依次经过词法语法分析4全 测编配、槽后得到用户程序的属性特征向量,将用户程序属性与步骤(3)所 述的能够辨识潜在错误的模型匹配去除可揭示性错误; 1.2.第二阶^:测试(传统白盒测试)
将去除了可揭错误属性后的程序进行嵌入式软件白盒覆盖测试,去除测 试过程中所出现的问题; 1. 3.第三阶段测试(精预测)
将排除覆盖测试出现的问题后的程序再应用第一阶段(4)步骤进行辨 识,得到可能隐含的错误。
本发明提出 一种较现有技术更易测试嵌入式软件中潜在错误的白盒测 试方法,首先采用支持向量机对程序属性所产生的非函数依赖程序不变量进 行学习并产生机器学习模型的方法,然后运用该模型对需预测的程序进行属 性分类,并标示出程序可能存在的潜在错误。该方法的输入是一系列给定程 序的属性,输出一些可能性大于给定可能性并指示错误的属性。程序属性通 过对代码词法语法分析,得到程序结构信息进而纟是取出程序属性不变量。
,原,序进行预处理,预处理过程将源代码中的贵f "宏定义中的变,
的表示,语法分析是将词法分析的结果文件识别为单词符号流。通过语法分 析出程序的结构后,在一些关键字段或函数处插入桩函数。然后通过嵌入式 软件相对应的编译环境编译成含有插装函数的目标文件。将生成的插桩文件 在Proteus仿真环境中动态运行,将产生的测试结果存放到记录文件或緩冲 区中,此时可以动态生成覆盖率报告和GUI显示,并将测试的结果与测试用 例库生成的测试用例期望值做比较,得出测试结果,并将测试结果保存与打
5印。
最后通过开始得到的预测模型对覆盖测试后的程序进行属性分类,并标 示出程序可能存在的更深的潜在错误。
在预测模型产生的训练阶段,使用支持向量机机器学习方法对具有错误 的程序和另一个不具有该错误的版本的两种属性来训练产生一种模式,它产 生一种可揭错误属性的支持向量机机器学习模型。可揭错误属性就是那些真 实不正确的代码而不是那些真实正确的代码。在分类阶段,用户使用预先已 经训练好的模型来辨识被测程序的属性,模型将会选择这些最有可能存在可 以发现修改的错误,然后程序员根据分类结果去寻找那些可能存在的错误或 以此查找来增加程序员对程序的信心。
2.模块功能描述
下面结合附图2对本发明的模块功能进行详细说明。 2. 1 4且预测
在程序员完成一个程序之后,程序里存在着大量类似的错误。此时,可 以通过^L预测对程序进行预测,这样可以减少在覆盖测试时的测试压力。具 体预测步骤如体系结构图2。 2. 1. l属性不变量的提取
不变量的定义所谓不变量就是一些用于描述在程序运行时保持不变性 质的逻辑断言,它经常出现在断言声明、形式化描述中。常见的不变量形式 有程序的前置条件、后置条件、循环不变量和类不变量。
程序中数据变量与变量之间存在的特定关系以及变量自身具有的某些 性质的重要性是毋庸置疑的。这些重要性质主要可以表现为对数字变量关系 的描述,也可以表现为非数字变量之间,序列变量、集合变量之间等关系描 述。而这些关系主要可以分为大小关系,次序关系、不等关系、时序关系、 范围关系等等。这些关系都属于简单非函凄t依赖不变量的范畴。
下面列举比较重要而且也是非常常见且相对简单的非函数依赖程序不变 量类型进行简单介绍。简单的非函数依赖程序不变量形式基本如下所示(其 中x、 y、 z是变量,a、 b、 c是常量)。
1. 一个单一的数字变量的不变量
① 确定此数字变量的范围,例如
a. 是否属于小集合指出变量仅具有一个小数量的不同的值。例如x G (a,b, c},其中a、 b、 c为常量。
b. 范围界限x》a,x《b和a《x《b,指出变量的最小值或最大值。
② 是否具有某种不等关系,例如
a. 非常量x不等于某个常量,指出变量从来都不是某个常量即x#c (c为常量)。
b. 非函数关系x不满足于某个具体的函数表达式,指出x不满足某个 具体的函数表达式即x * f (y)。2. —个单一的非数字变量的不变量
① 确定此变量的范围,例如
是否属于小集合指出变量仅具有一个小数量的不同的值。例如x6 {a,b,c},其中a、 b、 c为常量。
② 是否具有某种不等关系,例如
a. 非常量x不等于某个常量,指出变量从来都不是某个常量即x^c (c为常量)。
b. 非函数关系x不等于某个具体的函数表达式,指出x不满足某个具 体的函数表达式即x # f (y)。
3. —个单一的序列变量的不变量
① 确定序列变量的范围,例如
按字典顺序确定最小和最大的序列值(例如指出字符串或数组值的范围)。
② 确定此序列的增减性,例如 指出序列的元素是不增的,不减的或相等的。
4. 两个序列变量的不变量
确定序列间的某种关系用r(x,y)表示,其中x、 y代表两个不同的序列。 r关系可以包含下面几种,例如
a. 子序列关系x是y的子序列。
b. 反向x是y的反向。
c. 不等关系x<y, x《y, x>y, x > y, x=y, x "等
上述的程序不变量的类型是非函数依赖程序不变量中比较典型、常见类 型。当然用户也可以根据实际需要来检测符合用户指定的类型的程序不变
2. 1. 2属性不变量转换为特征向量(机器学习的输入是特征向量)
支持向量机机器学习算法使用特征向量作为输入,需要将属性不变量转
换为特征向量的形式。特征向量是一些关于布尔型(bool),整型(int),
浮点型(fl oa t)等的值,它被认为在多维空间中的 一个点。每维(d i men s i on )
叫做一槽(slot),这将在下面的详细介绍。
举个例子,假如这有4槽指示一个等式,其中的3槽指示涉及变量的类
型,还有另外l槽指示了变量的个数,其中相对应是和否用l和0来表示,
变量个数用实际的个数值来表示。
特征向量最好是能够捕获越多的属性特征越好。机器学习算法能够忽略
了不相关的槽,因此有利于包含越多的槽越好。在本发明方法中,特征向量
包含了44个槽。分别列举如下
1.变量类型槽
char(字符型),double (双精度),float (单精度),int (整形),long (长整形),short (短整形),void(空型),string (字符串型)共8个变量类型。
2. 运算符类型槽
==,>,>,<,<,#,% (取模),^, G共9个运算符类型。
3. 属性类型槽(cmp可以为-、 >, >,《,<,
(1) Stored:代表一系列数据进行排序
(2) Linear:代表变量之间成线性关系
(3) Constant:代表不变量之间有常量
(4) Min(x):代表不变量为最小值
(5) Max (x):代表不变量为最大值
(6) x#0 or x^null:代表变量不为零或空
(7) x == c:代表不变量恒为常量
(8) Array:代表不变量为凄t組
(9) x
一cmp y
:代表变量为一对一的比较,并且长度一致
(10) x[] = 一y[]:代表一个数组为另一个数组的逆序
(11) x[] cmp y:代表数组的每个量与一个变量比较大小
(12) x[i] cmp i:代表^t组与自己的序号比大小
(13) x[] * i:代表数组全都不等于自己的序号
(14) x[] cmp y[]:代表数组的所有值都比另 一个大或小
(15) Subsequence:代表一个集合是另 一个的连续一段子集
(16) x《c: c为常量,x是标量。代表变量始终都小于一个常量
(17) Iff:代表不变量为当且仅当型 4.程序变量槽
(1) NumVars: ^表变量的个凄t
(2) Varinolndex:代表变量含有索引值
(3) IsStaticConstant: K表是否为静态常量
(4) PrestateDerived: ^表是否为》泉生变量
(5) DerivedD印th:代表派生的深度
(6) IsClosure:代表变量是否关闭
(7) IsParameter:代表是否是范围或参数
(8) IsReference: ^表是否为引用
(9) Is Index:代表是否为索引
(10) IsPinter:代表是否为指针
训练阶段需要一个二元组〈P , P '〉其中P是包含至少一个错误的程 序,P '去除了这些错误之后的程序版本。程序P '并不需要是完全正确无误 的,只需去除相对应的错误,因为模型只是会去捕获那些在两个版本之间存 在错误的信息。
2.1. 3基于支持向量机的机器学习
支持向量机是从线性可分情况下的最佳超平面发展而来的。对于一组带
8有类别标记的训练样本集(X;, x), x,"", -1}, / = 1,...,/,若超
平面w.;c + Z^0能将样本正确分为两类,则最佳超平面应使两类样本到超平面 最小距离之和最大。最佳超平面通过求解下面的优化问题得到
S.t,
(1)
_y,[0.x,) + 62l,/ = l,---,/
其中《为误差项,C为惩罚系数。
利用Lagrange乘子法可以把上述求解最佳超平面的问题转化为对偶问
1 一
max Z a, — ^ Z O, ~)
s. t.
(2)
》'乂 =0, 0Sfl,^C,/ = 1,-",/

其中"'是样本点^的Lagrange乘子。这是一个典型的二次函数寻优问
题,存在唯一解。可以证明解中只有一部分(通常是少部分)"'不为零,对 应的样本就是支持向量。由此得到决策函数
对于线性不可分情形,先应用一个非线性映射^^ ^H将数据映射到一
个高维的特征空间H,在特征空间中可以实现线性分类。通过定义函数 ,x》=),式(2 )的对偶^见划变为
腿X "' _ 4 Z , *(a, )
s.t. =0,
0《a,《C,
/ = 1,..',/
相应的决策函数变为
(4)
/= 一乞A:(a , x) + 6
(5)
其中"x',x》—"》"x》称为核函数,核函数的选取应使其为特征空间的
一个内积。通常的核函数有
(1) 多项式核函数
A(x,.,Xy) = (x,..~+1) , of = 1,2,... (6)
(2) Gauss径向基核函凄tA:, ~ ) = exp (—y |x, _气.I ) ( 7 )
(3) Sigmoid核函数
A:(x,.,x》=tanh(6(x; .x》+ c),6 > O,c < 0 ( 8 )
本发明集成了 LibSVM工具包,LibSVM是台湾大学林智仁(LinChih-Jen) 副教授等开发设计的一个简单、易于使用和快速有效的SVM模式识别与回归 的软件包,包含C-SVC ,nu-SVC等多种支持向量机工具的实现,这个软件包 可以通过互耳关网直4妻/人相关的网站上获取。 2. 1. 4基于支持向量机的机器预测
在通过机器训练得到可揭错误属性模型之后,使用者就可以应用该模 式分析同种语言编写的程序代码。首先,程序分析产生目标程序属性,然后, 分类器分类预测出表示每个属性出错的可能性。尽管机器学习不能保证产生 完美的才莫型,但是预测指示的标示属性比程序员随机选择的属性更有可能测 试到程序的错误。
使用者仅仅需要一个可揭错误属性来冲企测一个错误,因此用户要到指示 存在错误的属性地方重新查看一遍,直到排除了该处程序错误。 2.2白盒覆盖测试
程序经过前面的潜在错误去除后,可进行该过程的测试,本过程主要在 宿主机上对嵌入式软件进行覆盖测试,通过以下几个过程对嵌入式软件进行 分析。
2. 2. 1预处理
由于源程序中存在宏定义、文件包含和条件编译等预处理命令,因此在 进行词法分析前必须进行预处理,将宏进行展开,这样有利于变量的查找。 2. 2. 2词法分析
将预处理阶段产生的中间代码分解成单独的词的表示,形成初步的符号 表,为语法分析做准备,表的结构主要有标识符表、类型表、关键字表、 常数表、运算符表和分界符表。 2. 2. 3语法分析
这一步主要是将输入字符串识别为单词符号流,这里主要是找出变量声 明语句,并相应的分离出指针变量和数组变量。按照标准的C语法规则,对 源程序作进一步分析,比如变量定义,赋值语句,函数等等。语法分析的结 果是生成语法树,每一个语法规则对应一个相应的处理函数,并作为树的一 个节点挂在语法树上,提供对外的接口。由语法树可以生成程序的控制流图 和变量的定义使用链,同时定义一些相应的数据结构,逐渐添加和细化符号 表的一些相关信息。 2. 2. 4动态运行
利用词法语法分析的结果对源代码进行插装,将生成的插桩文件动态运 行后,将产生的测试结果存放到记录文件或緩冲区中。2. 4. 5覆盖率分析
读取存放记录文件,分别对语句块数和执行分支数进行计算,根据覆盖 率公式结合计算的结果得到测试语句覆盖、分支覆盖与程序的有效代码率并 GUI显示,将测试的结果与测试用例库生成的测试用例期望值做比较,得出 测试结果。 2.3.精预测
采用第 一步得到的预测模型,再次对覆盖测试后的程序进行潜在错误预 测,这样能得到存在更深的隐含错误,这样对测试更加全面,更能增加程序 的可信性。
3. 优势与创新
本发明对现有技术有以下的改进和创新
(1 )根据本发明的技术,我们已经开发了集成化面向宿主的嵌入式软 件自动化测试工具;
(2 )将经典白盒覆盖测试与运用机器学习的潜在错误预测相结合,使 嵌入式软件测试技术较现在技术更为全面,但所花费的人力物力确未随之有 较大的增加;
(3) 运用支持向量机对嵌入式软件潜在错误进行定位分析,在软件测 试过程中可以反复使用,提高软件测试效率;
(4) 通用性强,可以应用于常见的嵌入式软件,只需更换支持向量机 训练时的训练样本;
(5) 在预测阶段用来训练的不是具体的属性,而是学习一些特性槽, 通过支持向量机学习之后可以完全应用于同语言的不同程序中。
ii
权利要求
1、一种改进的面向宿主的嵌入式软件白盒测试方法,其特征在于包括如下步骤1.)第一阶段测试即粗预测,包括如下步骤(1)将含有已知错误的代码经过词法语法分析检测编配得到含有错误的属性不变量,将去除错误后的代码经过词法语法分析检测编配得到去除错误后的属性不变量;(2)将步骤(1)所述的含有错误的属性不变量和去除错误后的属性不变量分别经过槽的替换得到支持向量机输入的特征向量,其中槽包括变量类型槽、运算符类型槽、属性类型槽和程序变量槽,下同;(3)将步骤(2)所述的特征向量经过SVM模式识别与回归进行机器学习得到能够辨识潜在错误的模型;(4)将用户程序依次经过词法语法分析检测编配、槽后得到用户程序的属性特征向量,将用户程序属性与步骤(3)所述的能够辨识潜在错误的模型匹配去除可揭示性错误;2.)第二阶段测试即白盒测试将去除了可揭错误属性后的程序进行嵌入式软件白盒覆盖测试,去除测试过程中所出现的问题,白盒测试包括词法分析、语法分析、软件度量分析、覆盖率分析;3.)第三阶段测试即精预测将排除覆盖测试出现的问题后的程序再应用第一阶段(4)步骤进行辨识,得到可能隐含更深的程序错误。
2、根据权力要求1所述的一种改进的面向宿主的嵌入式软件白盒测试 新技术,其特征在于所述槽的个数为44。
全文摘要
本发明公布了一种改进的面向宿主的嵌入式软件白盒测试方法,属于嵌入式软件测试的技术领域。本发明所述方法包括如下步骤1.第一阶段测试(粗预测),包括程序不变量的提取、基于支持向量机的机器学习与机器预测等,初步揭示隐含错误;2.第二阶段测试(传统白盒测试),将去除了可揭错误属性后的程序进行嵌入式软件白盒覆盖测试,去除测试过程中所出现的问题,白盒测试包括词法分析、语法分析、软件度量分析、覆盖率分析;3.第三阶段测试(精预测),将排除覆盖测试出现的问题后的程序再应用第一阶段中的机器预测步骤进行辨识,得到可能隐含更深的程序错误。本发明能够应用到不同的程序,通用性强。
文档编号G06F11/36GK101576850SQ200910033240
公开日2009年11月11日 申请日期2009年6月10日 优先权日2009年6月10日
发明者刘久富, 娄坚波, 琳 孙, 李金奎, 杨振兴, 伟 王 申请人:南京航空航天大学
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1