一种基于蜕变关系的整数溢出故障检测方法

文档序号:8258350阅读:183来源:国知局
一种基于蜕变关系的整数溢出故障检测方法
【技术领域】
[0001 ] 本发明涉及软件中整数溢出故障检测,尤其涉及一种基于蜕变关系的整数溢出故 障检测方法,属于软件测试领域。
【背景技术】
[0002] 整数溢出故障被认为是影响软件系统安全性的重要因素。为了检测这种故障的出 现,通常存在两种方法。第一种是静态测试,又称为静态审查,通过一些静态审查工具,对程 序源代码或者二进制代码按照设定的规则进行审查。这种方法最大的优点就是可以自动化 实施,避免人工的参与,也提高了方法的可行性。但是它最大的缺点就是误报率高,即会产 生大量的假故障。因为,通过静态审查工具得到的缺陷或者故障还需要进一步的人工确认, 所以大量的假故障会带来极大的人工确认劳动。
[0003] 第二种就是动态测试,即通过人工设计一些有针对性的测试用例,从而通过程序 运行结果判断其是否与预期一致。如果不一致,则存在相应的故障。这种方法的优点就是误 报少,即只要测试用例执行结果与预期不一致,则一定存在故障。同时,测试人员也可以针 对重点功能模块设计相应的测试用例,来实现对关键功能或者缺陷的重点测试。但是,实际 测试中,这种测试所依赖的预期测试结果通常并不容易得到。这也就是软件测试中的测试 判定难题。蜕变测试方法通过验证被测软件多次输出之间是否满足一定的关系,从而为构 造测试判定提供了一种方法。这种关系我们称之为蜕变关系。显然,整数溢出故障动态检 测过程中也存在着测试判定难题,即当通过测试用例执行程序时,即使发生整数溢出故障, 测试人员也无法确认其结果的正确与否,除非测试结果为程序崩溃等显性失效。
[0004] 由此可见,针对整数溢出,静态测试虽然有静态审查工具支持,简单易行,但是其 结果可靠性较低,误报率较高。相对而言,动态测试则可以极大地降低误报率。但是怎样设 计有效的测试用例,以及怎样判断测试用例执行结果是否正确都存在困难。这两种问题极 大地限制了动态测试在整数溢出故障检测中的应用领域。

【发明内容】

