最近、「5匹の猿の実験」(the Five Monkeys Experiment)という話を知りました。有名な話なのかもしれませんが、全然知らなかったので紹介してみます*1。
本当の実験というよりは、寓話的なもののようですが、ともかく以下のような内容です*2。
5匹の猿の実験
科学者グループが、5匹の猿をケージに入れた。ケージの真ん中にはハシゴがあり、それを昇るとバナナにありつける。
猿がハシゴを昇るたびに、科学者たちは残りの猿に、冷え切った水を浴びせた。
そのうち、猿がハシゴを昇ろうとするたびに、他の猿たちがその猿を殴るようになった。
しばらくすると、バナナの誘惑に負けてハシゴを昇ろうとする猿はいなくなった。科学者たちは、猿を1匹入れ替えることにした。その猿ははじめ、ハシゴを昇ろうとしたが、すぐさま他の猿たちに殴られることになった。
何度か殴られるうちに、新しい猿はハシゴを昇ろうとするのをやめた。なぜ昇るべきでないかはわからないまま。2匹目の猿が入れ替えられ、同じことが起こった。1匹目の猿も、2匹目の猿を殴るのに加わっている。
3匹目の猿の入れ替えでも同じことが繰り返された。
4匹目の猿が入れ替えられ、また殴られ、最後の5匹目の猿も入れ替えられた。ケージに残る5匹の猿は誰も、冷水を浴びたことがないにもかかわらず、ハシゴを昇ろうとする猿を殴ることはやめない。
ハシゴを昇ろうとする猿をなぜ殴るのかと問うても、その答えは「わからない。ただ、それがここのやり方なんだ」となるだろう。他にやり方があるのに、なぜ今していることを続けるのか。それを問う機会にしてもらいたい。
結論: 他の人のやり方に従うのではなく、従う前に考えよ。
「理由はよくわからないけれど、そう決まっているから、従う」という方法は、それほどハズレない処世術だとは思うのですが、一方で非効率の温床になりがちです。職印を傾けて押すとか!
また、世の中のコンプライアンス事件って、こういう「現場はずっとそうやっていた」「誰も疑問を差し挟めなかった」に起因するものも多いんですよね。当事者は「悪いことをしてた」という意識もなく、むしろ「規則よりも現場の実践知に従って、正しくやっていた」という認識だったりします。
だからこそ、「ずっとやってきたこと」=「正しい」ではないことは、折に触れて見つめ直すことが大切です。
2つの疑問
さて、この話を読んで、「あれ?」と思ったことが2つあります。
会話すればよくない?
「なぜ、そうなっているのか」を、猿同士は話せないとしても、人間同士は話せるんじゃない?人間だもの。と思ったのですが・・・、
不特定多数に適用されている暗黙の社会規範みたいなものは、会話する「相手」がいないんですよね。
たとえば、エスカレーター右側*3空けちゃう問題。
これはもう一種のマナーになっていて、立ち止まる(これが本来の乗り方)人は左に寄る。「そうすることが望ましい」じゃなくて、「そうしないと悪」くらいになってる。たとえ、右側を昇っていく人がいなくても。なので輸送効率が常時、スペックの半分くらいになってしまう・・・。
でも、たとえこのやり方を改善すべきと考えたところで、誰とそれを合意できるのか。
たまたまエスカレーターに乗り合わせた人に言ったところで・・・ちょっとした不審者ですよね。
「猿は言葉をつかえないけど、人間はそうじゃないから、改善できる」わけじゃないんだなと。会社組織も同じようなものかもしれません。
元の猿も「理由」をわかってなくない?
この話、「なぜバナナを取ろうとしてはいけないか」、残った猿は誰も知らないという話なのですが、実は「最初にいた5匹」も、その理由は知らないんですよね。
直接的には「他の猿に殴られるから」で、なぜ殴るかといえば「冷え切った水をかけられるから」なのですが、「誰かがハシゴを昇ろうとすると、水をかけられる」なんて論理不明の理不尽であって、理由にはなっていないという。
猿がやるべきだったのは、「冷水をかけてくる科学者どもを殲滅する」だったのではないでしょうか。
テストでも同じことが起きていないか?
さて、ここから無理やりテストの話にもっていきましょう。
「なぜやっているかわからない」になりがちなものの一つに、リグレッションテストがあります。
リグレッションテストは、作戦と意志がないと、ひたすらに増えていってしまいます。集約・剪定など、継続的・積極的な合理化が必要です。
そんなときに一番困るのが、「なぜやっているのかわからないテスト」です。
なんかすごく具体的な値や手順が指定されていて、その条件に特別な意味がありそう。でもその組み合わせが何を意味しているのか、過去どんな経緯でこのテストケースがリグレッションテストセットに組み込まれたかわからない。だから削除できない。削除して何か問題が起きたら、「冷たい水を浴びせられる」から。
なので、テストケースには、「なぜそれが必要なのか」という「意図」を残しておくことが大切です。「意図」を残しておくことで、後世の人は、「今もなおこのテストが必要なのか」をあらためて判断することができます。
「意図」の重要性は、テストケースにとどまるものはありませんね。
なぜ、そのテスト観点が必要なのか。なぜ、この値を同値クラスであるとしたのか。なぜ、このテストや他のテストより優先度が高いのか。
「意図」は、成果物そのものとセットになる、重要な情報です。
ケージの猿のように、後の人が「よくわからんけど従う」ことにならないよう、しっかりと残していきたいものです。
*1:ソフトウェアテストの小ネタ アドベントカレンダー はもう埋まっていた。
*2:以下のサイトを参考に、自分で翻訳しています。 www.throwcase.com
*3:はい、そうですね、関西では左側を空けるんでしたね、すみません。