Page 151 - 《软件学报》2021年第5期
P. 151
顾斌 等:程序智能合成技术研究进展 1375
Fig.1 Four stages of sofeware development
图 1 软件研制的 4 个阶段
[8]
从软件工程方法学的角度看,其处理对象是千姿百态的客观世界,因而其行为必然是大量知识密集型的 .
目前,各行各业积累了大量可复用的软件资产供人类学习及应用.人工智能技术善于解决知识的表示与使用问
题,而这正是知识密集型的软件工程活动需要依靠的技术.人工智能技术能够对知识进行智能化表示和管理,提
取软件系统中适应于变化的部分,并将其封装在规则集中,实现整个规则库与推理机完全分离.这样,从最基本
的非启发式规则入手,简化将要引入启发式规则和启发式推理机系统的建立过程.因此,人工智能的理论与技术
非常适用于软件智能开发,并有望取得突破.
程序合成方法与程序员根据需求规约和设计规约手工编写程序不同,它关注让计算机理解用户需要什么,
进而自动编程,从而在一定程度上取代程序员的工作,使程序员的主要工作重点不再是重复性的编码,而是设计
[9]
模型结构和编写需求规约.程序合成由 Alonzo Church 于 1957 年提出 ,长期以来一直是计算机科学的核心问题
和挑战之一,并被认为是计算机科学的圣杯,其挑战主要体现在“需求规约的描述”、“程序搜索空间的刻画”、“搜
索技术的设计” [2,7] 这 3 个方面.由于描述完整需求规约难度过大,传统程序合成方法发展缓慢,而人工智能技术
为程序合成技术的发展带来新的思路,各种需求规约描述方式不断涌现.近年来,程序智能合成技术得到了快速
发展.总体而言,现有的程序智能合成技术由 3 部分组成(如图 2 所示):需求规约的描述、合成模型、软件资产库.
• 软件资产库是实现程序合成的支撑,对源代码进行挖掘处理后,构建软件资产库.
• 合成模型为程序合成的核心,利用人工智能技术学习代码资源中隐含的特征和知识.
• 需求规约的描述为程序合成的基础和前提,描述能用于程序合成的需求规约的挑战主要有两方面:一
方面为如何权衡需求规约的完备性与复杂性,另一方面为如何处理自然语言具的二义性.需求规约包
[2]
括输入输出示例 [10−12] 、代码框架 [13] 、部分代码 [14−16] 、自然语言 [17−20] 、逻辑规约 等.程序智能合成
技术目前主要有 3 种需求规约描述方法,将在第 3 节详细阐述.
Fig.2 Software development framework based on intelligent program synthesis model
图 2 程序智能合成软件开发模型