1、黑盒行為
黑盒定義了一個系統或系統組件的外部行為。當系統接受激勵S(視為從其環境的輸入)時,它將產生響應R(作為對其環境的輸出),響應不僅與當前激勵有關,還與到目前為止收到的激勵有關。例如,我們考慮一個計算器的外部行為。假設正在進行一次計算,當前的激勵是按了鍵5;如果此前的歷史激勵是C718(C表示清零)。那么響應將是7185。也就是說,計算器將當前顯示的數字左移一位,并在單元位置插入5。如果此前的歷史激勵是C718+,計算器將在單元位置顯示一新的字符串5。因此,系統的當前激勵及此前的歷史激勵惟一地確定了它的響應。
我們可以從外部行為來看待系統及其組件。例如,工作站接受鍵盤和鼠標的激勵會改變當前窗口內容或顯示新的窗口以作出響應。用戶可能對工作站的內部操作一無所知,僅僅感受到的是它的外部行為。當然,內部操作可能是與之聯網的其他支持這種外部行為的機器完成的。
圖 盒子結構精化和驗證 BB=黑盒
黑盒行為的數學語義可寫成如下函數:
歷史激勵→響應
簡記為
SH→R
SH表示包括當前激勵的所有歷史激勵。
黑盒定義不包含狀態數據及過程實現。它定義了僅取決于歷史使用的能被用戶感受到的外部可見行為。因此,黑盒關心的是從用戶角度看待系統行為的問題,而并不考慮狀態和過程的設計。黑盒子規范定義了所有可能使用情況所需的行為。也就是說,在黑盒規范中為所有可能的當前激勵和歷史激勵以及它們的組合定義了正確的響應,在凈室項目中黑盒規范的如下三個原則對高效系統開發很關鍵。
1. 對系統擁有者和用戶而言,黑盒定義了他們分析和協商的所需行為,這是他們準備資源、著手開發和測試的前提。
2. 對系統開發者而言,黑盒定義了待設計和實現的所需行為。
3. 對系統測試者而言,黑盒定義了在測試過程中待確認的所需行為。
黑盒可以用表格形式來定義,表中的三列分別對應于激勵、歷史條件和響應。這些表可用任意合適的形式(從自然語言到集合論)來敘述。請看表3.1中的非形式黑盒定義。這個低層黑盒定義了一個基于12個月平均銷售額的預測系統,用于為一個產品清單控制系統中數以千計的產品預報銷售額。該系統接受產品的月銷售額組成的激勵。并產生相應的響應。黑盒中規則1指定了某一產品少于12個月銷售額時的正確響應。規則2指定了至少有12個月銷售額時的正確行為。這張表以一種非形式的方式描述了系統行為,其中尖括號中內容是要進一步定義和細化的重要實體。這張表可能是在系統規范制定的早期產生的,這時與用戶的分析和討論在需求方面取得了一致,但還沒組織進一步的細化工作。例如對規則1的討論可能導致更多的計算需求,比如3或6個月的平均銷售額。對規則2 的討論可能導致這樣的需求:一個月的銷售額做激勵,在計算平均值之前,確定銷售額值的集合中不小心疏忽的元素。這些變化都會指定新的行為。在黑盒規范中提倡進行這樣的討論。這樣可避免浪費資源并防止開發不符合用戶要求的系統。
2、狀態盒行為
狀態盒規范對系統或其組件進行初步細化,定義了狀態空間。狀態盒把激勵歷史封裝成狀態數據,但仍沒有涉及具體過程。它把舊的OS(old state)和激勵S映射到新的狀態NS(new state)響應R。而新的狀態在下一次變換時則變成了舊狀態。狀態盒子行為的語義是一個如下的變換函數:
(舊狀態,激勵)→(新狀態,響應)
或簡寫為
(OS,S)→(NS,R)
狀態盒根據黑盒來細化和驗證。狀態信息就是為了符合黑盒子規范而必須保存的激勵歷史,這樣信息來自于黑盒,無需再定義。因為每個歷史激勵可用狀態來表示,所以每個黑盒有一個狀態盒描述。而且,對于一個黑盒子,可設計許多不同的狀態盒子,因為對一個狀態可能有多種不同的表示和訪問方法。
狀態盒可用表格來定義,對應的列包括舊狀態、激勵、新狀態、響應以及對應的黑盒規則。我們來考慮銷售額預測系統的狀態盒,如下表所示,它與上表相對應。在此例中,對黑盒的激勵歷史條件分析導致了〈銷售文件〉狀態項,用來保存每種產品最近11個月的銷售額。文件中每條記錄用〈產品〉來標識,并包含一個能存11個月銷售額的數組。因為當前激勵加上前11個便可求出所需的平均值,所以只需存11個值就夠了,不必保留更早的,因而接下來的激勵將導致刪除早于11個月的銷售額。下表中的變換1定義了當激勵引入一個新產品時所需的行為。變換2定義了當狀態盒已知的產品還沒達到11個月的銷售額時所需的行為,變換1和2只是產生文字信息,將激勵顯示給用戶。最后,變換3定義了不斷計算平均植的穩定狀態。注意,每一個變換都要進行相應的狀態更新,為處理隨后的激勵作好準備。例如,變換3是這樣處理狀態的累積過程的,刪除最早的〈銷售額植〉和把當前激勵作為最新的〈銷售額值〉加入到〈銷售文件〉的該〈產品〉記錄中。
狀態盒的驗證是導出相應黑盒行為并與原來的黑盒相比較看是否等價。這種導出就是將狀態操作轉換成激勵歷史形式。
3、明盒行為
系統或其組件的明盒設計定義了狀態盒行為的過程。明盒是一個計算機程序或程序集,基于程序的內部狀態OS,它接受激勵S,產生新的內部狀態NS,并產生響應R。這些過程由基于結構化程序設計的控制結構(順序、選擇、循環,如果引入并發機制還要加上并行結構)來定義。明盒用這些控制結構來完成新狀態和響應的計算。對于所給狀態盒可以定義多種不同的明盒。明盒可用一個變換函數表示:
(舊狀態,激勵)→(新狀態,響應),借助過程
或簡記為:
(OS,S)→(NS,R),借助過程
明盒的過程可以重用已有的黑盒,也可在后續求精過程的狀態盒笥明盒中引入新的黑盒。定義明盒是一個關鍵步驟,因為它必須組織和連接處于一個盒子結構層次的黑盒。通過定義每個黑盒用途的準確內容,這種顯式的連接有助于對項目開發保持智能控制。另外,組件及其連接是從明盒設計中局部處理需求導出的。從本質上,盒子結構的信息不是"分離、征服",而是"分離、連接和征服"。
明盒的驗證是把其操作抽象成一個導出的狀態盒并與原來的狀態盒進行比較。明盒的設計和驗證在以后討論。