第12章 分析建模
在技術(shù)層次上,軟件工程是從一系列建模任務(wù)開始的,這些任務(wù)導(dǎo)致了對被建立的軟件的完整的需求規(guī)約和全面的設(shè)計的表示。分析模型——實際上是一組模型,是系統(tǒng)的第一個技術(shù)表示。在過去的數(shù)年中,人們提出了許多種分析建模的方法,然而,其中兩種在分析建模領(lǐng)域占有主導(dǎo)地位,第一個是“結(jié)構(gòu)化分析”,這是傳統(tǒng)的建模方法,將在本章進行描述。另一種方法——“面向?qū)ο蟮姆治觥?,將在?0章詳細介紹。12.8節(jié)將對其他普遍使用的分析方法進行簡要的介紹。
結(jié)構(gòu)化分析是一種建立模型的活動。通過使用滿足第11章描述的操作性分析原則的符號體系,我們創(chuàng)建描述信息(數(shù)據(jù)和控制)內(nèi)容和流的模型、依據(jù)功能和行為對系統(tǒng)進行劃分、并描述必須要建立的要素。結(jié)構(gòu)化分析不是被所有的使用者一致使用的單一方法,相反,它是發(fā)展了幾乎20多年的一個混合物。
可能沒有其他的軟件工程方法引起了如此多的興趣、被如此眾多的人試用(經(jīng)常是被拋棄,然后再試用)、激起如此多的批評、以及引發(fā)如此多的辯論,但這種方法成功了,并在軟件工程界獲得了大量的追隨者。
在這個學(xué)科的創(chuàng)始書籍中,Tom DeMarco[DEM79]這樣描述結(jié)構(gòu)化分析:
回顧被識別的問題和分析階段的失敗,我建議對分析階段的目標進行以下的增補。
·分析的產(chǎn)品必須是高度可維護的。這特別被應(yīng)用于目標文檔(軟件需求規(guī)約)。
·必須使用有效的劃分方法控制問題的規(guī)模。維多利亞時代小說式的規(guī)約是不行的。
·盡可能地使用圖形符號。
·必須區(qū)分邏輯的(本質(zhì)的)和物理的(實現(xiàn))考慮。
至少,我們需要:
·某種方法來幫助我們劃分需求,并在規(guī)約前用文檔記錄該劃分。
·某種跟蹤和評價接口的手段。
·比敘述性的正文更好的新工具來描述邏輯和策略。
這樣,Tom DeMarco建立了在世界上使用廣泛的分析方法的主要目標。在本章,我們將考察這種方法及其擴展。
12.1 簡史
象許多對軟件工程的重要貢獻一樣,結(jié)構(gòu)化分析并不是由里程碑式的明確地涉及這個主題的一篇文章或一本書引入的。分析建模的早期工作開始于1960年代后期和1970年代初期,但結(jié)構(gòu)化分析方法的第出現(xiàn)是作為另一個重要課題——結(jié)構(gòu)化設(shè)計的附屬品而出現(xiàn)的。研究者(如參考文獻[STE74]和[YOU78]需要一種圖形符號體系來表示數(shù)據(jù)和對數(shù)據(jù)進行變換的處理(加工),這些處理將終被映射到體系結(jié)構(gòu)設(shè)計中去。
術(shù)語“結(jié)構(gòu)化分析”,初由Douglas Ross提出,由DeMarco[DEM79]進行了推廣。在他關(guān)于這個主題的書中,DeMarco引入并命名了使得分析員可以創(chuàng)建信息流模型的主要圖形記號、提出了使用這些符號的啟發(fā)信息、建議“數(shù)據(jù)字典”和“處理說明”可以作為信息流模型的補充、并給出了說明如何使用這種新方法的大量實例。在以后的幾年中, Page-Jones[PAG80]、Gane和Sarson[GAN82]等人提出了結(jié)構(gòu)化分析方法的一些變種,在這些變種中,方法關(guān)注于信息系統(tǒng)的應(yīng)用,而沒有提供足夠的符號來表示實時工程問題中的控制和行為方面的問題。
在1980年代中期,結(jié)構(gòu)化分析(當試圖應(yīng)用于面向控制的應(yīng)用中時)的不足明顯地表現(xiàn)了出來。Ward和Mellor[WAR85]以及以后的Hatly和Pirbhai[HAT87]實時引入了“擴展”版結(jié)構(gòu)化分析,這些擴展版導(dǎo)致了可以有效地應(yīng)用于工程問題的一個更加強壯的分析方法。人們還進行了開發(fā)一致符號體系的努力[BRU88]以及適應(yīng)CASE工具使用的現(xiàn)代處理[YOU89]方法。
12.2 分析模型的元素
分析模型必須達到三個主要目標:(1)描述客戶的需要;(2)建立創(chuàng)建軟件設(shè)計的基礎(chǔ);(3)定義在軟件完成后可以被確認的一組需求。為了達到這些目標,在結(jié)構(gòu)化分析中導(dǎo)出的分析模型采用圖12—1所描述的形式。
在模型的核心是“數(shù)據(jù)字典”——包含了軟件使用或生產(chǎn)的所有數(shù)據(jù)對象描述的中心庫。圍繞著這個核心有三種圖,“實體—關(guān)系圖”(ERD)描述數(shù)據(jù)對象間的關(guān)系,ERD是用來進行數(shù)據(jù)建?;顒拥挠浱?,在ERD中出現(xiàn)的每個數(shù)據(jù)對象的屬性可以使用“數(shù)據(jù)對象描述”來描述。
“數(shù)據(jù)流圖”(DFD)服務(wù)于兩個目的:(1)指明數(shù)據(jù)在系統(tǒng)中移動時如何被變換;(2)描述對數(shù)據(jù)流進行變換的功能(和子功能)。DFD提供了附加的信息,它們可以被用于信息域的分析,并作為功能建模的基礎(chǔ)。在DFD中出現(xiàn)的每個功能的描述包含在“加工規(guī)約”(PSPEC)中。
“狀態(tài)—變遷圖”(STD)指明作為外部事件的結(jié)果,系統(tǒng)將如何動作,為此,STD表示了系統(tǒng)的各種行為模式(稱為“狀態(tài)”)以及在狀態(tài)間進行變遷的方式,STD是行為建模的基礎(chǔ)。關(guān)于軟件控制方面的附加信息包含在“控制規(guī)約”(CSPEC)中。
分析模型包含了圖12-1中提到的各種圖、規(guī)約、描述和字典。以下各節(jié)將對分析模型中的這些元素進行更加詳細的討論。
12.3 數(shù)據(jù)建模
數(shù)據(jù)建?;卮鹋c任何數(shù)據(jù)處理應(yīng)用相關(guān)的一組特定問題:系統(tǒng)處理哪些主要的數(shù)據(jù)對象?每個數(shù)據(jù)對象的組成如何,哪些屬性描述了這些對象?這些對象當前位于何處?每個對象與其他對象有哪些關(guān)系?對象和變換它們的處理之間有哪些關(guān)系?
在技術(shù)層次上,軟件工程是從一系列建模任務(wù)開始的,這些任務(wù)導(dǎo)致了對被建立的軟件的完整的需求規(guī)約和全面的設(shè)計的表示。分析模型——實際上是一組模型,是系統(tǒng)的第一個技術(shù)表示。在過去的數(shù)年中,人們提出了許多種分析建模的方法,然而,其中兩種在分析建模領(lǐng)域占有主導(dǎo)地位,第一個是“結(jié)構(gòu)化分析”,這是傳統(tǒng)的建模方法,將在本章進行描述。另一種方法——“面向?qū)ο蟮姆治觥?,將在?0章詳細介紹。12.8節(jié)將對其他普遍使用的分析方法進行簡要的介紹。
結(jié)構(gòu)化分析是一種建立模型的活動。通過使用滿足第11章描述的操作性分析原則的符號體系,我們創(chuàng)建描述信息(數(shù)據(jù)和控制)內(nèi)容和流的模型、依據(jù)功能和行為對系統(tǒng)進行劃分、并描述必須要建立的要素。結(jié)構(gòu)化分析不是被所有的使用者一致使用的單一方法,相反,它是發(fā)展了幾乎20多年的一個混合物。
可能沒有其他的軟件工程方法引起了如此多的興趣、被如此眾多的人試用(經(jīng)常是被拋棄,然后再試用)、激起如此多的批評、以及引發(fā)如此多的辯論,但這種方法成功了,并在軟件工程界獲得了大量的追隨者。
在這個學(xué)科的創(chuàng)始書籍中,Tom DeMarco[DEM79]這樣描述結(jié)構(gòu)化分析:
回顧被識別的問題和分析階段的失敗,我建議對分析階段的目標進行以下的增補。
·分析的產(chǎn)品必須是高度可維護的。這特別被應(yīng)用于目標文檔(軟件需求規(guī)約)。
·必須使用有效的劃分方法控制問題的規(guī)模。維多利亞時代小說式的規(guī)約是不行的。
·盡可能地使用圖形符號。
·必須區(qū)分邏輯的(本質(zhì)的)和物理的(實現(xiàn))考慮。
至少,我們需要:
·某種方法來幫助我們劃分需求,并在規(guī)約前用文檔記錄該劃分。
·某種跟蹤和評價接口的手段。
·比敘述性的正文更好的新工具來描述邏輯和策略。
這樣,Tom DeMarco建立了在世界上使用廣泛的分析方法的主要目標。在本章,我們將考察這種方法及其擴展。
12.1 簡史
象許多對軟件工程的重要貢獻一樣,結(jié)構(gòu)化分析并不是由里程碑式的明確地涉及這個主題的一篇文章或一本書引入的。分析建模的早期工作開始于1960年代后期和1970年代初期,但結(jié)構(gòu)化分析方法的第出現(xiàn)是作為另一個重要課題——結(jié)構(gòu)化設(shè)計的附屬品而出現(xiàn)的。研究者(如參考文獻[STE74]和[YOU78]需要一種圖形符號體系來表示數(shù)據(jù)和對數(shù)據(jù)進行變換的處理(加工),這些處理將終被映射到體系結(jié)構(gòu)設(shè)計中去。
術(shù)語“結(jié)構(gòu)化分析”,初由Douglas Ross提出,由DeMarco[DEM79]進行了推廣。在他關(guān)于這個主題的書中,DeMarco引入并命名了使得分析員可以創(chuàng)建信息流模型的主要圖形記號、提出了使用這些符號的啟發(fā)信息、建議“數(shù)據(jù)字典”和“處理說明”可以作為信息流模型的補充、并給出了說明如何使用這種新方法的大量實例。在以后的幾年中, Page-Jones[PAG80]、Gane和Sarson[GAN82]等人提出了結(jié)構(gòu)化分析方法的一些變種,在這些變種中,方法關(guān)注于信息系統(tǒng)的應(yīng)用,而沒有提供足夠的符號來表示實時工程問題中的控制和行為方面的問題。
在1980年代中期,結(jié)構(gòu)化分析(當試圖應(yīng)用于面向控制的應(yīng)用中時)的不足明顯地表現(xiàn)了出來。Ward和Mellor[WAR85]以及以后的Hatly和Pirbhai[HAT87]實時引入了“擴展”版結(jié)構(gòu)化分析,這些擴展版導(dǎo)致了可以有效地應(yīng)用于工程問題的一個更加強壯的分析方法。人們還進行了開發(fā)一致符號體系的努力[BRU88]以及適應(yīng)CASE工具使用的現(xiàn)代處理[YOU89]方法。
12.2 分析模型的元素
分析模型必須達到三個主要目標:(1)描述客戶的需要;(2)建立創(chuàng)建軟件設(shè)計的基礎(chǔ);(3)定義在軟件完成后可以被確認的一組需求。為了達到這些目標,在結(jié)構(gòu)化分析中導(dǎo)出的分析模型采用圖12—1所描述的形式。
在模型的核心是“數(shù)據(jù)字典”——包含了軟件使用或生產(chǎn)的所有數(shù)據(jù)對象描述的中心庫。圍繞著這個核心有三種圖,“實體—關(guān)系圖”(ERD)描述數(shù)據(jù)對象間的關(guān)系,ERD是用來進行數(shù)據(jù)建?;顒拥挠浱?,在ERD中出現(xiàn)的每個數(shù)據(jù)對象的屬性可以使用“數(shù)據(jù)對象描述”來描述。
“數(shù)據(jù)流圖”(DFD)服務(wù)于兩個目的:(1)指明數(shù)據(jù)在系統(tǒng)中移動時如何被變換;(2)描述對數(shù)據(jù)流進行變換的功能(和子功能)。DFD提供了附加的信息,它們可以被用于信息域的分析,并作為功能建模的基礎(chǔ)。在DFD中出現(xiàn)的每個功能的描述包含在“加工規(guī)約”(PSPEC)中。
“狀態(tài)—變遷圖”(STD)指明作為外部事件的結(jié)果,系統(tǒng)將如何動作,為此,STD表示了系統(tǒng)的各種行為模式(稱為“狀態(tài)”)以及在狀態(tài)間進行變遷的方式,STD是行為建模的基礎(chǔ)。關(guān)于軟件控制方面的附加信息包含在“控制規(guī)約”(CSPEC)中。
分析模型包含了圖12-1中提到的各種圖、規(guī)約、描述和字典。以下各節(jié)將對分析模型中的這些元素進行更加詳細的討論。
12.3 數(shù)據(jù)建模
數(shù)據(jù)建?;卮鹋c任何數(shù)據(jù)處理應(yīng)用相關(guān)的一組特定問題:系統(tǒng)處理哪些主要的數(shù)據(jù)對象?每個數(shù)據(jù)對象的組成如何,哪些屬性描述了這些對象?這些對象當前位于何處?每個對象與其他對象有哪些關(guān)系?對象和變換它們的處理之間有哪些關(guān)系?

