導航:首頁 > 研究方法 > 用例模型常用於哪種分析方法

用例模型常用於哪種分析方法

發布時間:2022-05-13 00:54:18

『壹』 在UML中,約束有哪兩種表示方法它們分別是什麼

當然,步痕旅遊網想法:您的查詢字詞都已標明如下:商務信息 的 具體 定義 (點擊查詢詞,可以跳到它在文中首次出現的位置)
如果打開速度慢,您可以嘗試打開無圖片的快照
(網路和網頁的作者無關,不對其內容負責。網路快照謹為網路故障時之索引,不代表被搜索網站的即時頁面。)

--------------------------------------------------------------------------------
設為首頁 收藏 求助 用戶名 密碼 自動登錄 - 快速注冊 - 找回密碼 - 使用手冊

首頁 圈子 活動 博客 炒飯 會員 相冊 招貼 搜索 邀請 圈子 活動
寫字樓圈·運動圈·球友圈·同學圈·同事圈·親友圈·同鄉圈·行業圈·主題圈·媒體圈·業主圈·情感圈·企業圈·其他圈

導航: 圈網首頁>>我的管理中心>>IT圈>>北京程序社區 加入該圈子

功能區: 短留言 | 相冊 | 活動 | 圈子日誌 | 商務信息 | 成員列表 | 鏈接 | 邀請朋友 | 群發圈內消息 | 圈子管理
主題留言板: 軟體工程 | 灌水區 | 項目管理 | .net技術 | 修身養性 |

解析UML的靜態建模機制 2006-08-02 02:54 nuaalfm(方明) 推薦給好友

作者:51CMM 本文選自:51CMM 2002年12月10日任何建模語言都以靜態建模機制為基礎,標准建模語言UML也不例外。UML的靜態建模機制包括用例圖(Use case diagram)、類圖(Class diagram)、對象圖(Object diagram )、包(Package)、構件圖(Component diagram)和配置圖(Deployment diagram)。

用例圖

用例模型(Use case model)

長期以來,在面向對象開發和傳統的軟體開發中,人們根據典型的使用情景來了解需求。但是,這些使用情景是非正式的,雖然經常使用,卻難以建立正式文擋。用例模型由Ivar Jacobson在開發AXE系統中首先使用,並加入由他所倡導的OOSE和Objectory方法中。用例方法引起了面向對象領域的極大關注。自1994年Ivar Jacobson的著作出版後,面向對象領域已廣泛接納了用例這一概念,並認為它是第二代面向對象技術的標志。

用例模型描述的是外部執行者(Actor)所理解的系統功能。用例模型用於需求分析階段,它的建立是系統開發者和用戶反復討論的結果,表明了開發者和用戶對需求規格達成的共識。

首先,它描述了待開發系統的功能需求;

其次,它將系統看作黑盒,從外部執行者的角度來理解系統;

第三,它驅動了需求分析之後各階段的開發工作,不僅在開發過程中保證了系統所有功能的實現,而且被用於驗證和檢測所開發的系統,從而影響到開發工作的各個階段和UML的各個模型。在UML中,一個用例模型由若干個用例圖描述,用例圖主要元素是用例和執行者。

用例(use case)

從本質上講,一個用例是用戶與計算機之間的一次典型交互作用。以字處理軟體為例,「將某些正文置為黑體」和「創建一個索引」便是兩個典型的用例。在UML中,用例被定義成系統執行的一系列動作,動作執行的結果能被指定執行者察覺到。

在UML中,用例表示為一個橢圓。圖1顯示了一個金融貿易系統的用例圖。其中,「風險分析」,「交易估價」,「進行交易」,「設置邊界」,「超越邊界的交易」,「評價貿易」,「更新帳目」等都是用例的實例。概括地說,用例有以下特點:

·用例捕獲某些用戶可見的需求,實現一個具體的用戶目標。

·用例由執行者激活,並提供確切的值給執行者。

·用例可大可小,但它必須是對一個具體的用戶目標實現的完整描述。

圖1 金融貿易系統用例

執行者(Actor)

執行者是指用戶在系統中所扮演的角色。其圖形化的表示是一個小人。圖1中有四個執行者:貿易經理、營銷人員、售貨員和記帳系統。在某些組織中很可能有許多營銷人員,但就該系統而言,他們均起著同一種作用,扮演著相同的角色,所以用一個執行者表示。一個用戶也可以扮演多種角色(執行者)。例如,一個高級營銷人員既可以是貿易經理,也可以是普通的營銷人員;一個營銷人員也可以是售貨員。在處理執行者時,應考慮其作用,而不是人或工作名稱,這一點是很重要的。

圖1中,不帶箭頭的線段將執行者與用例連接到一起,表示兩者之間交換信息,稱之為通信聯系。執行者觸發用例,並與用例進行信息交換。單個執行者可與多個用例聯系;反過來,一個用例可與多個執行者聯系。對同一個用例而言,不同執行者有著不同的作用:他們可以從用例中取值,也可以參與到用例中。

需要注意的是執行者在用例圖中是用類似人的圖形來表示,盡管執行的,但執行者未必是人。例如,執行者也可以是一個外界系統,該外界系統可能需要從當前系統中獲取信息,與當前系統有進行交互。在圖1中,我們可以看到,記帳系統是一個外界系統,它需要更新帳目。

通過實踐,我們發現執行者對提供用例是非常有用的。面對一個大系統,要列出用例清單常常是十分困難。這時可先列出執行者清單,再對每個執行者列出它的用例,問題就會變得容易很多。

使用和擴展(Use and Extend)

圖1中除了包含執行者與用例之間的連接外,還有另外兩種類型的連接,用以表示用例之間的使用和擴展關系。使用和擴展是兩種不同形式的繼承關系。當一個用例與另一個用例相似,但所做的動作多一些,就可以用到擴展關系。例如圖1中,基本的用例是"進行交易"。交易中可能一切都進行得很順利,但也可能存在擾亂順利進行交易的因素。其中之一便是超出某些邊界值的情況。例如,貿易組織會對某個特定客戶規定最大貿易量,這時不能執行給定用例提供的常規動作,而要做些改動。我們可在"進行交易"用例中做改動。但是,這將把該用例與一大堆特殊的判斷和邏輯混雜在一起,使正常的流程晦澀不堪。圖1中將常規的動作放在"進行交易"用例中,而將非常規的動作放置於"超越邊界的交易"用例中,這便是擴展關系的實質。當有一大塊相似的動作存在於幾個用例,又不想重復描述該動作時,就可以用到使用關系。例如,現實中風險分析和交易估價都需要評價貿易,為此可單獨定義一個用例,即"評價貿易",而"風險分析"和"交易估價"用例將使用它。

請注意擴展與使用之間的相似點和不同點。它們兩個都意味著從幾個用例中抽取那些公共的行為並放入一個單獨用例中,而這個用例被其他幾個用例使用或擴展。但使用和擴展的目的是不同的。

用例模型的獲取

幾乎在任何情況下都會使用用例。用例用來獲取需求,規劃和控制項目。用例的獲取是需求分析階段的主要任務之一,而且是首先要做的工作。大部分用例將在項目的需求分析階段產生,並且隨著工作的深入會發現更多的用例,這些都應及時增添到已有的用例集中。用例集中的每個用例都是一個潛在的需求。

1. 獲取執行者

獲取用例首先要找出系統的執行者。可以通過用戶回答一些問題的答案來識別執行者。以下問題可供參考:

·誰使用系統的主要功能(主要使用者)。

·誰需要系統支持他們的日常工作。

·誰來維護、管理使系統正常工作(輔助使用者)。

·系統需要操縱哪些硬體。

·系統需要與哪些其它系統交互,包含其它計算機系統和其它應用程序。

·對系統產生的結果感興趣的人或事物。

相關回復
解析UML的靜態建模機制(2)

2. 獲取用例

一旦獲取了執行者,就可以對每個執行者提出問題以獲取用例。

以下問題可供參考:

·執行者要求系統提供哪些功能(執行者需要做什麼)?

·執行者需要讀、產生、刪除、修改或存儲的信息有哪些類型。

·必須提醒執行者的系統事件有哪些?或者執行者必須提醒系統的事件有哪些?怎樣把這些事件表示成用例中的功能?

·為了完整地描述用例,還需要知道執行者的某些典型功能能否被系統自動實現?

還有一些不針對具體執行者問題(即針對整個系統的問題):

·系統需要何種輸入輸出?輸入從何處來?輸出到何處?

·當前運行系統(也許是一些手工操作而不是計算機系統)的主要問題?

