OO 設計過程:用例計劃
Allen Holub (allen@holub.com)
首席技術官,NetReliance
2001 年 3 月
來自IBM DW站點
在上一篇專欄文章中,我介紹了正式的用例演示的概念。本專欄文章的后幾個部分將討論一些用例。它們是一個復雜的主題并涵蓋很多資料,因此我們要花一些時間徹底地考慮這些問題。本月我們關注的是:如何確定該用哪些用例,以及在計劃用例時應該考慮的其它事項。
創建用例
讓我們再來看看上個月對用例的定義:
用例是由系統的最終用戶執行的具有一些有用結果的單一任務。
看著前幾個月的 Allen 銀行問題陳述清單,幾個用例浮現在我的腦海中:
小孩將錢存入帳戶
小孩從帳戶提取錢
小孩或家長查看存折
家長開戶(opening account)
家長更改帳戶
家長關閉帳戶(closing account)
銀行貸款給小孩(將在版本 2 中完成)
在本階段,此列表只是一種猜想。隨著過程的深入,肯定將會發現其它用例。此外,有些用例可能會過大,以至于必須要分解成小塊。(通常,在進行到實現級別(implementation-level)設計時,用例的實現不應超過一個月。事實上,對于粗略估計而言,每個用例一個人月是一個不錯的經驗法則。有些方法 — 如 Kent Beck 的 XP — 需要的是能在兩周內實現的較小用例。)請注意我們沒有列出低層的原子操作 — 如計算利息,因為它們不是獨立的用例。但是這些用例幾乎都會成為子例。
現在既然我已經寫了一些東西,那么就可以開始設計了?粗懊娴牧斜,我有幾個想法。首先,我不能肯定“存款”和“取款”是否為能分割開的用例。替代方法可能是類似于“完成交易”的用例,其中“交易”是存款或取款操作。具有相同工作流的兩個用例當然是等價的,但我還不知道我的問題是否屬于這種情況。目前,我將把兩個用例都保留下來,因為在用戶看來,它們顯得不同,并且它們的外觀結果顯然也不同。(存款增加余額而取款則減少余額!巴瓿山灰住庇美薷挠囝~。)
當著眼于“查看存折”時,我根本不能確定它是否為一個用例。它沒有特別的結果而且存折很可能是在其它用例的過程中被顯示。經過考慮,我把這個用例改成“做假設分析(what-if)游戲”,它的確有一個結果:了解財務計劃。
接下來,我考慮開戶、關閉和更改帳戶。同樣的,盡管在用戶看來結果肯定明顯不同,但我可以設想“開戶”和“關閉帳戶”用例的工作流將是相同的。UI 當然將是相同的 — 只是在開戶時某些字段可能會是空白。這些細微差別可以在工作流中用簡單的條件分支(“如果帳戶是新的,則 ...”)處理。
我決定把“關閉帳戶”作為一個真正的(盡管是瑣碎的)用例,因為它的 UI 將與開啟/更改用例的 UI 不同。我不會象一般的銀行那樣當余額恰好為 0.00 美元時就自動關閉帳戶,因為很容易想象小孩會將他們的帳戶余額變為零,而在這種情況下我不想重做設置。
最后,我決定拋開“貸款”用例。它是版本 2 的一個不錯的特性,但現在不需要。
請注意在作這些決定時,我正在設想實現的細節(UI)。畢竟我在設計一個計算機程序,所以需要事先考慮它的實現。但是,我還是試著同時盡可能長時間地將思想集中到問題領域。我正在設想著實現以幫助理解域級(domain-level)問題,但我不是在設計實現,我也不是專門做這個的。UI 就是一種幫助我理清關于域級問題的輔助設計工具。這種方法和 Alan Cooper 推薦的 VB 風格的方法有很大不同,后者是 UI 設計驅動程序設計過程。這里,程序將從概念模型中產生,而 UI 僅僅只是開發那個概念模型的便利工具。
象“備份”、“保存”這樣的事情不是用例,因為它們不是發生在問題領域。然而這也告訴我們一些有關程序應該如何工作的事情。退出任何程序以前,不一定要顯式地“保存”,本用例尤其如此。如果存款,那就是存款。需要一個象保存這樣的額外操作才能意識到存款事務是不自然的。我保證十歲左右的小孩在退出前不會考慮什么保存。要是您考慮它,那么我可以告訴您,要求“保存”操作和使“放棄我的所有工作”成為程序缺省行為是同一回事 — 那并不是特別好的缺省行為!皞浞荨币彩且粯。要么象更改帳戶狀態的副作用那樣,程序應該自動備份;要么程序必須維護一個審計跟蹤以便撤銷更改!叭魏尾怀霈F在域級的操作都應該出現在 UI 中”的情況是很少見的?赡艹霈F的例外也許包括“幫助”,但如果 UI 十分直觀就不需要幫助了。您可能會爭論說程序應當通過留意您的行為來覺察到您需要幫助,并在那時提供幫助給您。大多數配置選項從來不被用戶更改,所以用這種意義不大的東西使 UI 混亂是不明智的。(當然也有例外,象出現在問題領域的配置問題,如貨幣表示符號,當然它也可以通過檢測當前語言環境來自動完成。)
暫定的用例列表如下所示。
小孩將錢存入帳戶
小孩從帳戶提取錢
做假設分析游戲
家長開戶或更改帳戶
家長關閉帳戶
在后面的兩篇專欄文章中,我將通過深入詳細地說明“存款”用例來繼續這個練習。我將為您展示用例規范本身和有關正在做什么的詳盡注釋。
參考資料
請參閱我編寫的關于 OO 設計過程系列文章的前五個部分:
入門
開始設計軟件
細化問題定義
驗證分析
用例,簡介
應用的用例,第 1 部分
Kent Beck 的 XP 方法希望用例小到能在兩周內實現。請在 Extreme Planning wiki 閱讀相關內容。
Alan Cooper 建議 UI 設計驅動程序設計過程。請在 uidesign.net 的 interview 中了解更多 Alan Cooper 的思想。
工作流程圖(連同 UML 的剩下部分一起)在 Martin Fowler 和 Kendall Scott 合著的 UML Distilled, 2nd Ed 一書中有詳盡的描述。
文章來源于領測軟件測試網 http://www.kjueaiud.com/
版權所有(C) 2003-2010 TestAge(領測軟件測試網)|領測國際科技(北京)有限公司|軟件測試工程師培訓網 All Rights Reserved
北京市海淀區中關村南大街9號北京理工科技大廈1402室 京ICP備10010545號-5
技術支持和業務聯系:info@testage.com.cn 電話:010-51297073
老湿亚洲永久精品ww47香蕉图片_日韩欧美中文字幕北美法律_国产AV永久无码天堂影院_久久婷婷综合色丁香五月