機能テストケース自動生成アルゴリズム ペアワイズ

機能テストケース自動生成アルゴリズム ペアワイズ

[[433685]]

ペアワイズアルゴリズムとは何ですか?

次のテストシナリオの場合:

  • ブラウザ: M、O、P
  • オペレーティング プラットフォーム: W(Windows)、L(Linux)、i(iOS)
  • 言語: C (中国語)、E (英語)

機能テストケースを設計するにはどうすればいいですか?

数学的統計分析によると、欠陥の 73% (単一要因の場合は 35%、二重要因の場合は 38%) は、単一要因または 2 つの要因の相互作用によって発生します。欠陥の 19% は 3 つの要因の相互作用によって発生しました。つまり、ほとんどのバグは 2 つの条件の組み合わせによって発生します。

ペアワイズアルゴリズムは、1927 年にアメリカの心理統計学者 LL サーストンによって初めて提案されました。ペアワイズ アルゴリズムは、ペアワイズの組み合わせに基づいてコスト効率の高いユースケースをフィルター処理します。考え方は、ユースケースのグループの双方向の組み合わせの結果が他の組み合わせに表示される場合は、そのユースケースのグループを削除してユースケースを合理化するというものです。

上記のテスト シナリオでは、直積によって 18 個のテスト ケースを設計できます。

  1. 1、MWC
  2. 2. M W E
  3. 3. M L C
  4. 4. M L E
  5. 5. ミック
  6. 6. M I E
  7. 7. OWC
  8. 8. 私たちは
  9. 9. OL C
  10. 10. オレ
  11. 11、OIC
  12. 12. ああ
  13. 13. PWC
  14. 14. PWE
  15. 15、PLC
  16. 16. P L E
  17. 17、P I C
  18. 18. パイ

18 番目のユースケース PIE の場合、ペアワイズの組み合わせは PI、PE、IE です。PI は 17 日目に、PE は 16 日目に、IE は 12 日目に出現するため、18 番目のユースケースは除外できます。このアルゴリズムに従ってフィルタリングを続けると、最終的に 9 つのユースケースが残ります。

  1. 1、MWC
  2. 4. M L E
  3. 6. M I E
  4. 7. 私たちは
  5. 9. OLC
  6. 11、OIC
  7. 14. PWE
  8. 15、PLC
  9. 17、P I C

テストケースの数が 50% 削減されました。次元が増えるほど、その効果は顕著になります。次元が 10 の場合、テストケースは 4*4*4*4*3*3*3*2*2*2=55296 個、ペアワイズでは 24 個となり、これは元のテストケース サイズの 0.04% に相当します。

Python実装

