再論 博X來「選擇 7-11 門市」功能設計

先前因為在 博X來 訂購書籍的過程時,卡在選擇 7-11 門市的小功能這邊(據稱當日有部 Server 故障),有感而發寫了篇:「實在難以忍受的網路購書流程」。不過不滿歸不滿,後來我還是在該網站陸續訂購了有約 10 來本書籍,可以說是他們的忠實客戶。倒是後來該篇文章有許多網友們的諸多回應,其中也有提到了 EC系統整合 的議題。 系統整合? 一開始看到我還稍微愣了下,雖然我本身的工作就是專注在軟體系統的架構整合,不過我倒是沒想過 {選擇 7-11 門市} 這個小功能有如此慎重。因為,從單一目的來看,真的很單純,就只是 {提供 7-11 門市} 的資訊,在這個時間點可沒有涉及到還有物流出貨什麼的,那是等系統收集到完整的訂購資訊之後,也就是真正客戶按下 {確認訂購} 按鍵之後,訂購系統才需要去處理的工作。但在收集訂購資訊的過程中,只要能取得如 門市代號, 門市名稱等未來可供出貨參考的資訊即可。可不要在此時就把出貨流程給牽扯在一起,諸多熟悉領域知識的 SA,有時候就是想太遠了,常常會把簡單的事情給複雜化。

不過,平心而論,該功能雖小,但就從系統責任分派 (responsibility assign)的角度來看,誰需要提供 {7-11 門市} 的資訊? 統X EC系統。所以自然這就牽涉到了 「博X來訂購系統」 與 「統X資訊EC系統」兩者系統之間的整合,這是合理的。只是,以目前 統X資訊 是尋求從 Web 端網頁之間的互通來達成擴展服務的目的,技術上是可行沒錯,但就是給我一種 “說不出的古怪” 的感覺。思考系統整合的意義:「 系統整合,講究的是以服務為導向 (service-oriented),透過標準界面 (interface)讓系統彼此之間互通,以達成能擴展更多樣化、效率、彈性的服務為目的。」 統X資訊 是服務的提供者 (service provider)沒有錯,但是,它是提供 “透過各種查詢的方式來取得 7-11 門市 的資訊”,卻沒有必要連 Web UI 使用者介面都要干涉參與。這感覺好像是本來是在 博X來 填寫結帳程序表單時,給 “綁架” 到了 統X EC系統,逼著點選門市資訊後,再給你送回原來的表單畫面,相當的不協調。 UI 最好是由提供主要服務的系統來統籌管理比較理想。在此例明顯就是由 博X來 的訂購系統來負責;而使用者在填寫表單與取得相關服務的過程中,不需要也不會知道這些服務是由哪些系統提供的,使用者只要知道現在幫他統籌服務的那一個系統 (訂購系統)能協助完成他的目的即可,而未來服務的提供者在後端換掉,也不會去影響到前端的 UI 畫面,這是系統整合設計的基本思維。 我是這麼以為,系統整合重視的不是在 UI 層的整合,而是回到源本,系統服務是由擔負企業邏輯 (business logic) 的中間 (Middleware) 層來負責的,自然,整合的焦點應該就是位於系統的中間層,這會比較合理,也會來得有彈性得多。 透過本案例,我想也可以分享一下,所謂的中間層是大概如何的作法,未來又可以有什麼樣的擴展彈性。

參考圖1,這是利用 使用案例圖 (use case diagram)來表達功能需求的觀點。使用者的主要目的是 “訂購書籍”,訂購的程序必然會 “包含 (include)” 《結帳》 的程序。而在《結帳》這個程序中,只有當你選擇 “至門市取貨” 時,才會使用《選擇 7-11 門市》這個子功能,所以在圖上的表達是利用 “extend” 這個 stereotype 來表達《結帳》與《選擇 7-11 門市》案例之間的關係。 當使用者要選擇門市時,門市的資訊是由 統X EC 系統來負責,在圖上是利用表達外部系統的參與者 (actor)來表示。

