Page 150 - 《软件学报》2021年第5期
P. 150
1374 Journal of Software 软件学报 Vol.32, No.5, May 2021
Key words: software engineering; program synthesis; software development
随着信息技术的不断发展,软件在国民经济的各个领域发挥的作用越来越重要.然而,面对不断变化的软件
需求,软件的功能日趋复杂,软件的规模日益增大,软件的开发和维护重要性日益明显.传统的软件开发模式已
经无法满足当下及未来软件的开发要求,亟需探索新的、革命性的软件开发方法.
近年来,人工智能技术得到快速发展,并已成功应用于多个领域,如语音识别、数据挖掘、图像识别、自然
语言处理等.受此启发,应用人工智能技术与软件工程技术相结合来探索新的软件开发方法开始逐步受到关注.
[1]
机器学习等人工智能技术可以学习存在于样本数据间的内在规律 ,实现像人类一样识别、分析和学习各种数
据.如何利用诸如机器学习等人工智能技术来学习并利用这些资产,从而提高软件开发的智能化程度,是目前软
件工程领域关心的热点问题.
[2]
程序合成是指根据用户意图自动地构造计算机程序 ,是程序自动生成的一种解决途径,最终目标是实现
计算机自主编程.与模型驱动通过模型转换构造程序不同,程序合成强调是从底层编程语言的可能程序中查找
满足用户意图的程序.传统的程序合成方法如演绎与归纳等是基于严格的形式规约,然而编写形式规约的难度
并不低于直接编写程序,并不能将编程人员从枯燥重复的开发活动中解放出来.程序智能合成指的是在传统的
程序合成技术基础上,采用机器学习等人工智能技术,利用已有的大量代码知识自动合成满足用户意图的程序.
本文综述了程序智能合成技术,结合人工智能技术和软件工程技术探索新的软件开发方法,并展望未来的
技术挑战和趋势.首先介绍了软件研制的发展阶段和当前状态;进而通过文献分析展示长期以来软件工程领域
对程序合成技术的研究布局;根据现有程序智能合成研究工作的分析和研究,阐述目前主流的技术方法;最后,
探讨程序智能合成技术面临的挑战和发展趋势.
1 软件研制发展阶段
[3]
1946 年,第一台电子数字计算机诞生,软件开始正式走进人类生活.软件的发展已逾 70 年 ,在这期间,人们
对于软件系统的需求急剧上升,科研人员从未停止对于软件开发方法的探索.研究主要可分为 4 大阶段:个性化
研制阶段、软件工程阶段、软件自动生成阶段、全智能生成阶段(如图 1 所示).
(1) 个性化研制阶段:在计算机发展的初期,软件功能相对简单,规模较小.直到 20 世纪 70 年代,软件基本
[4]
上采用“软件作坊” 的模式进行开发.这种开发模式耗费大量的人力,无法应对不断增加的软件需求
和软件数量,出现了“软件危机”出现.如何更快更好地开发软件,是解决软件危机所必须解决的难题.
[5]
(2) 软件工程阶段:为了解决软件危机,“软件工程”这一概念 于 1968 年在德国举行的北约会议上首次被
提出,人们考虑用工程的思想进行软件开发.软件开发开始分为需求分析、设计、编码和测试几个阶
段.用户提出需求之后,软件开发人员先进行软件需求分析,编写需求规约,然后经过概要、详细设计之
[6]
后进行编码和各种测试 .至此,软件开发走向“工程”和“协同”.这期间出现了软件复用、计算机辅助
软件工程、软件再工程等方法.
(3) 软件自动生成阶段:随着软件规模与复杂度不断提高,软件的开发效率和质量仍然难以满足经济社会
快速发展对软件开发的需求.实现从需求规约自动构造软件代码,对于提高软件生产率至为重要.经
过多年研究,出现了演绎综合、程序转换、归纳综合以及过程实现等诸多软件自动生成方法,但这些
[7]
方法发展较为缓慢.机器学习等人工智能技术加速了软件自动化的进程 ,学习并利用各行业已储备
的大量软件资产,实现智能化的软件开发,是软件自动生成的重要目标.
(4) 软件全智能生成阶段:人工智能等技术高度发达,能够实现从自然语言描述的任务需求直接生成代码
程序,计算机彻底取代程序员的工作,实现完全自主编程.
可以看出:当前,软件研制活动还处于第 2 阶段,正向第 3 阶段迈进.随着我国软件规模的不断发展和增大,
软件开发复杂度和质量要求的不断提高,传统软件方法很难适应当前及未来软件系统的开发要求,迫切需要探
索新型软件开发方法和模式来取代传统的软件开发方法.