软件缺陷智能分析技术 - 技术地图
Posted Jtag特工
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了软件缺陷智能分析技术 - 技术地图相关的知识,希望对你有一定的参考价值。
软件缺陷智能分析技术(1) - 技术地图
随着业务越来越复杂,代码的规模和所需要的人手也在不停地增加,导致成本朝向规模不经济的方向发展。需求推动技术进步,应用各种技术去自动预测、理解、定位、修复bug的综述文章基本上过一两年就来一拨。
这其中的相关技术领域也是层出不穷。虽然没有解决的困难和问题不少,而且其中很多一直是老大难问题,但是我们还是要站在巨人肩上出发,并且希望我们的工作也能够为这座大厦添砖加瓦。
所以我们先看一张航海图。
软件缺陷技术地图
从航海图上看,我们有大致三条航路:
- 第一条是从bug本身出发,首先是预测bug,然后是理解bug,最后是尝试做bug自修复。
- 第二条是从程序出发,因为bug本质上是程序的问题。想要理解bug,程序本身的理解是绕不过去的方向。这里面有程序理解、程序分析、程序自修复和程序智能合成4个主要方向。
- 第三条是更加通用的方向,借助其它工具的力量,比如基于知识图谱技术来构造软件知识图谱。
有个全图之后我们再分别看一下各支路的细节。
缺陷预测
对于bug,第一步我们需要进行预测,是不是有bug,可能有多少bug,如果有bug的话有多严重,另外这些bug预计需要多少时间和人力可以解决?
在这一些,其实我们对于bug本身还没有深刻的理解,那是下一步缺陷理解部分要攻克的问题。我们主要会采用一些机器学习和统计学的方法来进行预测。
缺陷预测这一步别看相对于后面的工作要简单,其门道也是不少的。我们来看一下,如果要做一个实时预测软件缺陷所要做的事情:
可以看到,我们主要的方法是监控代码的变更,从中提取各种维度进统计分析和模型训练。
缺陷理解
在缺陷预测那一步,我们得到的结果可能好也可能不好,但是问题在于缺少可解释性。所以我们要通过测试用例、静态分析等各种方法,以及对于它们之间的相关关系进行分析,试图能够从缺陷的角度来理解问题的根源。
缺陷定位和缺陷修复
经过缺陷预测和缺陷理解,我们终于直接面对问题,也就是说要定位问题和修复问题。
缺陷定位也是一个不小的技术方向。一般传统上,我们使用打log,设置assert,打断点调试和profiling分析等技术。
高级技术包括程序频谱分析等借助测试覆盖率的技术、基于程序分析的技术和基于机器学习和数据挖掘的相关技术。
有些老的定位技术方向已经相对比较成熟了,但是新的可以借助新的机器学习的技术发展的方向还正方兴未艾。
我们举个例子,基于信息检索的定位技术。它既可以基于文本相似度方法,也可以使用深度神经网络和机器翻译技术来进行语义相似度的比较。
定位到了问题之后,我们就可以通过软件自动修复技术来查找或者生成补丁啦。
自动修复大致分为4类技术:基于启发式搜索、基于人工的模板、基于语义约束和基于统计分析。
上面是从缺陷角度入手来直接考虑的。引发缺陷的,主要是跟代码相关的,所以我们不但要理解缺陷,还得理解代码。
程序理解
程序理解跟缺陷定位差不多,也是静态分析、动态分析和使用机器学习三种手段。
程序分析
对于代码来说,程序分析是最核心的技术手段。
下面列出其中的主要方向,详细的我们后面慢慢说。有一些方向需要一些基础知识和学术训练。
程序自动修复
程序自动修复需要一些程序分析的知识,基于规约来进行分析。
如果有完全规约,也就是我们对问题有明确的理解和定义,那么就可以针对分类去进行修复。
没有完全规约的话,可以尝试使用契约作为规约,或者手工编写程序规约。
如果上面的也满足不了的话,只好基于测试集来进行程序修复了。
至此,以预测为起点,以理解为基础,以修复为核心,以智能合成为最终目标,我们的简单导航之旅就此先到这里。
程序智能合成
bug到了自动修复就为止了,也不能没事儿自己造新bug玩儿啊。不过程序可以更进一步,使用程序综合技术进行智能合成。
我们可以从样例中学习,也可以基于代码框架或者规则来合成,还可以借用自然语言处理技术进行合成。
参考文献
好消息是这个方向是最近几年的热门方向,所以有大量的中文综述文章。只有缺陷定位综述一篇需要看英文的。当然具体论文大部分还是英文的。
- 宫丽娜,姜淑娟,姜丽.软件缺陷预测技术研究进展.软件学报,2019,30(10):3090-3114. http://www.jos.org.cn/1000-9825/5790.htm
- 蔡亮,范元瑞,鄢萌,夏鑫.即时软件缺陷预测研究进展.软件学报,2019,30(5):1288−1307. http://www.jos.org.cn/1000-9825/5713.htm
- 李斌,贺也平,马恒太.程序自动修复:关键问题及技术.软件学报,2019,30(2):244−265. http://www.jos.org.cn/1000-9825/5657.htm
- 金芝,刘芳,李戈.程序理解:现状与未来.软件学报,2019,30(1):110-126. http://www.jos.org.cn/1000-9825/5643.htm
- 张健,张超,玄跻峰,熊英飞,王千祥,梁彬,李炼,窦文生,陈振邦,陈立前,蔡彦.程序分析研究进展.软件学报,2019, 30(1):80-109. http://www.jos.org.cn/1000-9825/5651.htm
- 李晓卓,贺也平,马恒太.缺陷理解研究:现状、问题与发展.软件学报,2020,31(1):20-46. http://www.jos.org.cn/1000-9825/5887.htm
- 顾斌, 于波, 董晓刚, 李晓锋, 钟睿明, 杨孟飞. 程序智能合成技术研究进展. 软件学报. http://www.jos.org.cn/1000-9825/6200.htm
- 李政亮,陈翔,蒋智威,顾庆.基于信息检索的软件缺陷定位方法综述.软件学报,2021,32(2):247−276. http://www.jos.org.cn/1000-9825/6130.htm
- 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]
以上是关于软件缺陷智能分析技术 - 技术地图的主要内容,如果未能解决你的问题,请参考以下文章