単体テストの考え方・使い方を読んでる(後編)drc#51

デッドライン読書会50回と今回51回の課題図書は「単体テストの考え方・使い方」です。51回では7章から最後まで読んでいきます。読み切れていないけど(ただ最後まで目は通してる)、感想を書きます!

https://amzn.to/3wUcor9

後半部分の感想

後半の章立て

後半は7章から11章までで下記のような章立てです。

  • 第2部: 単体テストとその価値
    • 第7章: 単体テストの価値を高めるリファクタリング
  • 第3部: 統合(integration)テスト
    • 第8章: なぜ、統合(integration)テストを行うのか?
    • 第9章: モックのベスト・プラクティス
    • 第10章: データベースに対するテスト
  • 第4部: 単体テストのアンチ・パターン
    • 第11章: 単体テストのアンチ・パターン

以上の章を読んで気になったところをピックアップします。

4種類のプロダクション・コード

リファクタリング(7章)を検討するに当たってプロダクション・コードを4種類に分類するという説明が良い。2軸4種類と数が少ないこともあり実務的にも使いやすそうです。

  • 2軸
    • コードの複雑さ、もしくは、ドメインにおける重要性
    • 協力者オブジェクトの数
  • 4種類
    • ドメイン・モデル/アルゴリズム
    • 取るに足らないコード
    • コントローラ
    • 過度に複雑なコード

統合(Integration)テスト

統合テスト(Integration Test)は、本書の定義では「単体テストではないテスト」のことを指す。テスト対象のシステムがプロセス外の依存と結合した状態でどのように機能するかを検証する位置づけとなる。

そういえばエンタープライズSI的な領域だと実際の言葉の使われ方が違うことも多い。例えば以下のような分類。

  • 単体テスト
    • 1つの機能に対するテスト。つまり1画面とか1帳票とか1バッチとか。
  • 結合テスト ※統合とはいっていない
    • 複数の機能を結合して業務的に意味をもたせたテスト。

私は下記のように分類して開発することが多いかなぁ。(JSTQB的な標準にもう一度立ち戻らなくちゃいけない気がしてきた…)

  • 単体テスト をさらに分類
    • モジュール単体テスト
      • xUnitを利用したもの。本書の単体テストと本書の統合テストが含まれる。
    • 機能単体テスト
      • 1つの機能に対するテスト。いわゆる「打鍵」をして画面のアクションを稼働させるテスト。
  • 内部結合テスト(ITa)
    • 業務フローをもとにシステム内に閉じた機能検証、品質保証活動。
  • 外部結合テスト(ITb)
    • 外部システムを接続して関連システム全体の連動を確認する機能検証、品質保証活動。

エンタープライズSI(というか日本の受託開発)で「結合テスト」をどう捉えたら良いか、というのは下記の赤間さんの本をよく参考にしている。(単体テストは設計、結合テストは品質保証)

Bitly

単体テストのアンチ・パターン

最後の11章では単体テストのアンチパターンを4種類紹介している。うち1つはあるあるだなぁ。って感じ。

  • プライベートなメソッドをテストすること
  • プライベートな状態を公開すること
  • テストへのドメイン知識の漏洩
    • テストをするときのデータを生成するためにテスト対象のコードのロジックをテストコードに持ち込んじゃうやつ。
  • プロダクション・コードへの汚染
    • テスト用のコードをプロダクションコードへ書いてしまうやつ。これはやっているコードをたまに見かける。

最後に

本書はコードがたくさん出てきて、BeforeとAfterが整理されていてよかった。ちゃんとコードを書きながら勉強できたら良かったなぁ。今後の課題です。

次の本

次回は3月13日からのスタートです。次は「継続的デリバリーのソフトウェア工学」だったはず!

Amazon.co.jp

コメント

タイトルとURLをコピーしました