需要注意,最後兩個問題並不是指沒有執行者也可以有用例,只是獲取用例時尚不知道執行者是什麼。一個用例必須至少與一個執行者關聯。還需要注意:不同的設計者對用例的利用程度也不同。例如,Ivar Jacobson說,對一個十人年的項目,他需要二十個用例。而在一個相同規模的項目中,Martin Fowler則用了一百多個用例。我們認為:任何合適的用例都可使用,確定用例的過程是對獲取的用例進行提煉和歸納的過程,對一個十人年的項目來說,二十個用例似乎太少,一百多個用例則嫌太多,需要保持二者間的相對均衡。

類圖、對象圖和包

數千年以前,人類就已經開始採用分類的方法有效地簡化復雜問題,幫助人們了解客觀世界。在面向對象建模技術中,我們使用同樣的方法將客觀世界的實體映射為對象,並歸納成一個個類。類(Class)、對象(Object)和它們之間的關聯是面向對象技術中最基本的元素。對於一個想要描述的系統,其類模型和對象模型揭示了系統的結構。在UML中,類和對象模型分別由類圖和對象圖表示。類圖技術是OO方法的核心。圖2顯示了一個金融保險系統的類圖。

圖2 金融保險系統類圖

類圖

類圖(Class Diagram)描述類和類之間的靜態關系。與數據模型不同,它不僅顯示了信息的結構,同時還描述了系統的行為。類圖是定義其它圖的基礎。在類圖的基礎上,狀態圖、合作圖等進一步描述了系統其他方面的特性。

類和對象

對象(Object)與我們對客觀世界的理解相關。我們通常用對象描述客觀世界中某個具體的實體。所謂類(Class)是對一類具有相同特徵的對象的描述。而對象是類的實例(Instance)。建立類模型時,我們應盡量與應用領域的概念保持一致,以使模型更符合客觀事實,易修改、易理解和易交流。

類描述一類對象的屬性(Attribute)和行為(Behavior)。在UML中,類的可視化表示為一個劃分成三個格子的長方形(下面兩個格子可省略)。圖1中,"客戶"就是一個典型的類。

類的獲取和命名 最頂部的格子包含類的名字。類的命名應盡量用應用領域中的術語,應明確、無歧義,以利於開發人員與用戶之間的相互理解和交流。類的獲取是一個依賴於人的創造力的過程,必須與領域專家合作,對研究領域仔細地分析,抽象出領域中的概念,定義其含義及相互關系,分析出系統類,並用領域中的術語為類命名。一般而言,類的名字是名詞。

· 類的屬性

中間的格子包含類的屬性,用以描述該類對象的共同特點。該項可省略。圖2中「客戶」類有"客戶名"、"地址"等特性。屬性的選取應考慮以下因素:

*原則上來說,類的屬性應能描述並區分每個特定的對象;

*只有系統感興趣的特徵才包含在類的屬性中;

*系統建模的目的也會影響到屬性的選取。根據圖的詳細程度,每條屬性可以包括屬性的可見性、屬性名稱、類型、預設值和約束特性。UML規定類的屬性的語法為:

可見性 屬性名 : 類型 = 預設值 {約束特性}

圖2「客戶」類中,"客戶名"屬性描述為"- 客戶名 : 字元串 = 預設客戶名"。

可見性"-"表示它是私有數據成員,其屬性名為"客戶名",類型為"字元串"類型,預設值為"預設客戶名",此處沒有約束特性。

不同屬性具有不同可見性。常用的可見性有Public、Private和Protected三種,在UML中分別表示為" "、"-"和"#"。

類型表示該屬性的種類。它可以是基本數據類型,例如整數、實數、布爾型等,也可以是用戶自定義的類型。一般它由所涉及的程序設計語言確定。

約束特性則是用戶對該屬性性質一個約束的說明。例如"{只讀}"說明該屬性是只讀屬性。

· 類的操作(Operation)

該項可省略。操作用於修改、檢索類的屬性或執行某些動作。操作通常也被稱為功能,但是它們被約束在類的內部,只能作用到該類的對象上。操作名、返回類型和參數表組成操作界面。UML規定操作的語法為:

可見性 操作名 (參數表) : 返回類型 {約束特性}

在圖2中,"客戶"類中有"取客戶地址"操作,其中" "表示該操作是公有操作,調用時需要參數"客戶名",參數類型為字元串,返回類型也為字元串。

類圖描述了類和類之間的靜態關系。定義了類之後,就可以定義類之間的各種關系了。

關聯關系

關聯(Association)表示兩個類之間存在某種語義上的聯系。例如,一個人為一家公司工作,一家公司有許多辦公室。我們就認為人和公司、公司和辦公室之間存在某種語義上的聯系。在分析設計的類圖模型中,則在對應人類和公司類、公司類和辦公室類之間建立關聯關系。

在圖2中最上部存在一個"屬於"/"簽定"關聯:每個"保險單"屬於一個"客戶",而"客戶"可以簽定多個"保險單"。除了這個關聯外,圖1中還有另外兩個關聯,分別表示每個"保險單"包含若干個"保險單上的項目",而每個"保險單上的項目"涉及單一的"保險類別"。

· 關聯的方向

關聯可以有方向,表示該關聯單方向被使用。關聯上加上箭頭表示方向,在UML中稱為導航(Navigability)。我們將只在一個方向上存在導航表示的關聯,稱作單向關聯 ( Uni-directional Association ),在兩個方向上都有導航表示的關聯,稱作雙向關聯 ( Bi-directional Association )。圖2中,"保險單"「保險單上的項目」是單向關聯。UML規定,不帶箭頭的關聯可以意味著未知、未確定或者該關聯是雙向關聯三種選擇,因此,在圖中應明確使用其中的一種選擇。

· 關聯的命名

既然關聯可以是雙向的,最復雜的命名方法是每個方向上給出一個名字,這樣的關聯有兩個名字。(見圖2中最上部的"屬於"/"簽定"關聯)。為關聯命名有幾種方法,其原則是該命名是否有助於理解該模型。

· 角色

關聯兩頭的類以某種角色參與關聯。例如圖3中,"公司"以"僱主"的角色,"人"以"雇員"的角色參與的"工作合同"關聯。"僱主"和"雇員"稱為角色名。如果在關聯上沒有標出角色名,則隱含地用類的名稱作為角色名。角色還具有多重性(Multiplicity),表示可以有多少個對象參與該關聯。在圖3中,僱主(公司)可以僱傭(簽工作合同)多個雇員,表示為"*";雇員只能與一家僱主簽定工作合同,表示為"1"。多重性表示參與對象的數目的上下界限制。"*"代表0~∞,即一個客戶可以沒有保險單,也可以有任意多的保險單。"1"是1..1的簡寫,即任何一個保險單僅來自於一個客戶,可以用一個單個數字表示,也可以用范圍或者是數字和范圍不連續的組合表示。

圖3 關聯的角色

· 關聯類

一個關聯可能要記錄一些信息,可以引入一個關聯類來記錄。圖4是在圖3的基礎上引入了關聯類。關聯類通過一根虛線與關聯連接。圖5是實現上述目標的另外一種方法,就是使僱用關系成為一個正式的類。

圖4 關聯類

圖5 另一種實現方法

· 聚集和組成

聚集(Aggregation)是一種特殊形式的關聯。聚集表示類之間的關系是整體與部分的關系。一輛轎車包含四個車輪、一個方向盤、一個發動機和一個底盤,這是聚集的一個例子。在需求分析中,"包含"、"組成"、"分為……部分"等經常設計成聚集關系。聚集可以進一步劃分成共享聚集(Shared Aggregation)和組成。例如,課題組包含許多成員,但是每個成員又可以是另一個課題組的成員,即部分可以參加多個整體,我們稱之為共享聚集。另一種情況是整體擁有各部分,部分與整體共存,如整體不存在了,部分也會隨之消失,這稱為組成(Composition)。例如,我們打開一個視窗口,它就由標題、外框和顯示區所組成。一旦消亡則各部分同時消失。在UML中,聚集表示為空心菱形,組成表示為實心菱形。需要注意的是,一些面向對象大師對聚集的定義並不一樣。大家應注意其他面向對象方法與UML中所定義的聚集的差別。

繼承關系

人們將具有共同特性的元素抽象成類別,並通過增加其內涵而進一步分類。例如,動物可分為飛鳥和走獸,人可分為男人和女人。在面向對象方法中將前者稱為一般元素、基類元素或父元素,將後者稱為特殊元素或子元素。繼承(Generalization)定義了一般元素和特殊元素之間的分類關系。在UML中,繼承表示為一頭為空心三角形的連線。

如圖2中,將客戶進一步分類成個體客戶和團體客戶,使用的就是繼承關系。

