投稿元:
レビューを見る
松尾谷さんが、CFDの講習会でソフトウェアテストの基礎となる学術的根拠の一つとして「探索理論」を上げるので興味を持って読んでみました。
探索理論とは何かというと、目標物を効率よく探し求める方法のことです。第二次世界大戦時に連合国側はドイツのUボート(潜水艦)による攻撃を受けて1,000万トンもの船舶を失いました。
この事態に対応するためUボートの発見を効率よく行う方法が検討されて、この探索理論が発展しました。このときに、考慮しなければならないのは大きくいって「目標物の特性」と「探索者の特性」の2つです。
◆ 目標物の特性
目標物の特性として、まず、one-sided(非競争的)かtwo-sided(競争的)かの違いがあります。
たとえば、犯人と警察官のように目標物(犯人)が探索者(警察官)の動静についてある程度の情報を持って、それを利用して発見を回避しようと努めるような場合をtwo--sidedと呼びます。逆にたとえば、金脈探しのように目標物が動かなかったり動いたとしても探索者の情報を使わない場合、one-sidedと呼びます。
その他にも、目標物の特性には、探索空間を連続的に考えるか離散的(飛び飛び)に考えるか、目標物は単数か複数か、出現しっぱなしか出現と消滅を繰り返すか、動かないで止まっているか動くものかなどがあり、それらによって目標物のタイプを分類します。
ソフトウェアのバグの場合は、one-sided、離散的(一部のバグは区画に分けたところだけでは見つからないので連続的)、複数、出現(一部のバグは出現と消滅)、停留ということになるでしょう。
バグの見方がちょっと変わりませんか??
◆ 探索者の特性
探索者の方も、一人で探す(単数)か複数人で探す(複数)かの違いがあります。投入努力の可分性とは、探索時間や探索費用について任意に微量に分割できるか、1回の探知に要する時間、費用などという基本量(quantum)があるかの違いです。
探知情報の信頼性はノイズの有無で、探索過程については一段階だけか多段階に分けるかです。
そして、最適性の基準を考えることといっています。すなわち発見率最大なのか、期待のリスク最小なのか、はたまた別のものなのかと。
ソフトウェアテストの場合は、複数、任意、雑音あり、多段階、期待リスク最小が基本でしょうか。
★★★
本書では、これら、探索モデルの分類をしたうえで、それぞれのモデルに対してどのような探索理論(探索の作戦)があるのかについて書かれています。
そして、結果としてUボートは連合国側の駆逐艦によって効率よく発見され全滅させられました。
細川さんを中心としたファーブルプロジェクト(バグを収集して分類するプロジェクト)が始まりましたが、その分類の一つとしても使えるんじゃないかなと思います。
また、たとえば、網羅的なテストとはどのような目標物(バグ)を効率よく見つけられるのかといったことを論理的に考えるのに役に立つと思いました。
今回、智美塾でテスト対象とテスト目的を分けてテストアーキテクチャを検討することを��案しましたが、探索理論的にも正しい方向だったんだなぁと思いました。