【第3回】発見はよい観察とよい方法から|実務三年目からの発見力と仮説力

帰納的な推論発見的な推論(アブダクション)は、
私たちがソフトウェア開発の現場/実務で(知らず知らずにでも)駆使している思考の形です(それどころか日々の暮らしでも使っています)。

それほど“自然な”思考の形ですが、どんな考え方で、どんなところに注意すると質の高い思考ができるのか、基本知識を押さえておくと実務のレベルアップにつながります。

<実務三年目からの発見力と仮説力 記事一覧>※クリックで開きます

今回は帰納的推論で「発見」をするために参考になる方法(見方考え方)を紹介します。

再現・枚挙的帰納

第2回で紹介した枚挙的帰納の例(A)、(B)(第2回の図2-3を図3-1として再掲)、それぞれでどんな風に推論しているか、コニャン君の脳内を覗いてみましょう。

図3-1 枚挙的帰納の例
図3-1 枚挙的帰納の例

【注意】以下に再現する“推論の筋道”は、「こういう形/流れもある」を示すもので、誰でも・どんな場合でもこのような流れを辿る、と主張するものではありません。

(A)の形の場合

図3-1 (A)、コニャン君の思考の筋道は図3-2のようになるでしょう。

図3-1 コニャン君の脳内(A)
図3-1 コニャン君の脳内(A)

こうした思考を支えるのが、前回解説した自然の斉一性因果性という概念でした。

プログラム(ソースコード)に混入する欠陥は自然現象ではありませんが、筆者の経験によれば、斉一性に似たような状況が生じることがあります。

  • ある箇所のある処理で生じたエラー(誤り。勘違い、思い込み、考慮不足、仕様の誤読、etc.)は、他の似たような箇所での同じような処理でも生じがち。
  • ソースコードのコピペも欠陥を伝播しがち。
  • 複数の箇所から呼び出されるモジュールに欠陥があると、特定の条件を満たしたら同じような故障が各地で発生することが起こりがち。

【訂正】この(A)、第2回では「共通項Pを見つける」例と述べましたが、「特殊文字を入力すると(共通項P)、フリーズする(共通項Q)」形と言えますね。間違えました。

(B)の形の場合

(B)は、共通項Pだけでなく共通項Qも見つけ、両者の関係性を見つけるのに、ちょっと“手数”がかかるでしょう。
(図3-3。図3-1との対応の参考として、吹き出し中に丸数字をつけています)

図3-3 コニャン君の脳内 (B)
図3-3 コニャン君の脳内 (B)

発見=観察+推論の方法

「実験的探究の4方法」

図3-1 (A)(B)のような推論の方法は、何といっても観察
――起こっている事実を見落とさず、適切な詳しさで見る―― に支えられています。
観察については後ほど触れます)

そして、よい観察に基づいて“共通項”(中でも因果関係)を見つけるための方法を、19世紀イギリスのJ.S.ミルという哲学者が考えました。

自身の著作の中では「実験的探究の4方法」と題されていますが、「ミルの帰納法」「ミルの方法」などとして知られます。
(解説している方法は5つだが、ひとつは2方法の組合せ)

  • 一致法
  • 差異法
  • 一致差異併用法
  • 剰余法
  • 共変法

本記事では、「ソフトウェアの動作確認やテストで、故障や不具合に遭遇した局面」や「デバッグ中に原因を探る局面」を想定して、結果から原因を探る場合に焦点を当てて説明します。

以降の解説では、

  • 前件(先行する事象群):
    故障や不具合の発生に先立つ環境・設定、データ、状態、コード中のロジック、入力・操作、などを指します。
  • 後件(後続する事象群):
    ソフトウェアの実行が引き起こす出力・表示、状態(の変化)、データの変化、など(故障や不具合自身を含む)を指します。
  • (前件や後件の)要素:
    前件や後件中の互いに識別可能なものごとを指します。

J.S.ミルの帰納法

一致法:多くの事例の「共通点」に着目する

  • 着目する事象a(ソフトウェアの故障や不具合など)を生じる事例をふたつ以上集める。
  • ①前件の中に全事例で共通する要素がひとつだけある(要素Aとする)。
  • ②要素Aだけが全事例で一致している。
  • ③要素A以外の前件の要素が異なると、事象a以外の後件は異なる。

①②③が共に満たされるなら、その要素Aが着目する事象aの原因(または、原因の不可欠の一部分)である、と考えることができます。

