软件缺陷智能分析技术 - 提升SZZ的准确率

Posted Jtag特工

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了软件缺陷智能分析技术 - 提升SZZ的准确率相关的知识,希望对你有一定的参考价值。

软件缺陷智能分析技术(3) - 提升SZZ的准确率

上一节我们介绍了在即时缺陷分析领域里有开创意义的SZZ算法。尽管用直觉都能感受到SZZ算法有诸多需要改进之处,但是目前这仍然是即时缺陷分析的基础方法。

这一节我们就讨论如何提升SZZ算法的准确率。

细看SZZ

首先我们复习一下SZZ算法的内容:

  • 第一步,从bug数据库中找到修复的问题
  • 第二步,从代码库中找到bug修复的代码改动
  • 第三步,针对每一行改动,找到之前的版本中修改这处代码的提交,这个提交在原论文中被称为fix-inducing

在开发过程中,有可能开发者不是一次性提交的。SZZ论文中考虑到了这种情况,针对同一个人使用同一commit message,在相近的时间的提交,将整合到一组中,这叫做滑动窗口技术。

通过提交信息,我们可以以较低的精度获取一部分bug fix提交的信息。如果要提升精度的话,我们需要从缺陷管理系统如JIRA, bugzilla等中获取更详细的信息。

SZZ的论文从语法和语义两方面来提升准确率。

首先从语法方面,针对提交信息去猜测与bug的关联。
具体来说,针对bug+数字,bug系统的链接以及纯数字,如:

  • bug[# \\t]*[0-9]+,
  • pr[# \\t]*[0-9]+,
  • show_bug.cgi?id=[0-9]+, or
  • [[0-9]+]

获取到了bug号之后,我们还要到bug系统中去验证。这就是语义部分。我们希望确认以下事情:

  • 此bug存在
  • 此bug的状态是fixed
  • 此bug分配给的人与代码的提交者是同一个人
  • bug中的信息跟代码中修改的文件相关

当我们确认了修改和bug之间的关系后,我们就可以针对改动的每一行进行git blame去查找对应的改动了。

SZZ算法的改进

SZZ算法在实践中,还是发现了很多问题的。
比如SZZ第三步,针对每一行代码去查最近一次改动的提交。听起来很有道理,但是到真的代码中去查看,就发现,这里面有空行,有注释,也有格式上的改动。按照原始版本的SZZ算法,这些噪声都没有消除,所以就会带来大量的误报。

解决方案也很简单,把空行、注释这些都过滤掉就好了。
唯一有点技术含量的是识别格式整理这样的操作,这个需要一个叫Annotation Graph的工具,由SZZ中的两个Z参与,论文为《Mining version archives for co-changed lines》。
下面是Annotation Graph的示意图:

如果更进一步,不只是格式整理,而是代码重构呢?这时需要识别代码重构的工具,比如针对Java的RefDiff,或者是针对多种语言的RefDiff 2。
支持重构之后的SZZ,叫做refactoring aware SZZ,简称RA-SZZ.
下面是RA-SZZ的示意图:

RefDiff的原理是采用了AST进行对比的方式:

随着ci/cd的不断流行,现在的软件库的版本也越来越多,这就产生了大量的元数据的变化导致的噪声。这些大部分都是配置管理操作,比如创建分支、合并分支等。于是Da Costa等人提出了Meta-change aware SZZ。

下面的图很好地总结了上面讲的主要流程:

Step 2的bug report和bug fix链接对的质量是影响SZZ算法的最重要的一步。

参考文献

  1. Zimmermann T, Kim S, Zeller A, Jr. Whitehead EJ. Mining version archives for co-changed lines. In: Proc.of the 3rd Working
    Conf. of Mining Software Repositories. New York: ACM Press, 2006. 72−75.
  2. Kim SH, Zimmermann T, Pan K, Jr. Whitehead EJ. Automatic identification of bug-introducing changes. In: Proc. of the 21st Int’l
    Conf. on Automated Software Engineering. Washington: IEEE, 2006. 81−90.
  3. Da Costa DA, McIntosh S, Shang W, Kulesza U, Coelho R, Hassan AE. A framework for evaluating the results of the SZZ
    approach for identifying bug-introducing changes. IEEE Trans. on Software Engineering, 2017,43(7):641−657.
  4. Neto EC, Da Costa DA, Kulesza U. The impact of refactoring changes on the SZZ algorithm: An empirical study. In: Proc. of the
    25th Int’l Conf. on Software Analysis, Evolution and Reengineering. Washington: IEEE, 2018. 380−390.
  5. D. Silva and M. T. Valente, “Refdiff: detecting refactorings in version
    histories,” in Proceedings of the 14th International Conference on
    Mining Software Repositories. IEEE Press, 2017, pp. 269–279.

以上是关于软件缺陷智能分析技术 - 提升SZZ的准确率的主要内容,如果未能解决你的问题,请参考以下文章

软件缺陷智能分析技术 - 技术地图

美国防部Maven项目 人工智能算法分析无人机视频

商业智能BI

软件测试结果分析和质量报告

OCR+NLP 提取信息并分析,这个开源项目火了!

OCR+NLP 提取信息并分析,这个开源项目火了!