自動程序設計

採用自動化進行程序設計的技術

自動程序設計所屬現代詞,指的是採用自動化手段進行程序設計的技術和過程。

基本簡介


自動程序設計
automatic programming
採用自動化手段進行程序設計的技術和過程。后引申為採用自動化手段進行軟體開發的技術和過程。在後一種意義上宜稱為軟體自動化。其目的是提高軟體生產率和軟體產品質量
自動程序設計一詞具有多種涵義。按廣義的理解,自動程序設計是儘可能藉助計算機系統(特別是自動程序設計系統)進行軟體開發的過程。軟體開發指的是,從問題的非形式描述,經形式的軟體功能規格說明、設計規格說明,到可執行的程序代碼、調試,及至確認、交付使用的全過程。按狹義的理解,自動程序設計是從形式的軟體功能規格說明到可執行的程序代碼這一過程的自動化。按縱向理解,低級自動化是從軟體設計規格說明到可執行的程序代碼這一過程的自動化,系統只起程序人員的作用;中級自動化是從形式的軟體功能規格說明、設計規格說明,直到可執行的程序代碼這一過程的自動化,系統除了起程序人員的作用外,還起設計人員、系統分析人員的作用;高級自動化是從非形式的問題描述,經形式的軟體功能規格說明、軟體設計規格說明,直到可執行的程序代碼這一全過程的自動化,系統除了起程序人員、軟體設計人員、系統分析人員的作用外,還起領域專家的部分作用。按橫向理解,在上述各種縱向理解級別上,根據人工干預的程度,又可區分各種不同的自動化級別。
從關鍵技術來看,自動程序設計的實現途徑可歸結為演繹綜合、程序轉換、實例推廣,以及過程實現等4種。①演繹綜合。其理論基礎是,數學定理的構造式證明可等價於程序推導。對要生成的程序,用戶給出它的輸入、輸出數據必須滿足的條件,條件以某種形式語言(如謂詞演算)陳述。對於所有這些滿足條件的輸入,要求定理證明程序證明存在一個滿足輸出條件的輸出,從該證明中析取出所欲生成的程序。這一途徑的優點是理論基礎堅實,但迄今只析取出一些較小的樣例,較難用於較大規模的程序。②程序轉換。將一規格說明或程序轉換成另一功能等價的規格說明或程序。從抽象級別的異同來看,可區分縱向轉換與橫向轉換。前者是由抽象級別較高的規格說明或程序轉換成與之功能等價的抽象級別較低的規格說明或程序;後者是在相同抽象級別上的規格說明或程序間的功能等價轉換。③實例推廣。藉助反映程序行為的實例來構作程序。一般有兩種方法。一種是輸入/輸出對法:藉助給出一組輸入/輸出對,逐步導出適用於一類問題的程序。另一種是部分程序軌跡法:通過所給實例的運行軌跡,逐步導出程序。這一途徑的思想誘人,為用戶稱道,但欲歸納出一定規模的程序,難度頗大。④過程實現。在對應規格說明中的各個成分,其轉換目標的相應成分明確,而且相應的轉換映射也明確的前提下,該映射可藉助過程實現。目前一般採取設計甚高級語言(如SETL),其中含有全稱量詞,存在量詞等,以便於書寫軟體設計規格說明的成分。但是,SETL本身還不能算是功能規格說明語言,不能算是功能性語言。這一途徑的實現效率較高,困難點在於從非演演算法性成分到演演算法性成分的轉換。因此,迄今採用這一途徑的系統一般自動化程度不高,很難實現從功能規格說明到可執行的程序代碼的自動轉換。