uml精粹——1.介紹 & 2.開發過程

1.介紹
【使用uml的方式】
  把uml當做草圖sketch。順向工程forward engineering在寫代碼前會繪製uml。而逆向工程reverse engineering根據已有的代碼繪製uml來幫助理解。
  把uml當做設計圖blueprint是爲了完整性completeness。在順向工程中工作是構建詳細設計的設計師會繪製設計圖來讓程序員更好的寫代碼實現。這個設計需要足夠完整,裏面所有的設計決策design decisions都被列出laid out,讓程序員能夠輕鬆的照着做而只需要一點點思考(the programmer should be able to follow it as a pretty straightforward activity that requires little thought)。


【標記和元模型notation and meta-model】
  記號notation就是在模型中的圖形材料graphic stuff,比如類圖中的class、association、multiplicity。
  方法論者尋找方式來提供方法的嚴謹性而不想犧牲其用處,一種方式就是定義一個元模型meta-model:經常是一個類圖,定義該語言的觀念。


【uml圖】
activity procedural and parallel behavior
class class, features, and relationships
communication interaction between objects; emphasis on links
component structure and connections of components
composite structure runtime decomposition of a class
deployment deployment of artifacts to nodes
interaction mix of sequence and activity diagram
object example configuration of instances
package compile-time hierachic structure
sequence interaction between objects; emphasis on sequence
state machine how events change an object over its life
timing interaction between objects; emphasis on timing
use case how users interact with a system


2.開發過程
  當你聽到人們討論uml,你經常聽他們討論統一軟件開發過程(RUP = rational unified process)。


【迭代iterative和瀑布模式watarfall process】
  兩者必要的區別是你怎樣將一個項目分解成小塊(small chunk)。
  瀑布模式分解項目基於活動activity。開發軟件,需要進行某些活動:需求分析、設計、寫代碼、測試。我們1年的項目可能有2月的分析階段、4月的設計階段、3月的編寫代碼、3月的測試階段。
  迭代模式通過功能子集subsets of functionality來分解項目。你可將一年分層多個3月迭代。第一個迭代中,你完成需求的1/4,並進行1/4的完整的軟件週期循環:分析、設計、代碼、測試。第一個迭代完成的時候,你有一個完成了1/4功能需求的系統。
  你也可以混合模式,階段交付staged delivery:分析和高級設計先以瀑布模式完成,然後代碼和測試分成迭代完成。
  一個跌代的普遍技術是使用時間限制time boxing,這強制一個迭代在一個固定時間長度完成。
·自動化迴歸測試automated regression tests:允許你很快檢測出在你做改動時引起的問題。一個好的規則是單元測試的代碼和產品代碼差不多大。
·重構refactor
·持續集成continuous integration:保持一個團隊同步team in sync,避免慘痛的集成循環painful integration cycle。


【預測和適應計劃predictive and adaptive planning】
  使用預測計劃,一個項目有兩個階段:第一個階段完成計劃而且很難預估,但第二個階段更好預估因爲計劃已經完成。
  使用適應性計劃,預測被視爲錯誤的。我們需要面對現實,在一個軟件項目中會有持續的改動。改動是被項目的交付者deliver控制的,但儘管項目可控,但不可預測。
  但適應性計劃也進行計劃,但這些計劃被當做一個基線baseline來評估assess改變帶來的結果 而不是對未來的預測。適應性計劃過程可以固定fix價格。
  兩條建議:
·不要做預測性計劃,除非你有精確的需求而且你有自信他們不會嚴重的改變。
·如果你得不到精確、穩定的需求,使用一個適應性計劃方式。
  一個適應性計劃當然需要一個迭代過程。


【敏捷開發agile process】
  敏捷是一個涵蓋性術語,包括共享同一個公用的值value和準則principle的集合 的許多過程。這些過程的例子有:極限編程extreme programming(XP),scrum,功能驅動開發feature driven development(FDD),crystal,DSDM(dynamic systems development method)。
  敏捷過程很好的適應他們的本質nature,也是非常以人爲中心。他假設一個項目的成功的關鍵因素是項目中人們的質量和他們怎樣更好的以人類的方式工作在一起。
  敏捷開發傾向於使用短的、時間限制的迭代,經常1個月或更少。因爲他們不附加太多重心到文檔上,他們不把uml繪製藍圖blueprint mode。他們大多把uml用作草圖sketch mode。
  敏捷開發少於形式,認爲形式ceremony讓改變變得困難,並違背有天賦的人的成果works against the grain of talented people。

【統一軟件開發過程rational unified process】
  儘管rup叫過程,但實際上是一個過程框架,提供一個詞彙和寬鬆的結構來談論過程。用rup第一件事是選擇一個開發案例development case:你將在項目中使用的過程。
  所有RUP項目應該有下面4個階段:
·inception開端 給一個項目一個初始的評估evaluation。這裏你決定是否提交足夠的錢去做一個詳細製作elaboration phase
·elaboration 指出項目的主要用例,並迭代開發軟件。at the end of elaboration, you should have a good sense of the requirements and a skeletal working system that acts as the seed of development.In particular, you should have found and resolved the major risks  to the project
·construction 繼續構建過程,開發足夠的功能以發佈
·transition 包括不同的不需要迭代的後期活動,包括部署到數據中  心、用戶培訓等。


【找到項目合適的過程fitting a process to a project】
  模式:describe common ways of doing things and are collected by people who spot repeating themes in designs.模式是一些設計的例子。
  在每個迭代的最後,進行一次迭代回顧iteration retrospective。團隊集合一起考慮事情進展怎樣、能夠怎樣改善。列出下面3類:
·keep保持:進行得好的事情,確保繼續
·problem問題:工作不好的方面
·try嘗試:進程中用於改善的改變changes to your process to improve it
  
【在過程中找到合適的uml】
【需求分析】
  指出軟件的用戶和消費者想要系統做的,可能需要的uml技術:
·用例:描述用戶和系統怎樣交互
·例圖:從概念角度,是構建一個領域嚴格詞彙的好方式
·活動圖:展示組織的工作流,顯示軟件和人類活動的交互,顯示用例的內容
·狀態圖:如果一個概念有一個有趣的生命週期,且不同的狀態和事件會改變狀態
  需求分析最重要的是合用戶和消費者交流。記住重要的是用最少的標記來繪製uml。
【設計】
  有用的技術:
·類圖:從軟件角度,顯示類和相互聯繫
·時序圖:爲普遍場景scenario。從用例中找出最重要和有趣的場景,來指出在軟件中發生了什麼
·包圖:顯示軟件的大規模組織
·狀態圖:類的複雜生命歷史
·部署圖:軟件的物理佈局
【文檔】
  package diagram makes a good logical road map of the system.幫助我理解系統的邏輯片、看到其中的依賴關係、更好的控制他們。 部署圖顯示高級的物理圖。
  如果一個類有複雜的生命週期行爲,繪製一個狀態機來描述。
  如果引入一個特別複雜的算法,我考慮使用一個活動圖,只要他能讓我更好的理解這塊代碼。
  如果發現概念來了很多次,我使用模式pattern來抓取其基本思想。
  寫文檔的一個重要事情是你沒有采用的設計選項和你沒有選擇的原因。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章