圖 1、博X來訂購系統《選擇7-11 門市》使用案例圖
圖 1、博X來訂購系統《選擇7-11 門市》使用案例圖

閱讀全文 »

{iThome 書評—10} 寫給SA的UML/MDA實務手冊

寫給SA的UML/MDA實務手冊 寫給SA的UML/MDA實務手冊
———————————–
作者/邱郁惠 /著
出版社/上奇科技 出版
ISBN/9789866884597

內容簡介
UML發展至今,已經成為軟體發展的通用語言。現今的應用層面廣泛,從即時系統、嵌入式系統到晶片設計,都可以見到UML的身影。本書與其他UML書籍最大的不同,就是本書不僅止於觀念與學理的論述。而且透過一個開發基金交易平台的案例進行闡述,逐步說明從需求訪談到如何利用UML/MDA,利用一套名為StarUML的開放源碼工具,產出相對應的使用案例圖文、活動圖、類別圖、循序圖和狀態圖。

本書內容兼顧入門及進階、觀念與實務,適合作為初學UML的入門書,也可作為系統分析師實務手冊。對於大專院校學生、初入資訊界之新鮮人、程式設計師、及其他非專事系統分析的開發人員,也可以藉由此書溫故知新,更加熟悉UML。

前言

本書是由國內目前應該是最為資深的 UML 研究員邱郁惠小姐所著作的。邱小姐本身沈浸在物件導向領域已有 12 年的時間,直至今年 11 月初總算出版了她的第一本著作,也可以說,這本書就像是她的小孩一樣,從孵化到誕生,據我所知,起碼花了兩年左右的時間,用心可謂良苦。事實上,我與她曾是同事,再推溯往前一些,其實她也算是我的導師之一,我對她在以前上課時所撰寫的教材,印象深刻,她總是會引用許多國外軟體名家的著作或論文,這對我當時在軟體設計啟蒙的學習上,收穫實在甚多!

本書內容對我現在而言,可能稍嫌淺顯了一些,我是花了約一個下午就把這本書給全翻閱看完了。不過的確對郁惠小姐在 UML 領域底子之深厚感到佩服,基礎理論與語法等絕不會弄錯。例如 UC 的寫作敘述上,一定是稟持著每一個動作步驟必然會有參與者 (Actor)或系統當成主詞 (這是 UC 寫作常犯的錯誤,沒有標示主詞);不會在 UC 敘述上描述所有的細節,而是以參考附件或註記欄的方式,來關連以 UC 為首的一連串相關需求文件 (包括畫面等);還有如在循序圖的表達上,作者也展露出女孩子細心的一面,對於同步或非同步的訊息傳遞,是以帶實心箭頭,還是以待開放箭頭的表達,都相當講究,並且詳細的說明兩者的差異與其應用之處。

七個層次的分析步驟,來降低 SA 對 UML 的學習門檻

先瞭解一下,本書的目標讀者為 SA (System Analyst),也就是所謂的系統分析師,而系統分析包括對系統外部的功能需求與企業流程分析,以及對系統內部的結構分析,諸如資料庫表格、欄位明細等,還有以物件導向為分析主軸的類別圖與循序圖設計等。如同其它 UML 書籍一般,本書的案例與假設環境仍以企業層級的MIS 資訊系統為主,諸如 ERP, 進銷存 等。

本書共 11 個章節,文字敘述相當簡潔優雅,才 300 多頁,但內容卻也豐富,足夠讓 SA 俱備系統分析的基礎知識。作者在書本的內容編排上,是先介紹基礎概念,包括 OO, UML 與 MDA 等;再來就是把作者所創建的七個 SA 步驟,先濃縮在一個章節,快速地跑完一個案例,讓讀者可以看到每一個階段的設計產出;然後根據每一個步驟,共七個章節分別詳細闡述之;最後則以一個完整的個案,來模擬系統分析師與企業人員之間的對話情形,以及其更詳細的產出;最後一章算是附錄了,係以嵌入式系統為主軸,來展示不同的應用領域,但仍可以利用相同的分析步驟,來產出設計文件。

