テストが2,085個もあるのに、肝心の「玄関」が開かないという悲劇
2,085 Tests, and None of Them Opens the Front Door
2,085 Tests, and None of Them Opens the Front Door
テストコードを2,085個も積み上げた。カバレッジも万全だ。それなのに、なぜかユーザーが最も重要視する「フロントドア(メインの入り口)」が全く開かない……。そんなエンジニアの「あるある」な悲哀についての投稿です。
このサイト、ブラウザの履歴をいじってるみたいだね。戻るボタンを押してもHNに戻れないよ。
ちょっとした体験談を。以前、ユニットテストに異常なほど執着するシニアエンジニアと仕事をしたことがある。その人の考えでは、ソフトウェアはレゴブロックみたいに細かく切り分けて、モックを使いまくって完全にテストすべきだというものだった。「各パーツが正しければ、組み合わせたものも必ず正しくなるはずだ」というのが彼の口癖でね(創発的な挙動っていう概念を知らなかったんだろう)。忘れもしないよ。統合テストやE2Eテスト、手動テストには頑なに反対して、ユニットテストのカバレッジ100%を熱狂的に主張していた彼が変更をデプロイした途端…ドカン。プロセスは開始直後に派手にクラッシュして、本番環境で大規模な障害が発生した。一目見ればわかるような単純なバグだったのに。結局、数週間かけて新機能を作っていた間、彼は一度もアプリケーションを動かしてさえいなかったんだ。個々のパーツは完璧に磨き上げられていたけど、いざ統合したらまったく使い物にならなかった。僕の考えでは、ユニットテストっていうのはライブラリのためのもの。入力と出力が明確に定義できる閉じた世界だ。対して統合テストやE2Eテストは、システム思考や証明ではなくシミュレーションが必要な、開かれた世界であるアプリケーションのためのもの。自分が今どっちの世界で作業しているのかをちゃんと見極めることだな。
ざっと目を通してみたけど、「The gap was never coverage. It was wiring.」なんて見出しがあるね。いかにもAIが書いたような雑な内容だし、読む気失せたわ…。昔はHNの記事なら何でも読んでたけど、こういう質の低いものへの拒絶反応が出てからは控えるようになったよ。まあ、それはそれで良いことなのかもしれないけどね。