在UML定義中對繼承有三個要求:

*特殊元素應與一般元素完全一致,一般元素所具有的關聯、屬性和操作,特殊元素也都隱含性地具有;

*特殊元素還應包含額外信息;

*允許使用一般元素實例的地方,也應能使用特殊元素。

依賴關系

有兩個元素X、Y,如果修改元素X的定義可能會引起對另一個元素Y的定義的修改,則稱元素Y依賴(Dependency)於元素X。在類中,依賴由各種原因引起,如:一個類向另一個類發消息;一個類是另一個類的數據成員;一個類是另一個類的某個操作參數。如果一個類的界面改變,它發出的任何消息可能不再合法。

發表者:nuaalfm(方明) - - 2006-08-02 02:56
解析UML的靜態建模機制(3)

類圖的抽象層次和細化(Refinement)關系
需要注意的是,雖然在軟體開發的不同階段都使用類圖,但這些類圖表示了不同層次的抽象。在需求分析階段,類圖是研究領域的概念;在設計階段,類圖描述類與類之間的介面;而在實現階段,類圖描述軟體系統中類的實現。按照Steve Cook和John Dianiels的觀點,類圖分為三個層次。需要說明的是,這個觀點同樣也適合於其他任何模型,只是在類圖中顯得更為突出。

· 概念層

概念層(Conceptual)類圖描述應用領域中的概念。實現它們的類可以從這些概念中得出,但兩者並沒有直接的映射關系。事實上,一個概念模型應獨立於實現它的軟體和程序設計語言。

· 說明層

說明層(Specification)類圖描述軟體的介面部分,而不是軟體的實現部分。面向對象開發方法非常重視區別介面與實現之間的差異,但在實際應用中卻常常忽略這一差異。這主要是因為OO語言中類的概念將介面與實現合在了一起。大多數方法由於受到語言的影響,也仿效了這一做法。現在這種情況正在發生變化。可以用一個類型(Type )描述一個介面,這個介面可能因為實現環境、運行特性或者用戶的不同而具有多種實現。

· 實現層

只有在實現層(Implementation)才真正有類的概念,並且揭示軟體的實現部分。這可能是大多數人最常用的類圖,但在很多時候,說明層的類圖更易於開發者之間的相互理解和交流。

理解以上層次對於畫類圖和讀懂類圖都是至關重要的。但是由於各層次之間沒有一個清晰的界限,所以大多數建模者在畫圖時沒能對其加以區分。畫圖時,要從一個清晰的層次觀念出發;而讀圖時,則要弄清它是根據哪種層次觀念來繪制的。要正確地理解類圖,首先應正確地理解上述三種層次。雖然將類圖分成三個層次的觀點並不是UML的組成部分,但是它們對於建模或者評價模型非常有用。盡管迄今為止人們似乎更強調實現層類圖,但這三個層次都可應用於UML,而且實際上另外兩個層次的類圖更有用。

下面介紹細化概念。細化是UML中的術語,表示對事物更詳細一層的描述。兩個元素A、B描述同一件事物,它們的區別是抽象層次不同,若元素B是在元素A的基礎上的更詳細的描述,則稱元素B細化了元素A,或稱元素A細化成元素B。細化的圖形表示為由元素B指向元素A的、一頭為空心三角的虛線(千萬不要把方向顛倒了!)。細化主要用於模型之間的合作,表示開發各階段不同層次抽象模型的相關性,常用於跟蹤模型的演變。

約束

在UML中,可以用約束(Constraint)表示規則。約束是放在括弧"{}"中的一個表達式,表示一個永真的邏輯陳述。在程序設計語言中,約束可以由斷言(Assertion)來實現。

對象圖、對象和鏈

UML中對象圖與類圖具有相同的表示形式。對象圖可以看作是類圖的一個實例。對象是類的實例;對象之間的鏈(Link)是類之間的關聯的實例。對象與類的圖形表示相似,均為劃分成兩個格子的長方形(下面的格子可省略)。上面的格子是對象名,對象名下有下劃線;下面的格子記錄屬性值。鏈的圖形表示與關聯相似。對象圖常用於表示復雜的類圖的一個實例。



一個最古老的軟體方法問題是:怎樣將大系統拆分成小系統。解決這個問題的一個思路是將許多類集合成一個更高層次的單位,形成一個高內聚、低耦合的類的集合。這個思路被鬆散地應用到許多對象技術中。UML中這種分組機制叫包(Package)(見圖6)。

圖6 包圖

不僅是類,任何模型元素都運用包的機制。如果沒有任何啟發性原則來指導類的分組,分組方法就是任意的。在UML中,最有用的和強調最多的啟發性原則就是依賴。包圖主要顯示類的包以及這些包之間的依賴關系。有時還顯示包和包之間的繼承關系和組成關系。

· 包的內容

在圖6中,"系統內部"包由"保險單"包和"客戶"包組成。這里稱"保險單"包和"客戶"包為"系統內部"包的內容。當不需要顯示包的內容時,包的名字放入主方框內,否則包的名字放入左上角的小方框中,而將內容放入主方框內。包的內容可以是類的列表,也可以是另一個包圖,還可以是一個類圖。

· 包的依賴和繼承

圖6中"保險單填寫界面"包依賴於"保險單"包;整個"系統內部"包依賴於"資料庫界面"包。可以使用繼承中通用和特例的概念來說明通用包和專用包之間的關系。例如,專用包必須符合通用包的界面,與類繼承關系類似。通過"資料庫界面"包,"系統內部"包既能夠使用Oracle的界面也可使用Sybase的界面。通用包可標記為{abs tract},表示該包只是定義了一個界面,具體實現則由專用包來完成。

其他模型元素和表示機制

類圖中用到的模型元素和表示機制較為豐富,由於篇幅的限制,這里不能一一介紹。主要還有以下模型符號和概念:類

『貳』 需求管理的與需求有關的問題:

需求不總是顯而易見的,而且它可來自各個方面. 需求並不總是容易用文字明白無誤地表達. 存在不同種類的需求,其詳細程度各不相同. 如果不加以控制,需求的數量將難以管理. 需求相互之間以及與流程的其他可交付工件之間以多種方式相關聯. 需求有唯一的特徵或特徵值.例如,它們既非同等重要,處理的難度也不同. 需求涉及眾多相關利益責任方,這意味著需求要由跨職能的各組人員來管理. 需求發生變更. 需求可能對時間敏感. 當這些問題與需求管理和處理技能不足以及缺乏易用工具等情況一同出現時,許多團隊都對管理好需求不抱希望了.IBM Rational 已經開發出指導團隊提高需求管理技能和流程的專業技術,並使用相應的工具使得上述的流程和專業技術得以實現.
從上述的分析可以看出,需求的捕獲是需求管理的基礎和前提.在這里,將介紹一種為業界所廣泛採用並經驗證的需%E4%BE%8B%E6%A8%A1%E5%9E%8B target=_new class=innerlink>用例模型. 用例模型是系統既定功能及系統環境的模型,並作為客戶和開發人員之間的契約.
用例模型用作分析,設計和測試活動的基本輸入.用例是貫穿整個系統開發的一條主線.同一個用例模型即為需求工作流程的結果,可當作分析設計工作流程以及測試工作流程的輸入使用.參與者(Actor)和用例(UseCase)是用例模型中的主要元素. 下圖顯示了自動取款機系統用例模型的一部分:
客戶
查詢
提款
轉帳
客戶身份驗證系統時鍾
資料庫伺服器
(from )系統維護
信函列印機
列印對帳單
用例圖用於顯示包含參與者和用例的用例模型示例.系統建模有許多種方法,每種建模方法可以滿足不同的目的.然而,用例模型最重要的作用是將系統行為傳達給客戶或最終用戶.可能與該系統交互的用戶和任何其他系統都是參與者.由於參與者代表了系統用戶,它們協助界定系統並提供十分明確的系統用途說明.編寫用例依據參與者的需求來進行.這樣就確保該系統成為用戶期望得到的系統.
參與者和用例都是通過將客戶需求及潛在用戶當作重要的信息查找到的.找到這些用例和參與者後,應對它們作簡要說明.在詳細說明這些用例之前,客戶應復審該用例模型以核實所有的用例和參與者都已經找到,並且它們可以提供客戶所需要的東西. 在迭代開發環境中,您可以選擇用例的子集以便在每個迭代中詳細描述.參與者和用例找到後,需要詳細說明每個用例的事件流.這些說明指出系統與參與者交互的方式以及在各個獨立用例中系統執行的有關操作.
最後,對已完成的用例模型(包括用例說明)進行復審,開發人員和客戶使用該模型對系統應執行的操作達成一致意見.

