赞
踩
CodeWisdom
智能化软件开发沙龙是复旦大学CodeWisdom团队参与组织的专注于代码大数据与智能化软件开发的学术和技术沙龙,面向相关领域的学术界研究者和工业界实践者,通过各种线上和线下交流活动促进学术研究与实践技术的发展。微访谈是智能化软件开发沙龙依托沙龙微信群开展的线上交流活动,其形式是围绕某一具体话题邀请嘉宾进行在线访谈并与微信群成员互动。
软件智能化开发·进展与挑战
智能化软件开发微访谈·第十九期
暨2022新年特辑
背
景
介
绍
随着开源和企业软件项目中代码、文档等相关数据和资源的积累,数据驱动软件智能化开发逐渐成为学术界和企业界关注的一个热点问题。深度学习技术被广泛应用于代码和文档等软件开发数据分析,实现API与代码推荐、代码补全、代码生成、缺陷修复等智能化支持。软件工程、程序设计语言、人工智能等相关领域中发表了大量的研究论文,许多企业已经开始探索相关技术的实践应用,同时还涌现了一批软件智能化开发方面的初创企业。
软件智能化开发承载着软件工程领域长久以来所追求的“软件自动化”的发展目标。如今2021已成过去,2022大幕开启,软件智能化开发在研究和实践方面取得了什么样的进展,未来将向何处发展,还存在哪些问题和挑战?
围绕这些问题,本次微访谈新年特辑邀请了来自学术界和工业界的知名专家进行访谈,盘点过去一年的进展,梳理接下来的研究和实践探索方向,共同描绘软件智能化开发的未来愿景。
主
持
人
彭鑫
复旦大学计算机科学技术学院教授
访
谈
嘉
宾
谢涛
北京大学计算机学院讲席教授
高可信软件技术教育部重点实验室(北京大学)副主任
王千祥
华为云PaaS技术创新LAB主任
中国计算机学会软件工程专委副主任
张洪宇
澳大利亚纽卡斯尔大学副教授
邢振昌
澳大利亚国立大学计算机学院副教授
李戈
北京大学计算机学院副教授
楼建光
微软研究院首席研究员
熊英飞
北京大学计算机学院副教授
甄焱鲲(花名:甄子)
阿里前端委员会智能化方向负责人
张玉明
阿里巴巴高级技术专家
访
谈
主
题
软件智能化开发:进展与挑战
01
近两年软件智能化开发(包括API与代码推荐、代码补全、代码生成、缺陷修复等各个方面)在研究和实践上取得了什么样的进展?特别是有哪些突破性的进展?
02
深度学习在软件智能化开发方面得到了广泛应用,那么通过不断改进代码表示、模型设计并增大训练数据量可以在多大程度上提升软件智能化开发的水平?近一年火热的包含巨量参数的大模型在这个方面潜力如何?深度学习技术在软件智能化开发方面是否存在“天花板”?
03
知识在软件智能化开发中扮演着什么样的角色?是否有可能利用知识来提升现有的软件智能化开发水平?
04
近两年流行的低代码/无代码开发大量采用了特定领域语言(DSL)以及基于模型的可视化编程的技术路线,那么低代码/无代码开发与软件智能化开发是什么样的关系?软件智能化开发技术在低代码/无代码开发中扮演着什么样的角色?
05
现有的软件智能化开发方法和技术在研究和实践中面临着哪些问题和挑战?展望未来,软件智能化开发在理论、方法和工程上还需要取得哪些突破?未来有哪些有价值的研究和实践探索方向?
访
谈
记
录
Question 1
近两年软件智能化开发(包括API与代码推荐、代码补全、代码生成、缺陷修复等各个方面)在研究和实践上取得了什么样的进展?特别是有哪些突破性的进展?
谢涛:
在问题所罗列的方向上,后面李戈老师在代码补全上可以深入介绍一下这两年在这个方向上的进展。在API与代码推荐和缺陷修复上,我觉得这两年是有着增量式的进展,说不上突破性进展。在API与代码推荐上,我觉得获得大进展的一个拦路虎是是否且如何能给到推荐引擎足够、充分的输入(显式的比如待实现的代码功能等、隐式的比如待实现代码周边的上下文等),二是是否且如何能让使用推荐引擎的开发者理解并“明智地”从推荐结果中选择出是开发者真正需要的API与代码。缺陷修复有着类似的拦路虎:一是是否且如何能获得足够强大的测试用例(既包括测试数据又包括测试预言,后者尤其是难点)来判定生成的修复是不是“靠谱”,二是(在不能完全信任测试用例的情况下)是否且如何能让开发者理解并“明智地”接受/拒绝生成的修复。
在所列的几个方面,突破性的进展可能来自于代码生成。虽然代码生成也同样面临类似上面提到的拦路虎,基于大代码深度学习的微软GitHub的Copilot(https://copilot.github.com/)可以算是一个很吸引学术界和产业界眼球的进展。其让人比较惊叹的效果展现了预训练大模型应用到自动代码的进展。当然,其离在广泛领域达到产业界实用的目标还挺远,这个方向倒是让人眼睛一亮,往下走会很有希望。
观点讨论
@彭鑫(复旦大学):嗯,看起来软件工程领域在应用深度学习技术方面取得了一些进展,但可能突破性的进展可能还很难说。谢涛老师指出了两个根本性的困难。
@彭鑫(复旦大学):@谢涛@北京大学 两个拦路虎应该分别对应:用户(程序员)所能提供的输入(问题规约)以及对输出的消化吸收
@熊英飞(北京大学):@谢涛@北京大学
>> 一是是否且如何能获得足够强大的测试用例(既包括测试数据又包括测试预言,后者尤其是难点)来判定生成的修复是不是“靠谱”,二是(在不能完全信任测试用例的情况下)是否且如何能让开发者理解并“明智地”接受/拒绝生成的修复。
一号问题是修复社区一直在做的,主要是用各种统计模型估计补丁的概率,返回靠谱概率最高的。二号问题我们今年有一篇ICSME的论文专门讨论如何辅助程序员接受/拒绝生成的修复。
张洪宇:
谢谢彭老师。我认为这两年软件智能化开发方面的研究取得了很大进展,我们看到一些较新的深度学习技术,如预训练模型,自监督学习,小样本学习,元学习,对比学习,强化学习,多模态,多任务学习等等,被应用在各种软件智能化开发任务中(如代码表示,代码推荐,注释生成,缺陷修复等),取得了不错的效果。不过这些工作大部分是渐进式的改进工作,目前看还没有明显的“突破性的”进展。
邢振昌:
我提一下自己比较关注的两方面进展(应该还算不上突破性)吧。
一个是知识图谱方法在智能软件开发中应用。这个方向我从五六年前开始探索,和彭老师,夏老师有很多合作,研发了一些软件工程领域知识图谱构建方法和一些软件领域应用,比如基于知识图谱的智能问答,API/code推荐,API误用检测等等。刚刚段老师也转了两个知识图谱技术专利数量截屏,看起来也做了很多这方向的工作。不过相比于研究了10几年的data-driven方法,知识图谱方法还比较初步,但对智能开发有独特的贡献,比如可解释性分析。
另一个点是围绕人机交互GUI的智能分析,尤其是研发了non-intrusive的,就是不依赖app instrumentation的GUI分析技术,来提取和理解GUI components,structures,and semantics,从而支持软件生命周期中GUI设计,实现,测试和使用。我们团队在这个方向也有些工作,一些tool prototype可以在http://uied.online/尝试。从我个人体验来说,相对于围绕代码的工作,GUI分析的工作,往往会被认为是HCI community的事,投稿SE经常被认为是out of scope。我个人觉得GUI分析应该受到更多重视,因为是影响软件服务end users的。
李戈:
我今儿准备的回答都比较简单:
==取得了什么样的进展?==
关键词:【明显】
在研究上,AI新技术使技术指标【明显】提升;
在实践上,科研成果的实用性【明显】强;
观点讨论
@彭鑫(复旦大学):@李戈·北京大学 李戈老师总体乐观
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。