在 OO 與 UML 的概念介紹上,本書僅是點綴一番,並沒有著墨太深,所以讀者最好能佐以物件導向基礎理論的書籍一同研讀較佳;倒是作者在 SA 階段是以 MDA (Model-Driven Architecture) 的開發程序為依據,蠻有意思的。 MDA 主要將 UML 產出分為 CIM (Computation Independent Model), PIM (Platform Independent Model), PSM (Platform Specific Model)等三個階段。 CIM 比較接近以企業主體為主的塑模,包括企業案例、企業流程等;PIM 偏向領域概念模型 (Conceptual Model),較不涉及實做系統的平台;PSM 則落實到系統實現時的特定平台,如以 Spring, EJB2 或 .NET 等 IT 技術。 本書因對象是 SA,所以只涵蓋到 CIM 與 PIM,並未涉及到 PSM,所以自然本書也就不會有程式碼了。

饒富創意的是,作者將她對原來輔導包括陸總部、中科院的美國 DoD AF (Department of Defense Architecture Framework) 規格的研究,帶到 MDA 的開發程序,並依觀點與層次共分為 CIM 1~3, PIM 1-4 等共七個層次 (p.1-35)。每一個階段的產出,皆有相當明確的定義,例如 CIM-3, 是定義系統範圍,產出系統的 UC (Use Case) 圖;PIM-2, 分析企業規則,產出狀態圖;PIM-3,定義靜態結構,產出類別圖 …等。對於習慣能有規範指導方針的 SA 而言,這蠻不錯的,可以很清楚知道每一個階段的主要產出為何,它們彼此之間又是如何的關連與橋接。我比較感興趣的倒是作者以狀態圖來描述企業規則,這點倒是在我所輔導的專案中少以應用到 (我將狀態圖大部分用在 UI 與 Controller 的設計上),而且所引用自 Gray 對企業規則的分類結構 (p.7-2) 定義,包括限制規則與衍生規則等,在第七章均有詳細的說明與應用,這一部份可以說是我從本書所得到最大的收穫。

本書另外較有特色的一部份是在完整的個案分析上,作者是以模擬 SA 與企業人員之間的對話,來導出各個階段的設計。可不要以為那只是模擬而已,其實對話的內容是作者在自身實際輔導的經驗中所粹取出來的,在作者每一次的輔導過程中,她總是拿著一本空白小筆記本,寫下她所碰到的各類情況與問題,相當認真,參考價值自然是甚高。藉由這些對話案例,也可以讓 SA 瞭解需求當事人他們的想法與原作者作為 SA 時的思考推理過程。

作者的用心與考究,從本書可以很明顯的感受到

看完本書後的感想是:創新仍嫌不足,但守成絕對有餘!

可以說是中規中矩的教科用書,雖然沒有讓我有感到很驚豔有趣的想法,但看來很平淡鋪陳的內容,理論基礎可是相當紮實,即使我想雞蛋挑骨頭,還真找不太出有特別顯著的謬論假設,我可以感覺得出郁惠小姐在寫這些內容時,應該是戒慎戰兢,是熟讀並參考了包括 UML 規格與諸多相關書籍及論文等著作後才下筆的。

本書應該是定位在資淺或入門的 SA 為對象,對於作為大學教科用書,我更是強烈推薦給資訊科系相關的大學或研究生。老實說,我看過國內幾本標榜 UML/OO 的軟體工程教科用書,都沒有如本書考究如此嚴謹與用心,基本上就是以如樹狀功能模組來解釋 UC, 物件循序圖等,很典型的 DFD (Data-Flow Diagram)功能分解的思維,只是藉由 UML 的“殼”來解釋而已,與所謂的物件導向式的分析設計思維根本是兩回事。這樣的教科用書,對於學生在軟體設計理論基礎知識的建立上,誤導成分反而居多,實在不甚理想。

