天天看點

用例驅動的需求過程實踐

一、需求沖突

  根據CHAO的權威統計,雖然自"軟體危機"提出以來,軟體工程方法得到了長足的發展與進步,但在去年的軟體項目成功率仍然不足30%,絕大多數的軟體項目仍然超進度、超成本。而在這些不成功的項目中,由于需求不清晰、需求不完整等方面的因素,占到了60%左右。

  下面的這幅漫畫雖然不乏誇張,但卻是能夠激起我們的深思:

   根據筆者多年來從事軟體需求捕獲、分析工作的實踐經驗,認為造成這一現象的根本原因在于客戶與開發人員之間的溝通存在障礙,雙方都以自己的角度、自己的專業術語進行溝通,這使得大家并不能夠很好地就軟體需求達成共識。

  由于幫助客戶更好地利用資訊化工具提高工作效率,是我們軟體開發團隊的責任,是以我們沒有權利讓使用者了解我們所用的語言,而是反過來,我們有義務去了解使用者的語言,站在使用者的角度看問題。

  而事實上,許多開發團隊經常抱怨"我們的客戶連需求都說不清楚"、"我們的客戶對計算機了解太少了"。多年以來,大家都習慣從自己的角度來定義、分析問題,這也就造成了軟體行業成為了一個最缺乏信任的行業,我們需要改一下習慣了。

二、現代需求實踐

  針對這些現象,許多先賢們開始了實踐,并且總結出了一系列優秀的需求實踐:

1)Use case:用例分析技術

  鼎鼎大名的RUP是這樣總結自己的:用例驅動,以體系結構為中心,疊代、增量的開發過程。Use case也伴随着RUP、UML一起名揚天下。

  用例用來描繪一個系統外在可見的需求情況,是代表系統中各個項目相關人員(風險承擔人,Stakeholder)之間就系統的行為所達成的契約。

2)User Story:使用者故事、使用者素材

  使用者故事是Kent Beck在極限程式設計(XP)方法論中推薦的最佳實踐之一。它由客戶參與編寫,說明他們需要系統為他們做什麼,一般用客戶的術語寫就,三句話左右。

3)Feature:特征

  這是特征驅動開發(FDD)方法論的核心實踐之一。一個特征就是一個小的,具有客戶價值的功能,通常表示為<action><result><object>。

  從上面的定義來看,這三種現代軟體工程需求實踐無一例外地遵從兩個原則:一是站在使用者的角度看待系統、定義系統;二是用使用者看得懂的語言表達。而在筆者的實踐中,鑒于以下兩點考慮還是先在團隊中應用了"用例分析技術":

1)使用者故事略顯粗糙,掌握起來需要經驗,沒有詳細的規則用于按部就班,一開始采用容易迷失方向;而用例相對來說更加形式化,易于上手;

2)特征看上去很有吸引力,但畢竟相關的理論還未完整,引入團隊實踐有些困難。

三、用例分析技術簡介

  用例分析技術是Rational三友之一Ivar Jacobson先生于1967年在愛立信公司開發AXE交換機時開始研究,并于1986年總結、釋出的一項源于實踐的需求分析技術。Ivar先生在加盟Rational之後,與三友合作提出了UML、完善了RUP,用例分析技術也是以被人廣泛了解和關注。

  用例分析技術為軟體需求規格化提供了一個基本的元素,而且該元素是可驗證、可度量的。用例可以作為項目計劃、進度控制、測試等環節的基礎。而且用例還可以使開發團隊與客戶之間的交流更加順暢。

  許多人是在學習UML的時候接觸到Use case,是以許多人都誤解其為一種圖表,把用例圖當作用例分析的全部,其實這是錯誤的,用例描述才是用例分析技術的核心。下面是一個簡單的例子:

3.1 參與者,Actor

  參與者,定義了使用者在系統互動過程中扮演的角色,其可以是一個人,也可以是另一個相關的系統。

3.2 用例,Use case

  用例執行個體(場景)是在系統中執行的一系列動作,這些動作将生成特定參與者可見的價值結果,一個用例定義一組用例執行個體(場景)。

  一個用例應為參與者提供(實作)一個價值。

