Page 157 - 《软件学报》2021年第5期
P. 157

顾斌  等:程序智能合成技术研究进展                                                              1381


                 的逻辑形式,例如将自然语言“jobs  with a  salary of num”转化为逻辑形式“job(ANS),salary_greater_than(ANS,
                 num,year)”.并在 4 个数据集上验证了该方法的正确性.该方法实现了自然语言转到结构化的逻辑形式的转换.
                    Desai 等人在 2016 年发表了以自然语言描述作为需求规约的程序合成方法                      [54] ,该方法利用神经网络模型
                 学习自然语言与 DSL 之间的关系,训练好的神经网络模型可以将用户提供的自然语言描述转换为 DSL,再通过
                 DSL 进行后续程序合成.实验证明,该方法可得到较好的准确率.但该方法依然有许多问题需要继续研究,例如
                 DSL 的开发代价过大,且只能适用于相同的 DSL,扩展性较差.
                 4    趋势与展望

                    总体而言,目前程序智能合成技术还处于早期阶段.引入人工智能技术支持软件开发是具有可行性的,也是
                 近年的新趋势,可提高软件开发效率,减少维护成本,未来有可能颠覆现有的软件开发模式.但该技术的后续发
                 展仍存 3 点不足:一是当前的程序合成技术仅能实现生成规模小、功能单一的简单程序,且需要占用较大的系
                 统资源;二是大部分程序合成技术只针对特定任务,对于新的任务需要重新进行计算或者训练;三是由于很多合
                 成过程中使用了深度学习模型,对于合成得到的软件代码,只能通过黑盒测试的方法对软件功能、性能进行验
                 证,难以利用程序分析等方法验证其实现逻辑的正确性.
                    程序智能合成技术已经取得了一定的进展,综合已有的技术来看,该技术在未来有以下两方面发展趋势.
                    1)  多种需求描述方法相结合.
                    目前常用的需求规约描述方法有多种,如输入输出示例对                      [10−12] 、代码框架 [13] 、代码示例 [14−17] 、自然语
                                [5]
                 言 [18−20] 、逻辑规约 等.不同的任务特点决定了需求描述方法的选择,然而每种需求描述方法都有其局限性,直
                 接影响着程序合成过程.最初的逻辑规约虽然能够完备地描述用户需求,但是这种逻辑规约书写难度过大;自然
                 语言虽然简单易用,但由自然语言描述的需求规约存在二义性,很难合成高质量的软件代码.从上文的调研结果
                 看,很多研究者已经不满足于使用一种需求描述方法来表达需求规约,而是采用多种需求描述方法相结合的方
                 式完善用户意图信息.该方法能够更好地减轻用户负担,同时可以表达出更完善的需求规格,相信未来会有越来
                 越多的程序合成方法采用多种需求描述方法相结合来表达需求规格.
                    2)  深度学习技术应用越来越广泛.
                    本文归纳了多种程序智能合成技术方法,总体来看,这些方法在传统的程序合成方法基础上引入了人工智
                 能技术,而深度学习技术应用的最为广泛.目前已有多种深度学习模型应用到程序合成技术中,如循环神经网络
                 模型、递归神经网络模型、卷积神经网络模型等.这些应用中,有些使用一种深度学习模型,有些使用一种深度
                 学习模型的改进模型,也有些采用多种深度学习模型的组合模型.对深度学习模型的改良可以影响合成的速度
                 和效率,因此未来会有更多的科研工作者研究如何加强深度学习技术,以取得更好的合成效果.
                    综上所述,程序合成目前还存在很多亟待突破的技术难点,亟需开展进一步的研究工作,可重点从以下 3 个
                 方面取得突破.
                    1)   建立需求规约描述语言,准确地识别用户意图.虽然人工智能技术可以辅助开发人员识别、提取用户
                        需求的关键特征,辅助开发人员提升编程效率,但目前开发人员需要花费大量精力描述需求规约;且
                        不同项目对相同或相似任务的描述各不相同,描述方式不具有普适性.因此,有必要探索一种结合多
                        种表达形式且具有丰富描述能力的需求规约描述语言,在不同的抽象层次和维度上实现对软件系统
                        的功能与性能、行为与结构、部分与系统的统一表示,攻克软件意图的表达与理解难题,为生成复杂
                        程序奠定基础.
                    2)   充分利用已有领域资产中的软件知识.利用人工智能方法可以通过数据驱动的方式挖掘程序代码的
                        部分特征,并在代码智能搜索、补全等领域取得了一定的效果.但是已有的方法无法综合利用不同类
                        型的软件资产进行程序合成,已有资产中,可用于程序合成的关键特征有待进一步挖掘.
                    3)   突破合成软件的可信验证技术.虽然目前可通过黑盒测试的方法对软件验证,但是仍缺少合成过程及
                        合成产品的可信性分析与验证方法.因此,需要探索合成代码与需求规约的一致性评估方法,建立合
   152   153   154   155   156   157   158   159   160   161   162