skillup

技術ブログ

アーキテクト設計全般

テストコードの粒度に関して

投稿日:

テストコードを書いていることの悩みの1つにテストコードをどの粒度で書けばいいのか、ということがあります。

例えばバッチの場合、大きく分けると

  • エントリーポイントのFeatureテスト
  • Unitテスト(主にサブのモジュールの詳細なテスト)

のようなテストがあります。

前者はバッチの機能全体的なテスト、後者はサブのモジュールのテストとなります。

一般論としてはモジュール単位の詳細なケースわけに関してはUnitテストを使い、その結合としてFeatureテストを行いますので、数としては必然的にFeatureテスト > Unitテストとなります。

このような考え方を一般的にはテストピラミッドというようです。

難しいのは、以下のような観点です。

  • サブモジュールの数が少ない(極端なケースだと1つ)と、FeatureとUnitの差がほとんどなくなってしまう。(エントリーポイントがただ呼び出すだけなど)
  • Unitテストごとの全組み合わせをFeatureでやるということが不可能ではないので、Featureに関してどのケースをテストするかということはどうしても個人の判断が残る
  • テストケースをうまく書けるかは元のコードがいかにモジュールごとに別れているかということが大事になる

テストコードの品質、粒度をうまくきりわけられるかというのは本体のコードに依存する部分が大きいため、そもそもの本体のコードの品質に依存する部分が大きいため、

  • 適切にモジュールにわかれているか(モジュールごとにわかれていないとそもそもテストがかけない)
  • 長い関数を書いていないか(関数が長ければ長いほどテストが難しくなる)
  • 責務の分離がしっかり行えているか(責務が大きすぎる場合、そもそもUnitテストの粒度を細かくすることができない)

などといった点が重要になってくると思います。

参考文献

テストピラミッド ~自動テストの信頼性を中長期的に保つ最適なバランス~

-アーキテクト設計全般
-

執筆者:


comment

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

関連記事

no image

Observeパターンについて

Contents1 Observeパターン2 他の対策2.1 プログラムで頑張って制御2.1.1 メリット2.1.2 デメリット2.2 Databaseのtirggerを使う(DB更新系のみ)2.2. …

no image

抽象性と可読性のトレードオフに関して

私自身プログラムを書く場合、とにかくコードを書く量を制限したいという思いが強く、多少でも共通化できる箇所がある場合はなるべく共通化するようにしておりましたが、時と場合によっては過剰に共通化したことによ …

no image

オブジェクト指向 プレゼンテーション層

本日も引き続き「現場で役立つシステム設計の原則」を読み進めてます。 本日はプレゼンテーション層、いわゆるMVCのViewにあたる部分。 Contents1 プレゼンテーション層の考え方1.1 要点1. …

no image

オブジェクト指向 ドメインモデル

本日も引き続き「現場で役立つシステム設計の原則」を読み進めてます。 本日は主にドメインモデルの考え方について。 Contents1 ドメインモデルの考え方1.1 要点1.2 感想 ドメインモデルの考え …

no image

オブジェクト指向設計 単一責任のクラスの設計

オブジェクト指向をするうえでの大事なポイントなど Contents1 単一責任のクラス設計1.1 メモ1.2 実際のコーディング上のコツ1.3 感想1.4 参考文献 単一責任のクラス設計 メモ 単一責 …

アーカイブ