软件故障定位的统计技术解析
在软件开发过程中,故障定位是一项关键且具有挑战性的任务。本文将深入探讨软件故障定位的相关技术,包括对非语句的处理、输入净化以及输出的重新解读等方面。
1. 处理非语句
理想情况下,程序的源代码可以静态且完全地划分为这些特征的等价类集合。例如,基本块可作为等价准则,任何基本块中的每个语句都能精确地分配到一个分区。这种分区过程也适用于将语句、边和谓词等作为特征的情况。现有工作提出了许多相似系数或派生系数,这些技术将程序抽象为一组特征,如节点、边、谓词、边序列、谓词中的条件序列和数据值等,并估计每个特征与观察到的故障或异常相关的可能性(如故障可疑性)。
1.1 谓词:流行趋势
一种流行的策略是将谓词作为程序实体,并使用执行计数和执行结果作为动态特征。通过估计失败运行和成功运行的概率差异,对程序实体进行排序。相关研究通过统计谓词在执行中为真和为假的次数,并以各种方式比较这些计数,来找出程序中与故障相关的谓词。
以下是一个示例代码片段,其中包含七个谓词(P1 - P7):
P1:
if (rdf <= 0 || cdf <= 0) {
info = –3.0;
goto ret3;
}
...
...
P2:
for (i = 0; i < r; ++i) {
double sum = 0.0;
P3:
for (j = 0; j < c; ++j) {
long k = x(i, j);
if (k < 0L) {
超级会员免费看
订阅专栏 解锁全文
2415

被折叠的 条评论
为什么被折叠?



