基本介紹
- 中文名:自動程式設計
- 外文名:automatic programming
- 性質:程式設計
- 目的:達到自動生產
定義,關鍵技術,重大貢獻,
定義
自動程式設計一詞具有多種涵義。
廣義含義
按廣義的理解,自動程式設計是儘可能藉助計算機系統(特別是自動程式設計系統)進行軟體開發的過程。軟體開發指的是,從問題的非形式描述,經形式的軟體功能規格說明、設計規格說明,到可執行的程式代碼、調試,及至確認、交付使用的全過程。
狹義含義
按狹義的理解,自動程式設計是從形式的軟體功能規格說明到可執行的程式代碼這一過程的自動化。
縱向理解
按縱向理解,低級自動化是從軟體設計規格說明到可執行的程式代碼這一過程的自動化,系統只起程式人員的作用;中級自動化是從形式的軟體功能規格說明、設計規格說明,直到可執行的程式代碼這一過程的自動化,系統除了起程式人員的作用外,還起設計人員、系統分析人員的作用;高級自動化是從非形式的問題描述 ,經形式的軟 件功能規 格說明 、軟體設計規格說明,直到可執行的程式代碼這一全過程的自動化,系統除了起程式人員、軟體設計人員、系統分析人員的作用外,還起領域專家的部分作用。
橫向理解
按橫向理解,在上述各種縱向理解級別上,根據人工干預的程度,又可區分各種不同的自動化級別。
關鍵技術
從關鍵技術來看,自動程式設計的實現途徑可歸結為演繹綜合、程式轉換、實例推廣,以及過程實現等 4種。① 演繹綜合。其理論基礎是,數學定理的構造式證明可等價於程式推導。對要生成的程式,用戶給出它的輸入、輸出數據必須滿足的條件 ,條件以某種形式語言( 如謂詞演算 )陳述。對於所有這些滿足條件的輸入,要求定理證明程式證明存在一個滿足輸出條件的輸出,從該證明中析取出所欲生成的程式。這一途徑的優點是理論基礎堅實,但迄今只析取出一些較小的樣例,較難用於較大規模的程式。②程式轉換。將一規格說明或程式轉換成另一功能等價的規格說明或程式。從抽象級別的異同來看,可區分縱向轉換與橫向轉換。前者是由抽象級別較高的規格說明或程式轉換成與之功能等價的抽象級別較低的規格說明或程式;後者是在相同抽象級別上的規格說明或程式間的功能等價轉換。③實例推廣。藉助反映程式行為的實例來構作程式 。一般有兩 種 方法 。一種是輸入/輸出對法:藉助給出一組輸入/輸出對,逐步導出適用於一類問題的程式。另一種是部分程式軌跡法:通過所給實例的運行軌跡,逐步導出程式。這一途徑的思想誘人,為用戶稱道 ,但欲歸納出一定規模的程式 ,難度頗大 。④ 過程實現。在對應規格說明中的各個成分,其轉換目標的相應成分明確,而且相應的轉換映射也明確的前提下,該映射可藉助過程實現。目前一般採取設計甚高級語言(如SETL),其中含有全稱量詞,存在量詞等,以便於書寫軟體設計規格說明的成分 。但是 ,SETL 本身還不能 算是功能規格說明語言,不能算是功能性語言。這一途徑的實現效率較高,困難點在於從非算法性成分到算法性成分的轉換。因此,迄今採用這一途徑的系統一般自動化程度不高,很難實現從功能規格說明到可執行的程式代碼的自動轉換。
自動程式設計的任務是設計一個程式系統,它接受關於所設計的程式要求實現某個目標非常高級描述作為其輸入,然後自動生成一個能完成這個目標的具體程式。在某種意義上說,編譯程式實際上就是去做“自動程式設計”的工作。編譯程式是接受一段有關乾某件事情的源碼說明(源程式),然後轉換成一個目標碼(目的程式)程式去完成這件事情。而這裡所說的自動程式設計相當於一種“超級編譯程式”,它要求能對高級描述進行處理,通過規划過程,生成的到所需的程式。因而自動程式設計所涉及的基本問題與定理證明和機器人學有關,要用到人工智慧的方法來實現,它也是軟體工程和人工智慧相接合的課題。
自動編出的一份程式來獲得某種指定結果的任務同論證一份給定的程式將獲得某種指定結果的任務是緊密相關的,前者也稱程式綜合,後者稱為程式驗證。許多自動程式設計系統將產生一份輸出程式的驗證作為額外的收益。
重大貢獻
自動程式設計研究的重大貢獻之一是把程式調試的概念作為問題求解的策略來使用。實踐已發現,對程式設計或機器人控制問題,先產生一個代價不太高的有錯誤的解,然後再進行修改的作法,要比堅持要求第一次得到的解就完全沒有缺陷的作法,通常效率要高的多。