プログラミング

テストコードのメリットデメリット システム品質向上とデグレ防止

プログラミング

概要

フリーランスエンジニア スリーネクスト

プログラミングする時、テストコードを必須にする現場が増えてきました。テストコードを書く意義とテストコードを書く中でもっとも機能的なデグレ防止について紹介していきます。

テストコードは非常に重要ですがやりすぎると仕事が進まない足枷になります。

テストコードについてのイメージ

Cさん
テストコードでバグをたくさん発見できるから詳しく書いた方がいい

テストコードを作成しながら書くと早く開発できる
Gさん

Eさん
設計力がつく

設計(基本設計や詳細設計)とテストコードはそこまで関係ないので設計力はつかないです。テスト設計するときのテスト設計能力のことなら伸びますが・・・

上記の会話をよく聞くのですがしっくりこなくてテストコードを書くのを時間の無駄だと思っていました。

テストコードを書くメリット

テストコードでもっとも重要なデグレ防止

デグレとは機能を追加するためにもともとあるプログラミングコードに手を加えてしまって、別の機能が動かなくなってエラーになってしまうことです。

テストを実行するとテストコードを仕込んだところが全部起動し、どこでエラーが出ているのか出力されるので大変便利です。

プログラミングコードの品質向上

エラーが事前にわかるのでテストコードあるのとないのとでは品質は非常に高いです。エラーや間違ったコードはテストコードを流すと判明します。

テストコードを書くデメリット

開発スピードが落ちる

テストの設計を怠り闇雲にコードを書くとプログラミングコードは問題ないけどテストコードでエラーになることがあったり、仕様を変更するごとにテストコードがデグレするエラーが発生することが多々あります。その分時間がかかります。

カバレッジを意識しすぎるあまり、使用を少し変更するのに様々な機能のテストコードを変更しないといけなかったり無駄な負荷がかかる場合が出てきます。

テスト設計が必要になる

基本設計、詳細設計とは別にテストに設計が必要になります。

テーブル構成に影響しないテスト構成にするよう考えることや、外部APIを使っているのであればmockを使って外部APIがテストに影響ないようにするといったことを作成しないといけないのでテストコードを書くための設計も必要になってきます。

テストコードを書いたからといってバグは全部消せない。テーブル構成が変わるとテストは動かなくなる。これがテストを書くことによるデメリットです。

テストが原因でテストでエラー

正常系のテストコードや異常系のテストコードたくさん書いているのをみたことあります。これは機能を少し追加したら動かなくなり改修が恐ろしく大変な状態をみたことあります。

テストコードの勘違い

テストコードのカバレッジを意識しすぎる

正常系とどうしても外せない異常系だけテストコードを書けば問題ないと思います。テストコードにできるだけ時間を使わない。

テストコードを神のように称える

テストコードが完璧なテストの全てだと思う人がたまにいますが普通の単体テストです。他にも結合テストやシステムテストをしないとエラーはなくならないです。また、抜け漏れも多いのでそこまで万能というわけではありません。

ココがポイント

正常系と1パターン程度の異常系を作成すること

テストコードとCI/CD

テストコードを実施するのはローカル環境だけでなくCircle CIといったCIに盛り込んで、Gitにプッシュするたびにテスト実行するプロジェクトが多いです。

Gitにプログラミングコードをアップしたときにエラーが判明するのでGitのコードの品質も向上します。Gitの際にCIを起動させるのは必須タスクにすることをおすすめします、

-プログラミング