『叄』 我們應當怎樣做需求分析:功能角色分析與用例圖

在我們進行一系列需求調研工作的同時,我們的需求分析工作也開始啟動了。需求調研與需求分析工作應當是相輔相伴共同進行的。每次參加完需求調研回到公司,我們就應當對需求調研的成果進行一次需求分析。當下一次開始進行需求調研時,我們應當首先將上次需求分析的結果與客戶進行確認,同時對需求分析中提出的疑問交給客戶予以解答。這就是一個需求捕獲->需求整理->需求驗證->再需求捕獲的過程。

但是,當我們經過一番忙碌,將需求中的第一手資料從調研現場捕獲回來以後,我們應當怎樣進行分析呢?不少團隊對此都比較迷茫,沒有一個統一和有效的方法,往往採用想到哪裡做到哪裡的方式。一些問題想到了就做了,沒有想到則忽略掉了。實際上,需求分析不應當是太公釣魚,而應當是拉網排查。任何一個疏忽都可能對項目研發帶來風險。因此,我們應當採用一套成熟而完整的分析方法,穩步而有序地完成這部分工作。不同類型的軟體項目其分析方法可能存在差異,但一般來說,信息化管理類軟體項目通常從這幾個方面著手分析:功能角色分析、業務流程分析與業務領域分析。

需求分析不是一項一蹴而就就可以完成的工作,它需要一個長期的過程,而這個過程是一個由粗到細的過程,它體現了人類認識事物的客觀規律。在需求分析的初期,我們對需求的認識往往是整體的、宏觀的,隨著分析工作的逐漸深入,一步步細化。按照這個思路,我們對需求的分析,首先應當從功能角色分析開始。所謂功能角色分析,就是從一個外部用戶的視角分析整個軟體系統能夠提供的功能,以及這些功能到底是提供給哪些角色使用。

對一個系統進行功能和角色方面的梳理和分析,可以採用的比較主流的方法之一就是繪制用例圖。用例圖是UML的4+1視圖中的一種,准確地說就是那個「+1」。用例圖是貫穿整個面向對象分析/設計(OOA/D)的核心視圖,它描述的是系統到底為用戶提供了哪些功能,以及到底是哪些用戶在使用這些功能,是溝通用戶與技術人員的橋梁。運用用例視圖對業務需求進行分析、抽象、整理、提煉,進而形成抽象模型的過程稱之為用例建模,而這個模型就是用例模型。

一般地,在一個用例圖中通常有三種元素:參與者(Actor)、用例(Use Case)與系統邊界(Boundary)。用例描述的是系統為用戶提供的功能,也就是系統能為用戶做什麼,通常被繪製成一個橢圓;參與者,我認為稱為角色更加合適,也就是系統為哪些類型的用戶提供服務,他們都各自承擔哪些不同的職責,通常被繪製成一個小人兒;最後是系統邊界,也就是系統是對現實世界哪個范圍的內容進行的模擬,它涉及到軟體設計的工作范圍與工作量,通常被繪製成一個方框。但是,通常情況下系統邊界只是一個概念而不用真正繪制出來,因為被繪製成用例的必然是系統內部的功能,被繪製成參與者的必然是系統外部事物。從這個意義上講,用例圖中的參與者不僅包括人,還包括那些外部系統和自動觸發器。根據這樣一個思路,我以往常常將外部系統和自動觸發器繪製成一個小人,這常常令客戶感到困惑。隨後我改變了思路,將外部系統和自動觸發器繪製成另一種表達形式——類元符號表示法,並在構造型上標注為Actor。


功能角色分析是對系統宏觀的、整體的需求分析,它用簡短的圖形繪制出了一個系統的整體輪廓。但僅僅進行功能角色分析是遠遠不夠的,我們還需要在它的基礎上做更加詳盡的分析。

『肆』 用例模型在面向對象分析中的重要作用是什麼

用例圖將要設計的整個系統的需求分為若干模塊,並定義了每個模塊的參與者和參與者之間的聯系。用例圖就是業務邏輯的總體概況。

『伍』 面向對象中的用例圖與結構化方法中的數據流圖dfd有何異同

用於需求建模的方法有很多種,最常用的包括數據流圖(DFD)、實體關系圖(ERD)和用例圖(Use Case)三種方式。DFD作為結構化系統分析與設計的主要方法,已經得到了廣泛的應用,DFD尤其適用於MIS系統的表述。DFD使用四種基本元素來描述系統的行為,過程、實體、數據流和數據存儲。DFD方法直觀易懂,使用者可以方便地得到系統的邏輯模型和物理模型,但是從DFD圖中無法判斷活動的時序關系。圖2描述的是某個項目的DFD示意圖。
ERD方法用於描述系統實體間的對應關系,需求分析階段使用ERD描述系統中實體的邏輯關系,在設計階段則使用ERD描述物理表之間的關系。需求分析階段使用ERD來描述現實世界中的對象。ERD只關注系統中數據間的關系,而缺乏對系統功能的描述。如果將ERD與DFD兩種方法相結合,則可以更准確地描述系統的需求。
在面向對象分析的方法中通常使用Use Case來獲取軟體的需求。Use Case通過描述「系統」和「活動者」之間的交互來描述系統的行為。通過分解系統目標,Use Case描述活動者為了實現這些目標而執行的所有步驟。Use Case方法最主要的優點,在於它是用戶導向的,用戶可以根據自己所對應的Use Case來不斷細化自己的需求。此外,使用Use Case還可以方便地得到系統功能的測試用例。
傳統方法:(過程+實體)
把系統看作一個過程的集合體。
過程與數據實體交互。過程接受輸入並產生輸出。

OO方法:(對象+消息)
把系統看成是一個相互影響的對象集。
對象之間通過發送和響應消息進行交互。

從過程到OO不是簡單地一個升級。
傳統方法強調「過程模型+實體模型」。
OO方法強調「對象模型+對象交互」。
不可能將傳統方法的思維應用於OO方法中。

傳統方法用「數據流圖+數據字典」來描述系統需求。
數據流圖包括外部實體、過程、數據流和數據存儲等DFD部件。
數據字典則是對DFD部件的定義,包括過程描述、數據流定義、數據元素定義和數據存儲定義。

OO方法用5種圖來定義系統需求:類圖+用例圖+協作圖+順序圖+狀態圖。
這些圖相互聯系,有時並不是這些圖都要用到。

『陸』 用例分析的介紹

用例分析是從用例模型到分析模型的過程,是需求與設計之間的橋梁。用例分析把系統的行為分配給分析類,讓分析類交互完成系統的行為。

『柒』 用例模型的介紹

用例模型是系統既定功能及系統環境的模型,它可以作為客戶和開發人員之間的契約。用例是貫穿整個系統開發的一條主線。同一個用例模型即為需求工作流程的結果,可當作分析設計工作流程以及測試工作流程的輸入使用。

『捌』 用例模型的用途說明

