Java 建模: 子整体软件开发,第二部分
| Java 建模: 子整體軟件開發,第二部分 | 英文原文 | |||
Granville Miller(rmiller@togethersoft.com) 在上一個專欄中,我開始討論子整體軟件開發,它是一種注重對過程進行革新的開發方法。 這是我的信仰,正如我在上個月的宣言中所述,子整體軟件開發有潛力讓開發者取得非凡的成就。但是,這并不意味著我鼓吹完全排除過程。我看待過程的哲學可以總結如下: 過程太少,非凡的人能做平凡的事; 過程太多,即使是非凡的人也不能做非凡的事。 這個月,我將討論子整體軟件開發和過程的應用。尤其是,我們將談到需求收集 — 任何軟件開發周期的基礎,還將談到子整體方法 — 一種在開發周期中動態實現大量過程和方法的手段 — 如何能夠增強您的需求收集過程。 軟件不可見性問題 Frederick Brooks 把那些難以概念化和描述的新軟件應用程序的屬性稱為軟件不可見性。雖然其它如硬件之類的領域存在物質表現形式,但軟件領域沒有。我們可以看得見或者評測出軟件應用程序的效果,不過其系統表現形式本質上卻是思維的。這就是我們創建并依賴于軟件模型的許多原因之一。模型賦予軟件物理維度使我們得以更好的了解和表達它的方向。 任何軟件建模工作的中心是需求收集。實現需求收集過程的選擇依賴于開發項目更大的環境。 這個環境可以在需求收集過程自身中找到,也可以在另一個受到好評的模型中找到。在某些情況下,這個環境甚至可以在可交付使用的過程中找到。通過對我們探討的不同需求可能性的地方進行考察,我們總能夠辨別出系統的需求環境駐留在什么地方。需求環境是我們與軟件不可見性對抗的領域。 恰當工作過程的選擇 這里將探討的需求收集過程抽象自三個一流的軟件開發方法:“Rational 統一過程”( Rational Unified Process(RUP)),“功能驅動開發”(Feature-Driven Development(FDD))和“極端編程”( Extreme Programming(XP))。每種方法都提供大量極好的工具以協助需求收集工作。為符合子整體開發方法,我們將更多的著眼于必要的部分 — 與每種方法相關的需求收集過程 — 而不是整個方法自身。 除此之外,我們還會看看是否能夠組織起一個更動態更可變的需求收集過程。繼續討論前,請用一些時間閱讀這篇補充文章“子整體軟件開發的十項準則”,看看子整體方法在理論上如何包含我們已知的東西。 四種最常見的需求收集過程是傳統的軟件收集規范(software requirements specification,SRS)、用例(use cases)、功能特性(features)和用戶情景(user stories)。在隨后的幾個小節,我們將考慮每個過程,請特別注意需求環境 — 就是說,每個過程提供的用于將價值最大化的恰當情況和每個過程給開發項目帶來的獨特動力。有關以下概括的每個過程的應用的詳細信息,請參閱參考資料。 軟件需求規范 SRS 背后的思想是創建一個解決方案空間 — 也就是這樣一個空間,其中開發小組已經設定了目標,但是,實現這些目標的行動的秩序和本質可以非常自由。因此,SRS 通常不試圖指定單個解決方案,而是指定一系列可行的解決方案。然后,開發小組有足夠的靈活性對解決正被創建系統問題的有效方法進行革新。 靈活性對于 SRS 來說,是缺點,也是優點。如果一個軟件開發小組精通他們為之創建系統的這個領域,這個小組就可以輕松使用 SRS 最大限度的對這個領域進行革新。但是,在開發小組在他們不熟悉的領域進行日常工作的時代,傳統的 SRS 作為需求收集過程可能有所欠缺。典型用戶試圖處理給定領域中的正常情況時,他們采取的步驟很可能是小組成員不了解的。因此,小組成員確定并創建的系統對于用戶社區來說,可能不是最優的。 傳統的 SRS 最適用于已被充分了解的領域和非常了解自己所處工作領域的開發小組 — 或者領域之外的專業知識能夠很輕松就理解的開發環境。SRS 允許幾乎不需任何技術就可以調整解決方案空間以管理系統中的更改。 用例 用例反應我們試圖使用軟件系統以達到目的時可能出現的所有事件。因為大部分軟件系統支持多個目的,大部分用例模型由多個用例組成。例如,“支付逾期費”(Pay Late Fee)用例描述了錄像帶出租系統的用戶遇到要支付逾期費這種情況時會發生的事。 用例中信息正確的水平是成功建立應用程序的必要條件。它根據環境不同而不同。如果領域的專家參與開發過程,用例就可以只勾畫系統的路線。如果領域專家不參與項目,用例就有必要提供更多信息。用例是交流需求的最佳過程。但是,就像傳統的 SRS,用例更適合已被很好了解的領域。用例可以經受一定程度的更改,但其它過程更能適應更改。
功能特性
一個示例功能特性可以是:
在每個功能特性保持在最小狀態時,基于功能特性的方法效果最好。一個小組能在兩星期或更少時間內實現的功能特性就是理想的功能特性。 用名為功能集(feature set)的組將功能特性組織起來。功能集包含描述給定目的或領域的功能特性。功能集和它的功能特性僅對需求進行了概述。作為描述需求的機制,功能特性必需和額外的環境相結合。 在“功能驅動開發”方法中,環境被精心設計成介于功能集和一個被稱為“領域中立組件”(domain neutral component)的色彩標記類圖表之間。 領域中立組件是個描述跨領域公共關系的語義模板。領域中立組件由瞬間間隔(moment-interval)、角色(role)、主題(subject)(當事人(party)、地點或事務)以及描述(description)組成。瞬間間隔是那些領域的短時間要素,如處于訂貨執行系統的一個訂單。角色是個用戶,系統和他交互并必須能識別出他。主題是形成領域的要素。描述是一種抽象,它集合了這些對象的元信息。圖 1 是個錄像帶出租的領域中立組件。 圖 1. 錄像帶出租方案的領域中立組件 作為一種需求收集過程,“功能驅動開發”非常靈活,它有助于在開發周期中更改管理。這一過程讓您在項目進行過程中輕松檢查并記錄新的、更改的和已除去功能特性的數目。因為一般來說功能特性小, 更改現存功能特性或添加新功能特性不大可能要求在項目級上大量的返工。功能特性還有助于挑戰軟件不可見性,因為作為跟蹤領域中立組件中的系統實體間交互結果的新功能特性可能被揭示。 功能特性可以用于熟悉給定領域的個體間的需求交流。以這種方式使用,基于功能特性的方法很可能是最節約的需求收集過程。但是,這些功能特性可能太依賴領域專業知識了,這是許多開發小組都沒有的奢侈品。 用戶情景 圖 2. 銷售用戶情景的要點 用戶情景包含的信息往往比功能特性包含的信息多,盡管這不是必要條件。“極端編程”方法中,用戶情景要求一個現場的客戶提供部分環境。現場客戶向開發小組描述理想的系統。然后,這個小組一點一點建立系統,給客戶充分的機會定期查看結果。客戶“監督著”這個可交付使用過程,并且在新用戶情景中提出對系統的修改建議。整個環境由現場客戶的反饋和遞增的過程及交付相結合。 用戶情景對于處理軟件不可見性風險最高的項目來說,是最佳的方法。像功能特性一樣,它們都足夠小,能被輕松更改。 因為它們的環境基于運作的系統和客戶,一經實現或不再有效都會被丟棄。但是,并不是每個項目都可以引入現場客戶,因此用戶情景并不適用于每個項目。這種方法因其缺少客戶交互而喪失了它的優勢。 結論 補充文章“子整體軟件開發的十項最佳準則”討論了模塊性。模塊性允許兩種目的相同的活動可以互相代替。當用一種需求收集活動代替另一種時,重要的是把需求環境考慮在內。開發周期中途更改活動很可能會引入一組新的動力到項目。如果沒有考慮到環境,這種行動可能會成為災難。但是,仔細的計劃和執行后,引入新活動就能幫助創建新的動力,從而促進了項目的成功。 下個月,我們來談 Web 服務基礎架構的建模。隨著我們調查這個軟件開發中新興的領域,我將提供更多具體的技術示例和上兩個專欄一直在討論的最佳準則,所以,請別離開! 參考資料
| |||||||||||||||||||||||||||||||||||||||
總結
以上是生活随笔為你收集整理的Java 建模: 子整体软件开发,第二部分的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: toString、equals方法进阶
- 下一篇: 水星无线网dns服务器是什么,水星路由d