- 現(xiàn)代軟件工程
- 周蘇
- 2608字
- 2020-05-29 11:56:08
3.7 面向數(shù)據(jù)流建模
面向數(shù)據(jù)流建模仍然是當(dāng)前使用最廣泛的需求分析表達(dá)方式之一(在結(jié)構(gòu)化分析中,數(shù)據(jù)建模是核心建模活動(dòng))。數(shù)據(jù)流圖(Data Flow Diagram,DFD)及相關(guān)的圖和信息不是UML的正式成分,但可以作為UML圖的補(bǔ)充來(lái)完善對(duì)系統(tǒng)需求和流程的認(rèn)識(shí)。
DFD采取了系統(tǒng)的輸入-處理-輸出觀點(diǎn),也就是說(shuō),流入軟件的數(shù)據(jù)對(duì)象,經(jīng)過(guò)處理元素變換,最后以結(jié)果數(shù)據(jù)對(duì)象的形式流出軟件。帶標(biāo)記的箭頭表示數(shù)據(jù)對(duì)象,圓圈(也稱為泡泡)表示轉(zhuǎn)換。DFD使用分層的方式表示,即第一個(gè)數(shù)據(jù)流模型(有時(shí)也稱為第0層DFD或環(huán)境圖)表示整個(gè)系統(tǒng),隨后的數(shù)據(jù)流圖改進(jìn)環(huán)境圖,在每個(gè)后續(xù)層提供更多的細(xì)節(jié)。
3.7.1 創(chuàng)建數(shù)據(jù)流模型
數(shù)據(jù)流圖有助于軟件工程師開(kāi)發(fā)信息域的模型,并同時(shí)開(kāi)發(fā)功能域的模型。當(dāng)把DFD逐步細(xì)化時(shí),分析師同時(shí)也就完成了系統(tǒng)功能分解。與此同時(shí),當(dāng)數(shù)據(jù)在應(yīng)用系統(tǒng)的多個(gè)處理間流動(dòng)時(shí),DFD的細(xì)化結(jié)果導(dǎo)致了相應(yīng)的數(shù)據(jù)細(xì)化。
導(dǎo)出數(shù)據(jù)流圖時(shí)有一些簡(jiǎn)單而有用的指導(dǎo)原則:①第0層的數(shù)據(jù)流圖應(yīng)將軟件或系統(tǒng)描述為一個(gè)泡泡;②應(yīng)仔細(xì)標(biāo)記主要的輸入和輸出;③通過(guò)把選定的處理、數(shù)據(jù)對(duì)象和數(shù)據(jù)存儲(chǔ)分離為下一層表示而開(kāi)始細(xì)化過(guò)程;④應(yīng)使用有意義的名稱標(biāo)記所有的箭頭和泡泡;⑤當(dāng)從一個(gè)層轉(zhuǎn)到另一個(gè)層時(shí)要保持信息流連續(xù)性,也就是說(shuō),流入系統(tǒng)或流入某一層變換的數(shù)據(jù)對(duì)象必須與流入更細(xì)化層的變換具有相同的數(shù)據(jù)對(duì)象(或其組成部分);⑥一次細(xì)化一個(gè)泡泡。
圖3-15顯示了SafeHome安全功能的第0層DFD,主要的外部實(shí)體(方框)產(chǎn)生系統(tǒng)所使用的信息并使用系統(tǒng)產(chǎn)生的信息,帶標(biāo)記的箭頭代表數(shù)據(jù)對(duì)象或數(shù)據(jù)對(duì)象類型的層次。例如,“用戶指令和數(shù)據(jù)”包括了所有的配置命令、所有的激活或解除命令、所有各式各樣的交互活動(dòng),以及所有限定或擴(kuò)展某命令的輸入數(shù)據(jù)。
圖3-15 SafeHome安全功能的環(huán)境層DFD
把第0層的DFD擴(kuò)展到第1層數(shù)據(jù)流模型。根據(jù)語(yǔ)法解析,動(dòng)詞是SafeHome系統(tǒng)的處理,在后續(xù)的DFD中用泡泡表示;名詞是外部實(shí)體(方框)、數(shù)據(jù)或控制對(duì)象(箭頭)、數(shù)據(jù)存儲(chǔ)(雙橫線),名詞和動(dòng)詞之間可以互相連接起來(lái)。因此,在任何DFD層次中對(duì)某個(gè)泡泡的處理敘述文字進(jìn)行語(yǔ)法解析,可以產(chǎn)生許多關(guān)于如何細(xì)化到下一個(gè)層次的有用信息。使用這些信息生成第1層的DFD如圖3-16所示。
圖3-16 SafeHome安全功能的第1層DFD
圖3-15中顯示環(huán)境層的處理被擴(kuò)展為圖3-16的6個(gè)處理,這些處理來(lái)自語(yǔ)法解析檢查。類似地,也通過(guò)解析獲得第1層處理之間的信息流。此外,在第0層和第l層之間要保持信息流的連續(xù)性。
在DFD第1層中表示的處理可以被進(jìn)一步細(xì)化到更低的層次。例如,細(xì)化監(jiān)測(cè)傳感器處理如圖3-17所示的第2層DFD并保持信息流的連續(xù)性。
持續(xù)進(jìn)行DFD的求精,努力細(xì)化DFD,直到每個(gè)泡泡都是“功能單一的”,并且該功能可以很容易地成為一個(gè)程序構(gòu)件。
圖3-17 細(xì)化監(jiān)測(cè)傳感器處理的第2層DFD
3.7.2 創(chuàng)建控制流模型
對(duì)于很多類應(yīng)用問(wèn)題來(lái)說(shuō),為了獲得關(guān)于軟件需求的有益理解,使用數(shù)據(jù)模型和數(shù)據(jù)流圖是很有必要的。然而,有一大類應(yīng)用問(wèn)題是事件驅(qū)動(dòng)而不是數(shù)據(jù)驅(qū)動(dòng)的;這類問(wèn)題產(chǎn)生控制信息而不是報(bào)告或顯示信息,并且處理信息時(shí)非常關(guān)注時(shí)間和性能。因此,這樣的應(yīng)用系統(tǒng)除了數(shù)據(jù)流建模外,還需要使用控制流建模。
事件或控制項(xiàng)可以實(shí)現(xiàn)為布爾值(如真或假、開(kāi)或關(guān)、1或0)或條件的離散列表(空、擁擠、滿)。為了選擇潛在的候選事件,建議使用如下的指導(dǎo)原則。
●列出所有被軟件“讀”的傳感器。
●列出所有的中斷條件。
●列出操作人員能夠啟動(dòng)的所有“開(kāi)關(guān)”。
●列出所有的數(shù)據(jù)條件。
●回顧對(duì)處理敘述所進(jìn)行的名詞或動(dòng)詞的語(yǔ)法解析,考察所有可能作為控制規(guī)格說(shuō)明輸入/輸出的“控制項(xiàng)”。
●通過(guò)標(biāo)識(shí)其狀態(tài)來(lái)描述系統(tǒng)的行為,標(biāo)識(shí)如何達(dá)到這些狀態(tài),并定義狀態(tài)間的遷移。
●關(guān)注可能的疏忽,即關(guān)注那些描述控制中非常普遍的錯(cuò)誤。例如,提問(wèn)“有什么其他
途徑可以達(dá)到或離開(kāi)這個(gè)狀態(tài)嗎?”
3.7.3 控制規(guī)格說(shuō)明
控制規(guī)格說(shuō)明使用兩種方式表現(xiàn)系統(tǒng)的行為,包含一個(gè)行為序列說(shuō)明的狀態(tài)圖,也可能包括程序激活表,即行為的組合說(shuō)明。
圖3-18所示為SafeHome的第l層控制流模型描述了一個(gè)初步的狀態(tài)圖,圖中顯示了當(dāng)系統(tǒng)在這個(gè)層次上定義的4個(gè)狀態(tài)之間來(lái)回移動(dòng)時(shí),如何對(duì)事件做出響應(yīng)。通過(guò)考察狀態(tài)圖,軟件工程師可以確定系統(tǒng)的行為,而且更重要的是可以確定所描述的行為中是否存在“空洞”(holes)。
例如,狀態(tài)圖(見(jiàn)圖3-18)指明:當(dāng)系統(tǒng)重置、激活或電源關(guān)閉時(shí),可能會(huì)發(fā)生Idle(空閑)狀態(tài)的轉(zhuǎn)換;如果激活系統(tǒng)(也就是打開(kāi)報(bào)警系統(tǒng)),將會(huì)轉(zhuǎn)換到MonitoringSystemStatus狀態(tài)(監(jiān)測(cè)系統(tǒng)狀態(tài)),顯示信息也將發(fā)生變化,并調(diào)用處理monitorAndControlSystem。源自MonitoringSystemStatus狀態(tài)的轉(zhuǎn)換有兩種:①當(dāng)系統(tǒng)撤銷激活時(shí),轉(zhuǎn)換回到Idle空閑狀態(tài);②當(dāng)觸發(fā)傳感器時(shí),轉(zhuǎn)換到ActingOnAlarm狀態(tài)。在評(píng)審中將考慮所有的轉(zhuǎn)換和所有的內(nèi)容。
圖3-18 SafeHome安全功能的狀態(tài)圖
行為表達(dá)的一種非常不同的模式是處理激活表(Process Activation Table,PAT),它表示了在狀態(tài)圖中處理環(huán)境所包含的信息,不包括狀態(tài)。因此這張表指出了當(dāng)有事件發(fā)生時(shí)會(huì)引入流程模型中哪個(gè)處理(泡泡)。處理激活表可以作為設(shè)計(jì)人員的指南,建立在這一級(jí)上可以執(zhí)行的處理控制。SafeHome第1層流程模型的處理激活表如圖3-19所示。
圖3-19 SafeHome安全功能的處理激活表
控制規(guī)格說(shuō)明描述了系統(tǒng)的行為,但是沒(méi)有提供關(guān)于處理的內(nèi)部工作信息,其實(shí),這些處理激活了行為的結(jié)果。
3.7.4 處理規(guī)格說(shuō)明
處理規(guī)格說(shuō)明(Process Specification,PSPEC)用于描述出現(xiàn)在求精過(guò)程中最終層次的所有流程模型的處理。處理規(guī)格說(shuō)明的內(nèi)容可以包括敘述性正文、處理算法的程序設(shè)計(jì)語(yǔ)言(Program Design Language,PDL)描述、數(shù)學(xué)方程、表或UML活動(dòng)圖。通過(guò)為流模型中的每個(gè)泡泡提供PSPEC,軟件工程師創(chuàng)建了“小型規(guī)格說(shuō)明”,小型規(guī)格說(shuō)明可以作為軟件構(gòu)件實(shí)現(xiàn)處理的設(shè)計(jì)指南。
為了說(shuō)明如何使用PSPEC,考慮在SafeHome的流程模型中表示“處理密碼”變換(見(jiàn)圖3-16),該功能的PSPEC可能采用如下形式。
處理規(guī)格說(shuō)明:處理密碼控制面板上。在SafeHome安全功能中“處理密碼”變換完成控制面板上的密碼確認(rèn)。“處理密碼”從“與用戶交互”功能接收4位密碼,將該密碼首先與存儲(chǔ)在系統(tǒng)中的主密碼進(jìn)行比較,如果與主密碼匹配,則向“顯示消息和狀態(tài)”功能傳送有效信息<valid id message=true>。如果與主密碼不匹配,則把4位密碼與次密碼表比較(這些密碼可能會(huì)授予房子的客人和(或)在房主不在家時(shí)需要進(jìn)入房子的工人)。如果密碼和表中的某項(xiàng)匹配,將向“顯示消息和狀態(tài)”功能傳送有效信息<valid id message=true>;如果不匹配,則向“顯示消息和狀態(tài)”功能傳送無(wú)效信息<valid id message=false>。
如果在此階段需要更多的算法細(xì)節(jié),程序設(shè)計(jì)語(yǔ)言描述也可以作為PSPEC的一部分包含在其中。然而,很多人認(rèn)為,PDL版本應(yīng)該推遲到構(gòu)件設(shè)計(jì)開(kāi)始時(shí)才確定。
- Core Data應(yīng)用開(kāi)發(fā)實(shí)踐指南
- Revit 2020中文版從入門(mén)到精通
- 軟件開(kāi)發(fā)生產(chǎn)率改進(jìn):軟件管理的有效領(lǐng)導(dǎo)力與量化方法
- Apache Pulsar原理解析與應(yīng)用實(shí)踐
- Swift開(kāi)發(fā)實(shí)戰(zhàn)
- Arduino項(xiàng)目開(kāi)發(fā):智能家居
- 3D打印創(chuàng)意小創(chuàng)客
- 搜索架構(gòu)之道:App中的搜索系統(tǒng)設(shè)計(jì)與優(yōu)化實(shí)踐
- 現(xiàn)代交換技術(shù)(第3版)
- Web前端性能優(yōu)化
- 分布式應(yīng)用系統(tǒng)架構(gòu)設(shè)計(jì)與實(shí)踐
- 軟件自動(dòng)化測(cè)試成功之道:典型工具、腳本開(kāi)發(fā)、測(cè)試框架和項(xiàng)目實(shí)戰(zhàn)
- React Cookbook中文版:87個(gè)案例帶你精通React框架
- 云計(jì)算工程
- AR與VR開(kāi)發(fā)實(shí)戰(zhàn)