- 現(xiàn)代軟件工程
- 周蘇
- 1405字
- 2020-05-29 11:56:09
3.8 生成行為模型
建模表示方法只是表達(dá)了需求模型中的靜態(tài)元素,現(xiàn)在要把它轉(zhuǎn)換成系統(tǒng)或產(chǎn)品的動(dòng)態(tài)行為。為此,可以把系統(tǒng)行為表示成一個(gè)特定的事件和時(shí)間的函數(shù)。行為模型顯示了軟件如何對(duì)外部事件或激勵(lì)做出響應(yīng)。要生成模型,分析師必須按如下步驟進(jìn)行。
1)評(píng)估所有的用例,以保證完全理解系統(tǒng)內(nèi)的交互順序。
2)識(shí)別驅(qū)動(dòng)交互順序的事件,并理解這些事件如何與特定的對(duì)象相互關(guān)聯(lián)。
3)為每個(gè)用例生成序列。
4)創(chuàng)建系統(tǒng)狀態(tài)圖。
5)評(píng)審行為模型以驗(yàn)證準(zhǔn)確性和一致性。
用例表現(xiàn)了涉及參與者和系統(tǒng)的活動(dòng)順序。一般而言,只要系統(tǒng)和參與者之間交換了信息就發(fā)生事件。這里,事件不是被交換的信息,而是已交換信息的事實(shí)。
在行為建模的場(chǎng)合下,必須考慮兩種不同的狀態(tài)描述:①系統(tǒng)執(zhí)行其功能時(shí)每個(gè)類的狀態(tài);②系統(tǒng)執(zhí)行其功能時(shí)從外部觀察到的系統(tǒng)狀態(tài)。
類狀態(tài)具有被動(dòng)和主動(dòng)兩種特征。被動(dòng)狀態(tài)只是某個(gè)對(duì)象所有屬性的當(dāng)前狀態(tài)。一個(gè)對(duì)象的主動(dòng)狀態(tài)指的是對(duì)象進(jìn)行持續(xù)變換或處理時(shí)的當(dāng)前狀態(tài)。必然發(fā)生事件(有時(shí)被稱為觸發(fā)器)才能迫使對(duì)象做出從一個(gè)主動(dòng)狀態(tài)到另一個(gè)主動(dòng)狀態(tài)的轉(zhuǎn)移。
有兩種不同的行為表現(xiàn)形式。第一種顯示一個(gè)類如何改變基于外部事件的狀態(tài),第二種以時(shí)間函數(shù)的形式顯示軟件的行為。
1)分析類的狀態(tài)圖。UML狀態(tài)圖是一種行為模型,該圖為每個(gè)類呈現(xiàn)了主動(dòng)狀態(tài)和導(dǎo)致這些主動(dòng)狀態(tài)變化的事件(觸發(fā)器)。圖3-20舉例說明了SafeHome安全功能中ControlPanel類的狀態(tài)圖。
圖3-20中顯示的每個(gè)箭頭表示某個(gè)對(duì)象從一個(gè)主動(dòng)狀態(tài)轉(zhuǎn)移到另一個(gè)主動(dòng)狀態(tài)。每個(gè)箭頭上的標(biāo)注都體現(xiàn)了觸發(fā)狀態(tài)轉(zhuǎn)移的事件。盡管主動(dòng)狀態(tài)模型在提供對(duì)象的“生命歷史”信息方面非常有用,但也能提供另外一些信息以便加深理解對(duì)象的行為。除了說明導(dǎo)致轉(zhuǎn)移發(fā)生的事件外,分析師還可以說明守衛(wèi)Guard和動(dòng)作。守衛(wèi)是為了保證轉(zhuǎn)移發(fā)生而必須滿足的一個(gè)布爾條件。例如,圖3-20中從“讀取”狀態(tài)轉(zhuǎn)移到“比較”狀態(tài)的守衛(wèi)可以由檢查用例來確定。
圖3-20 ControlPanel類的狀態(tài)圖
if(password input=4 digits)then compare to stored password
一般而言,轉(zhuǎn)移的守衛(wèi)通常依賴于某個(gè)對(duì)象的一個(gè)或多個(gè)屬性值。換句話說,守衛(wèi)依賴于對(duì)象的被動(dòng)狀態(tài)。
動(dòng)作是與狀態(tài)轉(zhuǎn)移同時(shí)發(fā)生的或者它作為狀態(tài)轉(zhuǎn)移的結(jié)果,而且通常動(dòng)作包含對(duì)象的一個(gè)或多個(gè)操作(職責(zé))。
2)順序圖。第二種表現(xiàn)行為的方式在UML中稱為順序圖,它表明事件如何引發(fā)從一個(gè)對(duì)象到另一個(gè)對(duì)象的轉(zhuǎn)移。一旦通過檢查用例確認(rèn)了事件,建模人員就創(chuàng)建了一個(gè)順序圖,即用時(shí)間函數(shù)表現(xiàn)如何引發(fā)事件從一個(gè)對(duì)象流到另一個(gè)對(duì)象。事實(shí)上,順序圖是用例的速記版本。它表現(xiàn)了導(dǎo)致行為從一個(gè)類流到另一個(gè)類的關(guān)鍵類和事件。
圖3-21給出了SafeHome安全功能的部分順序圖。每個(gè)箭頭代表了一個(gè)事件(源自一個(gè)用例),并說明了事件如何引導(dǎo)SafeHome對(duì)象之間的行為。時(shí)間縱向(向下)度量,窄的縱向矩形表示處理某個(gè)活動(dòng)所用的時(shí)間。沿著縱向的時(shí)間線可以展示出對(duì)象的狀態(tài)。
第一個(gè)事件“系統(tǒng)就緒”來自外部環(huán)境并把行為引導(dǎo)到對(duì)象Homeowner。房主輸入一個(gè)密碼,“查找請(qǐng)求”事件發(fā)送到System,在一個(gè)簡(jiǎn)單的數(shù)據(jù)庫(kù)中查找密碼并向ControlPanel(現(xiàn)在處在比較狀態(tài))返回(找到或沒有找到)結(jié)果。有效的密碼將促使系統(tǒng)產(chǎn)生“密碼正確”事件,該事件通過“激活請(qǐng)求”事件激活傳感器。最終,通過控制把“成功激活事件”返回到房主。
一旦完成了完整的順序圖,把所有導(dǎo)致系統(tǒng)對(duì)象之間轉(zhuǎn)移的事件整理為輸入事件集合和輸出事件集合(來自一個(gè)對(duì)象)。對(duì)于將要構(gòu)建的系統(tǒng)而言,這些信息對(duì)于創(chuàng)建系統(tǒng)的有效設(shè)計(jì)非常有用。
圖3-21 SafeHome安全功能的順序圖(部分)
- 精通COBOL:大型機(jī)商業(yè)編程技術(shù)詳解(修訂版)
- CAE分析大系:ANSYS?Workbench結(jié)構(gòu)分析與實(shí)例詳解
- Scala機(jī)器學(xué)習(xí)
- Docker源碼分析
- DevOps:企業(yè)級(jí)CI/CD實(shí)戰(zhàn)
- Android深度探索(卷1):HAL與驅(qū)動(dòng)開發(fā)
- 百度SEO一本通
- 自己動(dòng)手構(gòu)造編譯系統(tǒng):編譯、匯編與鏈接
- Unity 2017經(jīng)典游戲開發(fā)教程:算法分析與實(shí)現(xiàn)
- 移動(dòng)終端應(yīng)用軟件開發(fā)實(shí)戰(zhàn)
- 嵌入式軟件調(diào)試技術(shù)
- TensorFlow+Android經(jīng)典模型從理論到實(shí)戰(zhàn)(微課視頻版)
- 云原生網(wǎng)關(guān)Traefik:入門、進(jìn)階與實(shí)戰(zhàn)
- DDD工程實(shí)戰(zhàn):從零構(gòu)建企業(yè)級(jí)DDD應(yīng)用
- 云原生Kubernetes全棧架構(gòu)師實(shí)戰(zhàn)