发明名称 一种面向巧合一致性问题的统计学软件缺陷定位方法
摘要 一种面向巧合一致性问题的统计学软件缺陷定位方法,它包括五个步骤:(1)对含有缺陷的程序插桩;(2)加载程序的测试用例,运行插桩后的程序;(3)收集程序运行成功和运行失败时桩函数的输出信息;(4)对收集到的谓词动态执行信息进行分析,包括计算谓词成功与失败执行谱分布的交叠程度、计算谓词执行谱分布的标准化类间距离、计算谓词可疑程度以及对谓词排序这四小步;(5)根据第四步中得到的谓词排序表,对谓词依序进行查找,直到找到缺陷相关谓词为止。该方法能有效避免巧合一致性的影响,定位效率高,而且方法简单,容易实现。
申请公布号 CN102831065B 申请公布日期 2015.02.04
申请号 CN201210340190.2 申请日期 2012.09.13
申请人 北京航空航天大学 发明人 郑征;郝鹏;张震宇;蔡开元
分类号 G06F11/36(2006.01)I 主分类号 G06F11/36(2006.01)I
代理机构 北京慧泉知识产权代理有限公司 11232 代理人 王顺荣;唐爱华
主权项 一种面向巧合一致性问题的统计学软件缺陷定位方法,其特征在于:该方法具体步骤如下:步骤一:对含有缺陷的程序进行插桩;插桩是为了获得特定程序节点在程序运行时的动态信息,这里对程序中的分支语句、返回语句以及数量对语句进行插桩,插桩通过插入布尔表达式即谓词来得以实现,桩函数要求在程序运行时输出谓词的动态执行信息,这里谓词的动态执行信息是指谓词的评估偏差;评估偏差的定义是:一次程序运行中谓词被判断为“真”的概率,用表达式<img file="FDA0000611693080000011.GIF" wi="666" he="148" />来表示,其中,e<sub>T</sub>(p<sub>j</sub>,r<sub>i</sub>)和e<sub>F</sub>(p<sub>j</sub>,r<sub>i</sub>)分别表示程序第i次运行时谓词p<sub>j</sub>被判断为“真”和判断为“假”的次数;需要注意的是,若谓词在某次程序运行中没有被执行,则此时的评估偏差值设为0.5;为便于后文说明,使用p<sub>1</sub>,p<sub>2</sub>,…,p<sub>m</sub>表示程序中的m个插桩谓词;步骤二:加载程序的全部测试用例,运行插有桩函数的程序;通过对比原始版本即不含有任何缺陷的程序输出和缺陷版本即植入单个缺陷后的程序输出,区分使程序运行成功和运行失败的测试用例;其中,使用u表示程序运行成功的次数,v表示程序运行失败的次数;步骤三:收集每次程序运行时桩函数输出的谓词动态执行信息;在程序运行成功时,谓词p<sub>j</sub>共得到u个评估偏差,程序运行失败时,谓词p<sub>j</sub>共得到v个评估偏差,其中,j∈[1,m];步骤四:对收集到的所有谓词动态执行信息进行统计学分析,该步骤又分为四小步:(一)计算谓词p<sub>j</sub>成功与失败执行谱分布的交叠程度,用O<sub>j</sub>表示;对于谓词p<sub>j</sub>在程序运行成功和失败时评估偏差值所分别构成的执行谱集合,利用概率分布判据<maths num="0001" id="cmaths0001"><math><![CDATA[<mrow><msub><mi>O</mi><mi>j</mi></msub><mo>=</mo><mo>-</mo><mi>ln</mi><mo>[</mo><msub><mi>&Sigma;</mi><mrow><msub><mi>y</mi><mi>j</mi></msub><mo>&Element;</mo><msub><mi>Y</mi><mi>j</mi></msub></mrow></msub><msqrt><mi>P</mi><mrow><mo>(</mo><msub><mi>y</mi><mi>j</mi></msub><mo>|</mo><msub><mi>&omega;</mi><mi>F</mi></msub><mo>)</mo></mrow><mo>&times;</mo><mi>P</mi><mrow><mo>(</mo><msub><mi>y</mi><mi>j</mi></msub><mo>|</mo><msub><mi>&omega;</mi><mi>N</mi></msub><mo>)</mo></mrow></msqrt><mo>]</mo></mrow>]]></math><img file="FDA0000611693080000021.GIF" wi="1049" he="177" /></maths>来计算谓词p<sub>j</sub>成功与失败执行谱分布的交叠程度;其中,Y<sub>j</sub>表示谓词p<sub>j</sub>所有评估偏差值所构成的集合,y<sub>j</sub>表示该集合中的一个取值,ω<sub>N</sub>和ω<sub>F</sub>分别代表程序运行成功和运行失败;其中,j∈[1,m];(二)计算谓词p<sub>j</sub>执行谱分布的标准化类间距离,用A<sub>j</sub>表示;对于谓词p<sub>j</sub>在程序运行成功和失败时评估偏差值所分别构成的执行谱集合,首先,利用公式<img file="FDA0000611693080000022.GIF" wi="418" he="99" />来计算谓词p<sub>j</sub>成功与失败执行谱分布之间的距离,即类间距离;其中,<img file="FDA0000611693080000023.GIF" wi="611" he="117" />表示程序运行成功时谓词p<sub>j</sub>所有评估偏差值的均值;<img file="FDA0000611693080000024.GIF" wi="592" he="115" />表示程序运行失败时谓词p<sub>j</sub>所有评估偏差值的均值;然后,利用公式<maths num="0002" id="cmaths0002"><math><![CDATA[<mrow><msub><mi>D</mi><mi>j</mi></msub><mo>=</mo><mfrac><mrow><msqrt><mfrac><mrow><msubsup><mi>&Sigma;</mi><mrow><mi>i</mi><mo>=</mo><mn>1</mn></mrow><mi>v</mi></msubsup><mo>[</mo><msup><mrow><mo>(</mo><mi>x</mi><mrow><mo>(</mo><msub><mi>p</mi><mi>j</mi></msub><mo>,</mo><msub><mi>f</mi><mi>i</mi></msub><mo>)</mo></mrow><mo>-</mo><msubsup><mi>m</mi><mi>j</mi><mi>F</mi></msubsup><mo>)</mo></mrow><mn>2</mn></msup><mo>]</mo></mrow><mi>v</mi></mfrac></msqrt><mo>+</mo><msqrt><mfrac><mrow><msubsup><mi>&Sigma;</mi><mrow><mi>i</mi><mo>=</mo><mn>1</mn></mrow><mi>u</mi></msubsup><mo>[</mo><msup><mrow><mo>(</mo><mi>x</mi><mrow><mo>(</mo><msub><mi>p</mi><mi>j</mi></msub><mo>,</mo><msub><mi>n</mi><mi>i</mi></msub><mo>)</mo></mrow><mo>-</mo><msubsup><mi>m</mi><mi>j</mi><mi>N</mi></msubsup><mo>)</mo></mrow><mn>2</mn></msup><mo>]</mo></mrow><mi>u</mi></mfrac></msqrt></mrow><mn>2</mn></mfrac></mrow>]]></math><img file="FDA0000611693080000025.GIF" wi="1005" he="214" /></maths>来计算谓词p<sub>j</sub>成功与失败执行谱分布内部分散的程度,即类内距离;最后,利用公式<img file="FDA0000611693080000026.GIF" wi="190" he="134" />来求取谓词p<sub>j</sub>执行谱分布的标准化类间距离;需要注意的是,若D<sub>j</sub>=0,而B<sub>j</sub>≠0,则设置A<sub>j</sub>=+∞;若D<sub>j</sub>=B<sub>j</sub>=0,则设置A<sub>j</sub>=0;(三)计算谓词p<sub>j</sub>的缺陷关联度;借助上面两步中分别得到的结果,利用公式<img file="FDA0000611693080000027.GIF" wi="322" he="96" />来计算谓词p<sub>j</sub>的缺陷关联度;(四)对程序中的每个插桩谓词执行上述的(一)至(三)步,直至得到全部谓词的缺陷关联度;并按照缺陷关联度的从高到低,对所有谓词排序;需要注意的是,如果遇到谓词可疑度相同的情况,则按照谓词编号的由小到大排序;此外,对于上一步中可能出现的O<sub>j</sub>=A<sub>j</sub>=0的特殊情况,在排序操作中需要将该谓词排在所有谓词的后面,因为该谓词的成功与失败执行谱完全相同,表现为最不可疑;步骤五:根据得到的谓词排序表,对谓词依序进行查找,直到找到缺陷相关谓词为止。
地址 100191 北京市海淀区学院路37号