Adapter 設計模式案例與 UML 解答

有位網友以 Email 問了一個關於 Adapter 設計模式的情境描述:
 KWBank 收購了 BankOne , 怎樣用 Adapter pattern 將兩者 的 客戶資料整合….?

他說看了這篇教學:Design Pattern—Adapter 模式,仍舊不瞭解該如何解答。

這邊我就一併列出回覆給該位網友的回應,供讀者們參考:

基本上,Adapter Pattern在使用上,會比較針對『Service』來進行設計。
參考下圖,在這個設計中,兩個Adaptee Class負責擔任如2孔轉3孔的插座一樣,至於新銀行的所有Client程式,則是直接面對CustormerAdapter的物件;如此一來,就可以隔絕掉不必要的外部程式碼,所有跟外部溝通的,都透過Adaptee的物件去存取。

圖 1、範例—訂購系統的類別圖(Class Diagram)
(點擊圖片鏈接看原圖)圖1、範例—Adapter 設計模式案例圖

{iThome 書評—3} 使用案例寫作實務中譯本

使用案例寫作實務中譯本
— Writing Effective Use Cases 使用案例寫作實務中譯本 — Writing Effective Use Cases
———————————–
作者/Alistair Cockburn/著
譯者/趙光正/譯
出版社/碁峰出版
ISBN/9867727681

內容簡介
完整討論使用案例的關鍵部分,包括參與者、關係人、設計範圍、情節等等。提供完整的使用案例寫作指導,包括寫作步驟與推薦格式。提供一大堆省時有效的使用案例寫作技巧。提供有用的使用案例範例,並且說明範例適用的時機。

這本書的好處就是實例超多,一般的書中對使用案例的介紹都很簡單,或者範例不足,讀一些原則如果沒有範例配合,有時候還真的像在隔靴搔癢。

這本書提出兩個概念:1.把使用案例依照設計範圍(design scope)或者系統範圍(the extent of the system )分為三個層次(第三章)1.Enterprise (business use case) 2.System(system use case) 3.Subsystem(component use case) 2.依照使用案例所達成的目的(goal )分為三層(第五章)1.Summary goal 2.User Goals 3. Subfunctionas 當你在畫使用案例時,思緒先粗再細,就我自己的經驗,高層次的使用案例,數量不會太多,容易控制,也比較能夠用巨觀看事情。管理大量的使用案例時,除了使用高層次的使用案例外,通常也會用到很多使用案例間的關係(第九章,第十章),或者把使用案例組織一下成套件(package)管理(第十三章)。 還有,就是一般人會問使用案例是否等於需求?不過本書對這部分著墨稍嫌少了一點(第十六章),還好,它補了一章說明使用案例與整個開發流程的關係(第十七章),裡面提到使用案例 v.s. 系統特性(System Feature),作者蒐集了很多的使用案例格式(第十一章),作者把寫使用案例當成寫作文,所以整本書是在教導你如果寫出一篇篇的短文(使用案例),當然而會有類似教作文的起承轉合(第六章,第七章,第八章)。

前言

使用案例 (Use Case) 是由 Jacobson 在易利信公司做電信系統時,所發明的一種描述系統行為的工具,並隨著 UML 規格的制訂,而成為普遍被用來作為需求捕捉最關鍵的技術。我是認為,使用案例可以說是這十來年來軟體界最了不起的創見! 因為它簡單,使用案例圖,利用棒型人偶 (參與者)表達使用系統的使用者與系統需要外部系統的支援服務,而橢圓形的使用案例即是表達一個個系統所提供的功能服務;然後再以純文字的寫作方式,來描述每一個使用案例的需求陳述,也可以說是參與者與系統之間的互動對話,卻又不致牽涉到系統的實做面 (把系統當黑箱)。簡單的圖形,加上文字敘述,就可以建構出從使用者角度來看系統功能觀點的使用案例模型。

