プログラミング素人のはてなブログ

プログラミングも電気回路も専門外の技術屋の末端が勉強したことや作品をアウトプットするブログ。コードに間違いなど見つけられたら、気軽にコメントください。 C#、Python3、ラズパイなど。

第六感的な結論と事実が異なるときどうするべきか?

toyokeizai.net

事実:起きたこと、起きてないことすべて
真実:事実をもとに解釈したあるべき姿

第六感というのは自分が考えている「真実」なのかもしれません。

第六感的には(本当は心当たりがある場合も含めて)うまくいくはずがなく、問題があるはずなのにうまく行っている(テストは通っている)ときや、その反対に上手くいくはずなのにうまく動かないときどうすべきか?という場面に遭遇します。

ソフトウェアテストならその辺はテストが正しいことが多いのですが、物理の世界では制御できていない(考慮漏れ)ことが多くあり得ます。

この場合、例外が起きた理由を明確にできればもちろんそれでいいですが、必ずしもそういうふうには行きません。

ここで、「どうこういう理由でテストがうまくできません」とゲロって自分を正当化する人がいますが、それで何が正当性をアピールできていると言えるのでしょうか?
短時間(与えられた時間)で失敗なくテストできないのは、自分の能力不足をアピールしているに他なりません。

一方、その問題の検証が例えば一回に8時間かかって、起きる確率が1/1000だったら?それで金曜日までに結論を出さなければいけないとしたら、どうするのでしょう?
だれかに責任を丸投げしますか?

ここで取られる選択は、以下のようにいくつかの方法があります。
①うまく行かない理由を説明し、いまの状況が例外だとして収める。
②いまの状況に対して上手くいくようにチューニングする。
これを現物合わせという。この現物がセンター品ならそれでいいが、これが規格エッジだとすると本番はうまく行かないという新たな深い問題を生み出す場合がある。
③事実をねじ曲げる。
④なかったコトにする。
事実の捻じ曲げやなかったコトにする、というのは都合のいいデータだけを生かす、というようなことも含みます。

この①~④のどれを選ぶか?というのがエンジニアとしての第六感です。

1回のテストが5分で終わるなら5回データを取り、全体のバランスから評価をします。
真に正しいデータは取れませんが、繰り返しによって平均値は真値に近くなります。何回繰り返せばいいかは、統計的な素養が必要ですが、簡易的には3シグマ等で評価できます。

真実はいつもひとつだが、真のデータが取れるとは限らないわけなのです。
(つまり、複数の矛盾した事実が生まれる場合がある。)

また、追加の実験をしたときに得られた結果はどのような意味を持つのか?
つまり違う結果が得られても、設計に影響しないときは、やっても無駄ではないか?ということになります。
結果を想像して、あるべき結果とそうでない場合を想定して、その時に次の行動が変わらないなら後回しでもいいのです。
理想と違うから、と何度もテストを繰り返す人がいますが、それはバラツキといって別途制御で吸収しなければならないものかもしれません。