TWI465902B - 用於編碼錯誤降低之契約程式規劃 - Google Patents

用於編碼錯誤降低之契約程式規劃 Download PDF

Info

Publication number
TWI465902B
TWI465902B TW097148827A TW97148827A TWI465902B TW I465902 B TWI465902 B TW I465902B TW 097148827 A TW097148827 A TW 097148827A TW 97148827 A TW97148827 A TW 97148827A TW I465902 B TWI465902 B TW I465902B
Authority
TW
Taiwan
Prior art keywords
api
contract
code
rules
application
Prior art date
Application number
TW097148827A
Other languages
English (en)
Other versions
TW200937188A (en
Inventor
Michael Barnett
Manuel A Fahndrich
Brian M Grunkemeyer
Wolfram Schulte
Original Assignee
Microsoft Corp
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Microsoft Corp filed Critical Microsoft Corp
Publication of TW200937188A publication Critical patent/TW200937188A/zh
Application granted granted Critical
Publication of TWI465902B publication Critical patent/TWI465902B/zh

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/51Source to source

Landscapes

  • Engineering & Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Stored Programmes (AREA)

Description

用於編碼錯誤降低之契約程式規劃
本發明關於用於編碼錯誤降低之契約程式規劃。
因為在現今社會中已經大量使用電腦,用於開發軟體應用來在這些電腦上運行的方法及系統的數目亦大量增加。軟體應用可用於基於所使用之應用的設計而執行許多不同的工作。軟體應用基本上包括一些設計成一起工作的個別檔案來產生某種想要的最終結果。為了撰寫這種軟體應用,軟體開發者基本上會決定一種程式語言來用於該應用。現今使用的有許多種程式語言,因此許多軟體應用以不同的語言撰寫。這些語言時常彼此並不相容,其中有不少使用不同的語法、不同的編譯方法,以及其他不同的編碼元件。
為了簡化多個程式語言在多種實施中的整合及應用,已經引進有一種管理編碼來提供平台使得這許多應用可以互動。除此之外,管理編碼允許應用開發者指定一程式的屬性,致使想要使用該應用之某個部份的其他開發者將知道如何最佳地進行。例如,一開發者可以指定對應於一應用變數、方法或整個程序的多種元件。例如開發者可以在一契約或規格中描述變數X具有某種型別,或是大於某個數值。這種應用契約或規格時常用於降低程式碼在編譯之前於編碼中產生的錯誤數目。
但是這些應用契約中可以指定的相當有限。例如,大多數應用契約受限於指定一變數型別。此對於消除型別錯誤非 常有用;但是,可能存在的許多其它錯誤將無法藉由使用這種契約來防範。
此處所述的具體實施例係關於加強一應用API。在一具體實施例中,一電腦系統提供加強一應用API之應用程式設計介面(API,“Application programming interface”)。一電腦系統接收指示使用者想要利用來自以第一程式語言撰寫的一契約API的契約來加強一應用API之以第二程式語言撰寫的軟體碼。該軟體碼包括對該契約API的參照。該等契約包括指示該應用API之適當使用的判定。該電腦系統根據在該軟體碼中的該等參照來存取該契約API的部份,且編譯收到的軟體碼及所參照的契約API之部份成為該收到的軟體碼之中間語言(IL,“Intermediate language”)。IL版本為該第一程式語言及該第二程式語言兩者共用的中間語言。該IL版本包括指示該應用API之適當使用的該等判定。
在其它具體實施例中,一電腦系統接收來自一電腦使用者的軟體碼,其指示該使用者想要利用來自一契約API的契約來加強一應用API。該軟體碼包括對該契約API的參照。該等契約包括指示該應用API之適當使用的判定。該電腦系統根據在該軟體碼中的參照來存取該契約API的部份,編譯該接收的軟體碼及該契約API之參照的部份成為該接收軟體碼的中間語言版本,其中包括指示該應用API之適當使用的一或多個判定,並提供該軟體碼的編譯過中間語言版本給該電腦使用者。
此發明內容說明係用來介紹在一簡化型式中選出的觀念,其在以下的實施方式中會進一步說明。此發明內容說明 並非要識別所主張標的之關鍵特徵或基本特徵,也並非要做為輔助決定所主張標的之範疇。
此處所述的具體實施例係關於加強一應用API。在一具體實施例中,一電腦系統提供加強一應用API之應用程式設計介面(API,“Application programming interface”)。一電腦系統接收指示使用者想要利用來自以第一程式語言撰寫的一契約API的契約來加強一應用API之以第二程式語言撰寫的軟體碼。該軟體碼包括對該契約API的參照。該等契約包括指示該應用API之適當使用的判定。該電腦系統根據在該軟體碼中的該等參照來存取該契約API的部份,且編譯收到的軟體碼及所參照的契約API之部份成為該收到的軟體碼之中間語言(IL,“Intermediate language”)。IL版本為該第一程式語言及該第二程式語言兩者共用的中間語言。該IL版本包括指示該應用API之適當使用的該等判定。
在其它具體實施例中,一電腦系統接收來自一電腦使用者的軟體碼,其指示該使用者想要利用來自一契約API的契約來加強一應用API。該軟體碼包括對該契約API的參照。該等契約包括指示該應用API之適當使用的判定。該電腦系統根據在該軟體碼中的參照來存取該契約API的部份,編譯該接收的軟體碼及該契約API之參照的部份成為該接收軟體碼的中間語言版本,其中包括指示該應用API之適當使用的一或多個判定,並提供該軟體碼的編譯過中間語言版本給該電腦使用者。
在其它具體實施例中,一電腦系統決定一軟體應用具有經配置以包括以一第一程式語言撰寫的至少一契約的一API。該電腦系統自一電腦使用者接收以一第二程式語言撰寫的軟體碼,其指示使用者想要使用以該第二程式語言撰寫的該軟體碼產生該軟體應用的一可執行契約。
該電腦系統傳送該軟體碼到經配置以接收以該第二程式語言撰寫的軟體碼之一管理架構組件,且輸出為該第一程式語言與該第二程式語言兩者共用之一運行時間語言中該軟體碼的版本。該電腦系統接收以該第二程式語言撰寫的該軟體碼之中間語言版本,並基於該接收的軟體碼之中間語言版本產生該軟體應用之一可執行契約。
本發明的具體實施例可包含或利用一特殊目的或通用目的之電腦,其中包括電腦硬體,如以下的更詳細討論。在本發明範疇內之具體實施例亦包括用於承載或儲存電腦可執行指令及/或資料結構的實體及其它電腦可讀取媒體。這種電腦可讀取媒體可為任何可用的媒體,其可由一通用或特殊目的電腦系統進行存取。儲存電腦可執行指令之電腦可讀取媒體為實體儲存媒體。承載電腦可執行指令之電腦可讀取媒體為傳輸媒體。因此,例如但非限制,本發明的具體實施例可包含至少兩種不同種類的電腦可讀取媒體:實體儲存媒體及傳輸媒體。
實體儲存媒體包括RAM、ROM、EEPROM、CD-ROM或其它光碟儲存、磁碟儲存或其它磁性儲存裝置,或任何可用電腦可執行指令或資料結構型式儲存所想要的程式碼手段之其它媒體,並可由一通用或特殊目的電腦進行存取。
一“網路”係定義成致能電腦系統及/或模組及/或其它電子裝置之間電子資料輸送的一或多個資料鏈結。當資訊在一 網路或其它通信連接(硬體連線、無線或硬體連線或無線之組合)之上傳送或提供給一電腦時,該電腦可適當地看待該連接為一傳輸媒體。傳輸媒體可包括一網路及/或資料鏈結,其可用於承載或輸送為電腦可執行指令或資料結構型式之想要的程式碼手段,且其可由一通用或特殊目的電腦進行存取。上述的組合亦必須包含在電腦可讀取媒體的範疇內。
但是,必須瞭解到於到達多種電腦系統組件時,以電腦可執行指令或資料結構的型式之程式碼手段可自動地由傳輸媒體傳送至實體儲存媒體。例如,於一網路或資料鏈結上接收的電腦可執行指令或資料結構可於一網路介面卡內的RAM中進行緩衝化,且然後最終傳送到電腦系統RAM及/或在一電腦系統處一非揮發性實體儲存媒體。因此,必須瞭解到實體儲存媒體可包括在亦(或甚至主要)利用傳輸媒體之電腦系統組件中。
電腦可執行指令包含例如指令及資料,其可使得一通用電腦、特殊目的電腦或特殊目的處理裝置來執行某個功能或功能群組。該電腦可執行指令例如可為二元化、中間格式指令,像是組合語言或甚至原始碼。雖然該標的已經以特定於結構化特徵及/或方法性步驟的語言來描述,應瞭解到在下附申請專利範圍中所定義的標的並不必要地限制於上述之說明特徵或步驟。而是所描述的特徵與步驟係以實施該等申請專利範圍之範例型式來揭示。
本技藝專業人士將可瞭解本發明可實施於具有多種電腦系統組態之網路運算環境中,包括個人電腦、桌上型電腦、膝上型電腦、訊息處理器、掌上型裝置、多處理器系統、應用微處理器或可程式化消費電子產品、網路PC、微電腦、主機型電腦、行動電話、PDA、呼叫器、路由器、交換器及 類似者。本發明亦可實施於分散式系統環境中,其中透過一網路所鏈結(不論是硬體連線資料鏈結、無線資料鏈結、或硬體連線及無線資料鏈結之組合)之本地及遠端電腦系統皆可執行工作。在一分散式系統環境中,程式模組可以同時位於本地及遠端記憶體儲存裝置中。
第1圖為可以利用本發明之原理的一電腦架構100。電腦架構100包括電腦系統101。在一些具體實施例中,電腦系統101包括應用碼110。應用碼110可為任何大小或複雜性、設計給任何使用型態之任何種類的軟體應用碼。應用碼110可為一軟體應用的一部份,或在其本身可包含一軟體應用。應用碼110可包括以任何程式語言撰寫的任何種類的碼。碼110可包括可用於與一電腦系統互動之方法、程序、鏈結的程式庫、程式碼的個別行、或任何其它種類的資訊。
在一些具體實施例中,應用碼110亦包括應用程式設計介面(API)111。一API可為允許一使用者或開發者存取一軟體應用之功能的任何種類的介面。例如,應用開發者基本上撰寫API來允許第三方開發者撰寫使用該開發者的應用之特徵來撰寫軟體應用。在一些案例中,如以下更詳細說明中所述,其較佳地提供在該API的契約(如契約142)指示如何使用該應用的API之判定。使用在該契約中的資訊,一開發者可較佳地瞭解到如何與該軟體應用的API進行互動,也因此成為初步較高品質的無錯誤程式碼。
電腦系統101中的契約API 120可經配置以接收參照113,該參照指示要用來修改或產生一API契約的該契約API。例如,API 111可包括對契約API的參照112,指示契約API 120要用於修改API 111之契約中的一契約。契約可包括指示應用API 111要如何使用的判定。判定可定義在其 當中應用API 111可以最適合運作的邊界。判定的範例包括預先條件、後置條件、特定判定、不變量、鎖定宣告及所檢查例外(checked exception)。判定將在以下更詳細進行說明。
使用者105可為任何種類的電腦使用者,其包括一軟體開發者、一客戶端/終端使用者、一系統管理者或任何其它種類的電腦使用者。在一些案例中,使用者105可傳送應用碼110到編譯器130。編譯器130可為經配置以編譯軟體碼的某個部份之任何種類的軟體應用。編譯器130可用某種中間語言(IL)的一中間型式來輸出程式碼,或可輸出可執行、機器可讀取碼。在一些具體實施例中,編譯器130可為一管理架構的一部份,且可稱之為一管理架構組件。
如此處所使用者,一管理架構可為允許以多種不同程式語言撰寫的編碼檔案的手段被簡化(或編譯)成由一管理架構(像是Microsoft Common Language Runtime、Java Virtual Machine或一表列處理語言(LISP,“List processing language”)解譯器)以一致的方式運作的中間語言指令。此允許在多種程式語言之間的交互運作性。因此,每個管理架構具有與該架構相容而與語言不相容的語言。
在一些具體實施例中,電腦系統101可經配置以決定應用碼110是否以相容於一給定管理架構或編譯器(例如編譯器130)之語言撰寫。再者,儲存在電腦系統101中及由編譯器130存取的軟體碼可被處理來決定其語言相容性。因此,至少在一些具體實施例中,可決定應用碼110相容於編譯器130,不論該編碼是否自使用者105接收或是在電腦系統101上一資料舖中進行存取。
編譯器130可經配置以處理應用碼110,且傳送軟體碼140之中間語言(IL)版本到工具150,其中包括API 141及API契約142。在一些具體實施例中,工具150可以包括經配置以執行多種功能之多種軟體工具。工具150可包括用於決定靜態錯誤是否存在於IL版本140中,用於執行該IL版本之正確性驗證,或插入參照到運行時間檢查到該契約中的工具,使得運行時間檢查可根據該等相對應參照被射入到應用碼。許多其它工具可被包括在工具150中,工具150可經配置以傳送具有API 141之IL版本140及具有運行時間檢查參照143的契約142到執行模組160。執行模組160可為經配置以執行IL版本140之任何種類的軟體方法、程序或應用。執行模組160可輸出狀態指示161,以指示該執行已經產生一失敗或契約違反,或者可能是未發生失敗或契約違反。此程序將配合第2圖及第3圖更為詳細地說明。
第2圖為用於加強一應用API之方法200的流程圖。現在將經常參照第1圖、第4圖及第6圖之組件及資料來說明方法200。
方法200包括一接收以該第二程式語言撰寫的軟體碼指示該使用者想要利用來自以該第一程式語言撰寫的該契約API之契約來加強該應用API的步驟,該軟體碼包括對該契約API的一參照,該等契約包括指示該應用API之適當使用的一或多個判定(步驟210)。例如,編譯器130可接收以一第二程式語言(例如Visual Basic(VB),C#等)撰寫的應用碼110(此處之用語軟體碼及應用碼為同義),以指示使用者105想要利用以一第一程式語言(例如VB,C#等)撰寫來自契約API 120之契約(例如契約142)來加強應用API 111。應用碼110包括對契約API之參照112,且在一些案例中, 其可使用參照113與契約API 120進行通訊或參照。契約(例如契約142)包括指示應用API 111之適當使用的判定。由於契約API 120之一般性質,契約可完全延伸到包括任何種類的編碼、方法、程序等。再者,該第一程式語言可為任何一般性使用的程式語言。契約可延伸性可允許新的方法被加入到該契約API,藉此致能撰寫新種類的契約。客戶端在該等契約中能夠使用以該第二程式語言撰寫的新方法。
在一些案例中,判定可由一開發者使用來撰寫使用該API的一應用。例如,如果一第三方開發者想要撰寫應用A,並使用在應用B中所提供的功能,該開發者將使用應用B的API來存取應用B的功能。在一些具體實施例中,在應用B的API中的一契約可包括判定,像是在當使用應用B的API時要被滿足的預先條件及後置條件。判定可定義在其當中應用B可以最適合運作的邊界。
判定可以包括但不限於下列:預先條件、後置條件、特定判定、不變量、鎖定宣告及所檢查例外。如此處所使用的預先條件指示該函式之呼叫者所要滿足的需求。預先條件需要在進入到該函式時被保持為真。如此處所使用的後置條件指示保證一函式的實施在完成(可能同時為成功或異常地完成)時將可達成。後置條件必須在離開該函式時保持為真。預先條件及後置條件兩者皆可包括成一方法之宣告的一部份。
如此處所使用的特定判定係包括成一程式的編碼之一部份,並做為在該程式邏輯中健全性檢查或澄清。它們亦可用於協助靜態驗證器。特定判定必須在它們被包括之程式的控制流程中適當的點為真。如此處所使用的不變量指示其橫跨所有作業在一型別上維持為真的狀況。在一些具體實施例 中,不變量係包括成一型別之宣告的一部份,並可做為資料上的判定。不變量於該程式的某個執行範圍期間可以暫時地無效,只要外部客戶端(人或是程式)不能夠觀察到任何無效的期間。如此處所使用的鎖定宣告為用於支援關於在同時進行之下該程式之行為的分析的敘述。鎖定宣告係設計成指定那些鎖定保護那些資料。預先條件及後置條件可用於表達那些鎖定要維持或是不要維持。如此處所使用的所檢查例外限制了可由一方法丟出之該組例外。所檢查例外係類似於後置條件,但涵蓋異常的離開。所檢查例外可包括成一方法之宣告的一部份。
概言之,判定係設計成執行一類似功能:指示一程式在如果該等陳述的條件於執行中一指定點處並不為真時為不正確。因此,判定可用於該程式在一指定點處該狀態或行為之文件,做為可用於協助分析或偵測一程式中的錯誤之可運算表述,做為一程式之不同部份之間的契約(其需要在該判定點之前編碼必須達成,或確保在該判定點之後的編碼可以依靠),或為任何其它一些使用當中(像是透過一編譯器之編碼產生,假設該等判定可被信任或證明為正確)。在一些案例中,在一契約中的判定可由靜態程式驗正器使用來檢查該編碼是否符合該契約或藉由錯誤尋找工具來尋找在該編碼中可能的錯誤。
因此,應用碼110可包括可能具有既存的契約或可能沒有任何契約之API 111。在一些案例中,API 141可包括多個契約,其每一者能夠具有對應於不同方法之多個判定。在一些案例中,API契約142可包括一或多個預先條件,其指定在一呼叫者被允許呼叫一方法之前要被滿足的那些項目。因此,為了使用具有這種預先條件的方法,該預先條件 必須在該方法可被呼叫之前被滿足。換言之,如果該預先條件無法滿足,該方法可以不被呼叫(或如果該方法被呼叫時,該方法可能失敗)。例如,其較佳地是當一預先條件透過在該建構程序中執行的檢查而違反時可防止呼叫一方法。再者,該等預先條件可在運行時間中被評估成為一種可能的備份,用於當一使用者無法使用該完整建構程序時。如果當無法滿足一預先條件時,運行該方法可藉由丟出一例外或執行某種其它種類的行為(像是觸發一逐步擴大政策)而失敗。
類似地,API契約142可包括一或多個後置條件,其指定在一方法的返回時要維持的一或多種保證。因此,至少在一些案例中,如果該等後置條件於該方法的返回時無法滿足,該契約將不再允許使用該API。API契約142亦可包括指示橫跨所有作業在一種型別上保持為真的條件之一或多個物件不變量(object invariant)。必須注意到在契約142中任何的判定可為宣告性。因此,宣告性判定可以描述該判定的功能,而不需要描述每一個實施細節。
方法200包括根據在該軟體碼中的參照存取該契約API之部份的步驟(步驟220)。例如,編譯器130可根據應用碼110中參照112可以存取契約API 120之部份。因此,在一些案例中,編譯器130可使用參照112來存取契約API 120之部份來用於編譯中間語言版本140。
方法200亦包括一編譯該接收的軟體碼及該契約API之參照的部份成為該接收的軟體碼之中間語言版本的步驟,該中間語言版本為該第一程式語言及該第二程式語言兩者所共用的一中間語言,該中間語言版本包括指定該應用API之適當使用的一或多個判定(步驟230)。例如,編譯器 130可編譯應用碼110及契約API 120之參照的部份成為應用碼110之中間語言版本140。中間語言版本140可為該第一程式語言(例如VB,C#等)及該第二程式語言(例如VB,C#等)兩者所共用之一中間語言(IL)中。IL版本140可包括指定應用API 141之適當使用的判定。
在一些具體實施例中,例如應用碼110可用Visual Basic撰寫,而契約API可用C#撰寫,編譯器130可經配置成輸出相容於以C#撰寫的契約API 120之Visual Basic碼的IL版本。在一些案例中,兩種語言可以是一管理架構的一部份。在這些案例中,因為兩種語言為一共用管理架構的一部份,以一種語言撰寫的碼可以用於修改以另一種語言撰寫的碼。此對於契約API 120以對於使用者105不熟悉的程式語言撰寫的狀況有好處,使用者105想要修改一應用API的契約,其可能藉由加入多種判定。
在某些具體實施例中,電腦系統101包括可以包括多種不同軟體工具的工具150。例如,工具150可以包括經配置成存取編譯的中間語言版本140且插入一或多個運行時間檢查參照143到契約142中之工具。運行時間檢查參照143可做為存放位置(placeholder)來識別在應用碼中可以插入運行時間檢查的地方。這種工具另可經配置以執行包括具有運行時間檢查參照之契約142的IL版本140,並決定契約142中該等判定中至少一判定在該IL版本的執行期間被違反。再者,基於這種決定,該工具可經配置以提供指示該等判定中至少一判定被違反(例如在狀態指示161中)。在其它案例中,工具150之一可經配置以執行包括具有插入的運行時間檢查參照之契約142的IL版本140,並決定契約142中該等判定中並無任何判定在該IL版本的執行期間被違 反。同時,基於這種決定,該工具可經配置以提供指示該等判定中並無任何判定被違反(例如在狀態指示161中)。
在一些具體實施例中,工具150可包括經配置以對IL版本140執行一靜態分析之工具以決定契約142的該等判定是否可被滿足。在一些案例中,如果該靜態分析決定該契約之該等判定可被滿足,該使用者可被通知為如此(例如在正確性驗證152)。類似地,如果一或多個判定無法被滿足,一通知(例如靜態錯誤151)可經配置以包括這種資訊。在一些案例中,該使用者可簡單地被通知該契約被修改。
在第4圖所示的一示例性具體實施例中,一契約以上述方法利用判定來加強。應用碼406在其未接觸的原始型式中(405),包括API 408及具有多個判定1、2及3的契約409,其可對應於多種判定,像是預先條件、後置條件、不變量或其它元件。使用者105可以輸入應用碼406,其在利用契約API 120之部份編譯之後用於加強契約409。應用碼426之所得到的修改版本425包括API 428及具有加強的(或新的)判定1A、3及4之契約429。判定1A為原始判定1之修改版本,判定3為相同,且判定4已經加入。因此,契約加強可包括改變既有判定、移除判定(像是元件2)、及/或加入判定到一契約。
第3圖為用於加強一應用API之另一方法300的流程圖。現在將經常參照第1圖、第5圖及第6圖之組件及資料來說明方法300。
方法300包括一自一電腦使用者接收軟體碼指示該使用者想要利用來自一契約API之契約加強一應用API的步驟,該軟體碼包括對於該契約API的參照,該等契約包括指示該應用API的適當使用之一或多個判定(步驟310)。例 如,應用碼110可自電腦使用者105接收,指定使用者105想要利用來自契約API 120之契約142來加強應用API 111。應用碼110包括對契約API之參照112。契約142包括指定應用API 141之適當使用的一或多個判定。如上所述,契約142可以包括一或多個預先條件,其指定在一呼叫者被允許呼叫一方法之前要被滿足的那些項目。此外或另外,契約142可包括一或多個後置條件,其指定在一方法的返回時要維持的一或多種保證。不變量、特定判定、鎖定宣告、所檢查例外及其它判定亦可個別或共同地包括在API契約142中。
方法300亦包括根據在該軟體碼中的參照存取該契約API之部份的步驟(步驟320)。例如,編譯器130可根據在應用碼110中的參照112存取契約API 120的部份。
方法300包括一編譯該接收的軟體碼及該契約API之參照的部份成為該接收的軟體碼之一中間語言版本的步驟,其中包括指定該應用API之適當使用的一或多個判定(步驟330)。例如,編譯器130可編譯應用碼110及契約API 120之參照的部份成為包括API 141及具有指定應用API 141之適當使用的多種判定之IL版本140。在一些案例中,編譯器130可為經配置以接收軟體碼之管理架構的一部份,並輸出對於包括在該管理架構中多種不同程式語言共用的應用碼140之中間語言(IL)版本。例如,如果軟體碼110以C#撰寫,且契約142以Visual Basic撰寫,編譯器130可經配置以輸出與以Visual Basic撰寫的契約142相容的C#編碼的一IL版本。
方法300包括一提供軟體碼之編譯的中間語言版本給該電腦使用者之步驟(步驟340)。例如,電腦系統101可提 供編譯的IL版本140到電腦使用者105。在一些案例中,該IL版本可提供給使用者105用於後續應用到工具150。在一些案例中,電腦系統101可直接提供IL版本140到工具150。如上所述,可使用許多不同工具來執行錯誤檢查(運行時間或靜態)、文件產生、記錄或其它特徵的任何工作。例如文件可用於通知這些使用者要如何使用具有該應用API之契約。這種文件可由工具150自動地產生。
契約142可代表已經為API 111之一部份的一既有契約的加強版本。此外或另外,契約142可代表使用契約API 120所產生的一新契約。在第5圖所述的一示例性具體實施例中,API 528的契約529可用類似於上述的契約加強的方式產生。換言之,契約產生可等同於加強一未包含資訊(即無判定)之契約。在此範例中,以其未接觸之原始型式(505)之應用碼506包括API 508。應用碼110在被轉換成一IL版本之後可用於利用一產生的契約(525)產生一應用API。所得到的產生之應用碼526包括API 528及具有判定1、2及3的所產生契約529,其可對應於多種判定,例如預先條件、後置條件、不變量或其它元件。因此,API 528可經配置以包括及使用所產生的契約529,其包括有在該契約中包括的任何或所有的多種判定。
一些具體實施例可以包括用於產生一可執行二元碼的系統,其包括應用碼、一或多個契約、程式庫參照及其它元件。例如,如第6圖所述,編譯器615可經配置以接收包括具有識別一或多個判定607(其中一些為有條件的)之契約606的API 605之軟體應用碼,(該等)判定607指定如何與該軟體應用碼進行互動。契約606可以延伸,並可包括指示 要利用一數值取代的應用碼之部份的一或多個參照。再者,契約606可用任何一般目的程式語言來撰寫。
編譯器615可經配置以整合該等一或多個判定,連同任何接收的二元碼610成為在該軟體應用碼中相對應的方法。覆寫器625可經配置以自編譯器615接收編譯的二元碼620(其中該二元碼包括軟體應用碼621、契約622及程式庫參照623),並覆寫該接收的二元碼,使得由該契約中的參照所指定的應用碼之該等部份利用在中間(運行時間)語言中的數值所取代。
在一些案例中,該二元碼可同時對於運行時間檢查以及後續讀取來覆寫。再者,此新的(覆寫)二元碼可做為用於編譯使用該覆寫軟體之軟體的一新片段的輸入。該覆寫二元碼可輸出成可執行二元碼630。覆寫器625可視需要存取到一或多個程式庫626來用於覆寫。在一些案例中,該軟體碼及該契約可分別編譯,然後稍後由覆寫器625組合。如上所述,該等判定可以包括預先條件、後置條件、物件不變量、鎖定宣告、所檢查例外、使用協定或任何其它種類的判定。
因此,根據一些具體實施例,一使用者能夠以一種語言撰寫軟體碼,其可用於加強以另一種語言撰寫的一應用API之契約。該契約可以包括多種判定,其中包括預先條件及後置條件,其要被滿足而適當地使用關聯於該契約之應用API,其可造成較少的程式化錯誤。
本發明可具體實施成其它特定的型式,其皆不背離本發明之精神或基本特性。上述的具體實施例在各個態樣中皆應視為例示性而非限制性。因此本發明的範疇係由下附申請專利範圍所指示,而非由前述的說明。所有在申請專利範圍之同等性下的意義與範圍內之改變皆要涵蓋在其範疇之內。
100‧‧‧電腦架構
101‧‧‧電腦系統
105‧‧‧使用者
110‧‧‧應用碼
111‧‧‧應用程式設計介面(API)
112‧‧‧對契約應用程式設計介面(API)之參照
113‧‧‧參照
120‧‧‧契約應用程式設計介面(API)
130‧‧‧編譯器
140‧‧‧中間語言版本
141‧‧‧應用程式設計介面(API)
142‧‧‧契約
143‧‧‧運行時間檢查參照
150‧‧‧工具
151‧‧‧靜態錯誤
152‧‧‧正確性驗證
160‧‧‧執行模組
161‧‧‧狀態指示
405‧‧‧原始型式
406‧‧‧應用碼
408‧‧‧應用程式設計介面(API)
409‧‧‧契約
425‧‧‧修改版本
426‧‧‧應用碼
428‧‧‧應用程式設計介面(API)
429‧‧‧契約
505‧‧‧原始型式
506‧‧‧應用碼
508‧‧‧應用程式設計介面(API)
525‧‧‧產生的契約
526‧‧‧應用碼
528‧‧‧應用程式設計介面(API)
529‧‧‧產生的契約
605‧‧‧應用程式設計介面(API)
606‧‧‧契約
607‧‧‧判定
610‧‧‧接收的二元碼
615‧‧‧編譯器
620‧‧‧編譯的二元碼
621‧‧‧軟體應用碼
622‧‧‧契約
623‧‧‧程式庫參照
625‧‧‧覆寫器
626‧‧‧程式庫
630‧‧‧可執行二元碼
為了進一步釐清上述及其它本發明之具體實施例的好處及特徵,本發明之具體實施例的一更為特定的說明將參照附屬圖式來呈現。請瞭解到這些圖式僅描述本發明之典型具體實施例,因此不應視為本發明範疇的限制。本發明將透過附屬圖式之使用來說明及解釋額外的特定性及細節,其中:第1圖為本發明之具體實施例可以運作的電腦架構,其中包括修正及/或產生一API契約。
第2圖為用於加強一應用API之範例性方法的流程圖。
第3圖為用於加強一應用API之另一範例性方法的流程圖。
第4圖為一修正的契約之示例性具體實施例。
第5圖為一產生的契約之示例性具體實施例。
第6圖為用於使用一契約API產生一可執行二元碼的示例性系統。
100‧‧‧電腦架構
101‧‧‧電腦系統
105‧‧‧使用者
110‧‧‧應用碼
111‧‧‧應用程式設計介面(API)
112‧‧‧對契約應用程式設計介面(API)之參照
113‧‧‧參照
120‧‧‧契約應用程式設計介面(API)
130‧‧‧編譯器
140‧‧‧中間語言版本
141‧‧‧應用程式設計介面(API)
142‧‧‧契約
143‧‧‧運行時間檢查參照
150‧‧‧工具
151‧‧‧靜態錯誤
152‧‧‧正確性驗證
160‧‧‧執行模組
161‧‧‧狀態指示

Claims (14)

  1. 一種用於在一電腦系統處加入一可執行契約(contract)至一應用程式設計介面(API)的方法,該方法使得當該API被呼叫時該可執行契約亦被執行,以確保該API按照該可執行契約中所指定的一或更多規則而被呼叫,該方法包含下列步驟:接收原始碼,該原始碼包括對一第一API的呼叫以及對一契約API的呼叫,該契約API用於確保對該第一API的呼叫係按照對該契約API之呼叫的輸入所指定的一或更多規則來執行;編譯該所接收原始碼成為中間語言碼,該中間語言碼包括用於實施該第一API的程式碼以及用於實施該契約API的程式碼,該契約API經配置以在該第一API被呼叫的任何時候都被執行來驗證有符合該一或更多規則,且該契約API經配置以報告是否符合該一或更多規則;儲存該中間語言碼;執行該中間語言碼,其中當該第一API被執行時,該契約API亦被執行以驗證是否符合該一或更多規則;及在該第一API執行期間,經由一使用者介面向一使用者報告是否符合該一或更多規則。
  2. 如申請專利範圍第1項所述之方法,其中該一或更多規則包括下列當中一或更多項:預先條件、後置條件、鎖定宣告、所檢查例外(exception)、使用協定及物件不變量。
  3. 如申請專利範圍第2項所述之方法,其中該一或更多規則包含對該第一API的一預先條件,以及其中執行該中間語言碼之步驟包含在進入該第一API時即執行該契約API, 以驗證該第一API的一或更多參數符合在該預先條件中所指定的一或更多條件。
  4. 如申請專利範圍第2項所述之方法,其中該一或更多規則包含對該第一API的一後置條件,以及其中執行該中間語言碼之步驟包含在離開該第一API時即執行該契約API,以驗證該第一API的一回傳值符合在該後置條件中所指定的一或更多條件。
  5. 如申請專利範圍第2項所述之方法,其中該一或更多規則包含一物件不變量,以及其中執行該中間語言碼之步驟包含執行該契約API以驗證由該第一API在其上運算的各型別(type)符合在該物件不變量中所指定的一或更多條件。
  6. 如申請專利範圍第1項所述之方法,另包含以下步驟:靜態地檢查該中間語言碼以驗證是否符合該一或更多規則。
  7. 如申請專利範圍第1項所述之方法,其中該契約API可以擴充,以允許新的方法被加入到該契約API,以使得新種類的契約可被撰寫。
  8. 如申請專利範圍第1項所述之方法,另包含以下步驟:基於該被加入的契約而自動產生用於該第一API之說明文件。
  9. 如申請專利範圍第1項所述之方法,其中使用該契約API撰寫的契約對於複數個下游工具可以持續。
  10. 如申請專利範圍第1項所述之方法,其中該契約API是用與該第一API不同的一程式語言撰寫。
  11. 一種電腦程式產品,該電腦程式產品包含一或更多個實體儲存裝置,該一或更多個實體儲存裝置具有電腦可執行指令儲存於其上,當執行該等電腦可執行指令時執行一方法,該方法用於加入一可執行契約(contract)至一應用程 式設計介面(API),使得當該API被呼叫時該可執行契約亦被執行,以確保該API按照該可執行契約中所指定的一或更多規則而被呼叫,該方法包含下列步驟:接收原始碼,該原始碼包括對一第一API的呼叫以及對一契約API的呼叫,該契約API用於確保對該第一API的呼叫係按照對該契約API之呼叫的輸入所指定的一或更多規則來執行;編譯該所接收原始碼成為中間語言碼,該中間語言碼包括用於實施該第一API的程式碼以及用於實施該契約API的程式碼,該契約API經配置以在該第一API被呼叫的任何時候都被執行來驗證有符合該一或更多規則,且該契約API經配置以報告是否符合該一或更多規則;儲存該中間語言碼;執行該中間語言碼,其中當該第一API被執行時,該契約API亦被執行以驗證是否符合該一或更多規則;及在該第一API執行期間,經由一使用者介面向一使用者報告是否符合該一或更多規則。
  12. 一種電腦系統,該電腦系統包含:一或更多處理器;及一或更多電腦可讀取儲存媒體,該一或更多電腦可讀取儲存媒體儲存代表一軟體設計工具的電腦可執行指令,該軟體設計工具由該一或更多處理器執行以執行下列步驟:接收原始碼,該原始碼包括對一第一API的呼叫以及對一契約API的呼叫,該契約API用於確保對該第一API的呼叫係按照對該契約API之呼叫的輸入所指定的一或更多規則來執行;及 編譯該所接收原始碼成為中間語言碼,該中間語言碼包括用於實施該第一API的程式碼以及用於實施該契約API的程式碼,該契約API經配置以在該第一API被呼叫的任何時候都被執行來驗證有符合該一或更多規則,且該契約API經配置以報告是否符合該一或更多規則;儲存該中間語言碼;執行該中間語言碼,其中當該第一API被執行時,該契約API亦被執行以驗證是否符合該一或更多規則;及在該第一API執行期間,經由一使用者介面向一使用者報告是否符合該一或更多規則。
  13. 如申請專利範圍第12項所述之電腦系統,其中該契約API是用與該第一API不同的一程式語言所寫。
  14. 如申請專利範圍第12項所述之電腦系統,其中該一或更多規則為下列之至少一項:一預先條件、一後置條件、一鎖定宣告、一所檢查例外(exception)、一使用協定及一物件不變量。
TW097148827A 2007-12-21 2008-12-15 用於編碼錯誤降低之契約程式規劃 TWI465902B (zh)

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
US11/963,346 US8250524B2 (en) 2007-12-21 2007-12-21 Contract programming for code error reduction

Publications (2)

Publication Number Publication Date
TW200937188A TW200937188A (en) 2009-09-01
TWI465902B true TWI465902B (zh) 2014-12-21

Family

ID=40790201

Family Applications (1)

Application Number Title Priority Date Filing Date
TW097148827A TWI465902B (zh) 2007-12-21 2008-12-15 用於編碼錯誤降低之契約程式規劃

Country Status (8)

Country Link
US (1) US8250524B2 (zh)
EP (1) EP2238532A4 (zh)
JP (1) JP2011508317A (zh)
AU (1) AU2008343555B2 (zh)
BR (1) BRPI0819716A2 (zh)
CA (1) CA2704980C (zh)
TW (1) TWI465902B (zh)
WO (1) WO2009085521A1 (zh)

Families Citing this family (22)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9645915B2 (en) 2006-12-27 2017-05-09 The Mathworks, Inc. Continuous evaluation of program code and saving state information associated with program code
US8392762B2 (en) * 2008-02-04 2013-03-05 Honeywell International Inc. System and method for detection and prevention of flash corruption
US8782607B2 (en) * 2009-02-20 2014-07-15 Microsoft Corporation Contract failure behavior with escalation policy
US8074117B2 (en) * 2009-09-25 2011-12-06 Microsoft Corporation Inference of contract using declarative program definition
US10089119B2 (en) 2009-12-18 2018-10-02 Microsoft Technology Licensing, Llc API namespace virtualization
US8910133B2 (en) 2010-06-07 2014-12-09 Microsoft Corporation Library conformity checker
US9189211B1 (en) * 2010-06-30 2015-11-17 Sony Computer Entertainment America Llc Method and system for transcoding data
US8745641B1 (en) * 2011-07-14 2014-06-03 Google Inc. Automatic verification and anomaly detection in a representational state transfer (REST) application programming interface
US8776094B2 (en) 2011-08-11 2014-07-08 Microsoft Corporation Runtime system
US8695021B2 (en) 2011-08-31 2014-04-08 Microsoft Corporation Projecting native application programming interfaces of an operating system into other programming languages
US20130339929A1 (en) * 2012-06-14 2013-12-19 Microsoft Corporation Program repair
US9286039B2 (en) * 2013-03-14 2016-03-15 Microsoft Technology Licensing, Llc Operating system support for contracts
US9053228B1 (en) * 2013-10-22 2015-06-09 The Mathworks, Inc. Determining when to evaluate program code and provide results in a live evaluation programming environment
US10635504B2 (en) * 2014-10-16 2020-04-28 Microsoft Technology Licensing, Llc API versioning independent of product releases
US10129078B2 (en) 2014-10-30 2018-11-13 Equinix, Inc. Orchestration engine for real-time configuration and management of interconnections within a cloud-based services exchange
US9459840B1 (en) 2015-03-31 2016-10-04 Toyota Jidosha Kabushiki Kaisha Timing-oriented and architecture-centric system design using contracts
US10089089B2 (en) * 2015-06-03 2018-10-02 The Mathworks, Inc. Data type reassignment
US10331425B2 (en) * 2017-06-28 2019-06-25 Google Llc Automated source code adaption to inject features between platform versions
EP3582103A1 (en) * 2018-06-14 2019-12-18 QlikTech International AB Methods and systems for application program interface management
CN111179086B (zh) * 2019-12-31 2024-01-02 杭州趣链科技有限公司 一种基于WebAssembly的智能合约虚拟机
US11782814B2 (en) 2021-01-05 2023-10-10 Oracle International Corporation Visualizations for learned software interfaces
US11934810B2 (en) * 2022-05-19 2024-03-19 Microsoft Technology Licensing, Llc Translating an edit from a child computer language to a parent computer language while maintaining a semantic meaning of the edit

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20040103405A1 (en) * 2002-11-20 2004-05-27 Vargas Byron D. System for translating programming languages
TW200504523A (en) * 2003-02-26 2005-02-01 Ibm Dynamic data-driven application integration adapters
US20050081192A1 (en) * 2003-10-08 2005-04-14 Deline Robert Anthony Plug-in pre-and postconditions for static program analysis
TW200731094A (en) * 2005-10-13 2007-08-16 Microsoft Corp Extensible meta-data

Family Cites Families (35)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6336148B1 (en) * 1996-09-25 2002-01-01 Sun Microsystems, Inc. Automatic checking of public contracts and private constraints on distributed objects
US6442750B1 (en) * 1999-07-20 2002-08-27 Xerox Corporation Design by contract with aspect-oriented programming
US6836883B1 (en) * 2000-06-21 2004-12-28 Microsoft Corporation Method and system for compiling multiple languages
GB2373073A (en) * 2001-03-08 2002-09-11 Escher Technologies Ltd Process and system for developing validated and optimised object-oriented software
US6836884B1 (en) * 2001-06-04 2004-12-28 Microsoft Corporation Method and system for editing software programs
US7165239B2 (en) * 2001-07-10 2007-01-16 Microsoft Corporation Application program interface for network software platform
US7017162B2 (en) * 2001-07-10 2006-03-21 Microsoft Corporation Application program interface for network software platform
US7216338B2 (en) * 2002-02-20 2007-05-08 Microsoft Corporation Conformance execution of non-deterministic specifications for components
US7039898B2 (en) * 2002-07-12 2006-05-02 Netspective Communications, Llc Computer system for performing reusable software application development from a set of declarative executable specifications
US7065745B2 (en) * 2002-12-16 2006-06-20 Sun Microsystems, Inc. System and method for evaluating and executing hierarchies of rules
US8032860B2 (en) * 2003-02-26 2011-10-04 Oracle International Corporation Methods for type-independent source code editing
US20050108682A1 (en) * 2003-02-26 2005-05-19 Bea Systems, Inc. Systems for type-independent source code editing
US7216337B2 (en) * 2003-04-14 2007-05-08 Microsoft Corporation Automatic determination of invalid call sequences in software components
US7168063B2 (en) * 2003-06-10 2007-01-23 Microsoft Corporation Systems and methods for employing tagged types in a dynamic runtime environment
US7219329B2 (en) * 2003-06-13 2007-05-15 Microsoft Corporation Systems and methods providing lightweight runtime code generation
US20050010895A1 (en) * 2003-07-09 2005-01-13 Mr. Parama Reddappagari Software Specification Processing System
US7421680B2 (en) * 2003-09-22 2008-09-02 Microsoft Corporation Persisted specifications of method pre-and post-conditions for static checking
US7584458B2 (en) * 2003-10-02 2009-09-01 Microsoft Corporation Source code annotation language
US7421682B2 (en) 2003-11-10 2008-09-02 Microsoft Corporation Instrumentation injection for common language runtime
US7571428B2 (en) * 2004-05-14 2009-08-04 Microsoft Corporation Reliability contracts
US7574692B2 (en) * 2004-11-19 2009-08-11 Adrian Herscu Method for building component-software for execution in a standards-compliant programming environment
US7707547B2 (en) * 2005-03-11 2010-04-27 Aptana, Inc. System and method for creating target byte code
US7844958B2 (en) * 2005-03-11 2010-11-30 Aptana, Inc. System and method for creating target byte code
US20060265704A1 (en) * 2005-04-21 2006-11-23 Holt John M Computer architecture and method of operation for multi-computer distributed processing with synchronization
US20070039010A1 (en) 2005-08-15 2007-02-15 Microsoft Corporation Automatic generation of software code to facilitate interoperability
US7844951B2 (en) * 2005-12-30 2010-11-30 Microsoft Corporation Specification generation from implementations
US20070220370A1 (en) * 2006-01-12 2007-09-20 International Business Machines Corporation Mechanism to generate functional test cases for service oriented architecture (SOA) applications from errors encountered in development and runtime
US8136102B2 (en) * 2006-06-20 2012-03-13 Google Inc. Systems and methods for compiling an application for a parallel-processing computer system
US8136104B2 (en) * 2006-06-20 2012-03-13 Google Inc. Systems and methods for determining compute kernels for an application in a parallel-processing computer system
US8561034B2 (en) * 2006-06-22 2013-10-15 Infosys Technologies, Ltd. Software fault injection in java enterprise applications
US7934207B2 (en) * 2006-12-19 2011-04-26 Microsoft Corporation Data schemata in programming language contracts
US20080209395A1 (en) * 2007-02-27 2008-08-28 Advance 9 Group Llc Automatic code replacement
US8327327B2 (en) * 2007-03-21 2012-12-04 Carnegie Mellon University Method for statically checking an object-oriented computer program module
US8266685B2 (en) * 2007-05-18 2012-09-11 Microsoft Corporation Firewall installer
US8494832B2 (en) * 2007-06-20 2013-07-23 Sanjeev Krishnan Method and apparatus for software simulation

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20040103405A1 (en) * 2002-11-20 2004-05-27 Vargas Byron D. System for translating programming languages
TW200504523A (en) * 2003-02-26 2005-02-01 Ibm Dynamic data-driven application integration adapters
US20050081192A1 (en) * 2003-10-08 2005-04-14 Deline Robert Anthony Plug-in pre-and postconditions for static program analysis
TW200731094A (en) * 2005-10-13 2007-08-16 Microsoft Corp Extensible meta-data

Also Published As

Publication number Publication date
AU2008343555B2 (en) 2012-12-20
CA2704980A1 (en) 2009-07-09
EP2238532A4 (en) 2012-04-04
AU2008343555A1 (en) 2009-07-09
EP2238532A1 (en) 2010-10-13
TW200937188A (en) 2009-09-01
WO2009085521A1 (en) 2009-07-09
US8250524B2 (en) 2012-08-21
JP2011508317A (ja) 2011-03-10
BRPI0819716A2 (pt) 2015-06-16
US20090164973A1 (en) 2009-06-25
CA2704980C (en) 2016-03-22

Similar Documents

Publication Publication Date Title
TWI465902B (zh) 用於編碼錯誤降低之契約程式規劃
Evans et al. Improving security using extensible lightweight static analysis
US20170344747A1 (en) Systems and methods to optimize execution of a software program using a type based self assembling control flow graph
US7818729B1 (en) Automated safe secure techniques for eliminating undefined behavior in computer software
Chong et al. Code-level model checking in the software development workflow
US8782607B2 (en) Contract failure behavior with escalation policy
US8813049B2 (en) Type inference of partially-specified parameterized types
US10725897B2 (en) Systems and methods for automatically parallelizing sequential code
US9459986B2 (en) Automatic generation of analysis-equivalent application constructs
US20180129494A1 (en) Detect application defects by correlating contracts in application dependencies
US9141356B2 (en) Process for generating dynamic type
US10540193B2 (en) Software-defined microservices
KR20150130298A (ko) 컨트랙트에 대한 운영 체제 지원 기법
Olivieri et al. Design and Implementation of Static Analyses for Tezos Smart Contracts
JP7348492B2 (ja) 情報処理システム、情報処理装置、情報処理プログラム、および情報処理方法
Jagadeesan et al. Open bisimulation for aspects
Verbeek et al. Highly Automated Formal Proofs over Memory Usage of Assembly Code
US20140195862A1 (en) Software systems by minimizing error recovery logic
Arslanagić et al. Scalable typestate analysis for low-latency environments
Engelmann et al. Concepts for OpenMP target offload resilience
Holthusen et al. Proof-carrying apps: Contract-based deployment-time verification
Pirzadeh et al. An extended proof-carrying code framework for security enforcement
Ghorbani Validation and Verification of Modular Software Applications
Tan et al. AUSPICE-R: Automatic Safety-Property Proofs for Realistic Features in Machine Code
Binder et al. jGuard: Programming Misuse-Resilient APIs

Legal Events

Date Code Title Description
MM4A Annulment or lapse of patent due to non-payment of fees