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

随着业务越来越复杂,代码的规模和所需要的人手也在不停地增加,导致成本朝向规模不经济的方向发展。需求推动技术进步,应用各种技术去自动预测、理解、定位、修复bug的综述文章基本上过一两年就来一拨。
这其中的相关技术领域也是层出不穷。虽然没有解决的困难和问题不少,而且其中很多一直是老大难问题,但是我们还是要站在巨人肩上出发,并且希望我们的工作也能够为这座大厦添砖加瓦。
所以我们先看一张航海图。

软件缺陷技术地图

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

  • 第一条是从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]

软件缺陷智能分析技术(1) - 技术地图相关推荐

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

    软件缺陷智能分析技术(2) - SZZ的基本流程 有了航海图之后,我们就从即时软件缺陷预测开始入手,先用最小的时间去预测下bug发生的可能性. 我们先复习下即时软件缺陷预测的地图: SZZ算法 要做算 ...

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

    软件缺陷智能分析技术(3) - 提升SZZ的准确率 上一节我们介绍了在即时缺陷分析领域里有开创意义的SZZ算法.尽管用直觉都能感受到SZZ算法有诸多需要改进之处,但是目前这仍然是即时缺陷分析的基础方法 ...

  3. AI视频智能分析技术与应用(一)

    AI视频智能分析技术与应用(一) AI视频智能分析技术与应用(二) AI视频智能分析技术与应用(三) 一.什么是AI视频智能分析? 视频智能分析已渗透到生活生产中的方方面面.从生活中的刷脸支付.停车场 ...

  4. AI视频智能分析技术与应用(二)

    AI视频智能分析技术与应用(一) AI视频智能分析技术与应用(二) AI视频智能分析技术与应用(三) 二.AI视频智能分析有那些技术? 3.动作行为识别技术 动作行为识别是预测目标在当前时刻或一段时间 ...

  5. 文档图像智能分析与处理:CCIG技术论坛的思考与展望

    文档图像智能分析与处理:CCIG技术论坛的思考与展望 文档识别与理解的发展趋势 视觉-语言预训练模型在文档处理中的应用 篡改文本图像的生成与检测的研究进展 华为云OCR技术的进展与行业实践 智能文档处 ...

  6. 多模态大模型时代下的文档图像智能分析与处理

    多模态大模型时代下的文档图像智能分析与处理 0. 前言 1. 人工智能发展历程 1.1 传统机器学习 1.2 深度学习 1.3 多模态大模型时代 2. CCIG 文档图像智能分析与处理论坛 2.1 文 ...

  7. 智慧警务:如何利用视频智能分析技术助力城市警务可视化综合监管与指挥系统

    一.方案背景 随着移动互联网.大数据.云计算.物联网.AI人工智能等新兴技术的快速发展及广泛应用,城市管理及公安机关的警务管理逐渐转向智能化.数字化.网格化方向发展.对公安工作而言,科技创新具有战略性 ...

  8. 【解决方案】如何基于EasyCVR智能分析技术构建城市智慧警务可视化综合监管平台?

    一.方案背景 随着移动互联网.大数据.云计算.物联网.AI人工智能等新兴技术的快速发展及广泛应用,城市管理及公安机关的警务管理逐渐转向智能化.数字化.网格化方向发展.对公安工作而言,科技创新具有战略性 ...

  9. 基于AI+视频智能分析技术的SkeyeVSS建筑废弃物监管解决方案

    近年来,随着各地进行大规模基础设施改造.城镇综合整治等工程,建筑废弃物的数量已呈现激增态势.若随意堆放处理,既占用土地,又污染环境,还危害市民出行安全.如何科学.有效地对建筑废弃物进行监管,督促工地源 ...

最新文章

  1. 关于FATFS文件系统挂载多个磁盘
  2. 软件开发生命周期中的设计阶段_BIM咨询在设计阶段包含哪些内容?体现了哪些价值?...
  3. 天才大猩猩可可去世,享年 46 岁
  4. YouTube 多目标排序系统:如何推荐接下来收看的视频
  5. 为什么c语言一用windows.h就报错_C代码里面加一行网址依然可以运行,并不会报错,为何...
  6. android怎么连接sqlite数据库?
  7. 2021-09-30安装windows10+ubuntu双系统
  8. 操作系统进程调度算法
  9. oracle报1653解决办法,oracle 建立查询账号ORA 1653和ORA 01502错误处理方法
  10. ESP8266 NodeMCU驱动OLED屏(SSD1306,4PIN,IIC)
  11. nginx根据post请求体内容转发
  12. 什么是同城商超配送系统
  13. plt 固定X轴、Y轴的范围 ax设置横纵坐标的范围 ax.set_ylim(ymin = 0, ymax = 130)ax.set_xlim(xmin = -5, xmax = 5)
  14. Bentley 软件公司 Acceleration Fund 宣布成立 Bentley 下属公司 Virtuosity
  15. 企业员工顶级考核管理系统
  16. 基于深度学习的行为识别方法综述
  17. 集线器,路由器,交换机,网关设备之间的区别
  18. Android 彩信发送
  19. 解决图片不显示的问题
  20. 基于python调用摄像头进行人脸识别,支持多张人脸同时识别

热门文章

  1. 狂神RabbitMQ
  2. 谷歌出品开发必备开源图片压缩工具,终于知道图片压缩了啥
  3. 雷军主导小米管理层变革:创业派隐退 职业经理人上位
  4. 专业显卡深度学习_学习深度学习,如何选购显卡?
  5. 阿里云linux centos 7.4下安装mongodb 3.4
  6. 构建虚拟web主机(基于域名,IP,端口)
  7. 图像去模糊算法 deblur
  8. Linux下QT串口通过无线模块收发十六进制数据
  9. 2022年校招互联网大厂薪酬状况如何?“白菜”总包接近40W是真是假?
  10. Ignite集群搭建及整合SpringData实现增删改查