ソースコードはアップロードされています: https://github.com/dongfanger/python-tools/blob/main/pairwise.py

  1. #!/usr/bin/python
  2. # エンコーディング=utf-8
  3.  
  4. 「」 「
  5. @著者: ドン
  6. @日付: 2021/11/03 20:34
  7. @説明:
  8. 「」 「
  9.  
  10. インポートコピー
  11. itertoolsをインポートする
  12. sysからstdoutをインポート
  13.  
  14. loguruからインポートロガー
  15.  
  16.  
  17. def parewise(オプション):
  18. ペアワイズアルゴリズム  
  19. cp = [] # デカルト積
  20. s = [] # 2つを2つに分割
  21. eval( 'itertools.product' + str(tuple( option ))内のxについて):
  22. cp.append(x)
  23. s.append([i for i in itertools.combinations(x, 2)])
  24. logger.info( '直積: %s' % len(cp))
  25. 行を削除する = []
  26. バー(0)
  27. s2 = コピー.ディープコピー(s)
  28. for i in range(len(s): # テストケースの各行に一致します
  29. (i % 100) == 0またはi == len(s) - 1 の場合:
  30. バー( int (100 * i / (len(s) - 1)))
  31. t = 0
  32. for j in range(len(s[i])): # ユースケースの各行を2つに分割して、他の行に現れるかどうかを確認します。
  33. フラグ = False  
  34. for i2 in [x for x in range(len(s2)) if s2[x] != s[i]]: # 同じ列を探す
  35. s[i][j] == s2[i2][j]の場合:
  36. t = t + 1
  37. フラグ = True  
  38. 壊す
  39. フラグがない場合: # 同じ列が見つからないため、残りの列を検索する必要はありません
  40. 壊す
  41. t == len(s[i])の場合:
  42. del_row.append(i)
  43. s2.削除(s[i])
  44. res = [cp[i] irange(len(cp))内にある場合、iがそうでない場合  del_row]
  45. logger.info( 'フィルタリング後: %s' % len(res))
  46. 戻り
  47.  
  48.  
  49. 定義バー(i):
  50. 進捗バー  
  51. c =整数(i / 10)
  52. jd = '\r %2d%% [%s%s]'  
  53. a = '■' * c
  54. b = '□' * (10 - c)
  55. メッセージ = jd % (i, a, b)
  56. stdout.write(メッセージ)
  57. stdout.flush()
  58.  
  59.  
  60. __name__ == '__main__'の場合:
  61. pl = [[ 'M' 'O' 'P' ], [ 'W' 'L' 'I' ], [ 'C' 'E' ]]
  62. a = ペアワイズ(pl)
  63. 印刷()
  64. ai場合:
  65. 印刷(i)

出力:

  1. 100% [■■■■■■■■■■]
  2. ( 'M' 'W' 'E' )
  3. ( 'M' 'L' 'E' )
  4. 'M' 'I' 'C'
  5. '借りいる'
  6. ( 'O' 'L' 'E' )
  7. 「お」 「い」 「は」
  8. ( 'P' 'W' 'C' )
  9. ( 'P' 'L' 'C' )
  10. ( 'P' 'I' 'E' )
  11. 2021-11-07 11:38:56.850 | 情報 | __main__:parewise:24 - デカルト積:18
  12. 2021-11-07 11:38:56.850 | 情報 | __main__:parewise:45 - フィルター済み:9

参考文献:

https://blog.csdn.net/ztf312/article/details/78792906

https://www.cnblogs.com/df888/p/11747616.html

<<:  機械学習による分類とその応用を理解するための図

>>:  地球外文明は人間ではなく、人工知能かもしれません!なぜ科学者はこう言うのでしょうか?

ブログ    
ブログ    
ブログ    
ブログ    
ブログ    

推薦する

...

JD.com は今後 10 年間で従業員の 50% を解雇するでしょうか?ジャック・マー氏も人工知能が仕事を奪うことについて言及している

最近、劉強東氏は、今後10年間でJD.comの従業員数を現在の16万人から8万人に減らし、1人当たり...

新しい小売業界における人工知能の応用

インターネットの急速な発展に伴い、伝統的なオフライン小売チャネルは弱体化の兆候を見せ始めており、中国...

AI にはどのような IT インフラストラクチャが必要ですか?

長年にわたり、AI テクノロジーの発展と変化に伴い、さまざまな業界や IT 意思決定者がこの分野に多...

MITは、Natureの表紙に掲載され、非コード領域のDNA変異を予測するディープラーニングフレームワークを設計した。

人間の細胞にはそれぞれ多数の遺伝子が含まれていますが、いわゆる「コーディング」DNA配列は、ヒトゲノ...

...

人工知能も「ペンを手に取る」とき、人間に残される領域はどれほどになるのでしょうか?

「暗闇が私たちの光を引き立てる/そして私は漠然とした幻想しか見ることができない/孤独の瞬間のあなた...

...

NLP 70 年!スタンフォード大学のマニング教授が長文の記事を執筆:「基本モデルは10年でAGIになることができるか?」

過去 10 年間で、自然言語処理の分野は、単純なニューラル ネットワーク計算と大規模なトレーニング ...

ニューロモルフィックコンピューティングを理解する: 基本原理から実験的検証まで

人間の脳は、効率的な生体エネルギーによって計算能力を部分的にサポートし、ニューロンを基本的な発火単位...

機械学習を使用してデータセンターの電力を管理するにはどうすればよいでしょうか?

[[249391]] [51CTO.com クイック翻訳] データセンターがますます複雑になってい...

今後の技術開発の動向はどうなると思いますか?

モバイル アプリケーション業界は長年にわたって発展しており、当社のシステムの重要な部分となっています...

...