基于轨迹的调试技术:从传统软件到 AI 模型开发

原文来自微信公众号“编程语言Lab”:基于轨迹的调试技术:从传统软件到 AI 模型开发
搜索关注“编程语言Lab”公众号(HW-PLLab)获取更多技术内容!
欢迎加入 编程语言社区 SIG-程序分析 参与交流讨论(加入方式:添加小助手微信 pl_lab_001,备注“加入SIG-程序分析”)。

作者 | 林云

整理 | Skylar

作者介绍

林云,新加坡国立大学计算机系研究助理教授 / (预)上海交通大学计算机系副教授。研究领域为代码调试、程序/网页测试、 AI 模型调试、缺陷库自动构建。

视频回顾

SIG-程序分析技术沙龙回顾|基于轨迹的调试技术:从传统软件到AI模型开发

# 代码调试背景介绍 #

很高兴受到 SIG 社区的邀请,来分享一下我们在传统软件和 AI 模型上的(半)自动化调试工作。

有社会调查发现在美国软件公司一半的投入都会用在跟缺陷定位相关的事情上,这意味着代码调试和错误定位往往要占据程序员一半及以上的工作时间和精力。
在这里插入图片描述

来源: Evans Data Cooperation, PayScale, CVP Surveys

在传统缺陷定位的研究工作中,很多研究人员把缺陷定位视为一个推荐问题,旨在推荐出哪一片代码或者哪一行代码更有可能出错。典型的工作包含(但不限于):

基于频谱的缺陷定位: SBFL — Spectrum-based Fault Localization
给定一组测试用例,有些用例通过有些用例失败。根据某一代码行是否更多地被通过(或失败)的测试用例所覆盖的基本想法,SBFL可以给出每一行代码的出错概率。

基于机器学习的缺陷预测: Defect Prediction
给定一个代码数据库,其中每一片代码都会被标注为包含或者不包含缺陷。该方法对代码提取特征(如历史上的修改次数,代码行数,代码特征,圈复杂度等等),然后用特征向量训练一个分类器来计算每一片代码的出错概率。

Delta调试: Delta-Debugging
给定一个错误版本和一个(过去的)正确版本, 以及一个测试用例在正确版本上通过但在错误版本上不通过, 该方法计算这两个版本之间的哪一个差异是导致错误版本出错的原因。

# 我们的基于轨迹的调试工作 #

然而,在程序员调试的时候,仅仅推荐出代码在一个位置上 的出错概率(比如70%)很多时候帮助有限。首先,程序员们很难在没有理解出错的成因情况下完成自己的任务。其次,实际情况下,关于如何界定缺陷位置以及如何修改缺陷,不少时候见仁见智。所以相比于告诉程序员哪里出错了,更重要的是告诉他为什么出错。我们认为一个好的调试器,会同时拥有定位解释两大功能。除了定位,好的调试器还应当来主动地帮助程序员在脑海中构建关于代码的知识

目前我们采取了轨迹驱动的做法,希望把代码调试的问题转化成一个在轨迹上查找第一个出错步骤的搜索问题。我们希望能产生这个搜索结果(推荐结果)以及搜索过程(解释)。

# 反馈驱动的调试方法

第一种通过 程序员跟程序的交互 收集程序员的调试行为来完成定位推荐。我们让程序员在轨迹上做反馈,希望用尽可能少的反馈,推荐出最早的错误步骤,这个推荐的过程具有引导性和解释性,在程序员定位到的那一刻,整个在轨迹上的交互过程能帮助理解和分析出错误的原因。

这是我们设计的工具截图,轨迹在左边以可视化的方式进行展开,程序员在右边可以给出反馈。工具根据反馈做出推荐并学习反馈提高推荐效率。每次推荐也辅之以推荐原因。

相关论文地址 1 2

  • http://linyun.info/publications/icse17.pdf
  • http://linyun.info/publications/ase18.pdf

在这里插入图片描述

Feedback as Specification 工作截
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值