不過很奇怪,使用案例易學難精,沒有把握基本精要與原則,很難把圖給畫好 (不容易界定出系統範圍),更何況是用純文字來寫出需求陳述。耶? 純文字的寫作這麼困難嗎? 是的,它真的不容易,我還常建議需求分析人員,多勤讀「古文觀止」,來充實散文的寫作能力。

我大概看了有五本寫使用案例的書籍了 (均為原文著作),發現到每位作者對使用案例的闡述,歧異還蠻大的,可以說是“各自表述”,而且多少都已經有加入作者本身的觀點,擴展 Jacobson 的使用案例理論。老實說,我對使用案例的技術相當著迷,但學習該技術的前兩年完全不知所云,一點都無法體會出它的本質精髓 (只學會一些使用的功法而已),直到吸收了兩本好書:“Use Case Requirements in Context”,以及本次書評的主角,才慢慢打開心眼。尤以本書,我起碼看了半年以上,讓我對所謂的層次、目標等級、寫作原則與風格等,可說是奠定了相當清晰的基礎功夫了。

腦力激盪的最佳工具—記錄需求、發掘需求

本書不算薄,22 個章節,外加四個附錄,內容分為三大部分—使用案例的主體、相關議題的討論、寫作提示等。一開始閱讀會有些吃力,尤其第一部份,其實內容有些零散。我是建議要隨時翻閱目錄,瞭解自己在閱讀時的主題與焦點所在,若當下無法體會,其實跳過去也無妨。

第一部份最重要的是當然要瞭解使用案例的本質,以及寫使用案例的格式,Cockburn 提供多種寫作的格式供參考,如單欄/兩欄/RUP,甚至利用 Occam 程式語言、圖形呈現的另類寫作風格,相當有意思! 另外最有價值的部分,也是 Cockburn 自創的三個目標等級—白雲、海平面、海平面下,來說明使用案例的精確程度,以及適合的目標層級對象。第二部分算是 FAQ 性質的一些主題性的討論。例如最常見的 CRUD (Create, Read, Update, Delete) 與 可參數化 的使用案例該如何描述比較恰當;開發流程中,使用案例所扮演的角色與其它製程產出的關連性;常見的寫使用案例所發生的錯誤 …等,對於實務已經在應用使用案例開發的人員來說,相當具有參考價值。第三部份是我覺得本書最實用的部分了,尤其第 20 章,單一寫使用案例的相關寫作提示,就足以讓需求分析人員受用無窮了,因為以我所看過太多位 SA 所寫的使用案例,幾乎所犯的錯誤,在本章都有提到。所以只要依循本章所列出的十一個寫作提示,要寫出中規中矩的案例敘述,也就不會是什麼難事了。

有意思的是,即使你寫的是中等程度的使用案例,都還來得比其它種類的需求文件還有用,事實上,只要能具可讀性,對整個專案就會有相當的貢獻;再則,使用案例不僅僅只是記錄需求的工具而已,它更可以成為專案成員的腦力激盪工具,來發掘出新的或潛在性的需求,這更是價值斐然!

順應國內短線專案型態—Use Case First

一般而言,使用案例會成為「物件導向」式專案開發的最佳前導工具,雖然它與物件導向一點都沒有關係。本書在國外的評價相當高,但在國內卻不賣座,這多少與本書完全沒有提到如何將使用案例與系統的結構設計至實做的橋接有關,純粹就是在談使用案例的寫作而已。而事實上,國內 95% 以上的專案都是偏以功能導向的開發為主,至於系統內部的結構分析設計,因為時程的壓縮與抽象基礎的素養不足,往往無法做好。功能會直接影響到專案能否被“做出來”;結構則是影響系統的彈性與穩定度。所以個人是主張“務實一點”,先順應國內短線的專案生態,利用使用案例,快速的給直接 mapping 到實做面。

