skillup

技術ブログ

プログラミング全般

テストコードを読みやすくする

投稿日:2016年7月11日 更新日:

リーダブルコードも最終章に近づいてきましたね。

今回はテストコードについて。

以前のプロジェクトではテストコードを書いていたのですが、今携わっているプロジェクトでは書いてないです・・・

テストを書く目的ですが、単純にテスト工数を減らす以外に「本物のコードの動作と使い方を示した非公式の文書」という見方もありますね。先輩からも「仕様書の一種」といわれていたので、単純な動作確認以上の目的があるようです。

ポイントとしては下記のようなことが挙げられています。

重要な情報を目立つようにする

仕様がすぐにわかるような情報を書く、ということですね。

最適なエラーメッセージを書く

ディフォルトのExceptionのエラーメッセージに任せるのではなくて、エラー内容をわかりやすくカスタマイズしたメッセージを出力しよう、ということですね。これはテストコードだけではなく、普段のプログラムでもそうですねぇ・・・

テスト入力値は単純で網羅性のあるものにする

テストパターンの網羅ですが、下記3点が大切ですね。

  • 漏れがないこと
  • なるべく単純であること
  • 一度に複数の仕様をチェックするよりは、複数に分ける

テストコードを意識した、コードにする

普段コードを書いているときから、テストコードを書きやすいコードを意識することが大事と書いてあります。

ポイントとしてはよく言われますが、疎結合にすることですね。プログラムがお互いに依存している場合、テストがとても面倒で大変になります。細かい部品群にわけてあればそれだけテストをするのが楽になります。

テストしにくいソースの特徴

  • グローバル変数を使う
  • 外部コンポーネントへの依存
  • 各プログラムへの依存度が高い

テストしやすいソースの特徴

  • クラスが小さい。内部状態を持たない
  • クラスや関数が1つのことをしている
  • クラスや関数が独立している

まとめ

これらがテストしやすいソースの特徴ですね。ただし、ほどほどに、ということはリーダブルコードでも書かれていますね。

私が依然かかわっていたプロジェクトでもテストコードのために時間を取られるという本末転倒な事象がおこっていました。どんなことでもバランスが大切です。

-プログラミング全般
-

執筆者:


comment

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

関連記事

no image

PHPの例外クラスについて

PHPの例外クラスについて今まで一方的にExceptionで受けており、それ自体は問題なさそうですが、 一応再度確認。 Contents1 エラークラスの分類2 Throwableに関して3 Exce …

no image

オブジェクト指向について その2

前回のエントリーのように、データとロジックを一体で考えるのは、処理状の有効性のみならず、よりユーザー側に近い処理をかくということにもつながります。 日付の問題に関してもintやshortよりはLoca …

no image

Facadeパターンについて(Laravelを題材に)

LaravelのFacadeについて自作する機会があったので、メモ。 Contents1 サンプル2 使い所3 メリット4 デメリット5 参考リンク サンプル https://github.com/u …

no image

オブジェクト指向 データベース層

本日も引き続き「現場で役立つシステム設計の原則」を読み進めてます。 本日は主にデータベース層の考え方について。 Contents1 データべース層1.1 要点1.1.1 典型的なダメテーブル設計1.1 …

no image

トランザクション、ロールバックに関する考察

今までトランザクションの単位は基本的に処理の開始から終了までを範囲にすることが多かったのですが(ループがある場合はループ全体ではなく、1ループをトランザクションとみなします)、複数の処理が絡む場合、不 …

アーカイブ