Transcript 第九章

正規化規格

發展清楚且不模糊的軟體規
格之技術
©Ian Sommerville 2000
Software Engineering, 6th edition. Chapter 9
Slide 1
本章目的



說明正規規格技術如何幫助您發掘系統需求中
的問題
描述使用代數方法來定義介面規格
描述使用模型式的技術來定義行為規格
©Ian Sommerville 2000
Software Engineering, 6th edition. Chapter 9
Slide 2
本章內容



軟體程序中的正規化規格
介面規格
行為規格
©Ian Sommerville 2000
Software Engineering, 6th edition. Chapter 9
Slide 3
正規方法



正規規格屬於是更一般化的技術集合的一部分
,這個技術集合稱為「正規方法」(formal
methods)
它們都是以數學表示式和軟體的分析為基礎
正規方法包括
•
•
•
•
正規規格
規格分析與證明
轉換式開發
程式驗證
©Ian Sommerville 2000
Software Engineering, 6th edition. Chapter 9
Slide 4
正規方法的接受度

正規方法並沒有如預期的成為軟體開發技術的
主流
•
•
•
•
其他軟體工程技術已經成功的改善了系統的品質,因此對
正規方法的需求就減少了
市場的變更讓即時上市比軟體的品質更重要,但是正規方
法無法加快上市的時間
正規方法的範圍受限,它們不太適合用來指定和分析使用
者的介面和使用者的互動
正規方法難以擴展成大型系統
©Ian Sommerville 2000
Software Engineering, 6th edition. Chapter 9
Slide 5
正規方法的使用



正規方法的實際應用有限
它們的主要好處是減少系統中的錯誤數量,所
以主要的應用領域通常是關鍵系統
在此一領域中使用正規方法最有可能得到經濟
效益
©Ian Sommerville 2000
Software Engineering, 6th edition. Chapter 9
Slide 6
軟體程序中的規格制定



規格制定和設計不可避免的必須混合在一起。
架構設計在建立某個規格的結構時很重要。
正規規格是以數學符號來表示,它在詞彙、語
法和語意中有精確的定義。
©Ian Sommerville 2000
Software Engineering, 6th edition. Chapter 9
Slide 7
規格制定與設計
©Ian Sommerville 2000
Software Engineering, 6th edition. Chapter 9
Slide 8
軟體程序中的正規規格
©Ian Sommerville 2000
Software Engineering, 6th edition. Chapter 9
Slide 9
規格制定技術

代數方式 (Algebraic approach)
•

