需(xu)求(qiu)分析(xi)師在需(xu)求(qiu)調研分析(xi)工(gong)作中經常會用到各(ge)種分析(xi)方法(fa)(fa),但對各(ge)種建模(mo)方法(fa)(fa)沒有體系化的認(ren)識,經常講概念混淆。本文從(cong)常用的結構化分析(xi)方法(fa)(fa)和面向對象分析(xi)方法(fa)(fa)著手,對各(ge)種建模(mo)方法(fa)(fa)進(jin)行梳理,幫助理解(jie)其含義及作用。
建模概述
什么是建模?
建模就是采用表格化、圖形化、公式化的方式,將系統的構成及其構成間的關系呈現給人們的一種技術方法。[1]可能是因為軟件本身的不可見,使得軟件的建模也顯得抽象,但在平常生活中,建模隨處可見,比如蓋房子,需要畫圖紙,畫圖紙就是建模的過程,而圖紙就是建模產出的模型。在樓盤預售時,房子都還沒建好,地產商會先做個縮小版的原型出來,甚至做個樣板房讓顧客有直觀的感受,這個也是建模。當房子賣出去了,屋主需要裝修了,找裝修公司設計,設計師根據屋主需要設計一套圖紙,甚至細到水電的走線,這些也是建模。因此將開發軟件比作蓋房子,其建模過程就相當于繪制圖紙的過程。
可(ke)以說對軟(ruan)件系(xi)(xi)統(tong)進行(xing)(xing)(xing)建模的目的是幫助我(wo)(wo)們按(an)照實際情(qing)況(kuang)或(huo)按(an)我(wo)(wo)們需求的樣式對系(xi)(xi)統(tong)進行(xing)(xing)(xing)可(ke)視化;提供(gong)一(yi)種(zhong)詳(xiang)細說明(ming)系(xi)(xi)統(tong)的結(jie)構或(huo)行(xing)(xing)(xing)為的方法;給(gei)出一(yi)個知道系(xi)(xi)統(tong)構造的模板;對我(wo)(wo)們所作出的決策進行(xing)(xing)(xing)文檔化。
建模演變歷程
軟件建模并不是從來就有的,而是隨著軟件工程的發展而不斷演變。主要經過了三個階段。
第一階段:程序=數據結構+算法
出現于20世紀50~60年代,軟件開發主要解決的是科學計算問題,Fortran語言是其代表。其建模關鍵點是選擇合適的數據結構和算法。
第二階段:結構化分析方法
出現于20世紀60~70年代,將解決一些與數據處理相關的問題,例如計費等。COBOL、C語言是其代表。其建模關鍵點有兩方面,一是確定有哪些數據,格式是什么,如何存儲,主要通過E/R模型表達;二是確定數據的加工、處理過程,主要通過DFD(數據流圖)表達。
第三階段:面向對象分析方法
出現于20世紀80~90年代,信息系統覆蓋了更多業務過程,數據不再是唯一的視角,事(業務流程)、人的視角越來越重要,因此加入更多這方面的建模工具。
目(mu)前結構化分(fen)析(xi)方法(fa)和面(mian)向對象分(fen)析(xi)方法(fa)仍廣泛應用。
結構化分析方法
結構化分析方法(Structured Analysis,簡稱SA)是將待解決的問題看做一個系統,從而用系統科學的思想方法(抽象、分解、模塊化)來分析和解決問題,并基于功能分解設計系統結構,通過不斷把復雜的處理逐層分解來簡化問題,其最核心思想是自頂向下的分解。
結構化分析方法模型如下圖所示:
數據字典是模型的核心,是關于數據的信息集合,也就是對數據流圖中包含的所有元素定義的集合。對于數據流圖中出現的所有被命名的圖形元素加以定義,使得每個圖形元素的名字都有確切的解釋。
實體關系圖(ER圖):描述數據對象間的關系,用于數據建模。
數據流圖(DFD圖):描述了數據流在系統中流動的過程,以及對數據流進行變換的功能,用于功能建模。
狀態遷移圖(STD圖):描述了對外部事件的響應方式,表示了系統的各種行為模式(稱為狀態)以及在狀態間進行變遷的方式,用于行為建模。
可見,結構(gou)化分析方(fang)法(fa)包含(han)3層建(jian)(jian)模(mo),數據(ju)建(jian)(jian)模(mo)、功能建(jian)(jian)模(mo)以及行為(wei)建(jian)(jian)模(mo)。
數據建模——ER圖
數據模型是為了把用戶的數據要求清晰明確地表達出來所建立的一個概念性的模型,也稱為概念模型,因此數據建模也稱為概念建模。概念性模型是一種面向問題的數據模型,是按照用戶的觀點來對數據和信息進行建模。它描述了從用戶角度看到的數據,也反映了用戶的現實環境。
數據(ju)建模的(de)目標(biao)是為了(le)明確下列與數據(ju)處(chu)理(li)相關的(de)特(te)定問(wen)題:
- 系統處理哪些主要的數據對象?
- 每個數據對象的組成如何?
- 哪些屬性描述了這些數據對象?
- 這些數據對象當前位于何處?
- 數據對象之間的關系?
- 數據對象和變換它們的處理之間有哪些關系?
數據模型常用ER圖表示,ER圖也稱實體關系圖(Entity Relationship Diagram),提供了表示實體類型、屬性和聯系的方法。用矩形表示實體型,矩形框內寫明實體名;用橢圓表示實體的屬性,并用無向邊將其與相應的實體型連接起來;用菱形表示實體型之間的聯系,在菱形框內寫明聯系名,并用無向邊分別與有關實體型連接起來,同時在無向邊旁標上聯系的類型(1:1,1:n或m:n)。ER圖示例如下圖所示。
另外,對于設計方面的數據建模包括概念建模、邏輯建模和物理建模,而需求分析中的數據建模相當于設計中第一階段的概念建模。由于是設計方面的建模方法,這里不再說明,詳細信息可網上查找“詳解數據建模的三個階段”。
功能建模——DFD圖
當數據或信息“流”過信息系統時將會被系統的功能所處理、加工活變換,再將處理或變換后的數據從系統中輸出,DFD圖從數據傳遞和加工角度,以圖形方式來表達系統的邏輯功能、數據在系統內部的邏輯流向和邏輯變換過程。而功能建模正是通過DFD圖將系統所需實現的功能繪制出來的過程。
DFD圖的基本組成包括數據流、加工、數據存儲和外部實體。通常用箭頭標志數據流,用圓或橢圓表示加工,用雙杠表示數據存儲,用方框表示外部實體,即數據的源點或終點。DFD圖示例如下圖所示。
行為建模——STD圖
STD圖(State Transition Diagram)用于描述系統或對象的狀態,以及導致系統或對象狀態發生改變的事件,從而描述系統的行為。它指明了作為特定事件的結果(狀態),在狀態中包含可能執行的行為。
STD圖中,用圓圈表示可得到的系統狀態,用箭頭表示從一種狀態向另一種狀態的遷移,在箭頭上要寫上導致遷移的信號或事件的名稱。STD圖示例如下圖所示。
面向對象分析方法
面向對象方法是從內部結構上模擬客觀世界 ,其基本思想認為對象是對現實世界客觀實體的描述 ,均由其屬性和相關操作組成 ,是系統描述的基本單位。面向對象方法更強調運用人類在日常的邏輯思維中經常采用的思想方法和原則 ,例如抽象、分類、繼承、聚合、封裝等 ,這使得軟件開發者能更有效地思考問題 ,并以其他人也能看得懂的方式把自己的認識表達出來。
面向對象方法包括面向對象需求分析(OOA)、面向對象設計(OOD)、面向對象編程(OOP)。而面向對象分析方法主要經過3個建模過程,包括結構建模、行為建模和功能建模,3中建模均采用統一建模語言 UML (Unified Modeling Language)。
根據UML2.0標準,一共定(ding)義(yi)了13種不同的(de)圖(tu),其功能(neng)各有不同,而OOA主要(yao)使用到其中的(de)5種,分別是類圖(tu)、活動圖(tu)、用例圖(tu)、構件圖(tu)和部署圖(tu)。
結構建模
結構建模也叫領域建模或概念建模,是對業務或系統的某個時刻或某段時間內的狀態進行系統化描述,一般使用結構型的UML圖進行結構建模。結構建模所表示的內容一般是靜態的,在一段時間內是不會變化的。如用類圖表示業務及業務之間的關系,用部署圖、構件圖表示系統的部署及架構設計。
類圖示例如下圖所示:
構件圖如下圖所示:
部署圖如下圖所示:
行為建模
行為建模是系統化地分析業務活動及業務流程的過程,一般使用行為型的UML圖進行結構建模。行為建模表達的是某段時間內事情是如何發展的,這些發展最后會達到怎樣的效果。
業務流程分為生產性流程、管理性流程和支持性流程。生產性流程是流程中最重要的部分,是企業/組織價值體現的核心;管理性流程是對生產性流程的管控,通常是有管理層發現的,對一些質量、效率進行監督的控制性流程;支持性流程是對生產性流程的一種補充,通常是由協作部門、本部門員工執行的工作。如果拿軟件開發過程來比喻的話,需求分析、軟件設計、軟件編碼、軟件測試是生產性流程;項目管理、質量保證是管理性流程;而文檔配置等屬于支持性流程。通常生產性流程是最容易標識的,而管理性流程和支持性流程比較容易忽略,因此在需求分析時要特別注意。[2]
活動圖示例如下圖所示:
功能建模
功能建模是在結構建模和行為建模的基礎上,識別出通過系統實現的部分,一般使用UML用例圖表現,描述系統應具有的功能,用于實現用戶的日常需要。
另外,在用例圖的基礎上通過原型工具制作出可視化原型也屬于功能建模的范疇,通過原型用戶能更直觀地感知即將開發出來的系統的模樣,更好地引出客戶需求,同時避免后期需求變更。目前一般采用Axure原型工具制作系統或功能原型。
用例圖示例如下圖所示:
結束語
可以看(kan)出結構化分析(xi)方(fang)法(fa)(fa)和(he)面(mian)向對象(xiang)分析(xi)方(fang)法(fa)(fa)有(you)相(xiang)同(tong)的(de)(de)(de)地(di)方(fang),那(nei)就是(shi)(shi)都需要先理清(qing)業務概(gai)念及其關系,雖然SA稱(cheng)為數據(ju)建模(mo),而OOA稱(cheng)為結構建模(mo),但本質(zhi)是(shi)(shi)相(xiang)同(tong)的(de)(de)(de)。不同(tong)的(de)(de)(de)地(di)方(fang)在(zai)(zai)于(yu)SA更偏向對數據(ju)流的(de)(de)(de)分析(xi),而OOA更偏向對對象(xiang)行(xing)為的(de)(de)(de)分析(xi),而且在(zai)(zai)現階段OOA的(de)(de)(de)應用更為廣泛,但不得不說的(de)(de)(de)是(shi)(shi),無論(lun)SA還是(shi)(shi)OOA都只(zhi)是(shi)(shi)需求分析(xi)的(de)(de)(de)方(fang)法(fa)(fa),關鍵(jian)還是(shi)(shi)在(zai)(zai)于(yu)使用它們(men)的(de)(de)(de)需求分析(xi)師。