AsmL: 可執行的軟體規格 (轉)

amyz發表於2007-08-14
AsmL: 可執行的軟體規格 (轉)[@more@]

AsmL是一種以抽象狀態機(Abstract State Machines, ASM)為基礎的規格語言。它由研究院的軟體工程基礎小組開發並維護,目前的版本是AsmL2(AsmL for ),此版本能夠嵌入Microsoft 和Microsoft .NET中,並可在.NET環境下編譯。你可以在以下地址找到它::namespace prefix = o ns = "urn:schemas-microsoft-com::office" />

AsmL透過規模最小的但是完整的方法建立一個操作的人類可讀(Human-readable)、機器可執行(Machine-executable)的模型,這種方法與任何給定的級別的抽象相關。這種用AsmL寫成的規格被稱為可執行規格(executable specification)。

可執行規格具有幾個非凡的特性:

首先,AsmL模型可以作為他們所描述的系統的模擬來執行。這意味著開發團隊甚至可以在沒有寫任何程式碼之前,就能夠檢查他們的設計與預期的有什麼不同。然而,AsmL模型並不僅僅是個原型系統或者參考實現,因為它完整地描述了所選設計級別的細節。換句話說,一個適當構建的AsmL模型能夠告訴我們,一個正確的實現必須(must)做什麼,可以(may)做什麼以及不能(must not)做什麼。

其次,AsmL模型能夠與它所描述的系統的實現並行執行,以檢查實現與規格是否相符。這不但可以檢查實現,同時可以保證規格及時。

第三,AsmL對演算法測試用例以及大部分用例中的模型檢查和有嚴格的要求。

如同傳統的軟體規格,可執行規格也描述軟體如何工作。但與傳統規格不同的是,可執行規格具有單一的、明確的含義。這個含義以抽象狀態機、系統發展的數學模型、執行時狀態的形勢呈現。

舉例來說,AsmL規格可以作為程式執行來模擬一個系統如何動作,或者檢查一個實現的行為是否與規格相符。然而,與傳統的程式不同,可執行規格有意保持最小規模。換句話講,雖然他們的描述很詳實,卻不冗長,所有的東西都是所選的詳細級別的一部分。

因此,與傳統的程式不同,可執行規格用來限定它們自身的和行為,是系統中所有正確實現所具有的共同的約束和行為。舉例來說,可執行規格並不限制操作的順序,除非順序具有重要的意義。而傳統程式卻將操作的命令序列作為實現時的關鍵決定。可以透過下面這個例子觀之:

var A = [3, 10, 5, 7, 1]

indices = {0, 1, 2, 3, 4}

Main()

  step until fixpoint

  choose i in indices, j in indices

   where i < j and A(i) > A(j)

  A(i) := A(j)

  A(j) := A(i)

  step

  WriteLine(A)  // prints [1, 3, 5, 7, 10]

這個可執行規格使用一個抽象狀態機透過single-s演算法實現In-place sorting。

機器執行一系列順序的步驟來A中的值。A中的元素由i和j表示,使得i小於j並且A(i)大於A(j)。交換持續進行,直到條件不成立,也就是說,整個序列按序排列為止。最後一步列印排列好的序列。每一步的機器狀態完全由那一步時的A序列的值決定。

規格的規模是最小的。首先,choose並沒有說如何選擇兩個索引,只是限定無論兩個索引如何選擇,必須滿足i < j並且A(i)>A(j)。因此,許多排序演算法,包括排序和氣泡排序,都與我們的規格是一致的。其次,這個例子也沒有說如何交換兩個元素,而是將如何實現有序的交換留給每一個實現去決定。

 

總的說來,AsmL規格對於團隊的設計決策交流來說是一種理想的方式。同時,程式經理、開發人員以及測試人員都可以使用AsmL規格來達到對設計的單一而統一的理解。


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10752019/viewspace-956464/,如需轉載,請註明出處,否則將追究法律責任。

相關文章