使用組合改進軟件測試用例的生成

發表于:2010-12-17來源:作者:點擊數: 標簽:軟件測試改進
使用組合改進軟件 測試用例 的生成 軟件測試 測試已經成為軟件 開發 過程中一個至關重要的部分,但近來有三個因素使之扮演了一個甚至更加重要的角色。第一,Microsoft?.NET 開發環境的 誕生戲劇性地改進了開發人員編寫定制 測試自動化 的能力。那些在 .NET

  使用組合改進軟件測試用例的生成  軟件測試

  測試已經成為軟件開發過程中一個至關重要的部分,但近來有三個因素使之扮演了一個甚至更加重要的角色。第一,Microsoft?.NET 開發環境的 誕生戲劇性地改進了開發人員編寫定制測試自動化的能力。那些在 .NET 框架面世以前需要花費數周時間創建的測試程序現在僅用幾小時就可以寫好。第二,正在建立的日益復雜的系統需要更精益求精的測試。最后,軟件安全在軟件開發過程中已不再是事后才 關注的事情,它已成為一個絕對要素。曾經一度推出可能沒有經過完全測試的產品,但這已不再是一個生存選擇。為了幫助你迎接當今測試的挑戰,本專欄將在隨后幾個月的 內容里討論一些關于軟件測試的原則、技巧和最佳實踐。

  本月我將從組合在軟件測試中的作用講起。通過編程產生組合的能力使你能有一種強有力的方法來生成測試用例輸入。為了弄清楚什么是組合,現在假定你正在寫一個撲克 牌游戲程序。用手工生成所有可能的五張套測試輸入將是一件令人很不爽的事情。但是用本文的示例代碼,你便可以在分分鐘內做好它:

  string[] deck = new string[] { "Ac", "Ad", "Ah", "As", "Kc", (...) }; Combination c = new Combination(52,5); // 52 cards, 5 at a time string[] pokerHand = new string[5]; while (c != null) { pokerHand = c.ApplyTo(deck); PrintHand(pokerHand); c = c.Suclearcase/" target="_blank" >ccessor(); }

  一旦你諳熟組合之道,它在許多測試自動化場合極其有用。另外有一個例子,假定你正在測試某個系統,接收用戶輸入到一個容納10個字符的文本框(textbox)。輸入可能是“ABCDEFGHIJ”,同時另一個可能是“!@#$%^&*()”。你想知道這里有多少個不同的測試用例。讓我們假設你已決定讓字符輸入 含在20個等價類中——也就是你的系統所關心的等價分類范疇。一個等價類可能是大寫字母A到Z,而另一個等價類可能是數字0到9。

  注意你必須選擇10個字符,同時每個字符必須來自于20個分類中的一個。因此你要一次從20條中選出10個,或 Choose(20,10)——這個函數我將在本 文稍后討論。注意我已經簡化了這個場景。在實踐中,你可能還需要綜合考慮每一組合的排列以及邊界條件和許多其它測試概念。

  在此我將用 C# 建立一個組合類,并示范如何使用組合提高測試效果。我想你會發現理解和應用組合及其相關算法是很有裨益的。

  Figure 1 組合演示

  屏幕的截屏是最佳示范方式。Figure 1 是一個基于 Windows? 的應用程序屏幕,它演示了組合的使用。正如你所看到的,條目(items)的組合是這些條目的一個子集,它們的順序并不重要。在這個例子中我有5個條目——名字 分別為 Adam、Barb、Carl、Dave 和 Eric,——而我感興趣的是大小為3的組合。這里5選3有10種可能的子集:

  { Adam, Barb, Carl }, { Adam, Barb, Dave }, . . . { Carl, Dave, Eric }

  注意既然順序并不重要,那么我不考慮 { Carl, Barb, Adam } 這樣的子集,因為我認為它和 { Adam, Barb, Carl } 是相同的。Figure 1中所示的例子除了生成組合外,還舉例說明了,我需要計算一個特定大小的條目集和子集能有多少種組合。

  數學上的組合是對這種子集思路的概括。取代了任意條目的子集的情況,序列n的一個數學組合是從0到n-1的整數的一個子集。因此一次從4個條目中取2個的數學組合 結果是6個元素(譯注:element為組合中的一組):

原文轉自:http://www.anti-gravitydesign.com

国产97人人超碰caoprom_尤物国产在线一区手机播放_精品国产一区二区三_色天使久久综合给合久久97