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