需求建模和表述的技術
編輯推薦: |
本文來自於部落格園,本文通過對建模技術的描述,從分解,提煉和消除矛盾進行需求分析。 |
核心概念
需求分析最常見的誤會是需求分析可以將需求做出成為方案,這是最大的誤區,需求應該是還原業務,應該以業務為線索,換句話說就是
需求分析—–>業務分析,但
需求分析–X–>方案分析。
什麼是分析
1.分解
2.提煉
3.消除矛盾
實際上分析就是分解–>提煉–>消除矛盾這麼一個過程。
分解
分解是解決複雜問題的基本方法,也是有效的方法。
1. 以業務流程為線索分解
如下圖,這種分解方法是按照目標系統->主題領域->業務事件->業務活動->業務步驟的過程分解下來,適用於資訊系統類軟體需求,資訊系統類軟體存在業務流,因此,採用此種結構較為合理。
2. 程式結構為主線索分解(不推薦)
這種分解結構以程式結構為主導,也是現在需求分析中最常見的方法,他割裂了與問題域之間的聯絡,容易導致問題域研究不足,降低需求質量和要求。
3. 基於場景的分解結構,對於決策支援系統、面向使用者的嵌入式系統而言,決策場景、使用場景就是主要的線索。怎麼來理解這一句話呢?這類系統更多的是計算機輔助的角色,與資訊系統的資訊流不同的是這類系統往往需要更即時的反饋,用以支援現場的反饋,因此更多強調任務性,也就是使用場景。舉個例子說明這個問題。
我們研發了一款產品,他的任務是解決護士查房任務中使用筆來記錄測量結果,導致要重複錄入的問題,那麼這個產品軟體的場景就是護士在查房中對多個病人的查房資料的管理需要。
這種系統適合按照回溯的方法來進行需求分析,如下圖:
4. 基於資料的分解結構,這種分解結構立足於程式內部的資料為主線索,這種分解對於需求分析師的要求是比較靠經於開發工程師的,至少要有開發經驗。
提煉
分解是一種自頂向下的一種分析技術,一般來說,分解的任何一線索都或破解其他線索的完整性,因此,分析師要建立全面的系統認識,進而進行自底向上的提煉,也可以把他叫成抽象。例如將每個業務中的類進行提煉,抽取公共部分,建立針對整個系統的全域性領域模型。這其實已經涉及到設計的領域了。
消除矛盾
消除矛盾是需求分析的一個必要過程,需求分析中,可能會出現相互矛盾、相互衝突的需求,這時候需要把收集的資訊集中在一起,找到這些線索消除矛盾,分析影響範圍。如有必要,需要進一步調研。
建模技術
什麼是建模和為什麼要建模
建模就是要把抽象的東西物化,這個就像開發商給你看的沙盤,開發商要說他的房子怎麼好怎麼好肯定不能手舞足蹈的在你面前比劃,如果這樣肯定賣不出去房子,因為這個太抽象了,大部分人是無法想象一個抽象的、空間的東西的,更不要說抽象的軟體了。
建模的目的就是為了視覺化,什麼是視覺化呢?就是還原我們的想法和現實情況進行物化的表示。建模的方法也多種多樣。
一是可以採用基於現實的原型建模,包括低精度的和高精度的。
所謂低精度原型是指採用手繪等方法,快速還原你要設計的系統,適用於前期系統的溝通和需求的捕獲,當然,也可以用在需求的初步分析上,這跟在咖啡廳的紙巾上創造是一個道理,這種方法的特點是可以快速的反應你的想法和確認你要得到的資訊,弊端就是不正式,容易丟失;
所謂高精度原型是指採用計算機的方法,一比一還原要實現的系統,甚至能夠實現一些基本的業務互動,這種適合於後期的需求細化和軟體實現,對於需求的溝通非常有作用,這種方法的優點是可以還原真實的想法,甚至可以根據原型實現軟體,弊端是工作量巨大,變更影響也巨大。
二是基於“設計語言”的設計建模,這也有很多方法,比如UML、BMPN,因此,選擇合適的建模方法是很重要的。
建模的原則
1.不要為了建模而建模
2.最好的模型是與現實聯絡的
3.選擇建立什麼模型對如何動手解決問題和如何形成解決方案有深遠影響
4.單個模型是不充分的,對每個重要的系統最好用一組幾乎獨立的模型去處理。
使用UML
Unified Modeling Language,是一種語言,很簡單,語言是什麼?語言是交流工具,那麼語言的特點就是要統一大家才能聽懂,所以這就是UML。從交流的層面來講,UML也就是一個符號系統,某一種符號表示某一種意思,這樣簡單理解就可以了,不要搞得太複雜。
說到UML是一個符號系統,自然而然,符號系統就能按照自己的方式組織表達出一定的意思,這個在UML中就是圖,我們來看看對需求分析和建模有幫助的幾種圖。
跨職能流程圖
跨職能流程圖來源於商業建模領域。跨職能流程圖顯示程序中各步驟之間的關係以及執行它們的職能單位。可以使用跨職能流程圖顯示一個程序在各部門之間的流程,或者顯示一個程序是如何影響公司中的不同職能單位的。
這個圖用來分析部門間或系統間的業務程序是比較適合的工具。
可以看看示例:
用例圖
說用例圖呢,其實有點片面。用例圖是用來對用例分析技術執行結果的一種表示。用例分析技術包括用例圖和用例描述,我們重點講用例圖。
講用例圖必須把三個概念搞清楚:
用例
這裡展開說一下用例,我們要明確幾個點:
1. 用例場景是有步驟的,是對一系列業務步驟組成的一個業務活動,所以用例不宜過小,譬如點選某一個“確認”按鈕就可能不是一個用例;
2. 用例場景是有目標的,能為參與者帶來有價值的結果;
3. 用例是對一組用例例項的抽象,也就是說用例是有路徑的。
用例圖圖例
參與者:用一個火柴人表示
系統邊界:用一個邊框表示系統內外的分解
用例:用一個橢圓表示
Line"/>
他們組合在一起就是這個樣子:
關係
參與者與用例之間的關係,參與者與用例之間是一種通訊關係,使用一根帶箭頭或者不帶箭頭的線來表示,表示任何一方都可以傳送和接收訊息。
用例與用例之間的關係包括包含、擴充套件和泛化,表示方法如下:
包含關係: 表示基礎用例在某一個位置顯式的合併了另一個用例的行為,箭頭方向從基用例到被包含用例,看一個例子:
回顧資料是一個基用例,表示系統提供資料回顧的功能,護士可以通過這個功能“回顧資料”,“列印資料”是被包含用例,表示“回顧資料”之下還包含了“列印資料”這個功能。因此被包含用例不是孤立的,而是基用例的一部分。
擴充套件關係:基用例在間接說明的位置上隱式的合併了另外一個用例的行為,箭頭方向是從擴充套件用例到基用例,還是先看一個例子:
“列印報警列表”是一個完整的功能,但列印的前提是印表機就緒或空閒,因此“檢查印表機狀態”用例是可以被隱式的呼叫的,這種用例由系統提供,可以不與參與者進行互動。
泛化關係:本質是一種父子關係,泛化的用例繼承了父用例的行為,子用例可以增加或覆蓋父用例的行為,子用例可以出現在父用例出現的任何位置。箭頭方向指向父用例。看一個例子:
這是一個很顯式的父子關係,使用者可以使用任何替代方案去付款。
用例圖繪製的注意事項: 使用動賓短語描述用例;不要為了好看去過分的擴充套件,細節的內容可以在用例描述中去擴充套件。
關於用例獲取的方法,會在另外一篇文章來介紹,這裡不再深入。
活動圖
活動圖是用來描述用例內部流程的一種圖。當然活動圖還可以用來表述其他過程機理、業務過程及工作流等,所以跟流程圖有點類似,甚至表示的東西都差不多。區別是活動圖是一種面向物件的表述和支援並行流程。
活動圖的表示符號:
活動圖的好處是可以清晰的看到業務發生的過程,如果說用例是一個高層次的抽象,活動圖則是一個細節層次的的描述,因此用例與活動圖的配合可以起到很好的效果。可以看如下的示例:
元件圖
部署圖
需求描述的方式和方法
需求的描述,應該達到下面兩個目標:
任何閱讀需求的人對需求的解讀是一致的,不存在歧義性;
每一個讀者的解讀都與作者試圖表達的意思是一致的。
自然語言
功能需求的描述,可以從系統執行或者使用者使用的角度來寫。應該用一致的表達風格來表述需求。
對於從系統執行角度表述需求的方法,可以採用下面的表述:
【可選的前置條件】【可選的前置條件】系統應該【期望的系統響應】
例如:
SRS-002 在已經打開了心電引數監測開關時,系統執行主介面應該始終顯示至少一通道的心電波形。
對於從使用者的角度來表述需求的方法,可以採用下面的表述:
某個【使用者類別或者角色名稱】應該能夠【對某個物件】【做某事】【限定條件、響應時間或質量描述】
例如:
SRS-001 儀器的操作人員應該能夠通過引數開關開啟或關閉心電引數的監測。
為了更清楚的表達需求,我們可以將從使用者角度和系統角度的需求聯合起來,混合的表達,比如:
SRS-001 儀器的操作人員應該能夠通過引數開關開啟或關閉心電引數的監測。
SRS-002 在已經打開了心電引數監測開關時,系統執行主介面應該始終顯示至少一通道的心電波形。
SRS-003 在儀器關閉心電引數監測開關時,系統執行的主介面應該不顯示心電引數的任何資訊,對應的心電引數顯示區域應該能夠被其他引數顯示使用。
當然,我們在從使用者角度描述功能需求的時候,對於不同使用者類別的功能,應該加以區分,並明確的做出說明,比如
寫作風格
需求分析師要記住這一點,需求文件不是文學作品。因此不用在需求文件中去展現你的文采和學識,要在需求文件中去展現你的邏輯思維,因此編寫需求文件時,要注意:
簡潔和明確,語法,斷句要正確。儘量使用短句;
舉個例子:
系統應該提供引數開關的能力修改為系統應該能夠開啟或關閉引數則更加簡潔明瞭
術語定義和字典,對於術語,要採用統一的術語定義,對於專有名詞,要有字典;
使用關鍵詞應該,並對使用的關鍵詞進行定義,比如
應該是系統應當具備這樣的功能
需求條目獨立,避免使用大段文字表述多個需求,還是看前面的例子
SRS-001 儀器的操作人員應該能夠通過引數開關開啟或關閉心電引數的監測。SRS-002 在已經打開了心電引數監測開關時,系統執行主介面應該始終顯示至少一通道的心電波形。SRS-003 在儀器關閉心電引數監測開關時,系統執行的主介面應該不顯示心電引數的任何資訊,對應的心電引數顯示區域應該能夠被其他引數顯示使用。
應該修改為下面的表述
1.SRS-001 儀器的操作人員應該能夠通過引數開關開啟或關閉心電引數的監測。
2.SRS-002 在已經打開了心電引數監測開關時,系統執行主介面應該始終顯示至少一通道的心電波形。
3.SRS-003 在儀器關閉心電引數監測開關時,系統執行的主介面應該不顯示心電引數的任何資訊,對應的心電引數顯示區域應該能夠被其他引數顯示使用。
4.Note:那麼什麼時候應該這樣寫呢?判斷依據很簡單,你寫的一段文字中有多個句子都可以獨立測試。