2007-07-12

テストと心もしくは脳

僕にとって、なぜテストは魅力的なのか。もともとプログラムを書くのが3度のメシより隙だったし、プラモデルのようなモノづくりも大好きだった。今でも、ちょっとしたツールをperlで書くときは、妙にワクワクする。そんな僕が、なぜテストを生業にしているのだろう。

もちろん競走戦略的には、僕の持っているリソースと世の中の状況を考えると、テストを生業にするのが一番理にかなった戦略である。しかし、それ以外にテストは僕の心を引きつけてやまないものがあるのだ。

テストを上手に設計するには、2つの意味で人間の心もしくは脳を深く理解しなければならない。それは、人間が何かを良いと感じるのはどういうことなのか、という点と、人間が間違いを犯すのはどういうことなのか、という点である。

テストは最終的に、ステークホルダーが全て満足するかどうかを評価しなくてはならない。もちろんその一部はビジネス上の明確な数値で表せるだろうが、テストで一番大事な部分は、ユーザがテスト対象を「よい」と感じることである。であるならば、テスト設計で考えなくてはならないのは、ユーザはどんな人なのか、ユーザはどんな使い方をするのか、そしてユーザはどんな時にどんなことを「よい」と思うのか、である。そういったことを当のユーザ以上に理解していないと、質の高いテスト設計はできない。

その中で最も難しいのは、ユーザはどんなことを「よい」と思うのか、を理解することであろう。そもそも人間は、何を「よい」と思うのだろうか。物理的な特性で記述できることも多いだろうが、大事なのはそこではない。コカコーラは嫌いでペプシは好き、レクサスは嫌いでベンツは好き、それは多分、物理特性の違いではない。そのユーザが生きてきた文脈において、様々な明示的関連を持たない特性が主観的に認知されることによって、よいとかよくないとか判断されるわけだ。テストを極めるのであれば、そこまで到達すべきだと思う。それは心理学、社会学、認知科学、脳科学など、もっと人間をダイレクトに研究対象とする分野とのコラボレーションが必要である。

同様に難しいのは、ユーザはなぜ「間違う」のか、を理解することである。そもそも人間は、何を正しいと認識するのだろう。もちろんヒューマンエラーの研究などはあるが、もっと踏み込んだ何かが必要だと直感している。人間が(多くは物理的な)何かを操作する時に間違うという狭いものではなく、人間が何かを考えるときに間違うとはどういうことなのか、を研究する必要があるのだ。

だから我々の研究室では、最初の一歩として、頭の中の論理的構造物に対するアフォーダンス、名付けてロジカル・アフォーダンス(以前はプロダクト・アフォーダンスと呼んでいたが、この方がよいと思う)を研究している。ソフトウェア開発者は、それが機械語であろうがCであろうがUMLであろうが、プログラムもしくはソフトウェアを頭の中に3次元/多次元の構造物として認識しているはずである。その論理的構造物に対するアフォーダンス把握や応力計算ができれば、ある種の間違いは指摘可能になる。

梅田望夫さんとの対談をきっかけに、最近茂木健一郎さんの本を読み始めたが、彼の言うクオリアのようなものだろうか。1行1行は単なる命令に過ぎないソフトウェアが、様々な脈絡(茂木さんは偶有性と呼んでいる)を持つことによって、頭の中でありありと多次元の構造物となって立体的に存在するのである。開発者はその構造物に触ったり、グルグル回したり、いろんなところから眺めてみたり、中に入ってみたり、柱を叩いてみたりしながら、ソフトウェアを分析・設計・実装し、レビューしていくのだ。

もっと言うと、テスト設計も同じである。僕にとって、テストケースの集合体であるテストスイートは、頭の中で多次元の構造物になっている。それを2次元の平面に記述するツールがNGTであるし、その構造物には何らかの品質特性もあるだろう。我々の研究室では、そんなことも研究している。我々にとってテストとは、頭の中の構造物を評価するための観点の集合だが、その観点そのものも頭の中で構造物になっているのだ。

つまりテストとは、人間を理解することそのものに他ならない。人間であるユーザが何を「よい」と感じ、人間である開発者が何を「間違う」のか。その2つを理解するからこそ、本当に素晴らしいテストが可能になる。頭の中をこじ開けて、人間がものを捉える時にどのような構造物を頭の中に構築しているのか、を把握しないといけない。そのためには、テスト設計の時にもっと人間について深く考察することが必要だし、もっと心や脳の分野と一緒に研究していかねばらならないだろう。

人間だもの。だからこんなに面白いことは無いのだ。

0 件のコメント: