软件缺陷智能分析技术(2) - SZZ的基本流程

2021-03-17  本文已影响0人  Jtag特工

软件缺陷智能分析技术(2) - SZZ的基本流程

有了航海图之后,我们就从即时软件缺陷预测开始入手,先用最小的时间去预测下bug发生的可能性。
我们先复习下即时软件缺陷预测的地图:

即时软件缺陷预测

SZZ算法

要做算法,首先需要有数据。标注数据的方法最早来自SZZ方法,来自论文《When Do Changes Induce Fixes?》,作者是斯里维尔斯基(Jacek Sliwerski), 齐默尔曼(Thomas Zimmermann)和泽勒(Andreas Zeller),取他们三个人姓的首字母,简称SZZ算法。

SZZ的框架分为4个主要步骤:

这么空对空地说有点抽象,我们举个例子。

识别缺陷修的变更提交

我们在github上可以找到issue列表,比如,下面是react库的:


react-issues

这里面的issue太多,我们把是bug的过滤出来,在搜索框中加入条件“is:issue is:closed label:"Type: Bug" ”:


react-issues-bugs

于是我们看到的就都是bug的列表了。
但是bug中还有不少的解决方案是重复问题的,有需要进一步信息的,有需要研究的,有状态未确定的,这些我们都要排除掉。
我们来一个高级搜索:

is:issue is:closed label:"Type: Bug"  -label:"Resolution: Duplicate" -label:"Type: Needs Investigation" -label:"Status: Unconfirmed" -label:"Resolution: Needs More Information" 

这回搜出来的质量就高很多了:


react-issue-bugs-fixed

识别bug对应的修改

我们随便找一个fixed issue去看下。
比如这个:https://github.com/facebook/react/issues/20932

我们往下翻,在其中找到相关的代码提交:


react-fix1

其对应的pull request是:https://github.com/facebook/react/pull/20948

react-pr1

然后我们找到对应的commit: https://github.com/facebook/react/pull/20948/commits/5daa2cfe01b879e42756d87b7fd3bdb9f9244edd

react-commit1

我们记住这个文件名和行号:packages/react-reconciler/src/ReactFiber.new.js,
394行。我们运气还不错,遇上一个只有一行的。

根据修复代码去识别可能引入缺陷的代码

找到了这个提交还不够,我们还得去找到它的上一条提交。我们可以通过git log来查到这个提交:

git-log1.png

找到这个提交号:c7b4497988e81606f1c7686434f55a49342c9efc。

然后我们切换到这个版本:

git checkout c7b4497988e81606f1c7686434f55a49342c9efc

接着我们就查看这一行是上次哪个版本引入进来的:

git blame packages/react-reconciler/src/ReactFiber.new.js

查到的结果如下:


git-blame-1

发现是1665443603这个提交引入的,我们来找一下这个提交:

commit 16654436039dd8f16a63928e71081c7745872e8f
Author: Andrew Clark <git@andrewclark.io>
Date:   Fri Sep 4 16:34:07 2020 -0500

    Rename effect fields (#19755)
    
    - `effectTag` -> `flags`
    - `subtreeTag` -> `subtreeFlags`

从中我们可以看到,这个提交是19755,我们如果想在github上查看这个提交可以通过https://github.com/facebook/react/pull/19755来查看。

这样,我们的一个SZZ的整个通路流程就完成了。

参考文献

SZZ的原始论文,它是2005年就有的了,那时候还在用CVS。

  1. J. Sliwerski, T. Zimmermann, and A. Zeller, “When do changes
    induce fixes?” in ACM SIGSOFT Software Engineering Notes,
    vol. 30, no. 4, ACM. ACM, 2005, pp. 1–5. [Online]. Available:
    https://10.1145/1083142.108314
上一篇下一篇

猜你喜欢

热点阅读