可能與該系統交互的用戶和任何其他系統都是主角。由於主角代表了系統用戶,它們協助界定系統並提供十分明確的系統用途說明。編寫用例依據主角的需求來進行。這樣就確保該系統成為用戶期望得到的系統。 主角和用例都是通過將客戶需求及潛在用戶當作重要的信息查找到的。找到這些用例和主角後,應對它們作簡要說明。在詳細說明這些用例之前,客戶應復審該用例模型以核實所有的用例和主角都已經找到,並且它們可以提供客戶所需要的東西。
在迭代開發環境中,您可以選擇用例的子集以便在每個迭代中詳細描述。另請參見活動:確定用例的優先順序。
主角和用例找到後,需要詳細說明每個用例的事件流。這些說明指出系統與主角交互的方式以及在各個獨立用例中系統執行的有關操作。
最後,對已完成的用例模型(包括用例說明)進行復審,開發人員和客戶使用該模型對系統應執行的操作達成一致意見。 用例模型退化導致系統功能分解的情況並不罕見。為避免發生這種情況,必須注意以下故障現象:
「小」用例,即對事件流的說明只有一個或少數幾個句子。 「許多」用例,即用例的數量有好幾百,而不是好幾十。 用例名的構造類似於「根據這一特定數據執行本操作」或「利用這一數據執行本功能」等。例如,「在 ATM 機上輸入個人識別號」不應建模為 ATM 機的一個單獨用例,原因是沒有人會使用系統僅執行這一操作。用例是一個完整事件流,它可以產生對主角有價值的東西。
為避免功能分解,您需要確保該用例模型有助於回答諸如以下的問題:
系統的環境是什麼? 為什麼要建立系統? 用戶在使用系統時希望獲得什麼? 系統將給用戶創造什麼價值? 不難發現,用例是一個很好的獲取系統功能性需求的方法。但是對於非功能性需求,情況又如何呢?什麼是非功能性需求,可以在何處獲得它們?
非功能性需求通常分為可用性需求、可靠性需求、性能需求以及可替換性需求(另請參閱概念:需求)。它們通常是指定需要符合任意法律法規要求的需求。它們也可以是由於所使用的操作系統、環境平台、兼容性或所採用的任何應用標准等問題產生的設計約束。通常,任何不允許有一個以上設計選項的需求都可以認為是一個設計約束。
許多非功能性需求適用於一個單獨的用例,並且可以在該用例的特徵內獲得這些需求。在這種情況下,這些需求可以在用例的事件流內獲取,或者作為用例的一個特殊需求來獲取(請參閱指南:用例)。
示例:
在回收機系統中,返還儲存項用例的一個特定非功能性需求是:該機器識別儲存項的可靠性必須高於 95%。
通常,功能性需求適用於整個系統。此類需求可以在補充規約中獲得(請參閱工件:補充規約)。 示例:
在回收機系統中,一個適用於整個系統的非功能性規約是:
機器每次只允許一個用戶使用。 學習如何確定用例應該在哪個明細級別上「開始和結束」是一件比較困難的事情。特徵和用例開始於何處,而用例結束和設計開始又在什麼地方?我們通常說,用例或軟體需求應該規定系統做「什麼」而不是「如何」做的問題。以下圖為例:
一個人的終點是另一個人的起點。
根據個人背景,您可以使用不同的環境來確定您對「什麼」以及「如何」的理解。當決定是否應該將某個細節擯棄於用例模型之外時,需要仔細考慮這一問題。 具體用例和抽象用例之間存在一個區別。具體用例由主角來啟動,並且構成一個完整的事件流。「完整」意味著該用例的一個實例執行由主角調用的全部操作。抽象用例本身從來不會被實例化。抽象用例包括在(請參閱指南:包含關系)其他用例中,擴展到(請參閱指南:擴展關系)或泛化關系(請參閱指南:用例泛化關系)其他用例。在啟動一個具體用例時,也就創建了該用例的一個實例。這一實例還展示了由其關聯關系的抽象用例指定的活動。因而,從抽象用例中無法創建單獨的實例。
由於主角在系統中「看見」和啟動的是具體用例,因此這兩種用例之間的區別非常重要。
表明一個用例為抽象用例時,可以將其名稱格式設置為斜體。示例:
「創建任務」用例包括在「注冊單」用例中「創建任務」用例是一個抽象用例。
在庫房管理系統中,「創建任務」抽象用例包括在「注冊單」用例中。啟動「注冊單」用例後,將創建一個注冊單實例。該實例除了遵循注冊單的事件流之外,它還遵循在所包含的用例「創建任務」內說明的事件流。「創建任務」本身從來不被執行,但始終作為「注冊單」(或其他任何包含「創建任務」的用例)的一個部分。因此,「創建任務」是一個抽象用例。 構建用例模型有三個主要的原因:
使用例更易於理解。 將在許多用例內說明的公有行為分離出來。 使用例模型更易於維護。
然而,構建模型並不是首先要做的事情。在您對用例的行為有更深入的了解(而不是一句話簡要說明)之前,千萬不要構建該用例。您至少需要為該用例的事件流建立一個分步說明大綱,確保您的決策是建立在對該行為有精確而充分的理解基礎之上。
有三種關系可以用於構建用例。您可以使用這些關系來分析出用例部件,這些部件可以在其他用例中復用,或者作為該用例的特例或選項。表示修改的用例稱為附加用例。被修改的用例稱為基本用例。
如果基本用例中有一部分功能,該用例的執行與否由它的結果唯一決定,而不是由產生該結果的方法來決定,則可以將這一部分功能分離出來,放到一個附加用例中。採用包含關系,可以將附加用例顯式插入基本用例中。另請參見指南:包含關系。
如果基本用例的一部分是可選的,或對於理解該用例的主要目的來說不是必需的,那麼您可以將這部分分離出來,形成一個附加用例,以簡化基本用例的結構。利用擴展關系,可以將附加用例隱式插入基本用例中。另請參見指南:擴展關系。
如果用例在行為和結構上具有共同點而且在目的上又很相似,則可以將它們的共同部分分離出來,形成一個基本用例(父用例)。而附加用例(子用例)可以繼承該父用例。子用例可以在從父用例繼承的結構中插入新的行為或修改現有的行為。另請參見指南:用例泛化關系。
您可以使用主角泛化關系來顯示主角之間的特化情況。另請參見指南:主角泛化關系。
示例:
以訂單管理系統的用例模型部分為例進行說明。
由於他們具有略微不同的特徵,因此將普通客戶從 Internet 客戶中分離開來是非常有用的。然而,因為 Internet 客戶的確顯示了一個客戶具有的所有特徵,所以您可以說 Internet 客戶是客戶的一個特例,並且能夠通過主角泛化關系來指示。
在本圖中,具體用例分別是「電話訂購」(由客戶主角發出)和「Internet 訂購」(由 Internet 客戶發出)。這些用例都是更普通的「??一個抽象用例。「請求目錄」用例代表一個可選行為段,它不是「訂購」用例主要目標的組成部分。它已經被分離出來,形成了一個抽象用例,用於簡化「訂購」用例。「提供客戶數據」用例是一個已分離出的行為段。它之所以被分離出來,是因為它是一個獨立功能,只有它的結果才能影響「訂購」用例。「供給客戶數據」用例還可以在其他用例中復用。「請求目錄」用例和「供給客戶數據」用例在本示例中都屬於抽象用例。
本用例圖顯示訂單管理系統的用戶模型部分。
下表顯示了三個不同用例關系之間更詳細的比較:
為達到更易於理解的目的,組織用例模型的另一個方法是對用例進行分組,形成多個包。用例模型可以組織為一個有層次的用例包結構,而主角或用例是該結構中的「樹葉」。另請參見指南:用例包。本圖顯示用例模型的分層結構。箭頭表示可能存在所有權關系。 用例模型 的調查說明應該: 聲明哪些是系統的主要用例(系統建立的原因)。 總結有關系統的重要技術實際情況。 指出系統定界 - 系統將不執行的操作。 概述系統的環境,例如目標平台和現有的軟體。 描述在該系統中正常執行用例的任意序列。 詳細說明用例模型未處理的功能。 示例: 以下是關於回收機的用例模型的調查說明示例: 本模型包括三個主角和三個用例。主要用例是「回收項」,它說明回收機的主要用途。 支持用例有: 「列印日常報告」,操作員可以使用它獲得關於已經回收多少項目的報告。 「管理儲存項」,操作人員可以使用它來變更某個儲存項類型的退款金額,或增加新的儲存項類型。

『玖』 業務建模的用例模型