系統是以一些數學運算和運算之間的關係來描述
模型方式 (Model-based approach)
•
系統是以狀態模型來指定,這些模型則是以數學式的方式
來建構,例如集合和序列。操作則是定義成修改系統的狀
態
©Ian Sommerville 2000
Software Engineering, 6th edition. Chapter 9
Slide 10
正規規格的語言
順序式
並行式
Sequential
Concurrent
Algebraic
Larch (Guttag, Horning et
Lotos (Bolognesi and
al., 1985; Guttag, Horning
Brinksma, 1987),
代數方式
Larch(Guttag
et al., 1993),等人, 1985, 1993) Lotos (Bolognesi 與
OBJ(Futatsugi等人,
1985)
Brinksma, 1987)
OBJ (Futatsugi, Goguen
et
al., 1985)
Model-based
Z (Spivey, 1992)
CSP (Hoare, 1985)
VDM (Jones, 1980)
Petri Nets (Peterson, 1981)
模型方式
Z(Spivey,
1992) 1996)
CSP (Hoare, 1985)
B (Wordsworth,
VDM(Jones, 1980)
Petri Nets (Peterson,
B(Wordsworth, 1996)
1981)
©Ian Sommerville 2000
Software Engineering, 6th edition. Chapter 9
Slide 11
正規規格的使用




正規規格必須在軟體開發的早期階段花比較多
的時間
如此可以減少需求上的錯誤,因為它強迫必須
仔細分析需求
從這些分析中可以發現不完整和不一致,並解
決這些問題
因此,需求問題減少了就可以減少重做的次數
©Ian Sommerville 2000
Software Engineering, 6th edition. Chapter 9
Slide 12
正規規格的開發成本
©Ian Sommerville 2000
Software Engineering, 6th edition. Chapter 9
Slide 13
介面規格




大型系統通常會被分解成許多子系統,而且這
些子系統之間有定義完整的介面
有了子系統的介面規格可以讓不同子系統獨立
開發
介面可已定義成抽象資料型別或物件類別
以代數方式來定義正規規格尤其適用於介面規
格
©Ian Sommerville 2000
Software Engineering, 6th edition. Chapter 9
Slide 14
子系統介面
©Ian Sommerville 2000
Software Engineering, 6th edition. Chapter 9
Slide 15
代數式規格的結構
©Ian Sommerville 2000
Software Engineering, 6th edition. Chapter 9
Slide 16
規格的組成

簡介部分 (Introduction)
•

描述部分 (Description)
•

非正式的描述型別上的操作
簽章部分 (Signature)
•

定義類型(型別名稱)以及宣告欲使用的其他規格
定義使用操作的介面和參數的語法
規則部分 (Axioms)
•
定義操作的語意,以規則來定義特定的行為
©Ian Sommerville 2000
Software Engineering, 6th edition. Chapter 9
Slide 17
系統化的代數規格

系統的代數規格可以用有系統的方式來開發
•
•
•
•
•
•
定義規格結構
命名規格
選取操作
撰寫非正式的操作規格
定義語法
定義規則
©Ian Sommerville 2000
Software Engineering, 6th edition. Chapter 9
Slide 18
規格的操作



建構操作 (Constructor operations):建立欲指定
之型別的實體
檢查操作 (Inspection operations):對指定的型
別之實體做評估
指定行為時必須為每一個建構操作定義檢查操
作
©Ian Sommerville 2000
Software Engineering, 6th edition. Chapter 9
Slide 19
對串列 ADT 的操作

建構操作。建立一個某類型的串列(List)
•

檢查操作。以該類型的串列為參數並傳回某些
其他類型
•

Create、Cons 與 Tail
Head 與 Length.
Tail 可以使用更簡單的建構操作 Create 和
Cons 來定義,而不需要以 Tail 來定義 Head 和
Length。
©Ian Sommerville 2000
Software Engineering, 6th edition. Chapter 9
Slide 20
List 規格
©Ian Sommerville 2000
Software Engineering, 6th edition. Chapter 9
Slide 21
規格中的遞迴


操作通常會以遞迴方式來定義
Tail (Cons (L, v)) = if L = Create then Create
else Cons (Tail (L), v)
•
•
•
•
•
•
Cons ([5, 7], 9) = [5, 7, 9]
Tail ([5, 7, 9]) = Tail (Cons ( [5, 7], 9)) =
Cons (Tail ([5, 7]), 9) = Cons (Tail (Cons ([5], 7)), 9) =
Cons (Cons (Tail ([5]), 7), 9) =
Cons (Cons (Tail (Cons ([], 5)), 7), 9) =
Cons (Cons ([Create], 7), 9) = Cons ([7], 9) = [7, 9]
©Ian Sommerville 2000
Software Engineering, 6th edition. Chapter 9
Slide 22
關鍵系統中的介面規格




以管制領空中飛行器飛行情形的航管系統為例
每一段領空可以包含多架飛行器,但是為了安
全理由必須將這些發行器分隔開
此例中使用簡單的垂直距離 300m 來分隔
若飛行器被指示的位置違反分隔規則時,系統
應該警告管制員
©Ian Sommerville 2000
Software Engineering, 6th edition. Chapter 9
Slide 23
領空物件

對管制領空物件的關鍵操作有
•
•
•
•
Enter:在受管制的領空中加入一架飛行器
Leave:從受管制的領空中移除一架飛行器
Move:將某架飛行器從某個高度移到另一個高度
Lookup:給定一個飛行器識別碼,傳回其目前的高度
©Ian Sommerville 2000
Software Engineering, 6th edition. Chapter 9
Slide 24
基本操作



有時候必須加入額外的操作來簡化規格
其他操作也可以使用這些基本操作來定義
基本操作
•
•
•
•
Create:建立一個領空實例
Put:加入一架飛行器但不做安全檢查
In-space:判斷某架飛行器是否在此領空內
Occupied:給定一個高度,判斷這個高度的 300m 範圍內是
否有其他飛行器
©Ian Sommerville 2000
Software Engineering, 6th edition. Chapter 9
Slide 25
管制領空的規格
規格評註



使用基本的建構操作 Create 和 Put 來指定其他
操作
使用 Create 和 Put 定義 Occupied 和 In-space,
並且用它們來檢查其他操作的定義
會動到領空的所有操作都必須檢查是否符合安
全規範
©Ian Sommerville 2000
Software Engineering, 6th edition. Chapter 9
Slide 27
行為規格



當物件的操作沒有獨立於物件的狀態時,使用
代數規格就有點麻煩
模型式規格可以對外提供系統狀態,並且以狀
態的改變來定義操作
Z 表示法是一個發展模型式規格的成熟技術,
它結合了正式與非正式的描述,並且在表示規
格時使用圖形來強調
©Ian Sommerville 2000
Software Engineering, 6th edition. Chapter 9
Slide 28
Z 綱要的結構
©Ian Sommerville 2000
Software Engineering, 6th edition. Chapter 9
Slide 29
胰島素注射系統
Insulin res ervoi r
Needl e
ass embl y
Pump
Cloc k
Sensor
Controller
Alarm
Display1
Display2
Power supply
©Ian Sommerville 2000
Software Engineering, 6th edition. Chapter 9
Slide 30
建立胰島素注射系統的模型

Z 綱要以下列幾個狀態變數來建立胰島素注射
系統模型
•
•
•
•
•
•
•

reading?
dose, cumulative_dose
r0, r1, r2
capacity
alarm!
pump!
display1!, display2!
變數名稱後的 ? 表示輸入,而 ! 則表示輸出
©Ian Sommerville 2000
Software Engineering, 6th edition. Chapter 9
Slide 31
不變的綱要


每一個 Z 綱要都有一個不變的部分,用來定義
永遠為真的情況
對胰島素注射系統的綱要而言,下列幾個情況
永遠為真:
•
•
•
劑量(dose)必須小於或等於容量(capacity),也就是說不能注
射比儲液筒中還多的胰島素劑量。
每一次劑量不得超過 5 個胰島素單位,而某段時間內的注
射總劑量不得超過 50 個胰島素單位。這些條件是安全的基
本條件,將在第 17 章中深入說明。
display1! 顯示的訊息指示儲液筒的狀態。
©Ian Sommerville 2000
Software Engineering, 6th edition. Chapter 9
Slide 32
胰島素注射綱要
©Ian Sommerville 2000
Software Engineering, 6th edition. Chapter 9
Slide 33
劑量計算




胰島素注射系統會比較目前的讀數與前兩個讀
數計算 出所需的胰島素劑量
如果血液中葡萄糖濃度增加則注射胰島素
已注射的總劑量資訊則會被記錄下來,以便安
全的檢查是否符合不變量
這個不變量必須永遠符合 – 在計量計算中不需
要重複
©Ian Sommerville 2000
Software Engineering, 6th edition. Chapter 9
Slide 34
DOSAGE 綱要
©Ian Sommerville 2000
Software Engineering, 6th edition. Chapter 9
Slide 35
輸出綱要



輸出綱要可建立系統的顯示與警告,以指示某
些潛在的危險情況
輸出顯示可以顯示出計算出的劑量與警告訊息
若血糖太低便會發出警告,表示使用者應該吃
東西以增加血糖指數
©Ian Sommerville 2000
Software Engineering, 6th edition. Chapter 9
Slide 36
輸出綱要
©Ian Sommerville 2000
Software Engineering, 6th edition. Chapter 9
Slide 37
綱要的一致性


綱要的一致性非常重要,不一致的情況會造成
系統需求的問題
INSULIN_PUMP 綱要與 DISPLAY 就不一致
•
•

display1! 會顯示有關胰島素儲液筒的警告訊息
(INSULIN_PUMP)
display1! 則會顯示血糖狀態 (DISPLAY)
在進行系統實作之前必須先解決這個問題
©Ian Sommerville 2000
Software Engineering, 6th edition. Chapter 9
Slide 38
重點整理



以正規方法制定系統規格可以當成非正式規格
制定技術的互補方法
正規規格是非常精準、不模糊的規格,它可以
將規格中令人懷疑的部分移除
在軟體程序中使用正規方法的首要價值在於它
可以強迫在系統開發的早期階段進行系統需求
的分析,愈早修正錯誤對系統開發的影響愈小
©Ian Sommerville 2000
Software Engineering, 6th edition. Chapter 9
Slide 39
重點整理



正規規格特別適用於關鍵系統的開發,這些系
統在安全性、可靠性以及保全性上有非常嚴格
的要求。它們也常常用來指定一些標準。
正規化規格的代數法特別適用於一些介面的指
定,這些介面被定義成一組物件類別或是抽象
資料型別。
模型式技術則可以利用數學式的建構方法(如
集合和函數)來建立系統的模型,利用這些模
型可以提供系統的狀態,並且可以簡化某些類
型的行為規格
©Ian Sommerville 2000
Software Engineering, 6th edition. Chapter 9
Slide 40