我在實際輔導的經驗中,效果與接受度相當高;雖然是“Quick”,但可不“Dirty”,兩個配套措施是一定要做的:測試案例到測試程式碼,隨時驗證功能的正確性;分析類別的規劃,以符合 3-tier 的 MVC (Model-View-Control) 框架。系統做的出來,開發能力也有比較提升,老闆也比較願意投入更多資源的情況下,再施以結構重整,慢慢粹取出系統最穩定、共用的那一部份。有了使用案例後,我好像就再也沒擔心過能不能“做”得出來,那根本已經不是問題了。

五顆星級的好書,價值多少?

在 Amazon 評價四顆半星的好書,你猜猜看台灣賣多少錢? NT$ 99,沒錯! 你沒有看錯,國內販售軟體書籍指標的「天瓏書局」竟然將本書折扣到一折半,不到一百元可以買到寫使用案例叢書中最棒的書籍,但,卻仍舊乏人問津,我真的很難以想像,需求分析人員,省一到兩次的便當錢,總該可以吧? 好歹,本書真的可以在工作上幫助你太多太多了。

WFMC Workflow Reference Model 摘要

利用 UML 複合結構圖 表達 WFMC Workflow Reference Model

圖 1、Workflow Reference Model 複合結構 (Composite Structure)圖
(點擊圖片鏈接看原圖)圖 1、Workflow Reference Model 複合結構 (Composite Structure)圖

Interface 1,2&3,5 摘要解釋

Interface1: Process Definition

  • 描述工作流程的定義—XPDL (XML Process Definition Language)
  • 提供 APIs 以操作流程定義的相關資料。
  • XPDL 係為 XML 的檔案格式,可作為流程定義開發工具之間互通的標準 (如同 UML 塑模的 XMI 交換規格)。
  • XPDL 也可作為 BPMN (Business Process Modeling Notation) 語法的檔案格式。

Interface5: Administration and Monitor Tools

  • Workflow 活動過程中,需要被捕捉、紀錄與稽核的資訊。
  • 定義了哪些資訊需要被捕捉記錄,並作為分析之用;但沒有定義資訊是如何被儲存。被捕捉的資訊稱為 CWAD (called Common Workflow Audit Data)。
  • CWAD 會被 Workflow 的管理與監視工具操作存取使用。

Interface2&3: Client Application Programming Interface

  • 提供跨產品 Workflow Engine (需符合 WFMC 認證規格) 的一致性存取方法。
  • 所提供的 APIs 稱之為 WAPI (Workflow Application Programming Interfaces)。
  • Workflow Engine 所提供的核心服務,其對象 (Client Application) 為 表單 (Form)、控制物件 (Control Object)、其它 Workflow Engine …等。
  • WAPI 群組功能分類
    • WAPI Connection Functions
    • WAPI Workflow Definition Functions
    • WAPI Process Control Functions
    • WAPI Activity Control Functions
    • WAPI Process Status Functions
    • WAPI Activity Status Functions
    • WAPI Worklist Functions
    • WAPI Administration Functions

{iThome 書評} UML 與樣式徹底研究中譯本

UML與樣式徹底研究
— Applying UML and patterns UML與樣式徹底研究 — Applying UML and patterns
———————————–
作者/Craig Larman/著
譯者/趙光正/譯
出版社/碁峰出版
ISBN/986779026X

內容簡介
這是全世界介紹物件導向分析與設計、反覆式開發方式與UML的書當中,銷售量最好的一本書!「UML與樣式徹底研究」可幫助任何開發人員精通物件導向分析與設計的核心開發原則與最佳實務經驗,讓大家不只是畫畫UML而已,而是真的能把它活用在軟體設計情境中。

著名的物件技術與反覆式開發方法先驅Craig Larman在本書中用單一、具有一致性的個案研究,具體呈現開發過程中的三個反覆。透過這三個反覆,逐步介紹物件導向分析與設計中的關鍵技能,並且點出最必要的開發活動、開發原則與樣式。

