從使用者需求,談架構設計| gelis 技術隨筆 - - 點部落
文章推薦指數: 80 %
我們介紹一個領域類別圖(Domain Class Diagram) 的反覆分析過程 ... 但是千萬不要將領域類別圖當作是一種高階的類別圖,因為所謂的高階,代表著會遺失 ...
軟體開發本身是一個複雜的工藝過程,牽涉到各種領域技術,大部分談軟體架構設計著重在軟體系統架構本身,如何妥善的分工、如何解決開發上的各種問題、使用哪一種DesignPattern來解決問題、如何快速開發等等,只不過,真正有用的軟體是對客戶有用的軟體、能替客戶解決問題的軟體,才是真正有價值的軟體。
本篇文章,筆者介紹,在UML的系統分析設計領域裡,如何從使用者需求出發,如何正確收集到使用者的需求,甚至與(Agile/Scrum)結合,在Agile或者Scrum強調的Sprint,我們再細分為,一個、到多個反覆設計(Iterations),在每一個Iteration所要完成的需求裡,又可以細切多個IterationModeling。
文章中,將介紹如何正確地進行IterationModeling.與ContinuousModeling,以便做到恰如其分的軟體架構設計。
前言
軟體開發本身是一個複雜的工藝過程,牽涉到各種領域技術,一般我們所聽到的軟體架構設計可能都只著重在軟體系統架構本身,比如:如何妥善的分工、如何解決開發上的各種問題、使用哪一種DesignPattern來解決問題、如何快速開發等等,只不過,真正有用的軟體是對客戶有用的軟體、能替客戶解決問題的軟體,才是真正有價值的軟體。
如果,您有非常妥善的軟體架構設計、並整合的CI/CD自動化整合測試部署、交付流程,也整合了Containers等相關技術,但是CI/CD過去卻不是使用者所想要的軟體,那你頂多只是做到了可快速的不斷的交付軟體直到客戶滿意為止,但,如果一開始的需求方向就錯誤了,那就不是CI/CD自動化整合測試部署、交付流程所能夠解決的問題,因為你的核心架構可能都需要重新翻寫。
當然,並不是說上述架構設計、自動化測試整合部署流程不重要,架構設計、自動化測試整合部署流程固然很重要,只是,相形之下,做出客戶需要的軟體,後續的各種軟體架構設計、自動化測試作業也才有真正的價值。
關於軟體架構設計
事實上,真實世界中的軟體架構設計應該必須由使用者需求出發,正確收集到使用者的需求,也才能夠正確地做出最佳的架構設計,就專案而言,所以,如果您在分析、與紀錄使用者需求所使用的方式,能與開發團隊相同,且一致的語言(透明化),這一致的語言可能還包括,你在分析階段所以使用的notations表示法,甚至到您開始做系統設計(SystemDesign)所使用的Architecturedocuments、甚至implement所定義的(Programmingrule/CodingStandard)等,都在這個的範圍內,也可以說,如果您分析工具如果是建築於團隊開發的共同規範之上,那麼不管你們是團隊進行內部溝通(SA對SD/SD對PG),或是與使用者溝通,都可以將Gap降至最低。
在我自己的開發團對裡,我們取用UML部分的圖形與notations來使用,若您運用的恰當,它可以幫助你在分析使用者需求時,釐清、切割清楚什麼是使用者最關心的,因為,這其實都會與你之後的架構設計息息相關。
為什麼我這麼說呢?
我下面分幾點為各位說明:
(1).在進行架構設計時,如果要避免「過度設計」,使用UML的Boundary可明確規範出哪些是系統內、哪一些是系統外的。
(2).前期在規劃系統雛形時,使用UseCase+穩健圖+ClassDiagram也可幫助您規劃系統雛形架構。
(3).透過UML這些Natation可以幫助您規劃系統時候,是否有想清楚使用者要的是什麼?
(4).在UML當中進行分析設計與實作時的,反覆設計(Iterations)、漸進式(Incremental)的方法,可以完全對應到在敏捷(Agile/Scrum)裡面的衝刺(Sprint)
也能保有必須的架構設計?注意了,是「必須」的架構設計,要做到這一點,瞭解客戶需求、有效分析客戶需求,才會是重點。
收集與了解使用者需求
在這一次,我替某客戶開的OOAD/UML系統分析設計課程裡,其中一張投影片的內容。
一般來說,在座需求需求收集時,我會建議需求收集者採用的需求收集工具以簡單為主,能夠快速收集、回到公司後,也能夠快速閱讀、內化、瞭解、吸收的為主,盡量不要使用太複雜、繁雜的需求收集工具,這會影響需求收集的效果,需求收集效果受影響,是會間接的影響到需求收集的準確度。
使用案例分析進行的方式
在新興的使用案例分析方法裡,我慢慢搭配UserStory來收集使用者需求,許多人,會把UserStory與UseCase直接拿來做比較,但我則不然,我直接取用對專案有幫助的部分。
在UserStory裡,強調的是,”expressesoneveryspecific"need"thatauserhas.”
在UseCase強調的是:”interactionbetweentheuserandthesoftware.”
我則將他合併起來,面對不懂UseCase的客戶,我們瞭解客戶的“need!”,回到公司內化為“interactionbetweentheuserandthesoftware”,這樣一來,我們更容易瞭解客戶的需求,減低內化的失真機率。
需求訪談分析進行的階段:
訪談、瞭解使用者需求、收集需求(確認使用者想法)
從旁側擊:有時使用者自己都不見得瞭解自己的想法
瞭解使用者平常工作的模式「作業流程」(透過陪同使用者工作一天來了解使用者真正需要什麼?)
分析階段:
找出動作者、找出使用案例
誰來使用系統?誰會跟系統互動?
誰從系統取得資訊?誰將資訊提供給系統?
找出系統邊界,確認系統以內及系統以外的事物
由簡入繁(但也不要將使用案例畫的太繁瑣)
逐步增加使用案例的精確度(precision),不要一開始就陷入繁雜的細節
UML分析設計與實作時的,反覆設計(IterationModeling)
甚至在使用UML各項diagram與notations時,我們的開發團隊實際運作的軟體開發流程其實是(Agile/Scrum),在Agile或者Scrum強調的Sprint,我們再細分為,一個、到多個反覆設計(Iterations),在每一個Iteration所要完成的需求裡,又可以細切多個IterationModeling,並期望做到:
敏捷開發-快速反應
你無法凍結需求-最小產品交付
軟體架構設計-最小產品交付
在UML的系統分析裡面,我們使用「穩健圖(robustnessdiagram)」作為從UseCase到SequenceDiagram的催化劑,幫助系統分析師在繪製循序圖時,重新檢視使用案例,同時加入更多的物件思維,也因此可以更順暢地移動到純物件化的類別圖與循序圖設計。
且穩健分析利用B-C-E(邊界、控制、實體)來說明系統使用案例在執行時,動作者(Boundary)進行的流程(Control)、需要哪些實體(Entity)等,有機會,筆者會在下一篇文章詳細的介紹B-C-E(邊界、控制、實體)分析方法。
所以,使用UML進行分析時:
不會一次滿足所有使用案例、參與者
不會一次使用所有Diagrams的notations通常點到為止
使用「使用案例」長出其它「使用案例」與「參與者」
以房貸系統為例
需求分析師訪談結束後,取得如下客戶需求:
UseCaseScenario:
X山顧客或非X山顧客都可以使用瀏覽器到玉山首頁線上進行房屋貸款申請,非X山顧客而言,必須先填寫資料,才可進行線上申請作業。
線上需填寫資料如下:
(1).土地與建物登記、或所有權等資料、房屋地址
(2).借款人身分資料、職業
(3).所得資料(如:年所得、收入來源、現有銀行存戶資料..等等)
(4).婚姻狀況、子女人數
(5).貸款用途、貸款金額..等等
(6).也可直接聯繫房貸專員
我們介紹一個領域類別圖(DomainClassDiagram)的反覆分析過程
底下,筆者共進行八個Iteration,而每一個Iteration期都須同步的修改其他圖形,且都應從UseCase開始。
下面只是個範例:
IterationModeling1-找出領域類別圖(DomainClassDiagram)
IterationModeling2-找出「候選類別」
IterationModeling3-找出相關連性
IterationModeling4-移除與目前Domain不相關的類別
IterationModeling5-移除同義字
IterationModeling6-合併
IterationModeling7-補其不足
IterationModeling8-(回到IterationModeling3)
說明:
所謂的領域類別圖(DomainClassDiagram),而其實就是一種初步的類別圖,又可稱為DomainClassDiagram,也為一種ConceptualModeling,但是千萬不要將領域類別圖當作是一種高階的類別圖,因為所謂的高階,代表著會遺失許多細節,但是,在繪製領域類別圖形時,也不要涉入繁瑣的細節,有些朋友在這之間並不清楚如何拿捏分寸,其實也很簡單,有機會筆者開另一篇文章詳細的介紹。
下面,筆者一步一步來說明上方共Iteration1~Iteration8會如何進行?及進行那些內容?
IterationModeling1-找出領域類別圖(DomainClassDiagram)
IterationModeling2-找出「候選類別」
IterationModeling3-找出相關連性
這時,我們可以開始進行細部分析,找出其中的連結關係(Association),要包括多重性(如:一對多、多對一、多對多..等關係)
IterationModeling4-移除與目前Domain不相關的類別
細部分析之後,前面我們發現「問卷」與「房貸線上申請」並無關係,前面UseCase系統邊界的錯誤,在這個步驟將其移除
IterationModeling5-移除同義字
再細部分析時,前面我們發現「土地」與「所有權」應是同一個物件
IterationModeling6-合併
因此,我在這個步驟哩,將相同的同義字合併,並建立資料字典(DataDictionary)
IterationModeling7-補其不足
在反覆的分析過程當中,我們發現還需要有:借款人、房屋地址、婚姻狀況等,因此,在這個步驟裡需陸續補上
IterationModeling8-(回到IterationModeling3)
到了這個步驟,別忘了同步修改相關的圖形(Iteration),就算開始Implement仍然不會停止這個反覆的設計。
IterationModeling.Vs.ContinuousModeling
所謂的ContinuousModeling其實是一種週期性的活動,通過使用各式UMLDiagram進行定期的簡短討論,共享改進觀點或改變團隊內的模型結構,期望達到,團隊間,有效購通、與有效地同步程式碼的目的。
UML的分析與設計的理論,其實是博大而精深的,絕對不是在單一幾篇文章就能夠介紹的完的。
在UML分系設計的領域裡,您可以將(ALM/Agile)裡所提倡的Sprint或者Iteration,在每一個反覆設計裡,在細切為IterationModeling,而每一個IterationModeling有可以有多個DailyModeling,詳細的解釋,可以由下圖,也就是文章一開始的Logo來說明:
結語:
在博大而精深的UML系統分析設計理論哩,其實很難從一篇文章中將其說明清楚,尤其在搭配實作的狀況下更不容易。
而這的設計與分析的過程又與您的軟體架構設計息息相關。
下一次,筆者介紹在一個IterationModeling的階段哩,如何與系統設計銜接,如何做到恰如其分的軟體架構設計。
簽名:
學習是一趟奇妙的旅程
這當中,有辛苦、有心酸、也有成果。
有時也會有瓶頸。
要能夠繼續勇往直前就必須保有一顆最熱誠的心。
軟體開發之路(FB社團):https://www.facebook.com/groups/361804473860062/
Gelis程式設計訓練營(粉絲團):https://www.facebook.com/gelis.dev.learning/
如果文章對您有用,幫我點一下讚,或是點一下『我要推薦』,這會讓我更有動力的為各位讀者撰寫下一篇文章。
非常謝謝各位的支持與愛護,小弟在此位各位說聲謝謝!!!^_^
軟體架構設計
回首頁
透過 Gelis程式設計訓練營 與我聯繫
或者透過臉書Messenger與我聯繫
或連繫我的臉書社群【軟體開發之路】
決戰OOAD系列課程-使用UML(線上課程)
跨平台的WebAPIFramework框架設計課程(第三梯)
最近一期課程時間:2019/06/023
需要企業內訊與我聯繫:
單元測試UnitTest與Moq物件實務課程
ASP.NETCore2.1從入門到進階
由於.NETCore3.1已經LTS,所以本課程線已經跟上為.NETCore3.1,如有企業內訊需求、新開立的課程會為ASP.NETCore3.1從入門到進階
線上課程如下:(New)-單元測試UnitTest與Moq實務課程如何利用範本精靈(C#ProjectTemplate)簡化重複開發工作第二波-早鳥優惠持續中https://hiskio.com/courses/192?promo_code=NG145G2
•熱衷於OOA/OOD/OOP與UML塑模化應用程式設計、軟體工程相關,喜歡程式設計、擅長ASP.NETWebForm,MVC,WCF,WindowsForm/WPF開發、也實作過一些專案
喜歡Trouble-shooting程式設計的各種疑難問題
延伸文章資訊
- 1多功能數位運動知識庫的塑模-以棒球為例44
析,隨後利用低至高階UML 型態圖的逐序塑模,最後能衍生新且符合. 更多使用者需求的資料。 ... 二)類別圖(Class diagram):傳統的物件導向分析與設計都會以.
- 2[Design Patterns] 高階和低階之分| 小朱® 的技術隨手寫 - - 點部落
具體類別用於實作層次。 當抽象與具體實作都分開之後,整個物件的架構圖就很明確了,接下來就要解決兩個問題 ...
- 3建立類別圖 - IBM
類別圖不僅是系統結構的圖形表示法(與物件模型圖類似),也是建構性的。 Rational Rhapsody 程式碼產生器會直接將於類別圖中建模的元素及關係轉換到許多高階語言的原始碼 ...
- 4建立類別圖 - IBM
類別圖不僅是系統結構的圖形表示法(與物件模型圖類似),也是建構性的。 Rhapsody 程式碼產生器會直接將於類別圖中建模的元素及關係轉換到許多高階語言的原始碼中。
- 5UML入門:統一建模語言入門 - 點空間
最常使用的UML 標準圖形有:使用案例圖(use case diagram)、類別圖(class ... 使用案例圖通常用來描述系統涵蓋的範圍,和整個系統高階功能的關係,由圖1 的使用案例 ...