測試中的隨機性

發表于:2015-12-01來源:uml.org.cn作者:不詳點擊數: 標簽:軟件測試
創建和使用隨機測試用例數據是一項基本的軟件測試技能。盡管多數測試用例數據由所測試系統的特定輸入數據以及特定預期值/狀態組成,但您幾乎始終都想讓系統也受到隨機測試用例

  創建和使用隨機測試用例數據是一項基本的軟件測試技能。盡管多數測試用例數據由所測試系統的特定輸入數據以及特定預期值/狀態組成,但您幾乎始終都想讓系統也受到隨機測試用例輸入數據的測試。通常,您這樣做是為了了解向應用程序發送大量不同的輸入數據是否會導致系統崩潰或引發異常。在本月的專欄中,我將闡述在 Microsoft? .NET Framework 環境中處理隨機測試用例數據時的四個常見任務:

  生成偽隨機數字(Knuth 算法)

  分析模式隨機性(Wald-Wolfowitz 檢驗)

  混排項目列表(Fisher-Yates 算法)

  生成高斯數字(Box-Muller 算法)

  讓我們看一下圖 1 中的示例。輸出的第一部分顯示了使用 .NET Framework 的 Random 對象生成基本隨機數字的結果。盡管您可能很熟悉此方法,但我還是要指出如何避免常見缺陷。輸出的第二部分體現了一個非常實用但卻鮮為人知的方法,該方法用來分析由任意符號組成的模式是否具備隨機性。通常,該方法廣泛應用于軟件開發中,而不只是應用于測試方面。圖 1 的第三部分表明了混排項目列表的結果,該結果異常錯綜復雜。

  圖 1 隨機方法演示

  我將詳細說明為什么許多混排實現方法表面上似乎正確,而事實上卻完全錯誤。圖 1 中輸出的最后一部分表明了生成按正態鐘形曲線分布的一組數字的結果。除了是一種非常實用的方法之外,該算法的實現細節憑其自身的性能而得以關注,將成為您個人編碼工具箱的一個有價值的補充部分。

  生成統一的隨機數字

  隨機測試用例生成中的最基本任務是生成一個某特定值域內的隨機數字(整數或浮點數)。這通常通過 System.Random 類來實現。假定有以下代碼:

Random objRan = new Random(5);
int n = objRan.Next(7);
Console.WriteLine("[0,6] 值域中的隨機整數是 " + n);

n = objRan.Next(3, 13);
Console.WriteLine("[3,12] 值域中的隨機整數是 " + n);

  以 Random 對象為例,傳入一個種子值(在本例中為 5)。該種子值用于為表現出真正隨機數字許多特性的某個數字序列設置起點。序列是確定的(這些數字是從輸入種子值或序列中前幾個數字時所用的數學公式而生成),因此由 System.Random 生成的數字從技術角度來講是偽隨機數字,但在非正式使用情況下或上下文明確時,通常將其稱為隨機數字(如此例所示)。我選擇的種子值具有任意性。如果我使用不接受種子值的重載 Random 構造函數,則將使用從系統時鐘派生的值。如果在隨后測試運行時,您需要重新創建隨機數字序列(通常情況是這樣),則應提供一個種子值。有關偽隨機數字生成器種子值的討論是一個重要且復雜的主題,抱歉的是,它不在本專欄的討論范圍內。

  生成隨機整數的最簡單方法是調用 Random.Next 方法,傳入單個整數參數。返回值是偽隨機列表中的下一個整數,此值大于或等于 0 且絕對小于該參數。因此,以下調用將返回一個介于 0 和 9 之間(包括 0 和 9)而不是介于 0 和 10 之間(包括 0 和 10)的數字:

int n = objRan.Next(10);

  Random.Next 方法的重載將接受兩個整數參數并返回一個大于或等于第一個參數且絕對小于第二個參數的整數。如果您要模擬的測試用例數據類似于滾動的普通六面骰子,要得到一個介于 1 和 6 之間(包括 1 和 6)的隨機數字,則調用可能如下所示:

int roll = objRan.Next(1, 7);

  這很容易從某數組生成一個隨機選取項:

string[] items = new string[] { "alpha", "beta", "gamma", "delta" };
Console.WriteLine("{ 'alpha', 'beta', 'gamma', 'delta' } 的" +
"隨機成員是 " +
items[objRan.Next(items.Length)] );

  如果數組大小為 N,則調用 objRan.Next(N) 所生成的返回值將是值域 [0, N-1] 內的一個整數(該值域完全對應于數組的索引值)。請注意,該方法也可用于 ArrayList 對象,而且事實上也可用于任何以 0 為基數的索引化集合。

原文轉自:http://www.uml.org.cn/Test/200611225.htm

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