查看原文
其他

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

旭伦 淘系前端团队 2021-08-10

从航海图上看,我们有大致三条航路:

第一条是从bug本身出发,首先是预测bug,然后是理解bug,最后是尝试做bug自修复。第二条是从程序出发,因为bug本质上是程序的问题。想要理解bug,程序本身的理解是绕不过去的方向。这里面有程序理解、程序分析、程序自修复和程序智能合成4个主要方向。第三条是更加通用的方向,借助其它工具的力量,比如基于知识图谱技术来构造软件知识图谱。

有个全图之后我们再分别看一下各支路的细节。


缺陷预测

对于bug,第一步我们需要进行预测,是不是有bug,可能有多少bug,如果有bug的话有多严重,另外这些bug预计需要多少时间和人力可以解决?

在这一些,其实我们对于bug本身还没有深刻的理解,那是下一步缺陷理解部分要攻克的问题。我们主要会采用一些机器学习和统计学的方法来进行预测。缺陷预测这一步别看相对于后面的工作要简单,其门道也是不少的。我们来看一下,如果要做一个实时预测软件缺陷所要做的事情:


可以看到,我们主要的方法是监控代码的变更,从中提取各种维度进统计分析和模型训练。

缺陷理解

在缺陷预测那一步,我们得到的结果可能好也可能不好,但是问题在于缺少可解释性。所以我们要通过测试用例、静态分析等各种方法,以及对于它们之间的相关关系进行分析,试图能够从缺陷的角度来理解问题的根源。

缺陷定位和缺陷修复

经过缺陷预测和缺陷理解,我们终于直接面对问题,也就是说要定位问题和修复问题。

缺陷定位也是一个不小的技术方向。一般传统上,我们使用打log,设置assert,打断点调试和profiling分析等技术。

高级技术包括程序频谱分析等借助测试覆盖率的技术、基于程序分析的技术和基于机器学习和数据挖掘的相关技术。

有些老的定位技术方向已经相对比较成熟了,但是新的可以借助新的机器学习的技术发展的方向还正方兴未艾。

我们举个例子,基于信息检索的定位技术。它既可以基于文本相似度方法,也可以使用深度神经网络和机器翻译技术来进行语义相似度的比较。

定位到了问题之后,我们就可以通过软件自动修复技术来查找或者生成补丁啦。

自动修复大致分为4类技术:基于启发式搜索、基于人工的模板、基于语义约束和基于统计分析。上面是从缺陷角度入手来直接考虑的。引发缺陷的,主要是跟代码相关的,所以我们不但要理解缺陷,还得理解代码。

程序理解

程序理解跟缺陷定位差不多,也是静态分析、动态分析和使用机器学习三种手段。

程序分析

对于代码来说,程序分析是最核心的技术手段。

下面列出其中的主要方向,详细的我们后面慢慢说。有一些方向需要一些基础知识和学术训练。

程序自动修复

程序自动修复需要一些程序分析的知识,基于规约来进行分析。

如果有完全规约,也就是我们对问题有明确的理解和定义,那么就可以针对分类去进行修复。

没有完全规约的话,可以尝试使用契约作为规约,或者手工编写程序规约。

如果上面的也满足不了的话,只好基于测试集来进行程序修复了。

至此,以预测为起点,以理解为基础,以修复为核心,以智能合成为最终目标,我们的简单导航之旅就此先到这里。

程序智能合成

bug到了自动修复就为止了,也不能没事儿自己造新bug玩儿啊。不过程序可以更进一步,使用程序综合技术进行智能合成。

我们可以从样例中学习,也可以基于代码框架或者规则来合成,还可以借用自然语言处理技术进行合成。

参考文献

好消息是这个方向是最近几年的热门方向,所以有大量的中文综述文章。只有缺陷定位综述一篇需要看英文的。当然具体论文大部分还是英文的。

  1. 宫丽娜,姜淑娟,姜丽.软件缺陷预测技术研究进展.软件学报,2019,30(10):3090-3114. http://www.jos.org.cn/1000-9825/5790.htm
  2. 蔡亮,范元瑞,鄢萌,夏鑫.即时软件缺陷预测研究进展.软件学报,2019,30(5):1288−1307. http://www.jos.org.cn/1000-9825/5713.htm
  3. 李斌,贺也平,马恒太.程序自动修复:关键问题及技术.软件学报,2019,30(2):244−265. http://www.jos.org.cn/1000-9825/5657.htm
  4. 金芝,刘芳,李戈.程序理解:现状与未来.软件学报,2019,30(1):110-126. http://www.jos.org.cn/1000-9825/5643.htm
  5. 张健,张超,玄跻峰,熊英飞,王千祥,梁彬,李炼,窦文生,陈振邦,陈立前,蔡彦.程序分析研究进展.软件学报,2019, 30(1):80-109. http://www.jos.org.cn/1000-9825/5651.htm
  6. 李晓卓,贺也平,马恒太.缺陷理解研究:现状、问题与发展.软件学报,2020,31(1):20-46. http://www.jos.org.cn/1000-9825/5887.htm
  7. 顾斌, 于波, 董晓刚, 李晓锋, 钟睿明, 杨孟飞. 程序智能合成技术研究进展. 软件学报. http://www.jos.org.cn/1000-9825/6200.htm
  8. 李政亮,陈翔,蒋智威,顾庆.基于信息检索的软件缺陷定位方法综述.软件学报,2021,32(2):247−276. http://www.jos.org.cn/1000-9825/6130.htm
  9. Wong WE, Gao RZ, Li YH, Abreu R, Wotawa F. A survey on software fault localization. IEEE Transactions on Software Engineering, 2016, 42(8): 707-740. [doi: 10.1109/TSE.2016.2521368]


    您可能也对以下帖子感兴趣

    文章有问题?点此查看未经处理的缓存