演讲嘉宾 | 彭 鑫
回顾整理 | 廖 涛
排版校对 | 李萍萍
嘉宾简介
彭鑫,复旦大学计算机科学技术学院副院长、软件学院副院长、教授、博士生导师,中国计算机学会软件工程专委会副主任,主要研究方向包括软件智能化开发与运维、泛在计算软件系统、智能网联汽车等。获得2016年NASAC青年软件创新奖,多次获得IEEE Transactions on Software Engineering年度最佳论文奖、ACM SIGSOFT杰出论文奖、IEEE TCSE杰出论文奖等论文奖项。
内容来源
第一届开放原子开源基金会OpenHarmony技术峰会——开发者工具分论坛
视频回顾
打开 哔哩哔哩APP 搜索 OpenHarmony-TSC 视频更清晰
正 文 内 容
软件开发是一个知识密集型活动,涉及API、算法、业务知识、样例代码以及可复用库等开发资源。然而,这些软件开发知识和资源缺乏统一的规范化描述,难以被方便地获取和复用。ChatGPT问世之前,学术界与工业界在智能辅助开发领域有哪些研究成果?ChatGPT爆火以后,我们又有哪些认识和思考呢?复旦大学计算机科学技术学院副院长、软件学院副院长,中国计算机学会软件工程专委会副主任彭鑫在第一届OpenHarmony技术峰会上分享了精彩观点。
智能辅助开发的一个典型场景是基于深度学习的代码智能化推荐。以代码大数据作为输入,通过深度大模型训练,再基于训练结果进行微调或提示,最终在端侧实现代码搜索、代码推荐、代码生成、注释生成、缺陷预测和修复等能力。在ChatGPT火出圈之前,主要的代码智能化推荐产品有Copilot和AlphaCode。其中,Copilot已经实现了整函数和整方法的代码推荐,AlphaCode在编程竞赛中能够达到人类能力的普遍水平。尽管ChatGPT的强大推荐和人机交互能力让我们对AI和大数据深度学习产生了很多联想,但目前大数据深度学习的思路仍存在一定的局限性。
Copilot
目前,大数据深度学习的主要思路是追求更多的数据、更大的模型、更强的算力、更好的代码表示方法、更多元的学习范式,以此获得更好的学习效果。而针对软件开发的本质性困难(如:需求与设计的开放性和创造性问题、领域的多样性和差异性问题等本质困难),以及开发人员的理解和决策问题(如:开发人员如何针对推荐内容进行选择、判断、理解和消化,如何开展长期维护)等方面,大数据深度学习可能并不是万能的。大数据深度学习思路探讨的根本问题,源于不同路线的选择:(1)AI领域的端到端思路:根据输入(功能描述)直接产生推荐结果(代码片段或线性的代码补全);(2)软件工程领域的人机协作思路:适应程序员的思考过程,从需求澄清到解决方案逐步精化,以交互的方式融入人的需求理解和经验判断。
软件开发最大的浪费是知识的浪费、重复思考的浪费。在实际的软件开发过程中,我们经常遇到如下场景:重复编写的代码、反复揣摩的设计意图、重复犯过的错误;它们(代码)曾经在脑海中浮现过、在交谈讨论和聊天记录中出现过,甚至曾经被记录过,但是无法在需要的时候出现;文档基本不可靠,要么过时要么从来没有存在过等。从长期来看,如何深层次、系统性地解决智能化软件开发问题呢?建立共建、共享,与代码持续协同演化的软件开发知识平台,能够大幅提升软件开发效率,保障代码质量,促进软件开发项目成员间的相互协作。例如,工业界“活文档”的实践上,实现了文档知识和项目始终保持同步、文档内容简短可理解以及文档知识集体所有等功能;在学术界,也提出了按需生成文档的思考,即基于各种结构化和非结构化软件制品,通过知识抽取按需生成高质量文档。
软件开发知识共享平台实践与思考
在ChatGPT问世之前,彭鑫教授所在团队基于知识思路的智能软件开发已经有相关尝试和产品:
(1)API/软件知识图谱构建:通过API文档中的API功能、特性、使用指南与约束等,并输入软件代码库的API样例、软件开发问答网站的API讨论等资源,结合通用知识图谱的概念关系进行语义标注,形成API知识图谱或软件开发知识图谱,开发端侧软件开发问答机器人等,以此辅助软件开发,提高开发效率;
API知识以及API知识图谱
(2)基于知识图谱的代码概念链接:通过将代码段中的关键内容建立概念链接,使开发者在软件开发过程中,能够便捷地了解到相关代码的背景知识;此外,基于概念链接,对搜索出的代码列表提供多方面解释,如概念解释、概念关联路径以及补充建议等,还能够帮助开发者理解和筛选所需的代码片段;
代码概念链接
(3)基于事理图谱的代码异常修复:通常代码异常可能由多种原因造成,基于开发者在开源社区上求助的代码异常案例,抽取其求助目的、环境、代码片段、异常症状以及报错栈等内容,基于预训练语言模型进行提示学习,构建事理图谱,进而实现通过交互式问答获取异常报错相关信息,给出推荐的异常解决方案。
事理知识图谱
在智能软件开发领域,ChatGPT具备代码解释、代码生成以及代码修复等能力,以人机对话的形式实现了多种智能化开发辅助功能,效果已经超过了现有手段。ChatGPT的强大能力背后,是否存在一些问题和可能的改进方向呢?彭鑫教授认为有以下几点:
通过提供相关真实项目代码、技术文档、人类问答等论据,增强推荐内容的可信性
结合一些专用模型或“小数据”方法改进,提高长尾及冷启动问题回答的准确性
将大模型与搜索引擎、知识图谱等传统信息和知识获取方法相结合,缓解知识更新问题
在大模型的基础上有机融入特定领域的软件知识和代码,从而支持特定领域软件开发问题
在大模型的基础上实现智能化的开发工具集成和反馈融合,让工具具有面向软件开发任务现场的“具身智能”
其中,特点领域/项目软件开发知识平台的开发是目前学术界和工业界的研究热点。如何协同机器智能、代码知识和专家知识呢?需要基于专家知识和代码规范管理,建立与代码双向追踪并同步演进的代码知识平台,探索以代码为核心、适应软件开发特点的知识众包模式。通过覆盖实现、设计、需求等不同层面的代码知识平台实现系统性开发知识复用。此外,在软件研发阶段,通过建立基于DevOps流水线的软件研发知识图谱,能够实现特性、缺陷、测试用例等开发制品与代码及其变更过程的全程追溯和基于知识的描述。
特定领域 / 项目软件开发知识平台
得益于软件代码及开发数据的大量积累和人工智能技术的发展,以及近期大模型和预训练模型方面取得的进展,使智能化软件工程研究与实践成为热点。但同时,智能化软件工程实践落地需要充分考虑软件工程实践以及特定领域的特点。未来,大模型将成为智能化软件开发的重要基础设施,改变现有的知识获取、抽取和利用方式;智能化辅助开发的主要问题变为如何在开发任务现场与大模型之间建立高效的双向交互管道;下一代IDE将成为融合软件开发项目和任务上下文及开发工具的智能化软件开发统一门户。期待与大家一起关注人工智能和软件工程领域相关进展,共同贡献国产化力量。
E N D
点击下方阅读原文获取演讲PPT。
关注我们,获取更多精彩。
审核编辑 黄宇
-
OpenHarmony
+关注
关注
25文章
3629浏览量
16031
发布评论请先 登录
相关推荐
评论