図3-4 一致法の概略
図3-4 一致法の概略

【特徴】

  • 「ある要素がなくても着目する事象が生じるなら、その要素は原因から取り除いて考えてよい」という考え方に基づく(消去法)。
  • 着目する事象を含む事例をいくつか集めれば適用できる。
  • 「特定の要素を取り除いて結果を見る」といった実験ができない場合に適している。
  • 後述の差異法の前段階として原因の候補を絞るのに適している。

【注意点】

  • 事例は「前件では要素Aだけが共通、後件では事象aだけが共通している」こと。
    他の要素や事象が共通していると、因果関係が絞り切れない。
    (別の方法の適用などにより、さらに絞り込むことが必要)
  • 事例は多いのが望ましい。
    (少ないと、原因の絞り込みができなかったり、偶然の結果を原因と間違えたりするおそれが大きい)
  • 前件の要素Aと事象aがともに、隠れた他の原因から生じている場合(結果の共存)を識別できない。
  • 事象aが、前件の要素Aではない原因による場合を識別できない。
  • 事象aが多数の原因の複合により生じている場合、先行事象Aがどのように関与しているかは判らない。
図3-4a 一致法の例
図3-4a 一致法の例

差異法:異なる結果を生む「違い」に着目する

  • 着目する事象aを生じる事例(積極事例)と、生じない事例(消極事例)を集める(最低、各ひとつずつ)。
  • ①前件に特定の要素Aがあると、事象aが生じる。
  • ②前件に特定の要素Aがないと、事象aは生じない。
  • ③それ以外は、前件と後件は全く同じ。

①②③が共に満たされるなら、要素Aが事象aの原因(または、原因の不可欠の一部分)である、と考えることができます。

図3-5 差異法の概略
図3-5 差異法の概略

【特徴】

  • 「ある特定の要素を除くと着目する事象が生じないなら、その要素は原因と考えてよい」という考え方に基づく(これも消去法)。
  • 積極事例、消極事例それぞれひとつずつあれば適用できる。
  • 別の方法で推定された因果関係を確認するのに適している。
    (事象の発生原因がある程度推定できている状況で適用するのがよい)
  • 一致法では識別できない「事象aが、前件の要素Aではない原因による」場合を誤認しない。

【注意点】

  • 条件を満たす事例を集める手間がかかる。困難な場合もある。
  • 「特定の要素を取り除いて結果を見る」といった実験ができない場合には適さない。
  • 原因の特定に適用する際には注意が必要。
    (発生原因の推測がないと、ブルート・フォース的に手当り次第に試すことになる)
図3-5a 差異法の例
図3-5a 差異法の例

一致差異併用法:ふたつの方法の合わせ技

  • 着目する事象aが生じる事例(積極事例)を2つ以上、 生じない事例(消極事例)を2つ以上、それぞれ集める。
  • ①積極事例では、先行する要素Aと後続の事象aが含まれていることだけが共通している。
  • ②消極事例では、先行する要素Aと後続の事象aがともに含まれていないことだけが共通している。

①②が共に満たされるなら、要素Aが事象aの原因(または、原因の不可欠の一部)である、と考えることができます。
(消極事例の前件は、積極事例のそれと同じか類似していると対比が明確になる)

図3-6 一致差異併用法の概略
図3-6 一致差異併用法の概略

続きを読むにはログインが必要です。
ご利用は無料ですので、ぜひご登録ください。

SHARE

  • facebook
  • twitter

SQRIPTER

望月信昭(もちづき のぶあき)

gst lab.

記事一覧

gst lab.所属

前世紀は主にソフトウェアエンジニア/プログラマーとして活動。
今世紀はソフトウェアテストのコンサルティング、実務の支援、テスト関連技術トレーニングの企画・開発・講師/ファシリテーターといった領域で活動。近年は若年層ソフトウェアテスト技術者の育成に関わることが多い。
ISTQB-FL、テスト技法、論理スキルなど、ワーク盛りだくさんのトレーニングやワークショップを提供中。

note⇒ https://note.com/nob_mottie/

  • 新規登録/ログイン
  • 株式会社AGEST
#TAGS人気のタグ
RANKINGアクセスランキング
NEWS最新のニュース

Sqriptsはシステム開発における品質(Quality)を中心に、エンジニアが”理解しやすい”Scriptに変換して情報発信するメディアです

  • 新規登録/ログイン
  • 株式会社AGEST