https://zenn.dev/yuulab/articles/45dc33feaada62

はじめに

本記事は、エンジニアが自動テストコードを記述することの有用性と、テスト駆動開発の導入目的を改めて考え、まとめた記事になります。 結論から言えば、「テストコードは重要なので、開発者が書いていこうね」っていう話です。

想定読者は以下のような方々です。テストコードの重要性について再認識する機会になれば幸いです。

未経験からエンジニアになり間もない方。 テストコードの重要性がいまいちわかっていない方。 納期までの時間がないといった何らかの理由からテストコードを書けていない方。 上司やチームメンバー、顧客にテストコードを書くことのメリットを説明する機会がある方。

なぜテストが必要なのか

後輩から「なぜ余分な工数を割いてまでテストコードを追加する必要があるのでしょうか?」と尋ねられたらあなたは何と答えるでしょう? 私は自分の経験やテストに関する書籍などから、テストコードを書く意義は大きく4つあると考えています。

  1. 不具合の早期検知・バグの減少
  2. 疎結合なシステムに開発が向かう
  3. リファクタリングの促進
  4. 新規参画者の仕様理解・コードリーディングの効率up

以下、それぞれについてお話ししていきます。

1.不具合の早期検知・バグの減少

これは一番最初に思いつきそうな効果で、言わずもがなだと思います。 自動テストを頻繁に実行することで不具合を本番リリース前に検知できます。また、開発中においてもコーナーケースを明示的にテストコードに落とすことで、バグの減少に繋がるはずです。

また、本番等で発生してしまったバグに対してテストコードを書いた上で修正することで、そのバグが再び発現することを防ぎます。

※一度起こったミスが今後何かの拍子に再び発現する可能性は十分にあります。自動テストを書き、毎回実行することで再発を防ぎましょう。

2.疎結合なシステムに開発が向かう

テストを設計することで、クラスやメソッドがテストしやすい形になり、自然と機能間の結合度を下げる効果が期待できます。 コードを単体テストするためには機能(クラスやメソッド)を役割ごとに分離し、DBなど外部システムから可能な限り切り離し、外から結果を確認できるようにする必要があります。その結果、クラスやメソッド同士に余計な依存関係が生まれず、結合度が下がります。結合度が下がるとシステムの保守性や拡張性も向上し、バグ修正や機能追加もしやすくなるというメリットがあります。

できるエンジニアはテストコードの設計も上手な印象です。「テストはソフトウェアエンジニアとしてのスキルの一つ」というのをどこかで聞いたが、確かに納得です。