業務用例模型(business use-case model),在RUP中定義為:
業務用例模型是說明業務預期功能的模型。作為一個核心輸入模型,業務用例模型用於確定組織的各個角色和可交付工件。
從業務用例模型的定義可以看出,它是企業最核心,最概括的業務說明。它主要是由業務用例和業務主角構成的,其主要目的是說明客戶和合作夥伴是如何開展業務的,它描述業務的主要方式是通過業務用例的方式。下圖為RUP中業務用例模型的圖示。
從圖中我們也可以很清楚的看出業務用例模型包括一組的業務用例。這是因為企業中的業務通常都會由多個的業務用例的多個實例構成。這些業務用例形成的企業工作流程可能會由業務主角所引發,也可能會由業務規則②所引發。
②業務規則(Business Rules):業務規則是必須遵守的政策或條件的聲明。
業務用例模型實際上就是企業經營業務的一種描述,為了建立完整、准確的企業用例模型,應該將注意力專注於企業的業務做了些什麼事情,而不應該集中於如何做。雖然這樣可能會產生一些業務用例相沖突,相重復的情況,但是RUP的思想在於迭代,這項工作完全可以在接下去的迭代周期內完善。
業務用例模型是和企業業務最貼近的計算機模型。它的很多思想和企業日常經營如出一轍。在企業的日常活動中,業務的種類可能有很多種。在一些講述ERP思想的文章中,通常會強調三類:
一種是和主營業務密切相關的工作,例如銀行的營業部、信貸部、押匯部等。這種工作通過人的勞動,將一種資源轉變為另一種資源,產生價值。
一種是管理型的工作,例如公司的管理層,財務部門等。這種工作本身並不產生價值,但是它通過指導、管理、檢測第一種工作,加大第一種工作的產出價值。
還有一種稱為支持工作,例如系統管理、安全等。它並不是很重要,具有支持其他工作的性質。
業務模型同樣可以使用這種分類。通過這種分類,可以更好的把握核心業務用例,為下一步的工作打好基礎。
有很多業務用例是由業務主角觸發的,RUP中也把和業務主角有關聯關系的業務用例稱為核心業務用例(Core Business Use Case)。這強調了構建業務模型的目的是為了提供以用戶為中心的服務。這也是我們建立業務用例的時候應該注意的。
當然,有時候業務用例的觸發是為了產生用戶需要的結果。例如企業的市場調查行為就不是由業務主角觸發,而是企業積累了大量用戶請求的結果。而對於管理型、支持型的,不直接和業務主角的客戶類發生聯系,但是也有其特定的業務主角,如管理型的業務用例需要和董事會為發生聯系,支持型的業務用例可能和供應商發生聯系。
在建立了基本的業務用例模型之後,對此模型進行精化是非常有必要的,這時候,在上一章中我們介紹的用例的擴展關系和使用關系就有了用武之地。除了這兩種關系,還有一種新的關系。
業務建模中使用關系
泛化關系(Generalization):根據我的理解,可以把它看作我們比較熟悉的繼承關系很相似的一種關系。Generalization一詞含有一般化、概括的意思。它是一個相對抽象的詞。雖然它和繼承關系非常相似,但是它們在使用環境和產生目的方面都有相異之處。下圖描述了四個業務實體之間的泛化關系: 當你去麥當勞的時候(不要誤會,我並不是很經常去的),會選擇麥香雞漢堡、麥香魚漢堡或是吉士漢堡。但是分別對這三種漢堡建立業務實體就非常沒有意義。所以可以將它們概括為漢堡這個業務實體。同樣的道理,企業的業務流程中也可以概括出一些共有的屬性和行為。為了避免多次說明同一個工作流程,您可以將共有的行為放在一個單獨的業務用例中。稱為父用例,執行子用例的用例實例將遵循父用例的事件流,同時插入附加行為或修改在子用例事件流中定義的行為。
方法的選擇
以上的原理我採用了UP的方法。但是除了UP方法,還有XP、FDD等方法。所以在做業務建模的時候,也要根據不同的方法選擇適當的工件。例如素材和功能。方法的好壞並不是我們這片文章討論的重點,我會在另一篇文章中討論方法。再一次需要強調的是,上面討論的RUP的工件只是為了學習,所以才定義了比較復雜的工件,區分了它們之間的區別。但是在實際中,並不需要這么多的工件,那隻會使你的項目涉眾和開發人員糊塗。這些工件的區別只要在你心中就可以了。

『拾』 用例的程序設計·用例