3.3 事件流

  就像類對應于對象一樣,一個用例的執行個體就是使用場景,用例就是對使用場景進行抽象的總結:

  1)前置條件:指在用例啟動時,參與者(Actor)與系統應置于什麼狀态,這個狀态應該是系統能夠檢測到的、可觀測的;

  2)後置條件:用例結束時,系統應置于什麼狀态,這個狀态也應該是系統能夠檢測得到的、可觀測的;

  3)基本事件流:基本事件流是對用例中正常、預期路徑的描述,也被稱為Happy day場景,這時大部分時間所遇到的場景;它将展現系統的核心價值;

  4)擴充事件流:主要是對一些異常情況、選擇分支進行描述。

  建議大家在編寫事件流時,注意以下幾點:

  1)使用簡單的文法:主語明确,語義易于了解;

  2)明确寫出"誰控制球":也就是在事件流描述中,讓讀者直覺地了解是參與者在控制還是系統在控制;

  3)從俯視的角度來編寫:指出參與者的動作,以及系統的響應,也就是第三者的角度;

  4)顯示過程向前推移:也就是第一步都有前進的感(例如,使用者按下tab鍵做為一個事件就是不合适的);

  5)顯示參與者的意圖而非動作(光有動作,讓人不容易直接從事件流中了解用例);

  6)包括"合理的活動集"(帶資料的請求、系統确認、更改内部、傳回結果);

  7)用"确認"而非"檢查是否":(如系統确認使用者密碼正确,而非系統檢查使用者密碼是否正确);

  8)可選擇地提及時間限制;

  9)采用"使用者讓系統A與系統B互動"的習慣用語;

  10)采用"循環執行步驟x到y,直到條件滿足"的習慣用語。

四、Alistair Cockburn眼中的用例分析技術

  在使用用例分析技術時,很多人都覺得如何确定用例的粒度是一個難點,而且感覺到用例沒有什麼規則遵從,甚至有無所适從的感覺。正如Cockburn先生提出的學習用例分析技術的"守、破、離"的三個階段:

  1)守:練習基本功夫,遵循規則,照章行事;

  2)破:能突破傳統,因地制宜地靈活應用; 3)離:超脫任何招式與規則,達到無招勝有招的境界。

  但用例分析技術卻讓第一階段的初學者感到無法很快地掌握。而其所著"編寫有效用例"則想為用例分析技術補充規則,讓大家能夠更好地掌握。

  Cockburn先生在Ivar Jacobson的基礎上,做了一些補充:

  1)用例是契約,是系統與涉衆之間達成的契約。也就是将用例朝着形式化的方向發展;

  2) 将用例分成三級:

  ◆ 概要級:包括多個使用者目标(顯示使用者目标運作的語境,顯示相關目标的生命周期、為低層用例提供一個目錄表);

  ◆ 使用者目标級

  ◆ 子功能級

  不過,對于Cockburn先生的貢獻,用例始祖Ivar大師并未做出任何反應。本人在實踐中認為,Cockburn先生的思路與理念對于初學用例分析技術的人來說,十分有價值,使得用例分析技術更具操作性,當其同時也有點畫地為牢的感覺,也許Cockburn先生也意識到這點,是以第三階段就是"離",沒有規則,按需靈活使用。

五、如何在開發過程中應用用例分析技術

  用例分析技術在需求過程中的地位如下圖所示:

   對于用例分析技術了解上的兩個最大的誤區是:

  1)用例分析技術包括了整個需求過程:它隻是一個需求分析技術,是在傳統的需求捕獲技術的基礎上使用的,并無法替代這些技術;

  2)用例分析技術是分解技術:其實用例分析技術是一種合成技術,将在需求捕獲中收集而來的零散的特性合成為用例:

5.1 用例分析前的工作

  在用例分析之前,應該完成以下工作:

  1)确定涉衆(Stakeholder)和使用者類型(命名、簡要描述、涉衆代表、特征、能力);

  2)确定涉衆代表(命名、簡要描述、責任、參與);

  3)在項目中加入涉衆代表(訪談、問卷、顧問、評審、角色扮演);

  4)建立共同的構想(問題定義、系統範圍、使用者目标、非功能需求à前景文檔);

  5)采用傳統的需求捕獲技術捕獲需求;

  6)組建用例分析隊伍(少量、有問題域知識)。

5.2 用例分析過程中的注意事項

  用例分析的過程如下圖所示:

   在使用中要注意:

  1)用例源于涉衆,請不要自己杜撰出用例;

  2)用例的事件流的編寫過程中,應充分加入團隊的參與;

  3)雖然用例源于涉衆,但不要企圖向他們直接問"你還有什麼用例?這樣的問題。

<script language=JavaScript src="需求工程--用例驅動的需求過程實踐.files/ListJS.htm"></script>
<script language=javaScript> Opinion.location="http://bbs.51cmm.com/ArticleOpinion.asp?Path=" +window.location </script>
<script language=JavaScript src="需求工程--用例驅動的需求過程實踐.files/RightJS.htm"> </script>

繼續閱讀