自动程序设计

来自中文百科,文化平台
跳转至: 导航搜索

自动程序设计英语:Automatic Programming),采用自动化手段进行程序设计的技术和过程。后引申为采用自动化手段进行软件开发的技术和过程。在后一种意义上宜称为软件自动化。其目的是提高软件生产率和软件产品质量。

自动程序设计一词具有多种涵义。按广义的理解,自动程序设计是尽可能借助计算机系统(特别是自动程序设计系统)进行软件开发的过程。软件开发指的是,从问题的非形式描述,经形式的软件功能规格说明、设计规格说明,到可执行的程序代码、调试,及至确认、交付使用的全过程。按狭义的理解,自动程序设计是从形式的软件功能规格说明到可执行的程序代码这一过程的自动化。按纵向理解,低级自动化是从软件设计规格说明到可执行的程序代码这一过程的自动化,系统只起程序人员的作用;中级自动化是从形式的软件功能规格说明、设计规格说明,直到可执行的程序代码这一过程的自动化,系统除了起程序人员的作用外,还起设计人员、系统分析人员的作用;高级自动化是从非形式的问题描述,经形式的软件功能规格说明、软件设计规格说明,直到可执行的程序代码这一全过程的自动化,系统除了起程序人员、软件设计人员、系统分析人员的作用外,还起领域专家的部分作用。按横向理解,在上述各种纵向理解级别上,根据人工干预的程度,又可区分各种不同的自动化级别。

从关键技术来看,自动程序设计的实现途径可归结为演绎综合、程序转换、实例推广,以及过程实现等4种。①演绎综合。其理论基础是,数学定理的构造式证明可等价于程序推导。对要生成的程序,用户给出它的输入、输出数据必须满足的条件,条件以某种形式语言(如谓词演算)陈述。对于所有这些满足条件的输入,要求定理证明程序证明存在一个满足输出条件的输出,从该证明中析取出所欲生成的程序。这一途径的优点是理论基础坚实,但迄今只析取出一些较小的样例,较难用于较大规模的程序。②程序转换。将一规格说明或程序转换成另一功能等价的规格说明或程序。从抽象级别的异同来看,可区分纵向转换与横向转换。前者是由抽象级别较高的规格说明或程序转换成与之功能等价的抽象级别较低的规格说明或程序;后者是在相同抽象级别上的规格说明或程序间的功能等价转换。③实例推广。借助反映程序行为的实例来构作程序。一般有两种方法。一种是输入/输出对法:借助给出一组输入/输出对,逐步导出适用于一类问题的程序。另一种是部分程序轨迹法:通过所给实例的运行轨迹,逐步导出程序。这一途径的思想诱人,为用户称道,但欲归纳出一定规模的程序,难度颇大。④过程实现。在对应规格说明中的各个成分,其转换目标的相应成分明确,而且相应的转换映射也明确的前提下,该映射可借助过程实现。目前一般采取设计甚高级语言(如SETL),其中含有全称量词,存在量词等,以便于书写软件设计规格说明的成分。但是,SETL本身还不能算是功能规格说明语言,不能算是功能性语言。这一途径的实现效率较高,困难点在于从非算法性成分到算法性成分的转换。因此,迄今采用这一途径的系统一般自动化程度不高,很难实现从功能规格说明到可执行的程序代码的自动转换。

自动化的涵义并非固定不变的,而是逐渐深化的,在科学技术的不同发展阶段曾有不同的内容。最原始的程序设计,是通过硬连线装置直接用机器语言(只包含0,1两个符号)编制的;理想的情形是用户只需用自然语言提出对程序的目的要求,然后由自动程序设计系统自动生成能满足给定规范的程序。这种由低级阶段向最高级阶段演变的每一步,都是在某种意义上实现程序设计自动化。例如有了高级语言FORTRAN、PASCAL,人们就可以从面向机器的机器语言转而采用面向过程的语言,从而可摆脱许多与所用机器有关的细节,而将编程序的精力集中在解题算法上面。在这种情况下,编译程序将用户用高级语言编制的源程序变换为机器可以直接执行的目标程序。第一个公式翻译语言 FORTRAN的编译程序曾被称为自动程序设计系统,原因就在于此。传统的程序设计的每一执行细节,在程序运行时都已硬性规定,而人工智能程序设计则是具有较高的灵活性,其具体细节要在运行过程中,根据环境条件由程序自行决定。从这个意义讲,所有人工智能程序也可纳入自动程序设计范畴。从另一方面看,理解和推理是人工智能中的重要问题,如果理解和推理的对象就是程序本身,它便成为自动程序设计的研究目标。因此,也可将自动程序设计看成人工智能的一个重要分支。

从实用观点来看,自动程序设计系统的目的在于减轻人编制程序的负担。每个自动程序设计的基本特征,表现在说明方法、目标语言、问题领域和编制方法等四个方面有所不同。

参见