本書內容涵蓋了:
l.需求與使用案例:發掘需求並記錄
2.產生領域物件模型:了解領域中「有興趣的物件」、它們的屬性以及它們之間的關係
3.架構:為了讓應用程式具有最大的彈性、強固性與可維護性,採用分層式架構設計系統
4.必要的物件設計技巧:專精一些如分配物件責任及根據一些開發原則設計物件間的合作關係的關鍵技能
5.設計樣式:用很流行、常用的樣式產生強固的物件與框架,如策略樣式、代工廠樣式、轉接器樣式、觀察者樣式、範本方法樣式與命令樣式
6.反覆式開發方式與「敏捷式統一流程」:用UP(一種很風行的反覆式流程)中簡單、不可或缺的開發活動與最佳實務經驗組織建立模型與開發系統的流程
教師資源:http://www.phptr.com/larman/. Includes PowerPoint lectures, sample exam, and more

前言

中譯本是翻譯自「Applying UML and Patterns 2nd edition」 (目前原文已出至第三版)。本書可以說是所謂物件導向分析與設計最為暢銷的入門教科書,事實上,也是我踏入軟體設計領域的第一本入門書,也可以說是與我最有緣份的一本書。想當年我是擔任系統與資料庫管理者,其實與軟體開發實在扯不上關係,是因為興趣,想寫圍棋軟體的關係,當時硬K了 Java 程式設計入門,花了三天的時間,寫出一大串、可以點選下子的圍棋程式(當然,不含 AI)。寫完後,一點成就感都沒有,我一直很疑惑的是,Java 的程式單位是 .class,那麼,圍棋的棋盤與棋子是分為一個還是兩個 class 呢? 問了幾個程式開發的高手朋友們,得到的答案都很不滿意,他們都認為分為幾個都無所謂,能寫出來就好。我還記得很清楚,我聽到有所謂的物件導向式的開發技術後,為了能解除心中的疑惑,某天晚上下班時特地到重慶南路的「巨擘書局」翻書。找了約三個小時,抱回四、五本 OO 書籍,花了有五千餘元,而其中有一本,就是本次書評的主角。當然,沒有一本我看得懂,所以,後來還到了國內主推物件導向的宗師—MISOO 物件教室上課。而在上課之前,我就是把本書(當時是第一版,原文,沒有中譯本)給整本硬K完畢,然後,就其中的內容與問題,逐條的請教當時授課的講師(他們對我蠻頭痛,一直想追到答案)。而也因為此,讓我對軟體產生的莫大的興趣,並因此而轉行,從此踏入軟體設計這極為深奧的殿堂。

本書的大綱架構安排得非常之棒,可以說是最為標準典型軟體工程式的教科書,所以國內已有幾所大學,將其作為資管/資工科系的教材。作者 Craig Larman(我都稱他為 拉麵,諧音),可以說是把他多年來豐富的教學經驗,全都給濃縮在本書內。尤其自第二版後,還導入了 UP(Unified Process) 流程框架至本書的大綱目錄內,讓讀者大概瞭解一下 UP 的 Milestone 階段目標,與每次反覆(Iteration)的產出(artifacts)有哪些。本書是界定為入門書,也的確獲得眾多軟體人員的喜愛,覺得它容易閱讀且淺顯易懂;不過有趣的是,我也問過許多 SA/SD,看完本書後,還是不知道如何寫程式。除了它僅用一個章節展示如何從設計轉成片段的 Java 程式碼,使得讀者並不知道系統實作涵蓋 n-tier 應用程式的全貌,還有,本書充斥了許多的假設點,若讀者不知道的話,其實很容易誤解其原意。

系統開發的基本—瞭解需求

對於入門者而言,需求是本書最有價值的部分。讀者會發現到,這本書可以說就是以需求作為系統開發的初端,再進而導出系統內部的結構分析、設計至實作等。使用案例模型 (use case model)的建立,是功能性需求最重要,用來發掘並記錄需求的一種機制。而且,它還會影響到系統開發爾後的諸多環節。UP 所倡導的“4+1 View”,即是以使用案例作為驅動並涵蓋整個專案的重心所在。我覺得本書在使用案例敘述的部分寫得相當好,同時也揭露出多種不同的寫作格式與風格,讓讀者得以選擇適當的需求寫作方式。除了使用案例外,作者也介紹了輔助規格(記錄非功能性需求)、企業規則、字彙表、專案願景等其它性的功能需求,其實,這也是 UP 所建議,在需求製程的產出。(參考一下其範例的寫作方式也不錯,但,可不要全盤照收,而造成軟體開發諸多不必要的儀式與負擔)