那麼,到底什麼是Use Case呢?在UML的文檔中,Use Case的定義是:在不展現一個系統或子系統內部結構的情況下,對系統或子系統的某個連貫的功能單元的定義和描述。有點拗口,對吧?其實Use Case就是對系統功能的描述而已,不過一個Use Case描述的是整個系統功能的一部分,這一部分一定要是在邏輯上相對完整的功能流程。在使用UML的開發過程中,需求是用Use Case來表達的,界面是在Use Case的輔助下設計的,很多類是根據Use Case來發現的,測試實例是根據Use Case來生成的,包括整個開發的管理和任務分配,也是依據Use Case來組織的。
對不同的Actor來說,他要使用系統的某項功能也不同。所以,在識別和分析Use Case時,我們要對每個Actor逐一進行。對於ToDo User,我們可以輕易的識別出兩個Use Case:Add Task 和 Remove Task。ToDo User主動使用這兩個Use Case所描述的系統功能,所以在我們的Use Case圖上,ToDo User和這兩個Use Case的關系是用從ToDo User發出的箭來表示的。對於FileSystem,我們識別出的也是同樣的兩個Use Case,不過這次箭頭從Use Case指向FileSystem,表示FileSystem是被動的。
Use Case可以用很多方式來描述,我們可以用自然語言(英語,漢語,隨您的便),可以用形式化語言(哇!太酷了吧!),也可以用各種圖示。在UML中,通常用兩種圖來描述Use Case,它們就是順序圖(Sequence Diagram)和協作圖(Collaboration Diagram)
Use Case 由以下元素組成:
名稱
簡單描述
事件流
關系
活動圖和狀態圖
Use Case 圖
特殊需求
前條件
後條件 1.1 參與者和用例從用戶的角度來看,他們並不想了解系統的內部結構和設計,他們所關心的是系統所能提供的服務,也就是被開發出來的系統將是如何被使用的,這就用例方法的基本思想。用例模型主要由以下模型元素構成: 參與者(Actor)參與者是指存在於被定義系統外部並與該系統發生交互的人或其他系統,他們代表的是系統的使用者或使用環境。 用例(Use Case)用例用於表示系統所提供的服務,它定義了系統是如何被參與者所使用的,它描述的是參與者為了使用系統所提供的某一完整功能而與系統之間發生的一段對話。 通訊關聯(Communication Association)通訊關聯用於表示參與者和用例之間的對應關系,它表示參與者使用了系統中的哪些服務(用例),或者說系統所提供的服務(用例)是被哪些參與者所使用的。 以銀行自動提款機(ATM)為例,它的主要功能可以由下面的用例圖來表示。ATM的主要使用者是銀行客戶,客戶主要使用自動提款機來進行銀行帳戶的查詢、提款和轉帳交易。 通訊關聯表示的是參與者和用例之間的關系,箭頭表示在這一關系中哪一方是對話的主動發起者,箭頭所指方是對話的被動接受者;如果你不想強調對話中的主動與被動關系,可以使用不帶箭頭的關聯實線。在參與者和用例之間的信息流不是由通訊關聯來表示的,該信息流是預設存在的(用例本身描述的就是參與者和系統之間的對話),並且信息流向是雙向的,它與通訊關聯箭頭所指的方向亳無關系。
1.2 用例的內容用例圖使我們對系統的功能有了一個整體的認知,我們可以知道有哪些參與者會與系統發生交互,每一個參與者需要系統為它提供什麼樣的服務。用例描述的是參與者與系統之間的對話,但是這個對話的細節並沒有在用例圖中表述出來,針對每一個用例我們可以用事件流來描述這一對話的細節內容。如在ATM系統中的提款用例可以用事件流表述如下:
1. 用戶插入銀行卡 2. 輸入密碼 3. 輸入提款金額 4. 提取現金 5. 退出系統,取回銀行卡 但是這只描述了提款用例中最順利的一種情況,作為一個實用的系統,我們還必須考慮可能發生的各種其他情況,如銀行卡無效、輸入密碼錯、用戶帳號中的現金余額不夠等,所有這些可能發生的各種情況(包括正常的和異常的)被稱之為用例的場景(Scenario),場景也被稱作是用例的實例(Instance)。在用例的各種場景中,最常見的場景是用基本流(Basic Flow)來描述的,其他的場景則是用備選流(Alternative Flow)來描述。對於ATM系統中的提款用例,我們可以得到如下一些備選流:
備選流一:用戶可以在基本流中的任何一步選擇退出,轉至基本流步驟5。
備選流二:在基本流步驟1中,用戶插入無效銀行卡,系統顯示錯誤並退出銀行卡,用例結束。
備選流三:在基本流步驟2中,用戶輸入錯誤密碼,系統顯示錯誤並提示用戶重新輸入密碼,重新回到基本流步驟2;三次輸入密碼錯誤後,信用卡被系統沒收,用例結束。 … 通過基本流與備選流的組合,就可以將用例所有可能發生的各種場景全部描述清楚。我們在描述用例的事件流的時候,就是要盡可能地將所有可能的場景都描述出來,以保證需求的完備性。
1.3 用例方法的優點用例方法完全是站在用戶的角度上(從系統的外部)來描述系統的功能的。在用例方法中,我們把被定義系統看作是一個黑箱,我們並不關心系統內部是如何完成它所提供的功能的。用例方法首先描述了被定義系統有哪些外部使用者(抽象成為Actor),這些使用者與被定義系統發生交互;針對每一參與者,用例方法又描述了系統為這些參與者提供了什麼樣的服務(抽象成為Use Case),或者說系統是如何被這些參與者使用的。所以從用例圖中,我們可以得到對於被定義系統的一個總體印象。 與傳統的功能分解方式相比,用例方法完全是從外部來定義系統的功能,它把需求與設計完全分離開來。在面向對象的分析設計方法中,用例模型主要用於表述系統的功能性需求,系統的設計主要由對象模型來記錄表述。另外,用例定義了系統功能的使用環境與上下文,每一個用例描述的是一個完整的系統服務。用例方法比傳統的SRS更易於被用戶所理解,它可以作為開發人員和用戶之間針對系統需求進行溝通的一個有效手段。 在RUP中,用例被作為整個軟體開發流程的基礎,很多類型的開發活動都把用例作為一個主要的輸入工件(Artifact),如項目管理、分析設計、測試等。根據用例來對目標系統進行測試,可以根據用例中所描述的環境和上下文來完整地測試一個系統服務,可以根據用例的各個場景(Scenario)來設計測試用例,完全地測試用例的各種場景可以保證測試的完備性。 Ivar Jacobson在1967年定義愛立信AXE系統的構架時開始書寫使用場境usage scenarios。
二十世紀八十年代中期Jacobson花了很多精力來思考過去十多年的工作方法。他造了一個術語anvendningsfall,大意是「使用情況」(situation of usage)或用況(usage case)。但當用英文出版的時候,他發現「useage case」在英語里說不通,所以寫作用例「use case」 用例是短文
用例可以是一個場景,包括動作和互交。
用例可以是一組場景,描述不同場景下的行為。這種書寫格式可以在任何時候描述有變體的行為,例如黑盒需求,業務流程,系統設計說明。
用例里不要有系統設計
用例里不要有界面設計
用例里不要有特性列表
用例里不要有測試
用例應該描述行為需求
用例的主場景不要超過九步。可以在適當的層次上得到子目標和移除設計說明。
用例的最大價值不在於主場景,而是在於備選行為。主場景可能只佔用例長度的四分之一到十分之一。 Use Case具有一個基本事件流(可稱為理想路徑)、多個例外流,包括:
基本變化
特殊情況
處理錯誤情況的異常事件流 Use Case 說明書應包括以下內容:
功能描述
可用性
可靠性
性能
可支持性
設計約束 試圖決定Use Case的大小是一個很有趣的話題,處理這件事的一個方法是將Use Case的大小跟它的意圖和范圍關聯起來,對於一個真正大的范圍來說,一個Use Case並不要在一個系統中處理那麼多,但這些系統都用於同一商業領域,稱為Business Use Case,它把整個公司看作一個黑盒和Actor關於公司目標的說明。這些Business Use Case的場景不允許假定任何公司內部的結構,一個客戶將向公司下一個定單而不是客戶服務部門。
對於系統發展而言,Use Case的范圍限制一個單一的系統,這是Use Cases最通常的形式,我們稱之為System Use Case,它把整個系統看作是一個黑盒,它不指定任何內部結構並且僅受限於問題域的語言描述。
Use Cases的另一范圍是設計子系統和系統內部組件的,稱為Implementation Use Cases,它把組件看作一個黑盒,並且這些Actors是區分它的成員。例如:可能會用Implementation Use Cases去說明應用系統中email組件的需求。
給出了這些分類,關於Use Case的大小話題變得容易了,設計這些項的范圍來調整整個大小。幫助系統設計者,每個Use Case只描述沒有大的分支的行為的單個線索。違背這個規定,Use Case看起來通常是不準確的或含糊的,作為測試說明的資源和參考,它也是很難使用的。 Use Cases的好處是一些情節能用不同程度的正規化的文字說明。每個情節涉及Use Cases中單一的途徑,細節是條件組。
不正規的文本描述也能使用,不過當條件較多和可能失敗的情況下它們很難跟隨下去。開始試圖理解需求時,不正規的敘述風格也是非常有用的,然而隨著Use Cases的進展,使用更加正規的機制去說明Use Cases才是有用的。
下面是客戶對Use Case「下定單」的粗略概略:
「確定客戶,找出需要的並且倉庫里還有的物品並檢查客戶信用額是否夠用」
結構化敘述的格式已經被證明是非常有效的。這個格式所做的事是描述每一個情節的行為者:目標語句對順序的敘述。在這個順序中,每一個行為者:目標的語句對都假設前一個的目標是成功的,右面是一個簡單的範例:
Use Cases認為我們正在設計的系統是一個單一的黑盒,根本沒有任何內部結構被記錄下來,並且它被認為是一個情節產生的目的及對應單一的行為者(Actor)。這些Use Cases沒有表示任何關於系統內部的東東,只是表示系統將達到什麼樣的目標及由什麼(人或其它系統)操作和負責。 Use Cases已經得到越來越廣泛的應用,它與其它需求捕獲技術相比,它成功的原因在於:
1 Use Cases把系統當作一個黑盒
2 Use Case 使在需求中看到實現的決定變得更加容易
最後一點源於第一點的補充,一個Use Case沒有指定任何這些需求相關的系統的內部結構,所以說,如果這個Use Case中陳述了提交改變到定單資料庫、顯示結果到Web頁面等的話,那麼內部結構是顯而易見的,並造成對設計的潛在約束。
為什麼這些需求不指定內部結構的原因是,說明的內部結構給設計者帶來了額外的約束,沒有這些約束設計者們能更自由地建立一個正確實現客觀可見行為的系統,並存在出現突破方案的可能性。 這里是Use Cases的圖形符號描述,UML中一個單一的Stick-Man符號標示角色(Actor),用橢圓標示Use Cases,如這些圖對於你想看到Use Cases之間如何關聯的大圖和獲得系統上下文的大體描述來說是非常重要的。
Use Cases圖沒有顯示不同的場景,它們的意圖是顯示角色和Use Cases之間的關系。所以Use Cases圖需求用結構化敘述文本來補充。UML提供一些可供選擇的圖來顯示不同的場景,這些常規的圖形有交互圖、活動圖、順序圖、狀態圖等(本文暫不討論這些圖)。使用這些圖的主要缺點是它們不象文本一樣是緊密的,但它們能用於給出Use Case的整體感覺。 是否每個Use Case 都包括至少一個actor?
是否每個Use Case 都獨立於其他Use Case?
是否每個Use Case 都有一個簡單的行為或事件流?
是否每個Use Case 都有一個唯一的、直觀的、可擴展的名稱,使它不至於在後期被混淆。
用戶是否容易理解Use Case 的名稱和描述。 Use Case模型顯示系統中的Use Case與Actor 及其相互關系。其評價標准有:
Use Case 模型是可理解的嗎?
通過對Use Case 模型的研究是否能對系統功能有一個清晰的概念。
所有的actor都定義了嗎?所有的功能需求都滿足了嗎?
Use Case 模型是否存在多餘的行為。
從模型到Use Case包的劃分是否是恰當的。 由於具有簡單的圖形符號、易理解的自然語言說明書,Use Case在文檔系統和軟體需求領域成為一 項越來越受歡迎的技術。Use Case對開發小組極具吸引力,即使小組成員對正式的需求文檔沒有經驗,但這些簡單性卻具有欺騙性,即使項目小組在開始使用Use Case 時沒有任何麻煩,當他們將其應用於大項目時常常會遇到許多同樣的問題。
1 使用 use case 十大誤區
1. 系統的boundary 沒有定義或經常改變;
2. 從系統觀點而不是actor觀點來定義Use Case;
3. Actor的名稱不一致;
4. Use Case 定義過多;
5. Use Case 和actor之間的關系象蜘蛛網一樣錯綜復雜;
6. Use Case的說明太長;
7. Use Case的說明不清楚;
8. Use Case沒有正確的描述功能需求;
9. 用戶無法理解Use Case;
10. Use Case 無法正常結束。
2 如何避免以上問題
清楚的確定系統的boundary.
簡單來說,系統的boundary就像一個加了標簽的盒子,actor在盒子外,而Use Case在盒子內。我們稱之為系統的這個盒子究竟是什麼呢?一個計算機系統?一個應用系統?或一個完整的企業?…Use Case 可以用來合理地描述任意系統。但一次只能用來描述一個系統,在一個系統中恰當定義的actor和Use Case用於另一個不同的系統中就會出現錯誤。
使用標准模板書寫Use Case 說明書
Use Case 圖形符號已經被標准化並作為對象管理小組UML的一部分,但自然語言的Use Case 說明書還沒有被標准化。為了成功書寫Use Case 說明書,我們需要一個標准模板來保證Use Case 的一致性。
關注actor的真正目的,從actor的觀點而不是系統觀點來命名Use Case
面向Use Case 的需求與傳統的功能性系統需求之間最顯著的區別在於actor ,以面向Use Case的觀點,系統存在是由於actors 要通過該系統實現某些目標,actor與系統進行交互來實現其目標,我們將這些交互行為定義為Use Case 。
不要將Use Case 說明書與用戶介面設計相混淆
現在有一種很流行的觀點:由於Use Case 是actors 與系統之間的交互,所以將所有的用戶介面設計圖放在Use Case說明書中是一個好辦法。初看時,這的確很有用,因為它將在說明書中描述的actor/系統之間的交互行為以圖的形式表示出來,非常直觀。但是這樣做的負面影響卻遠遠大於其好處,用戶介面設計可能會隨著時間而改變,我們不應該讓系統需求依賴於用戶介面設計,相反地,用戶介面設計應該滿足Use Case 需求。如果我們將用戶介面設計置於Use Case 說明書中,當需求需要被認可和定為基線時,很自然地,這些設計元素可能仍然在改變,這就使得用戶介面設計成為不完整的、不正確的和/或不一致的。
將用戶介面設計置於Use Case 說明書還會出現另一個問題,為了在Use Case 之間和介面之間建立一對一的通信,我們會選擇反映用戶介面的Use Case塊而不是反映用戶目標的Use Case 塊,這樣,為了表達一個完整的用戶目標,我們使用交互Use Case 關系,將不同的、基於用戶介面的Use Case 聯接起來,結果在Use Case 模型中,我們得到了一幅類似蜘蛛網的關系圖。實際上,這副圖是用戶介面說明圖,雖然它在系統文檔中是很重要的一部分,但他屬於用戶介面設計文檔,而不是Use Case 需求文檔。
實現用戶介面和Use Case 交互之間的鬆散耦合
鬆散耦合是比較合適的,低逼真度的用戶介面圖有助於理解Use Case ,但要注意不要過度的將基本交互與用戶界面機制相連,用戶界面很有可能會改變。在功能說明書中,要注意actor做些什麼(如提交請求)而不是交互是怎樣完成的(如雙擊提交按鈕)。
不要在Use Case 和用戶介面之間建立通信
試圖在Use Case 和用戶介面之間建立通信可能會存在潛在的、不正確的功能操作。Use Case 不僅與只能訪問某個介面的actor相聯,而且與那些能夠更新該介面的actors相連(這可能是例外流),結果就造成了不正確的功能操作。我們應該在基於實際用戶目標和功能操作的基礎上拆分Use Case ,而不是在基於用戶介面的基礎上組合Use Case ,只有這樣才能得到正確的Use Case 模型。
回顧Use Case 模型和Use Case 說明書,如果你不能防止所有的誤區,你應該盡早認識問題並確定問題
這個觀點並不是什麼新東西,有關代碼檢查的經典演算法已有大約25年歷史了,但怎樣將其應用於Use Case 呢? 首先,回顧Use Case 模型,回顧一下Use Case 的簡單說明(Use Case 名稱、目標、簡單描述)。這項工作應在繪制草圖時盡早執行,並在寫詳細的Use Case 說明書之前完成。接著是回顧Use Case 草圖,保證圖是正確的,並且詳細的Use Case說明書是完整的。最後是正式回顧最終的Use Case 圖和Use Case 說明書。
我們發現這種三階段式回顧比單一的宇宙大爆炸式回顧有效,在我們花大量的時間寫說明書之前,Use Case圖中存在的許多實質性問題可以被發現,這種方法減少了當需求改變時需要做的重復工作。 主要行為者(Actor)和Use Case之間沒有連結
一些情況下,從Use Case中取值的行為者(Actor)和積極參與這個Use Case的行為者(Actor)之間沒有清晰的連結。如:財務主管能成為「發票確認」的行為者(Actor),但他未必是創建發票的人。這不是什麼問題,這個Use Case仍然是正確的,它正說明行為者取值和設計的系統的范圍外的Use Case發生的初始化之間的關系。主要行為者是有用的,因為這個人扮演的角色是當你說明Use Case時需要跟他說的人。
情節步驟不需要連續
情節中步驟順序的情況是沒問題的,這里有一些機制去突出可能的並行步驟。在UML中活動圖是首選的機制,通過非正式地看Use Case的情節你可以注意到可能的平行步驟;可以看Use Case內一些鄰近的步驟;也可以有相同的行為者(Actor)對步驟負責。之前我們舉過的例子里,確認數量和確認信用額可能是平行的。有時候在Use Case的說明文檔中標記這些可能的平行步驟是有用的。
Use Cases的大小
當開始做Use Cases的時候有個很顯然的危險就是它要麼有很多步驟要麼就很少步驟。如果在Use Case中有超過15個步驟,它可能包含一些實現明細。如果它只有非常少的步驟則檢查它的目標是否是達到一個沒有很多分支的活動的單一線索。
較少的人類行為者(Actor)
如果Use Case有較少的人類行為者,而大多數行為者是其它系統,通常的做法是修改這個Use Case。尋找系統必須做出反映或公認的事件勝過會見這些行為者。
需求捕獲和系統復雜性
總而言之,這些情節捕獲到系統復雜度的同時行為者:目標語句對容許大的系統以相對壓縮的格式說明。Use Case的格式的作用是用戶和開發者能標志出行為者,然後確認這些行為者工作職責對應(或不對應)的目標,代替一個大的很難讀的功能規格說明書。
僅僅這樣,用戶和開發者就有足夠的興趣進而研究那些情節的細節。
系統不僅僅有應得的功能性需求
一些Use Cases並沒有捕獲所有的客觀需求,僅僅是捕獲了系統怎麼用的那些功能性需求。然而還有許多方面的需求需要去捕獲的。其中有的非功能性需求使用關聯以至於也能隸屬於個別的Use Case,如性能需求和系統容量的需求。另外的一些不是關聯的而是要單獨地去捕獲,它們是以下的需求:
· 系統范圍
· 系統用戶的目標
· 用戶界面原型
· 一般規則
· 約束
· 演算法
運行時期和建立時期的需求比較
一個重要的因數要記住,就是系統的贊助者是大過用戶團體的。系統中有許多的風險承擔者,Use Cases僅僅捕獲其中一些風險承擔者的需要,具體說,Use Cases僅僅捕獲系統運行時期的需求而忽略做為系統開發組織的風險承擔者的需求,開發組織最有興趣的是對建立時期需求的描述。
運行時期需求包括:系統范圍、用戶組織對產品的期望和目標、Use Cases、其它非功能性需求。
建立時期需求包括:減少開發成本、較少的變更處理、現存組件的重用。
建立時期的需求可以部分的由Use Cases把握。但許多方面是需要由開發組織的處理的。
· 項目范圍和目標:項目必須提交什麼。(和系統范圍的區別是它提交的是所有項目的東西)
· 增長性和變更請求:這些可以在捕獲為常規Use Cases格式中的「Change Cases」
· 開發負責人的約束:包括標准、習慣、工具、品質度量標准、品質保證原則、及品質保證的習慣。 Use Cases首先用於需要響應客觀事件的系統。它們能用於提供了一個有很容易理解的目標的清楚的行為者的環境。當結果不可定義或不清晰時不能用Use Cases。意思是如果目標成功或目標失敗不能有一個明確的定義,那麼Use Cases不能用來捕獲需求。
然而說到這,現在大部分對象方法都使用Use Cases。因為Use Cases被證明是捕獲需求的非常有效的機制。 Use Case 是系統提供的功能塊,換句話來說Use Case演示了人們如何使用系統。通過Use Case觀察系統,能夠將系統實現與系統目標分開,有助於了解最重要的部分――滿足用戶要求和期望,而不會沉浸於實現細節。通過Use Case 用戶可以看到系統提供的功能,先確定系統范圍再深入開展項目工作。

閱讀全文

與用例模型常用於哪種分析方法相關的資料

熱點內容
本金罰息計算方法 瀏覽:489
治療肚子疼的最快方法 瀏覽:944
胯打開的方法和技巧 瀏覽:173
波菜種植方法和時間 瀏覽:243
憂鬱症如何治療方法 瀏覽:953
雙膠紙張厚度計算方法 瀏覽:439
國外手機截圖方法 瀏覽:701
現實suv側方停車最簡單的方法 瀏覽:762
寬容哪些方法 瀏覽:980
中考實心球的方法與技巧 瀏覽:531
如何瘦臉練成瓜子臉的四種方法 瀏覽:949
腎陽不足的鍛煉方法 瀏覽:576
新鮮蓮子的食用方法視頻 瀏覽:807
如何降低敏感度訓練方法 瀏覽:20
三星5的qq紅包鈴聲在哪裡設置方法 瀏覽:32
刷牆平米計算方法 瀏覽:164
論文研究方法如何概括 瀏覽:757
蘋果手機網頁提取文字的方法 瀏覽:293
星露穀物語鐵錠快速入手方法 瀏覽:120
摩托機油尺正確的測量方法 瀏覽:801