【初心者エンジニアは不要】テストを書く必要性

最近僕の職場でもようやくテストを書くようになってきたのですが、「正直あんま必要ないな」と思っています。

特に小さなサービスをやっている人や、まだ勉強途中の初心者エンジニアはテストをやる必要はありません。
テストを書く必要性とは一体何なのかについてまとめていきます。

なぜテストを書くのか

僕はテストに関して一回も勉強をせずにエンジニアになったので、テストはなくてもいける派なのですが、職場によっては「テスト駆動開発」を行っているので、できるに越したことはないのですが、投資対効果が低いと思っています。

機能を守るため

開発をしていると、変更したコードが思わぬところに影響を及ぼすことがあります。
そうした事態を避けるためにテストを書きます。

開発をするたびに全く関係ないところまでレビューしなきゃいけないのは面倒くさいですよね。
だからといってレビューをしなかったら、そこにバグが発生していた、なんてこともあるわけです。

テストを書いていれば、とりあえずテストコマンドをぽちっとしておくだけで必要な機能をテストしてくれます。
そうやって、重要な機能を守るためにテストは必要なのです。

事前に設計を明確にする

ベンチャー企業だと、事前にあまり設計書を作らずに開発に移ります。
そうなると、「ここの設計が違うよ」みたいなそもそもの要件が違った、ということが結構起こります。

テストを先に書いておけば、「ここのテストは設計とは違うね。」ということで、直すべき部分が明確になるし、手間も少なくなります。
設計書を書けばいいのですが、テストが設計書の役割を担ってくれるというわけです。

テストを書いたら、あとは、全てのテストがOKになるように作れば100%要件を満たした開発ができるというわけです。

勉強になることもある

初心者エンジニアがいきなりコードを書き始めるのは難しいと思います。
そしたら、先輩エンジニアがテストを書いてあげて、それに沿ってコードを書くことで、無駄なコードを減らすことができます。

逆にテストを書くのはコードを書くのに比べて簡単なので(人によりますが)、テストを書かせてプログラミングの勉強をさせるという方法もあるかと思います。

正しいテストが書けていればバグが起こることはほぼないので、初心者エンジニアにコードを書かせるのにテストは都合が良いというわけです。

初心者エンジニアはテストを書く必要がない理由

上記のテストの必要性に対して、僕は初心者エンジニアはテストを書く必要はないと思っています。

その理由については以下の通りです。

  • テストを書いている時間がムダ
  • テスト自体が間違っている可能性がある
  • サービス全体に目を向けるため

テストを書いている時間がムダ

初心者のうちはとにかくプログラミングを学ぶ必要があるため、テストを書いたり勉強している時間はありません。
それなら、テストを一切やらずにプログラミングに注力すべきです。

そもそもテストを書くためには、コードをどのような手順で完成させていくか、そのためにはどのような障害が起こり得るかを知っていなければいけません。

確かにテストがあることで、初心者エンジニアでも働きやすい環境にはなると思うのですが、勉強効率を考えると、テストはない方がいいと思っています。

テスト自体が間違っている可能性がある

テストは勝手に作られるものではなく、自分たちで作るものです。
ということは、テスト自体が間違えている可能性もあるということです。

エラーをなくすためのテストを完全に信頼できないのでは、テストの意味がありません。
僕もテストを書いてみて、「テストはOKだったけど、一応自分でも確かめないとな」と思ってしまいました。

結局レビューをする手間が変わらないのであれば、あまりテストを書く意味はないのかなと思っています。
しかも機能が変わるたびにテストも変更しないといけないので、2重で管理しなければいけなくなります。

サービス全体に目を向けるため

「テストが通っているからいいや」という思考を続けていくと、サービス全体を見る目がなくなってしまいます。
テストが通っているけれども、どのような機能なのか、テストは何をテストしているのかを理解しなければなりません。

フリーランスとかになり、サービスの途中から参加することになると、すでにテストがある状態なので、ついついテストに頼ってサービス全体を見ない、ということにもなりかねません。
テストがないと全体を把握するのが大変なのはわかりますが、プロとしてサービスについて深く理解しておくのは必須だと思うので、テストに頼りきりになるべきではないです。

プログラミングができるようになったらテストを書こう

僕はテスト反対派なのですが、ある程度プログラミングスキルが身についてきたらテストを書くのもありだと思っています。
なぜなら、テストが書ける方が仕事の幅が広がるからです。

テストが書けないという理由で採用されないことはあまりないですが、テストに苦手意識を持っていると、テストを使っている職場でベストなパフォーマンスを出すことができません。
多くの職場で自分のスキルを活かすためにも、一応テストはできておいた方がいい。ということになります。

とはいえ、初心者のうちは、テストよりもまずプログラミングスキルを高めることに集中してもらいたいです。
テストは後から学んでも何とかなりますので。

入門書にはテストの書き方も書いてありますが、そこは飛ばして、自分のポートフォリオ作りに注力しましょう。