需求類型概覽
一個需求被定義成 "系統必須遵從的條件或能力"。
它可以是:
圖1顯示了帶有不同需求級次的需求金字塔
最高層的是涉眾需求。通常,一個項目包含五到十五個這樣的高層需求。較低層次的是特性,用例和補充規約。不同層次的需求有不同的細節。越低的層次需要越多的細節。例如,一個需求可以是:"數據必須是持久的"。特性可以將此需求精化為:"系統應當使用一個關系數據庫"。在補充規約層次,需求會更加詳細:"系統應當使用Oracle 9i數據庫"。層次越低,需要越詳細的需求。
需求之間的追蹤關系
追蹤是這樣一種技術,在系統中它能為不同層次的需求之間提供關聯。這個技術幫助你確定任何需求的起源。圖 2 闡述了從高層次到低層次需求是如何被追蹤的。每一個需求通常映射到幾個特性,然后這幾個特性映射到用例和補充需求。
用例描述了功能性的需求,補充規約描述了非功能性的項目。另外,每個用例映射到許多場景。映射用例到場景,是一對多的關系。 場景映射到測試用例也是多對一的關系。另一方面,在需要與特性之間,是多對多的映射。
追蹤起到了幾個重要的作用:
一個追蹤項是一個項目元素,其需要從另一個元素進行追蹤。按照IBM Rational RequisitePro,它是一個需求類型的實例所表示的任何事情。在RequisitePro中一些需求類型的例子是涉眾需求,特性,用例,參與者,和術語條款。
在RequisitePro中,有一種按照特定視圖展示追蹤性的便利方法。圖3 顯示了將特性映射到用例的一個例子。
這里有一些問題,這些箭頭應指向哪里:是從更低的層次到更高的層次,還是從更高的層次到更低的層次。甚至在RequisitePro中的兩個例子使用了兩個不同的方法。答案是沒有關系,只要你在項目中始終如一地使用它們就可以了。
參與者和用例
參與者是與系統交互的某人或某事。用例是根據操作順序的一個系統描述。它為參與者產生了一個看的見的結果或數據值。以下是用例的一些特征:
用例的目的是促使開發者、顧客和用戶之間對系統應做些什么達成一致。用例在開發者和顧客之間達成了某種契約。它同時也是用例實現的基礎,它在程序設計中起到了非常重要的作用。另外,你可以從用例中產生序列圖,協作圖和類圖。此外,你可以從用例產生用戶文檔。用例可能還在計劃迭代的技術內容方面有幫助,并且使系統開發者更好地了解系統的意圖。最后,你可以使用它們作為測試例程的輸入。
用例圖顯示了參與者和用例之間的關系。在本文我們使用一個在線書店作為項目的一個例子。圖4 展示了這個項目的用例圖。
用例的通用格式是:
基本流程包括最通常的一系列行為,此步驟發生在每件事正確運轉的時候??蛇x流程表現了流程的變更,包括不很普遍的情況和錯誤條件。環境圖是用例圖的一部分,向參與者和其它用例顯示了特殊用例之間的關聯?;顒訄D是一個解釋用例的流程圖。環境圖和活動圖不是必須的,但是可以幫助你可視化用例和它在項目中的位置。
在我們的在線書店項目中,用例的基本流程的安置順序也許像這樣:
系統顯示登陸界面。
系統確認正確的登陸,顯示主頁,并且提示輸入搜索字符串
系統返回與搜索標準匹配的全部書籍。
系統顯示這本書的詳細信息。
購物車中的貨物顯示給用戶
系統索要送貨地址。
系統顯示送貨選項。
系統詢問使用哪種信用卡。
系統請求最終確認此次訂購。
系統返回確認數量。
除了基本流程以外,還有許多可選流程。例如,第一個可選流程描述了當用戶是一個新的用戶時所發生的事情(不是在線書店的已注冊用戶)。在基本流程中,用戶經常擁有一個用戶ID和密碼。相反,可選流程 1 描述了當第一次用用戶需要注冊并提供顧客數據時的情況??蛇x流程的另一個例子是無效的密碼。用戶輸入了錯誤的密碼,系統顯示錯誤信息。
表 1: 可選流程 | |
---|---|
A1 | 未注冊用戶 |
A2 | 無效密碼 |
A3 | 沒有找到匹配搜索標準的書 |
A4 | 下架書籍 |
A5 | 在購物車中放入一本書后繼續購物 |
A6 | 輸入新的地址 |
A7 | 輸入新的信用卡 |
A8 | 取消訂單 |
下列約定用于為事件流命名:
基本流程:B
可選流程:A1,A2, A3,...
在基本流程中的步驟:B1,B2, B3, ...
在可選流程1中的步驟:A1.1, A1.2, A1.3, ...
在可選流程2中的步驟: A2.1, A2.2, A2.3, ...
為得到可選流程,使用活動圖 5。圖 5顯示了描述用例的活動圖。
基本流程是一條向下的直線,然而可選流程可以是向前或向后的循環線。
如何從用例創建測試用例
在創建一個測試用例之前,你需要為所給用例確定全部的場景。一個場景是用例的一個實例。它描述了一個貫穿事件流的特殊路徑。圖 6是一個假設的圖表,它描繪了一個擁有基本流程B和可選流程A1, A2, A3, A4的用例。為了找到全部的場景,我們需要畫出貫穿于此圖的所有場景。
每一個可選流程都有一個場景,并且每個結合的可選流程都有一個場景。顯然,這里場景多于可選流程,因為一個場景用于A1,另一個場景用于A2,還有一個場景用于這兩個的結合。
描述場景最簡單的方法是提供一系列的可選流程,例如,做兩遍流程A2,然后做一遍流程A6:
SC16:A2,A2,A6。
另一種描述場景的方法是列出它的所有步驟,但是這種方法既困難又未必詳細。
如果你陷了無限循環(向后循環),這時該怎么辦?理論上它將產生無限的場景。圖 7顯示了一個無限循環。
最合理的方法是做一遍基本流程,一遍循環流程,然后再做一遍循環流程。如果程序能為這兩個循環都工作的話,你能假設它能為所有的循環工作。
書籍訂閱的例子中包含了一個基本流程和8個可選流程。它們中的4個向前走,另外4個向后走。如果你想描述全部可能的用例結合,你將有超過4000個場景 (這里有8個可選流程,我們想讓其中4個做兩次,因為他們向后循環,所以是2的(8+4)次冪,,等于4096。很明顯,我們不需要把他們全部做完。
選擇能代表這四千個場景的一個合理子集。通常,明智的做法是選擇一個基礎流程,一個覆蓋了每一個可選流程的場景,以及一些合理的可選流程的結合。使用表 1的例子,做一個包含流程A1和A7的場景也許沒有什么意義,因為它們在圖標上分隔太遠以至于不能互相影響。但是,做A1和A2是有意義的,因為他們互相緊埃,之間互相影響。
表 2 圖解了選擇的場景:一個代表基本流程,8個代表每一個可選流程,6個反射可一些流程的結合(特別是那些擁有兩個距離很近的向后循環)。
以下15個場景值得測試:
表2:獲取選擇的場景 | |
---|---|
場景 1 基礎流程 | 場景 9 A8 |
場景 2 A1 | changjing 10 A1,A2 |
場景 3 A2 | 場景 11 A3,A4 |
場景 4 A3 | 場景 12 A4,A5 |
場景 5 A4 | 場景 13 A3,A5 |
場景 6 A5 | 場景 14 A6, A7 |
場景 7 A6 | 場景 15 A7,A8 |
場景 8 A7 |
在RequisitePro中如何創建一個場景
在RequisitePro中場景不是一個標準的需求類型,所以你需要增加它成為一個新的需求種類。為了完成它,去Project Properties,選擇Requirement Types 標簽,然后點擊 Add。接下來,填充到適當的區域 (如圖 8所示),然后點擊OK。
創建了這個需求類型之后,我們應當輸入全部的場景并設置從用例到這些場景的追蹤,如圖 9所示。
在RequisitePro中,你可以用用例的名字和一系列可選流程的名字為場景命名(例如:UC1, A6, A7)。
既然你有了所有的場景,你就需要獲得測試用例。這里需要完成4個步驟:
以下部分描述了這些步驟的細節。
步驟1:為每個用例步驟確定變量
在所給場景的所有步驟中你需要確定全部輸入的變量。例如,在某些步驟中,如果用戶輸入了用戶ID和密碼,這就產生了兩個變量。一個變量是用戶ID,另一個變量是密碼。變量也可以被用戶選擇(例如,保存更改或取消)。
這里是書籍訂購例子的全部變量:
在步驟B2中,這里有兩個變量:電子郵件地址和密碼。它們全是字符串。在步驟B3中,搜索一本書,這個變量是一個搜索字符串,因此它也是字符串。 在步驟B4,我們需要從系統返回的目錄中選擇一本書。在步驟 B8中,我們需要選擇送貨方式。Amazon.com 提供了4個選擇。
步驟2:為每個變量有效地確定不同的選項
如果它們引發不同的系統行為,選項將是"明顯不同的"。例如,如果我們選擇大概6到10的字符長的用戶id,以下的輸入顯然是不同的 :
然而,"Alexandria" 和 "JohnGordon" 卻不是明顯不同,因為它們都是有效的用戶id,可以使系統有相同的反應。
以下的指導方針描述了一些特殊的例子。
一個選項可以認為是非常不同的,如果:
例如
例如
例如
例如
顧客注冊界面包含了 "國家和州/省"的下拉框。"州/省"的下拉框一般是基于國家的選擇:比如美國,它包含了全部的州,加拿大是全部的省,其他國家是缺省的。它創建了3個不同的選項:
例如
假設這里已有一項規則 "如果實下午6點以后下訂單是,用戶選擇頭天晚上送貨,將會通知這本書將會在后天到達。",我們有兩個:獨立的選擇
例如
因為密碼應當包含至少6個字符,我們因該測試:
例如
在信用卡支付界面,持卡人的名字通常是訂貨人的姓名。這就產生了2個獨立的選項:
例如
不同的人有不同的書寫電話號碼的方法:
例如
信用卡有效日期的格式在美國和加拿大就不同
如果我們測試數字,我們會考慮以下選項:
你怎么知道區域內能夠輸入的最大和最小的長度?這個需求可以從不同的來源得到。有時,它來自于商業的分析或顧客。例如,如果我們輸入Dun 和 Bradstreet 數字,這就被看成是一個公司,它總是包含9個數字。這是商業的需求。
然而,它一般不會來自于顧客和用戶。如果你問客戶姓名區域有多長,它們會告訴你不用擔心長度,只要要合理即可。在此例中,設計步驟決定了變量的長度而不是需求步驟所決定的。
另一種情形,數據分析師或者數據庫設計者會提出建議——例如,在如果公司的全部應用軟件中姓名應在30個字符以內,你的申請的用戶名就得依照這個標準。
不管需求的來源是何處,在我們做測試用例之前它都要被同意并且備份。
這里有一個關于上述討論的需求應該在哪里進行文檔化的問題。在用例中一個增加這個需求的地方是被稱為Special Requirements的地方。另外一個可以放置這種需求的地方是術語表或者數據字典。另外,你可以詳細說明一個獨立的文檔類型,在那里你可以描述全部應用程序中的所有變量。在許多用例中如果同樣的變量出現在許多界面中時,這就變得特別有意義,因此你可以在一個文檔里說的所有名字截止在30個字符以內,全部的地址截至在100個字符以內。然而,如它們對一個用例是特殊的,最好把它們加到那個用例的特殊需求中。
步驟 | 變量 | 測試選項 | ||||||
---|---|---|---|---|---|---|---|---|
B1 | 網站 | 實際URL | ||||||
B2 | 電子郵件 | 正常 | 空白 | 最少允許字符數(1 字符) | 最多允許字符數(50 字符) | 比允許最多字符多一個字符(51 字符) | 非常長 (257 字符) | 無效 (缺少 @ 字符) |
B2 | 密碼 | 正常 | 空白 | 太短(5 字符) | 最少允許字符數(6 字符) | 最多允許字符數 (10 字符) | 比允許最多字符數多一個字符(11 字符) | 非常長 (257 字符) |
B3 | 搜索字符串 | 正常 | 空白 | 最少允許字符數 (1 字符) | 最多允許字符數 (300 字符) | 比允許最多字符數多一個字符 (301 字符) | ||
B4 | 選擇 | 第一次選擇 | 最后一次選擇 | |||||
B5 | 行為選擇 | 加入購物車 | ||||||
B6 | 行為選擇 | 進行結帳 | ||||||
B7 | 送貨地址 | 確認地址 | ||||||
B8 | 發貨方式 | 5 天 | 3 天 | 2 天 | 頭天晚上 | |||
B9 | 支付方式 | 確認信用卡 | ||||||
B10 | 行為選擇 | 下訂單 |
步驟 3:將待測試選項合并到測試用例中
在前面的步驟,你確定了所有的選項。在此步驟,你需要在一系列的測試用例中使它們結合在一起。
圖 10用圖描述了測試的選項。每一個縱隊都有一個需要測試的變量,每一行是一個選項:R 是正常, E 是空, 然后是一個字符,50個字符,51個字符,等等。 "L" 代表非常大, "I" 代表非法的。
后面有妨礙的選項把用戶從基本流程中拋離出去:它們表示在可選流程中描述的一些錯誤。因為你一般為第一個場景設計特殊用例,所以你可以移動它們(在一些其它的場景中測試它們)。 無論剩下了什么,你需要創建最小數量的覆蓋全部情形的測試用例。
通過連接圈創建測試用例,如圖 11所示。
為了創建第一個測試用例,你可以選擇并連接任何選項。當你創建第二個測試用例時,跳出第一個用例沒有使用的選項。繼續增加測試用例直到全部圖的節點(如圖 11所示)被覆蓋。通常你需要從4到6測試用例去覆蓋全部需要測試的選項。然而,一些特殊的情形需要的更多。
步驟號 | 變量或者選擇 | TC1 | TC2 | TC3 | TC4 |
---|---|---|---|---|---|
B1 | 網站 | 實際 URL | 實際 URL | 實際 URL | 實際 URL |
B2 | 電子郵件 | 正常 | 最少允許的字符數(1 字符) | 最多允許的字符數 (50 字符) | 正常 |
B2 | 密碼 | 正常 | 最少允許的字符數 (6 字符) | 最多允許的字符數 (10 ) | 最少允許的字符數 (6 字符) |
B3 | 搜索字符串 | 正常 | 最少允許的字符數 (1 字符) | 最多允許的字符數(300 字符) | 正常 |
B4 | 選擇 | 第一次選擇 | 最后一次選擇 | 第一次選擇 | 最后一次選擇 |
B5 | 行為選擇 | 添加到購物車中 | 添加到購物車中 | 添加到購物車中 | 添加到購物車中 |
B6 | 行為選擇 | 進行結帳 | 進行結帳 | 進行結帳 | 進行結帳 |
B7 | 送貨地址 | 確認地址信息 | 確認地址信息 | 確認地址信息 | 確認地址信息 |
B8 | 送貨方式 | 5 天 | 3 天 | 2 天 | 頭天晚上 |
B9 | 支付方式 | 確認信用卡信息 | 確認信用卡信息 | 確認信用卡信息 | 確認信用卡信息 |
B10 | 行為選擇 | 下訂單 | 下訂單 | 下訂單 | 下訂單 |
表 4 描述了圖11中每列包含不同的測試用例。每一行相應的是用戶輸入的變量。
步驟 4:為變量賦值
在此步中,你替換如"一個非常長的名字" 或"擴展很長的電話號碼"這樣的占位符為像"Georgiamitsopolis" 和 "011-48 (242) 425-3456 ext. 1234"這樣實際有價值的東西。在此步,你還可以分裂表 4所示的表格中的測試用例,為每個測試用例創建獨立的表格。
如書籍訂購使用用例的測試用例 1,你就可以創建一個像表 5這樣的表格。這就給你的測試者創建一個文檔。測試者將跟隨總隊2和3的方向,并且記錄縱隊5,6,7的結果。
步驟號 | 變量或選擇 | 值 | 預期結果 | 實際結果 | 通過/失敗 | 注解 |
---|---|---|---|---|---|---|
B1 | 網站 | www.amazon.com | 登陸界面 | |||
B2 | 電子郵件地址 | jsmith@hotmail.com | ||||
B2 | 密碼 | Johnsm | 主界面 | |||
B3 | 搜索字符串 | “Rational” | 書本列表 | |||
B4 | 書本選擇 | 第一次選擇 | 書本詳情 | |||
B5 | 行為選擇 | 添加到購物車中 | 購物車的內容 | |||
B6 | 行為選擇 | 進行結帳 | 地址提示 | |||
B7 | 送貨地址 | 確認地址信息 | 送貨提示 | |||
B8 | 購物方式 | 5 天 | 支付提示 | |||
B9 | 支付方法 | 確認信用卡信息 | 確認提示 | |||
B10 | 行為選擇 | 下訂單 | 訂單號 |
RequisitePro再一次幫助你創建追蹤關系。在產生了全部的測試用例以后,你可以設置從場景到測試用例的追蹤。
圖 12顯示了全部的場景:從不同的可選流程合并中產生21個場景。
在設置了場景和測試用例之間的追蹤關系后,我們可以創建一個顯示從用例到測試用例全部追蹤方法的追蹤樹。
這里有兩個選項。第一個選項——如圖 13顯示——用于追蹤到用例外,用來顯示上層的用例并且追蹤場景和測試用例。
第二個方法是測試用例中的追蹤,如圖14所示。在此種情況下,追蹤樹看起來會有不同:你從測試用例開始,然后追蹤場景和用例。
進行這種追蹤的一個最主要的原因--并且花費時間將其加入到RequisitePro中--是為了讓你知道當一些事情發生變更時需要重新測試什么。追蹤和所謂的可疑關聯,如圖 15所示,為你顯示了由于先前的場景和用例發生了變化,哪些測試用例也要隨之改變。
映射到IBM Rational統一過程
如何映射到IBM Rational統一過程(RUP)呢?它們大多數發生在過程中的先啟和精化階段。只要你有了用例之后,我們就可以開始建立場景和測試用例。圖 16描述了這些活動對應于RUP方法論中的哪些地方。
當建立場景和測試用例時,你可以給用例設計者反饋并且精煉一下需求。這有助于在過程中盡早改變一些任務,并且最終為團隊盡快完成任務做出貢獻。在整個精化階段以及幾乎是整個構造階段中都會使用測試用例。
總結
本文介紹了一種從用例中產生功能測試用例的方法。這是使用此方法的一些益處:
你創建的測試用例能夠用于人工測試,也可以用于像IBM Rational Robot這樣的自動化測試。這種方法已經在許多項目中獲得了成功。
原文轉自:http://www.anti-gravitydesign.com