The RSpec Book読んだ後に残ってたメモ

リファクタリング

リファクタリングとは、コードの振る舞いを変えずにその設計を変えること。
コードの振る舞いが変わる場合、それはリファクタリングではない何か。

テスト対象

オブジェクトが、何であるかをテストするのは良くなく、何をするかをテストすることが重要。
例えば、RDBMSを使って保存されることではなく、DBに保存されるということが重要。

怪しいコードの特徴

  • 1つのメソッドでやることが多い、長い
  • 一時変数が多い
  • OOPなのに手続き型風
  • 同じスコープの複数のメソッドがグループを形成している

テストの手順

Red, Green, Refactorの順に行う。
Redから始まり、器を用意することで例外とエラーを解消し、
次に振る舞いを実装することで論理エラーを解消する。
Refactorは常にGreenを維持するように努力を払いながら行う。
その過程に冗長な実装が記述されることも厭わない。

テストの粒度

オブジェクトの振る舞いという観点でテストを記述できる。RSpecが得意。
別の観点から、アプリケーションの振る舞いという観点でテストを記述できる。Cucumberが得意。
粒度は揃えた方が良いので、この2つの観点を混同させてはいけない。

どのフィーチャーから手を付けるか

ビジネスバリューの点から言えばどれからでも同じであるため、
最もやりやすいものから手を付けるのが正しい。

テストをPending状態にするタイミング

これから変更を行うが、確実に失敗するテストが明確であり、
それらの失敗を新たに発覚する失敗と混同したくない場合。

BDD

BDDは設計手法の1つであり、厳密には本物のアプリをテストしているわけではない。
ただ実行可能なサンプルをつくっているだけ。

BDDの視点

サービス提供者ではなくステークホルダーの視点の振る舞いを説明する。
サービス提供者がステークホルダーに含まれることもある。

TDD

あると良いと思うコードをまず書く。
サンプルが実際にテストするかどうかはそれほど重要ではない。
振る舞いを説明することが重要。

テストの構成要素

  • 事前条件
  • 入力
  • イベント
  • 出力

テストの主語

テストを表すメッセージにおいて、主語が誰かというのを明示することは大事。

良い目標

  • 完了したことを知るのに十分な情報がある
  • 現実的に完了できる
  • 期限が付いている

ストーリーの構成要素

  • タイトル(識別するため)
  • ステークホルダーの望む機能とその理由
  • いつ完了になるか分かる基準(前提とイベントと結果)