物件導向分析設計的精髓—物件責任的分派

這是本書最為精彩之處,也是我在其它書籍所看不到的—物件責任的分派 (responsibility assign)。事實上,對老手而言,光看這一部份就值回票價了。對SA/SD,責任的分派,是最被為忽略、不受重視的;但相對來說,要能真的把軟體作軟,可以說這一部份才真正是所謂物件導向分析設計的精髓。舉個例,誰有責任負責訂購總額的計算? 訂購物件。 一般 SA 可不重視這,可能就寫在 表單(Form)、stored-procedure、或者在功能性的物件上。因為行為的分散,其實就是造就系統混亂、複雜的主因。

由於如何熟練指派責任是 SA 在物件設計中最為重要的事,Larman 提出了 GRASP 的設計原則 (General Responsibility Assignment Software Patterns),裡面提出五種重要的責任設計樣式。我覺得其中兩個—高內聚力 (high cohesion)與低耦合 (low coupling)性,其實就是決定軟體核心的穩定與否。而此兩者樣式也經常相互衝突,它們之間的關係,可以說就是軟體工程的陰與陽,它們會彼此牽制且影響對方。

系統內部的靜態結構分析—找出物件

需求分析與物件責任的分派,是本書最有價值之處;但 如何找出物件 這一部份,也就是建構領域模型,進而產出軟體規格設計圖,我是覺得寫得不太好。 Larman 仍是以傳統的方式—利用找名詞的方式,來找出概念性類別。雖然他又列出了概念性類別分類清單,來協助 SA 找物件,但這仍不是好方法,因為這是從需求的片段記錄來找尋物件,但需求並不穩定,相對來說,也不容易找出最具本質性(essential)的核心物件。當初我在看這一部份時,著實疑惑甚久,後來閱讀了 Peter Coad“Object Modeling” 一書,揭露出以交易為核心,來找出本質性的領域物件,才總算得到滿意的解決方案。

結語

後面幾個章節,其實可以忽略不看,如果你不知道它的假設點的話。例如利用設計樣式設計出永續性框架 (persistent framework)。請記得,你是在開發領域層級的應用系統,而不是在開發應用伺服器(application server)。永續性框架,系統廠商,如 .NET 的 ADO.NET,以及 J2EE 的 Hibernate 等,都會幫我們作得很好,我們只要學會如何用就好,瞭解內部 O-R mapping 設計,意義其實不大。還有,關於四人幫的設計樣式 (design pattern),本書也有介紹一些,也是看看就好,因為這方面,倒不如直接看四人幫的原著。

本書共 600 餘頁,而且是以一個案例研討 — POST 系統的開發,作為涵蓋整本書的內容。從需求分析記錄、領域模型建立、物件責任分派、至系統規格模型設計 …等。讓讀者因為有實際案例一步步作下來,而能對本書有一致且流暢地串連起所有章節。

與前一期所介紹的「UML 精華」一書,這兩本是我常掛在嘴裡,鼓勵軟體從業人員必買(當然要看)的兩本好書,又因為翻譯品質甚佳,去除了語言上的隔閡,實在沒有藉口不看。我鼓勵軟體公司至少都要擺上一本,甚至舉辦讀書會。

軟體思維顧問

專職軟體輔導與教育訓練的獨立顧問。輔導企業資訊單位如何有效組織系統開發與維護;輔導開發人員達成有效的專業分工。傳授如何把軟體作軟 (Keeping Software Soft)的技能,得以提昇系統的彈性/延展,並進而創造系統的再利用價值。

Personal