1)描述方法的功能,引數要求和輸出結果,異常和正常行為
2)結合jml檢查工具可以檢測**是否實現了預期功能,或者自動生成測試樣例
0)注釋格式:
//@ single line
/*@ @ block
@*/
1)行為:
行為發生條件間不應當有交集
2)作用域
3)前置條件和後置條件
4)模型域:jml注釋的成員變數model instance
//@ public model instance jmlobjectbag elementsinqueue
//@ public model static jmlobjectbag elementsinqueue
5)***:方法執行後修改了字段的值
arg在方法開始時尚未分配,允許分配
assign /noting 相當於 pure。assign /everything 表示方法可以修改任何變數
6)類級不變數:進入和退出乙個類中每個方法都必須滿足的條件
7)布林表達:
8)e<:e2>e1是e2 子類/同類
9)集合:new st
\result
返回值
\old(args)
返回呼叫前args
值
\not_assigned(args)
引數是否在方法執行過程中賦值
\not_modifed(args)
引數在方法執行期間取值不變
\nonnullelements(containner)
表示continner
中儲存物件非null
\type(type)
返回type
對應的類class
\typeof(expr)
返回expr
的準確型別
\sum
product
給定範圍內表示式求和 積
//@ (\sum int i; 0 <= i && i < 5; i)
\max
\min
最大\小值
//@ (\max int i; 0 <= i && i < 5; i)
\num_of
滿足條件的取值個數
//@ \num_of int x; r(x); p(x)
//equals to:
//@ \sum int x; r(x) && p(x); 1
1)過載方法的規格需要使用//@also注釋
2)為保證lsp原則,子規格應當滿足一定約束:
1)openjml: 開源的jml工具,具有檢查jml文件規格語法,邏輯問題的功能。早期我用它進行過jml文件語法的靜態測試。
2)jmlunitng:基於jml的單元測試工具,支援自動生成測試樣例
3)jmleclipse:eclipse自帶的jml外掛程式
注:關於jml工具鏈的嘗試:
1)架構分析:本次作業的規格都已由課程組給出。經過metric量化分析,發現結構非常合理。
2)演算法分析:
3)測試分析:
1)在本單元中,我才初步開始進行測試。在測試中我了解到,白盒測試往往用於功能性檢查,黑盒測試往往用於魯棒性檢查。在白盒測試中總是很難做到全面的測試覆蓋。
2)對於規格語言的理解:規格語言形式化地描述了程式的行為。我認為規格語言主要在開發之前作為思路梳理,避免後續程式設計中過於投入而失去整體把握。規格語言有利於產品經理與程式設計師溝通。同時,也明確定義了需求。但是我覺得jml實際上是為方法編寫了乙個等價實現。規格不一定要使用jml來描述,我覺得使用python這樣淺顯易懂的語言來編寫規格文件也可以起到相同的效果。其次,jml工具鏈並不成熟,許多測試工具沒能正常執行。測試工具對於exisit array這樣的規格描述基本無能為力。
形式化 半形式化和非形式化
形式化 半形式化和非形式化是三種類 型的規範風 格。形式化規範就是用一套基於明確定義的數學概念的符號來書寫,並且通常伴隨著支援性的解釋 非形式化 語句。這些數學概念被用來定義符號的句法和語義,以及支援邏輯推理的證明規則。支援形式化符號的句法和語義規則應該定義如何明確地識別其結構和確定其含義。並且必須...
形式化方法
軟體形式化方法最早可追溯到20世紀50年代後期對於程式語言編譯技術的研究,即 j.backus 提出bnf 描述algol60 語言的語法,出現了各種語法分析程式自動生成器以及語法制導的編譯方法,使得編譯系統的開發從 手工藝製作方式 發展成具有牢固理論基礎的系統方法。形式化方法的研究高潮始於20 世...
形式化方法
1 形式化方法的發展 軟體形式化方法最早可追溯到20世紀50年代後期對於程式語言編譯技術的研究,即j.backus提出bnf描述algol60語言的語法,出現了各 種語法分析程式自動生成器以及語法制導的編譯方法,使得編譯系統的開發從 手工藝製作方式 發展成具有牢固理論基礎的系統方法。形式化方法的研究...