skillup

技術ブログ

アーキテクト設計全般

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

投稿日:

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

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

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

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

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

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

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

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

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

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

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

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

参考文献

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

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

執筆者:


comment

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

関連記事

no image

abstract,interface,traitなどについて

昔はようわからなかったabstract(継承全般)、interface、traitの使い分けなどについて。 今の現場でいろいろと考えることがあり、自分なりにいろんな方の知見を共有できたので、メモしてお …

no image

型の意識について(ValueObjectの活用など)

現在の現場でコードレビューをしてもらう機会が増え、自分が弱かった型の意識について。 現在ではPHPでも型を記述してコーディングすることが一般的なため、静的言語と同じように型を意識することが増えてきたか …

no image

マイクロサービスについて

マイクロサービスについて勉強したので少しメモを。 参考文献 Software Design 「2020年1月」 Contents1 マイクロサービスとは?1.1 具体例1.1.1 フロントエンドとバッ …

no image

値オブジェクトやファーストコレクションなどについて

以前から言葉としては知っていたけれど、オブジェクト思考の重要な概念に関して。 Contents1 値オブジェクト(Value Object)2 ファーストコレクション(コレクションオブジェクト) 値オ …

no image

オブジェクト指向 値オブジェクトの活用と場合分けに関して

オブジェクト指向 その1 オブジェクト指向 その2 オブジェクト指向 その3 でオブジェクト指向に触れたんですが、基本から勉強しなおす必要があると思い、まとめ&追記 参考文献 現場で役に立つシステム設 …

アーカイブ