发明名称 基于谓词频率统计的软件故障定位方法
摘要 本发明公开了一种基于谓词频率统计的软件故障定位方法,用于解决现有软件故障定位方法定位精度低的技术问题。技术方案是采用化整为零的方法,将所求面积分成N块,对每一块求值,最后将所有的N个子块的面积求和,即求得要求的总区间[0,1.0]上的总面积,也就是反映谓词和错误相关性的度量值。在一定范围内,N的值越高,计算的就越精确。本发明在将故障定位粒度细化至谓词级别的基础上,采用了基于非参数模型的统计方法,不需要被统计量符合某种已知分布模型,排除由于被统计数据的随机性对算法稳定性带来的影响,可以提高定位精度。
申请公布号 CN104503908A 申请公布日期 2015.04.08
申请号 CN201410787115.X 申请日期 2014.12.17
申请人 西北工业大学 发明人 郑炜;李知隆;阴一溦;柏晗;吴潇雪
分类号 G06F11/36(2006.01)I;G06F17/30(2006.01)I 主分类号 G06F11/36(2006.01)I
代理机构 西北工业大学专利中心 61204 代理人 王鲜凯
主权项 一种基于谓词频率统计的软件故障定位方法,其特征在于包括以下步骤:对某程序一次运行中某一个谓词P多次赋值的记录采用真值率来描述;①在程序的一次运行中,假设谓词P被记录为真的次数为n<sub>t</sub>,被记录为假的次数为n<sub>f</sub>,那么称:<maths num="0001" id="cmaths0001"><math><![CDATA[<mrow><mi>&pi;</mi><mrow><mo>(</mo><mi>P</mi><mo>)</mo></mrow><mo>=</mo><mfrac><msub><mi>n</mi><mi>t</mi></msub><mrow><msub><mi>n</mi><mi>t</mi></msub><mo>+</mo><msub><mi>n</mi><mi>f</mi></msub></mrow></mfrac><mo>-</mo><mo>-</mo><mo>-</mo><mrow><mo>(</mo><mn>1</mn><mo>)</mo></mrow></mrow>]]></math><img file="FDA0000635842210000011.GIF" wi="1273" he="140" /></maths>为谓词P在这次执行中的真值频率;由极大似然法知,在样本足够多的情况下,P的真值频率无限接近P取值为真的概率,因此π(P)在一定程度上反映了谓词P在一次取值中为真的概率;②假设对于一个程序,所有的测试用例集合为T,T<sub>f</sub>表示失败的测试用例集合,T<sub>p</sub>表示成功的测试用例集合,那么f(X|θ<sub>p</sub>)和f(X|θ<sub>f</sub>)分别表示T<sub>f</sub>和T<sub>p</sub>的真值率的概率密度函数;设f(X|θ<sub>p</sub>)和f(X|θ<sub>f</sub>)分别表示谓词P在成功的运行集合与失败的运行集合中的真值率的概率密度函数;采用f(X|θ<sub>p</sub>)和f(X|θ<sub>f</sub>)两者相差的部分的面积:<maths num="0002" id="cmaths0002"><math><![CDATA[<mrow><mi>S</mi><mrow><mo>(</mo><mi>P</mi><mo>)</mo></mrow><mo>=</mo><msubsup><mo>&Integral;</mo><mn>0</mn><mn>1</mn></msubsup><mo>|</mo><mi>f</mi><mrow><mo>(</mo><mi>X</mi><mo>|</mo><msub><mi>&theta;</mi><mi>p</mi></msub><mo>)</mo></mrow><mo>-</mo><mi>f</mi><mrow><mo>(</mo><mi>X</mi><mo>|</mo><msub><mi>&theta;</mi><mi>f</mi></msub><mo>)</mo></mrow><mo>|</mo><msub><mi>d</mi><mrow><mi>&pi;</mi><mrow><mo>(</mo><mi>p</mi><mo>)</mo></mrow></mrow></msub><mo>-</mo><mo>-</mo><mo>-</mo><mrow><mo>(</mo><mn>2</mn><mo>)</mo></mrow></mrow>]]></math><img file="FDA0000635842210000012.GIF" wi="1573" he="110" /></maths>作为衡量二者差异的关键值;采取了化整为零、分段计算的方式代替直接求表达式的方式:假设在总共X次的程序执行中,谓词P得到了Y个真值率记录,有X&gt;=Y;谓词P的真值率π(P)的取值范围为闭区间[0,1.0],将该区间化整为零,分成N段单独处理:取N=10000,得到[0,0.0001),[0.0001,0.0002),[0.0002,0.0003),[0.0003,0.004).....[0.9999,1.0]这10000个子区间;假设对于每个子区间[a,b](0&lt;=a&lt;b&lt;=1)上,在成功运行和失败运行的样本中,π(P)落在该区间范围内的样本数分别为Z<sub>p</sub>和Z<sub>f</sub>,那么该区间的分布密度就分别等于公式(3):<maths num="0003" id="cmaths0003"><math><![CDATA[<mrow><msub><mi>F</mi><mi>p</mi></msub><mrow><mo>(</mo><mi>a</mi><mo>,</mo><mi>b</mi><mo>)</mo></mrow><mo>=</mo><mfrac><msub><mi>Z</mi><mi>p</mi></msub><mi>Y</mi></mfrac></mrow>]]></math><img file="FDA0000635842210000014.GIF" wi="282" he="133" /></maths>和<maths num="0004" id="cmaths0004"><math><![CDATA[<mrow><msub><mi>F</mi><mi>f</mi></msub><mrow><mo>(</mo><mi>a</mi><mo>,</mo><mi>b</mi><mo>)</mo></mrow><mo>=</mo><mfrac><msub><mi>Z</mi><mi>f</mi></msub><mi>Y</mi></mfrac><mo>-</mo><mo>-</mo><mo>-</mo><mrow><mo>(</mo><mn>3</mn><mo>)</mo></mrow></mrow>]]></math><img file="FDA0000635842210000013.GIF" wi="1123" he="135" /></maths>那么在该子区间上,两个函数的曲线围成的等效面积就等于公式(4):<maths num="0005" id="cmaths0005"><math><![CDATA[<mrow><mo>|</mo><mfrac><msub><mi>Z</mi><mi>f</mi></msub><mi>Y</mi></mfrac><mo>-</mo><mfrac><msub><mi>Z</mi><mi>p</mi></msub><mi>Y</mi></mfrac><mo>|</mo><mo>-</mo><mo>-</mo><mo>-</mo><mrow><mo>(</mo><mn>4</mn><mo>)</mo></mrow></mrow>]]></math><img file="FDA0000635842210000021.GIF" wi="1292" he="137" /></maths>那么对应的有,在区间[0,1]上,两个函数围成的总面积就等于公式(5):<maths num="0006" id="cmaths0006"><math><![CDATA[<mrow><munderover><mi>&Sigma;</mi><mrow><mi>i</mi><mo>=</mo><mn>1</mn></mrow><mn>10000</mn></munderover><mo>|</mo><mfrac><msub><mi>Z</mi><mi>fi</mi></msub><mi>Y</mi></mfrac><mo>-</mo><mfrac><msub><mi>Z</mi><mi>pi</mi></msub><mi>Y</mi></mfrac><mo>|</mo><mo>-</mo><mo>-</mo><mo>-</mo><mrow><mo>(</mo><mn>5</mn><mo>)</mo></mrow></mrow>]]></math><img file="FDA0000635842210000022.GIF" wi="1223" he="142" /></maths>当区间数目取值越大,每个子区间的长度就越小,误差就越小,当N接近正无穷时,误差为0,二者完全相等:<maths num="0007" id="cmaths0007"><math><![CDATA[<mrow><msubsup><mo>&Integral;</mo><mn>0</mn><mn>1</mn></msubsup><mo>|</mo><mi>f</mi><mrow><mo>(</mo><mi>X</mi><mo>|</mo><msub><mi>&theta;</mi><mi>p</mi></msub><mo>)</mo></mrow><mo>-</mo><mi>f</mi><mrow><mo>(</mo><mi>X</mi><mo>|</mo><msub><mi>&theta;</mi><mi>f</mi></msub><mo>)</mo></mrow><mo>|</mo><msub><mi>d</mi><mrow><mi>&pi;</mi><mrow><mo>(</mo><mi>p</mi><mo>)</mo></mrow></mrow></msub><mo>=</mo><munder><mi>lim</mi><mrow><mi>N</mi><mo>&RightArrow;</mo><mo>&infin;</mo></mrow></munder><mrow><mo>(</mo><munderover><mi>&Sigma;</mi><mrow><mi>i</mi><mo>=</mo><mn>1</mn></mrow><mi>N</mi></munderover><mo>|</mo><mfrac><msub><mi>Z</mi><mi>fi</mi></msub><msub><mi>Y</mi><mi>f</mi></msub></mfrac><mo>-</mo><mfrac><msub><mi>Z</mi><mi>pi</mi></msub><msub><mi>Y</mi><mi>p</mi></msub></mfrac><mo>|</mo><mo>)</mo></mrow><mo>-</mo><mo>-</mo><mo>-</mo><mrow><mo>(</mo><mn>6</mn><mo>)</mo></mrow></mrow>]]></math><img file="FDA0000635842210000023.GIF" wi="1681" he="154" /></maths>因此有<maths num="0008" id="cmaths0008"><math><![CDATA[<mrow><mi>S</mi><mrow><mo>(</mo><mi>P</mi><mo>)</mo></mrow><mo>=</mo><munder><mi>lim</mi><mrow><mi>N</mi><mo>&RightArrow;</mo><mo>&infin;</mo></mrow></munder><mrow><mo>(</mo><munderover><mi>&Sigma;</mi><mrow><mi>i</mi><mo>=</mo><mn>1</mn></mrow><mi>N</mi></munderover><mo>|</mo><mfrac><msub><mi>Z</mi><mi>fi</mi></msub><msub><mi>Y</mi><mi>f</mi></msub></mfrac><mo>-</mo><mfrac><msub><mi>Z</mi><mi>pi</mi></msub><msub><mi>Y</mi><mi>p</mi></msub></mfrac><mo>|</mo><mo>)</mo></mrow><mo>-</mo><mo>-</mo><mo>-</mo><mrow><mo>(</mo><mn>7</mn><mo>)</mo></mrow></mrow>]]></math><img file="FDA0000635842210000024.GIF" wi="1466" he="155" /></maths>公式(7)就是FDI算法最后的结果,其中S(P)表示谓词P的可疑度取值。
地址 710072 陕西省西安市友谊西路127号