知名百科 >> 自动程序设计 >> 历史版本
编辑时间历史版本内容长度图片数目录数修改原因
2023-06-03 11:28 最新历史版本 4452 1 2 修正错误,新增图片
  返回词条

自动程序设计

自动程序设计指的是用自动化手段进行编程的技术和过程。后来扩展到用自动化手段进行软件开发的技术和过程。在后一种意义上,应该叫软件自动化。其目的是提高软件生产率和软件产品质量。

目录

定义概念

自动编程这个词有很多意思。从广义上讲,自动编程就是尽可能地使用计算机系统(尤其是自动编程系统)开发软件的过程。软件开发是指从问题的非正式描述到软件功能的正式规格说明的过程、设计规范,到可执行程序代码、调试,及至确认、交付和使用的全过程。

自动程序设计是从正式的软件功能规范到可执行程序代码的过程的自动化。按照纵向的理解,底层自动化是从软件设计规范到可执行程序代码这一过程的自动化,系统只扮演程序员的角色;中间自动化是软件功能的正式规范、设计规范表明,在可执行程序代码的过程实现自动化之前,系统不仅扮演程序员的角色,还扮演设计者的角色、系统分析师的角色;高级自动化是从非正式的问题描述到正式的软件功能规格说明、软件设计规范表明,在可执行程序代码的全过程自动化之前,系统不会只有程序员、软件设计人员、除了系统分析师的角色之外,还扮演一部分领域专家的角色。按照横向理解,在上述纵向理解层次上,根据人工干预的程度,可以区分出不同的自动化水平。

技术实现

从关键技术的角度来看,自动程序设计的实现可以概括为演绎综合、程序转换、实例推广和流程实现。

①演绎综合。其理论基础是数学定理的构造性证明可以等价于程序推导。用户将其输入提供给要生成的程序、输出数据必须满足的条件,该条件是用某种形式语言表示的(如谓词演算)陈述。对于所有这些满足条件的输入,要求定理证明程序证明存在一个满足输出条件的输出,从这个证明中提取出要生成的程序。这种方法的优点是有坚实的理论基础,但迄今为止只分析了少数小样本,难以用于大规模程序。

②程序转换。将一个规范或程序转换成另一个功能等同的规范或程序。从抽象层次的异同,可以区分出纵向转化和横向转化。前者是将抽象程度较高的规范或程序转化为与其功能相当的抽象程度较低的规范或程序;后者是同一抽象层次的规范或程序之间的功能等价转换。

③实例推广。用反映程序行为的例子构建一个程序。一般有两种方法。一种是输入/输出对法:通过给出一组输入/输出对,逐步衍生出适合一类问题的程序。另一种是部分程序轨迹法:通过给出实例的运行轨迹,逐步导出程序。这种方式的想法很吸引人,受到用户的好评,但是要总结出一定规模的节目还是相当困难的。

④过程实现。在对应的规范中对应的组件明确,对应的转换映射也明确的前提下,可以借助流程实现映射。目前一般都是设计非常高级的语言(如SETL),其中包含全称量词存在量词等,以便编写软件设计规范的组件。然而,SETL本身不是函数式规范语言,也不是函数式语言。这种方式实现效率高,难点在于从非算法构件到算法构件的转换。因此,迄今为止采用这种方法的系统一般自动化程度不高,难以实现从功能规范到可执行程序代码的自动转换。