[0005] 为了克服现有软件测试技术中的有关整数溢出的故障检测和定位中存在的缺陷 和不足,本发明的提供了一种基于蜕变关系的整数溢出故障检测方法。该方法综合采用静 态测试和动态测试,首先基于静态测试方法初步确定可能发生整数溢出的检查点,然后基 于"定义-使用"模型来审查检查点是否存在危险整数,最后查找调用这些危险整数的操 作,并在这些操作前插入蜕变关系。这样当运行目标程序时,可以通过蜕变关系判定其输出 是否发生整数溢出故障。
[0006] 本发明的技术方案是提供一种基于蜕变关系的整数溢出故障检测方法,其设计要 点在于,包括以下步骤:
[0007] 步骤1采用静态测试工具对被测程序源代码进行静态检测,对被测程序源代码中 引用的可能会发生整数溢出的整数的程序源代码语句标识为整数溢出检查点;
[0008] 步骤2所述整数溢出检查点的整数若存在被"定义-使用"模型中的整数定义语 句和整数使用语句所引用,则将其标识为溢出整数,所述"定义-使用"模型包含造成整数 溢出故障的整数定义语句表和整数使用语句表的;被整数危险使用语句表中的整数危险使 用语句所引用的由于整数溢出造成被测程序安全故障的所述溢出整数标识为危险整数;
[0009] 步骤3在引用所述危险整数的语句被执行前采用蜕变测试方法检测所述危险整 数是否发生整数溢出故障;所述蜕变测试方法包括针对所述危险整数构造的用于检测危险 整数溢出故障的蜕变关系集,对危险整数构造的满足蜕变关系集中的蜕变关系的输入关系 r的测试用例,测试用例所对应的被测程序的输出若不满足蜕变关系的输出关系r f,则所述 危险整数在后续使用语句的引用中发生整数溢出故障。。
[0010] 在软件测试的应用中,本发明还有如下进一步优化的技术方案。
[0011] 进一步地,所述步骤2中的整数定义语句表包括:
[0012] 输入定义,通过包含输入终端输入或文件输入的外部输入改变内存储空间中整数 变量的存储单元的存储值;
[0013] 赋值定义,通过赋值操作改变内存储空间中整数变量的存储单元的存储值;
[0014] 其它定义,通过环境变量改变内存储空间中整数变量的存储单元的存储值;
[0015] 所述步骤2中的整数使用语句表包括:
[0016] 谓词使用,谓词判断语句中引用到整数变量;
[0017] 计算使用,计算语句中引用到整数变量;
[0018] 输出使用,被测程序输出为整数变量;
[0019] 定位使用,被测程序中的数组、指针索引引用整数变量定位数据在存储空间的位 置;
[0020] 迭代使用,被测程序的迭代次数或者循环次数的计数器引用整数变量。
[0021] 进一步地,所述步骤2中的整数危险使用语句表包括:
[0022] 输出使用,程序输出为整数变量的整数数值;
[0023] 定位使用,程序中的数组、指针索引、内存空间地址引用整数变量定位数据在存储 空间的位置;
[0024] 迭代使用:程序引用整数变量控制迭代次数或者循环次数。
[0025] 进一步地,所述步骤3中的蜕变关系集包括两个用于检测整数溢出故障的蜕变关 系 MR,和 MR。,
【主权项】
1. 一种基于蜕变关系的整数溢出故障检测方法,其特征在于,包括以下步骤: 步骤1采用静态测试工具对被测程序源代码进行静态检测,对被测程序源代码中引用 的可能会发生整数溢出的整数的程序源代码语句标识为整数溢出检查点; 步骤2所述整数溢出检查点的整数若存在被"定义-使用"模型中的整数定义语句或 整数使用语句所引用,则将其标识为溢出整数,所述"定义-使用"模型包含造成整数溢出 故障的整数定义语句表和整数使用语句表;被整数危险使用语句表中的整数危险使用语句 所引用的由于整数溢出造成被测程序安全故障的所述溢出整数标识为危险整数; 步骤3在引用所述危险整数的语句被执行前采用蜕变测试方法检测所述危险整数是 否发生整数溢出故障;所述蜕变测试方法包括针对所述危险整数构造的用于检测危险整数 溢出故障的蜕变关系集,对危险整数构造的满足蜕变关系集中的蜕变关系的输入关系1的 测试用例,测试用例所对应的被测程序的输出若不满足蜕变关系的输出关系rf,则所述危 险整数在后续使用语句的引用中发生整数溢出故障。
2. 根据权利要求1所述的一种基于蜕变关系的整数溢出故障检测方法,其特征在于, 所述步骤2中的整数定义语句表包括: 输入定义,通过包含输入终端输入或文件输入的外部输入改变内存储空间中整数变量 的存储单元的存储值; 赋值定义,通过赋值操作改变内存储空间中整数变量的存储单元的存储值; 其它定义,通过环境变量改变内存储空间中整数变量的存储单元的存储值; 所述步骤2中的整数使用语句表包括: 谓词使用,谓词判断语句中引用到整数变量; 计算使用,计算语句中引用到整数变量; 输出使用,被测程序输出为整数变量; 定位使用,被测程序中的数组、指针索引引用整数变量定位数据在存储空间的位置; 迭代使用,被测程序的迭代次数或者循环次数的计数器引用整数变量。
3. 根据权利要求1所述的一种基于蜕变关系的整数溢出故障检测方法,其特征在于, 所述步骤2中的整数危险使用语句表包括: 输出使用,程序输出为整数变量的整数数值; 定位使用,程序中的数组、指针索引、内存空间地址引用整数变量定位数据在存储空间 的位置; 迭代使用,程序引用整数变量控制迭代次数或者循环次数。
4. 根据权利要求1所述的一种基于蜕变关系的整数溢出故障检测方法,其特征在于, 所述步骤3中的蜕变关系集包括两个用于检测危险整数溢出故障的蜕变关系MRJPMR2,
其中^和x2表示被测程序的危险整数的满足蜕变关系MR的输入关系r的两个测试用 例,被测程序的输出若不满足蜕变关系MR的输出关系rf,则测试用例^和x2所对应的被测 程序的危险整数在被测程序的执行中会从内存储空间的存储单元中发生整数溢出,其被整 数危险使用语句表中的整数危险使用语句在后续的引用中会发生整数溢出故障。
【专利摘要】本发明公开了一种基于蜕变关系的整数溢出故障检测方法,首先,采用静态测试工具对被测程序进行静态检测,初步确定其中可能会发生整数溢出的整数变量,并将其标识为整数溢出检查点;然后,基于包含造成整数溢出故障相关的整数定义语句表和整数使用语句表的“定义-使用”模型来确定上述整数溢出检查点的被整数定义语句和整数使用语句所引用的整数标识为溢出整数,溢出整数若存在整数危险使用语句表中表述的整数危险使用,则将其标识为危险整数;最后,在被测程序源代码引用所述危险整数的语句被执行前,采用蜕变测试法检测所述危险整数是否会发生整数溢出故障。通过发明的方法,为整数溢出故障的检测提供了精确、有效的方法。
【IPC分类】G06F11-36
【公开号】CN104572470
【申请号】CN201510039364
【发明人】惠战伟, 黄松, 李辉, 任正平, 胡斌, 余沛毅
【申请人】中国人民解放军理工大学
【公开日】2015年4月29日
【申请日】2015年1月26日
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1