摘要:
如今,模型检测已经普遍应用于对软件属性的检测中。模型检测技术含有高度的自动化性,当设计的系统违背规约时,模型检测器会返回一个源码级别的错误路径即反例,反例中包含了对应于违背规约的错误解释信息。通过对反例中的解释信息进行分析,我们可以得到系统为什么违背系统属性的错误原因,而这些分析将会给系统修复过程提供了重要的依据。 鉴于模型检测的诸多优点,在故障定位技术中应用模型检测技术已经成为一个研究热点。然而,复杂系统的反例往往显得非常的冗余和复杂,甚至让人觉得难以理解,这就使得我们需要花费大量时间来检查反例进而找出引发系统错误的起因。现在的模型检测器已经可以产生所有的反例,所以我们更希望能够利用多反例来查找系统中故障的位置,而不是只采用一个反例的信息。本文提出了距离度量技术和Tarantula技术在错误解释和故障定位上的拓展。 在以往的方法中,寻找故障用的是单反例,对于反例的选择也是没有依据的随意之举,通常会导致这个反例在故障定位中并不是一个好的选择。已知单独的反例在调试中可能对找出错误没有帮助,那些仅仅采用一个单独反例会由于信息的不确定性,在不断地尝试不同的反例中浪费大量时间,而多反例会给出清楚的线索来进行故障定位。在本文方法中,根据反例和成功执行路径集合以及利用距离度量技术和Tarantula技术,可以找出一个反例和它的最优路径。这个反例就是一个最佳选择,能够很好地让我们在特定信息线索中找出含有故障的谓词,再通过与最优路径对比就可以找出引起故障产生的原因。在Tarantula技术中,会提供一个在代码中声明可能成为故障的怀疑度高低的排名,这类信息就是找到基准反例的根据。 通常,在代码太多时会难以找出故障的位置,因而我们提出了一个在部分可疑代码中,基于距离度量分析对比进行故障定位的方法。对整个路径中代码的部分压缩区域进行分析可以提高效率和精确性。距离度量提供了寻找最优成功执行路径的技术,它是对应于反例来选择的。我们将这两种技术融合在一起,从而加快了找错的能力,同时,这种融合也更利于精确度上的提高。当然,最后我们也提出了仍然需要改进和加强的地方。
展开