💬

【ポエム】テストの実装は必要なのか?

2022/03/21に公開

眠れなかったから、気分転換がてらポエム風に日頃思ってることを書き連ねてみました。

タイトルについて

まずこのタイトルにしたのは、テスト自体は必要不可欠と思ってることを表したかったからです。
ただテストをコード化、つまり実装することは必須なのかという点を議題に挙げたかったという思いです。

テストの実装は必要なのか?

私は普段、プログラミング初学者のメンターとして副業をしています。
その際に、「テストの書き方が分からない」という方をよく見かけます。それが今回の議題の発端となります。

まず、テストを必要と感じる人の考え方として、以下があると思っています。

  • 上司にテスト書けと言われたから
  • (特にSIerでは)テスト自体がエビデンスとなり得るから
  • 品質を担保するため

私は元々SIer出身ということもあり、2点目をよく意識していました。でも品質向上を目的としていないテストに意味はあるのでしょうか?

テストの目的について

私がこれまで経験してきた職場では、テストの目的は大体以下の2つになるのかなと感じています。

  • エビデンスとしてのテスト
    • リリース後、バグが発生した際に、バグ報告の素材として使いやすい
      • こういった観点ではテストしていたが、この観点は抜けていた等
      • テストがない場合の、何もテストしていませんでしたは説明として使いにくい
  • 本来の、品質向上するためのテスト
    • シンプルに、品質向上するためにテスト必要だよねっていう考え方
    • これは完全に同意(というかしないという選択肢はあり得ない)
    • ただし、どこまでテストするかというのが観点となる

メンターをやっててよく出くわすテスト

様々な方のメンターをやっていて、よく出くわすのが以下のようなテストです。

  • あるページを開いたときに、「〇〇のボタンが表示されていること」

これは果たして必要なテストでしょうか?というのも、動かしてみれば分かるじゃんという思いです。
こういったテストを書く際に、プロならば数分でテスト書けると思いますが、駆け出しエンジニアの方は、そもそもjestの書き方が分からないということで、こういったシンプルなテストを書くのにも数日掛けてしまう方をよく見かけます。要はラーニングコストといわれる観点ですね。

そういった方も居るという前提でテスト容易性などのアーキテクチャ設計をすべきと個人的に考えてますが、現状は書けて当たり前という前提で組織が進んでる感があります。

そうした場合、果たしてこのテストをコードとして書くことにどれくらいの意味があるのでしょうか?
考えられる観点は以下かと思います。

  • 今後の改修でボタンが非表示になるような改修が加えられる可能性がある
  • テストコードがないと落ち着かない

1点目については確かにその通りだとは思いますが、その改修をした時点でそもそも動かしてみるよねっていう思いがあります。
2点目についても確かにその通りではありますが、1点目で表示が確認できさえすれば解消できる観点かなと感じてます。

まとめ

ちょっと酔っぱらってて取り留めない記事になってしまいましたが、言いたかったことは以下になります。

  • テストをどこまでやるかっていうのはアーキテクト職が決めればスムーズで良いよね
  • アーキテクト職がいない職場ならチーム全員で納得できるまで話し合えば良いよね
  • 上記をやらずに、とりあえずテスト必須!カバレッジ100%必須!とか言ってる人がいたら、辞めさせれば良いよね

って感じに思ってますm

Discussion