https://qiita.com/470_aaa/items/75809448e446ee1c91b6?utm_source=Qiitaニュース&utm_campaign=aefbe6e4cf-Qiita_newsletter_510_04_13_2022&utm_medium=email&utm_term=0_e44feaa081-aefbe6e4cf-34388437

世間ではテストをしないこと/テストを書かないことを悪とするみたいな文化が定着してきたのか、テストを書かない開発というのが減ってきてると思います。

では「正しくテストを書けているか」「テストを書く文化を生かしているか」というとどうでしょう?

これらの問いに答えられずテストを書くことをゴールにして満足していると、それは宝の持ち腐れならぬテストコードの持ち腐れとなります。

執筆のモチベーション

この記事を印刷して札束のごとくビンタするのが目的です。 以下に該当すること”だけ”を考えているような場合はビンタされるかもしれません。(絶対ではないですが危ない可能性があります)

とはいえ、筆者は平和主義者なのでビンタ被害者を一人でも減らすべく、この記事を通してテストコードの価値を理解せずに脳死で「テストコードを書くことを目的化」してしまっているビンタ対象予備軍に 「価値あるテストを書くこと」「テストを書く文化そのものの価値を最大化させること」を今一度考え直してもらうことをゴールとします。 それでもわからん人には仕方なくビンタです。

テストコードに対するありがちな誤解

「今は急いでいるからテストコードは後で書こう」「テストコードのカバレッジがxx%であることを単体テスト完了基準とする」…といったような意識をしている方は、 そもそもテストコードを書く意味やその責務を誤解している可能性があります。

まずはこの誤解を解き、テストコードの価値を最大化するスタート地点に立ってもらいます。

テストコードの責務

まず、テストを書くことを目的化/ゴール化している方々に理解してほしいのは、テストを書くということは目的ではなく手段です。

テストとは、そのソフトウェアが正しく動くことを担保するための大事な作業です。 テストコードはその正しく動くことを保証する責務をプログラムに委譲しているに過ぎません。 故に、テストを書くということは「ソフトウェアを正しい状態に保つ」という目的に対する手段であるということです。

正しく動くの定義

ではテストコードで保証すべき「正しさ」とは何でしょう? 境界値検査やループ処理等の処理を網羅させカバレッジが100%であることでしょうか?