システムデザイン

PICTによる「効率的な」バグの発見方法

*本記事は旧TechblogからCOLORSに統合した記事です。

こんにちは!
エンジニアリングソリューション事業部のS.Rです。
今回はPICT(Pairwise Independent Combinatorial Testing tool )を用いて効率よくソフトウェアのバグを発見して品質 を向上させる方法についてご紹介します。

ソフトウェアの品質を向上させる方法

ソフトウェアの品質を向上させる方法は簡単です。
それは
「ソフトウェアに対し、様々な入力条件でテストを行い、バグがない事を確認する事」
これだけです。
テストの方針としては以下のようなやり方が考えられます。

  1. プログラムが正常に動作する入力の組合せと”この入力の組合せならエラー”と仕様書に書いた部分のみをテストする。
  2. そのプログラムが取り得る全ての入力の組み合わせについてテストを行う。(全件テスト)
  3. 項番1.に加え、バグが発生しやすい組み合わせを追加してテストする。

項番1.の場合、本番運用する段階になって初めて見つかるバグが発生するなどの想定外の事象が発生したりします。テスト方針としてはあまりにも不適切です。
項番2.の全件テストはどうでしょうか?
全ての組み合わせをテストするので、一見するとこれが最適なテスト方針に見えます。
しかしこのテスト方針は全ての組み合わせが膨大な数になってしまう欠点を抱えています。

全件テストの欠点

以下の図はkakaku.comにおけるPCの絞り込み検索の一部分を抜き出しております。
この図で選択できる選択/非選択の組み合わせは何通りになるでしょうか?
答えは2の18乗通り、 262,144通りとなります。
1通りあたり10秒でテストするとしても全て完了するのに2621,440秒、時間にして約730時間かかります。
全件テストを行うのはとても現実的ではないですよね。

出典:kakaku.com

バグが発生しやすい組み合わせとは

では”ソフトウェアの品質を向上させる方法”の項番3.で述べた、バグ が発生しやすい組み合わせとは何でしょうか?
研究成果としてこのような事実があったりします。

  • NIST 2001 Wallace, Kuhnの論文 によると、医療機器におけるソフトウェア バグの原因は2項目間の関係が原因となるバグがほとんど(98%)を占めている。
  • KuhnとReillyの研究 によると、Mozilla webブラウザのデータベースに記録された欠陥のうち、76.1%は2項目間の関係が原因であるとまとめられている。

これらの研究結果からソフトウェアの欠陥(バグ)のうちのほとんどは2項目の組み合わせに起因しているという事がわかります。

この2項目全ての組み合わせのみに限定してテスト計画を立てる事で、テスト数を削減しつつも品質を担保できる事が期待できます。

このテストの計画方法はペアワイズ法、もしくはオールペア法と呼ばれたりします。
そしてPICTはそのペアワイズ法に基づいてバグが発生しやすい組み合わせテストを自動的に生成するツールであるのです。

前置きはこれくらいにして早速PICTを使ってどのくらいテストが削減できるのかを見ていきましょう!

PICTのインストールと使い方

インストールはBrewが入ったMacを使っていれば簡単に行えます。
ターミナルを開いて

brew install PICT

でインストールできます。🍺
次にPICTで効率的なテストを作成するために、テストしたい項目とそれらが取り得る値を記述したテキストファイルを用意します。
基本的な書き方は

"項目名1":"その項目で入力する値1","2","3"・・・
"項目名2":"その変数で入力する値1","2","3"・・・

となります。先ほどのkakaku.comにおける例で試してみると以下の通りです。
今回は各項目に対しチェックがあれば”T”,なしは”F”とします。

Chrome OS:T,F
Windows 10 S:T,F
Windows 10 Pro:T,F
Windows 10 Home:T,F
Windows 8.1:T,F
Windows 8.1 Update:T,F
Microsoft Office有り:T,F
KINGSOFT Office有り:T,F
WPS Office有り:T,F
Office無し:T,F
Microsoft Office Home and Business 2019:T,F
Microsoft Office Personal 2019:T,F
Microsoft Office Home and Business Premium:T,F
Microsoft Office Home and Business 2016:T,F
Microsoft Office Home and Business 2013:T,F
Excel:T,F
Word:T,F
PowerPoint:T,F

このファイルをテキストファイルとして保存します。
(この例ではPICT_test.txtとして保存しました。)
それではPICTにこのテキストファイルを読み込ませてみましょう。
ターミナルに以下のようにタイプします。

PICT PICT_test.txt 

するとこんな出力が出ます。

Chrome OS  Windows 10 S    Windows 10 Pro  Windows 10 Home Windows 8.1 Windows 8.1 Update  Microsoft Office有り  KINGSOFT Office有り   WPS Office有り    Office無し    Microsoft Office Home and Business 2019 Microsoft Office Personal 2019  Microsoft Office Home and Business Premium  Microsoft Office Home and Business 2016 Microsoft Office Home and Business 2013 Excel   Word    PowerPoint
F   T   T   F   F   T   T   T   F   F   T   F   T   F   F   T   T   F
T   F   F   T   F   F   F   F   T   T   F   T   F   T   T   F   F   T
T   F   T   F   T   F   F   F   F   T   T   F   T   T   T   T   T   T
F   T   F   T   T   T   T   T   T   F   T   T   F   F   F   F   F   F
T   F   F   F   T   T   T   F   F   F   F   T   T   F   T   F   T   F
F   T   T   T   T   F   F   T   T   F   F   F   T   T   F   T   F   T
T   T   T   F   T   F   T   F   T   T   T   T   F   T   F   T   T   F
F   F   F   F   F   F   F   T   F   T   T   F   F   F   T   F   F   T
T   F   F   T   F   T   T   T   F   T   T   F   T   T   F   T   T   T
F   T   T   T   F   T   F   F   F   T   F   T   F   T   T   F   F   F

見づらいので結果をコピーし、エクセルに貼り付けてみましょう。

このように10ケースのテストケースが生成されました。
このテストケースはペアワイズ法に基づいて作成されているので、統計的にみて70%〜85%のバグを検出できることが期待できます!
しかもテストは262144ケースだったものがたったの10ケースで済んでしまいました!
まさに魔法のようですよね!

いかがでしたでしょうか。
このように効率的にテストを実施し、品質を高めていきましょう!

参考文献
DOLORES R. WALLACE and D. RICHARD KUHN. FAILURE MODES IN MEDICAL DEVICE SOFTWARE: AN ANALYSIS OF 15 YEARS OF RECALL DATA, International Journal of Reliability, Quality and Safety EngineeringVol. 08, No. 04, pp. 351-371 (2001)

D. Richard Kuhn and Michael J. Reilly. An investigation of the applicability of design of experiments to software testing, Reprinted from Proceedings, 27th NASA/IEEE Software Engineering Workshop, NASA Goddard Space Flight Center, 4-6 December, 2002.

lee copeland , 宗 雅彦(訳). はじめて学ぶソフトウェアのテスト技法. 2018,第11版 ISBN-10: 4822282511