測試一直是軟件開發過程中的一個重要過程,而三個因素使得它扮演了更重要的角色。首先,微軟.Net的環境已經顯著地提高了程序員編寫自定義自動化測試的能力,以前需要兩周時間創建的測試項目,現在在.Net Framework下只用幾個小時便可完成。第二,程序和系統越趨于復雜,所需的測試就越精密。最后,軟件安全性已不再是程序開發最后才考慮的問題,它是絕對必要的。在以前有可能存在一款軟件沒有經過完整的測試就已向外發布的情況,但如今這已不再可行。為了幫助你滿足現今的測試挑戰,我將在這個欄目里每隔幾個月就向你展示軟件測試的最佳方法、原則和技術。
這個月我將從組合在軟件測試中的角色開始說起。編程產生組合的能力,能夠為你的測試用例輸出提供強有力的方法。首先我談談我所說的組合的意思:如果你現在正在寫一個撲克牌的程序,需要你手動輸入5張牌牌型的所有可能情況,你一定不會樂意。但如果你用這個欄目里的代碼來處理,你將能夠在幾分鐘內做好這件事:
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.Successor(); } |
在大量的自動化測試方案中,你一旦學習并認識了組合,你會發現它驚人的有用。再舉一個例子,假如你正在測試某個系統,要用戶從文本框接收用戶傳入的10個字符。用戶可能會輸入"ABCDEFGHIJ",或者是")(*&^%$#@!",你想知道共有多少種測試的用例。假定你要求輸入字符的可選類型等于20種(這可能根據系統要求的不同而不同,比如從大寫的'A'到'Z',或者是從0到9等等)。
要特別強調的是,你必須從20個不同的字符中一次性選取10個,即Choose(20,10)——這個函數我會在稍后解釋。請注意,這里我其實簡化了問題。實際上,你可能還需要考慮每個邊界條件和其他測試概念的排列組合。
現在,我將會創建一個C#語言寫的的組合類,并向你展示怎樣用組合來提高測試的性能。我想你一定會認為理解并運用組合及其相關的理論是有價值的。
原文轉自:http://www.uml.org.cn/Test/201004214.asp