Test Driven Reading: TDR

「レッド・グリーン・リファクタリングってコーディング以外にも応用できそう!」と思い、TDD(テスト駆動開発)の考え方を読書に応用してみた。

そもそも TDD とは?


  • テストが失敗した時のみ新しいコードを書く
  • 重複を除去する

という2つのシンプルなルールに従って開発を進める手法。

具体的には TDD のマントラである以下の3ステップに従って開発を進める。

  • レッド
    実行またはコンパイルするとエラーになるテストを書く

  • グリーン
    テストを通すためのコードを書く
    この段階ではコードの質は問わない

  • リファクタリング
    コードをブラッシュアップする
     

読書に置き換える


TDD のマントラを読書に置き換えてみる。

  • レッド
    これから読む内容に関して、現時点では答えられない問いを立てる

  • グリーン
    内容を読み、問いの答えを作る
    この段階では内容の全てを理解している必要はなくキーワードの拾い読みでOK

  • リファクタリング
    作った答えに対して深い理解を得るように内容を読み直し答えを作り直す
    必要であれば問いも作り直す

実際にやってみる


テスト駆動開発(Kent Beck 著)のまえがき を題材に実際に試してみる。

レッド:問いを立てる

流し読みした感じテスト駆動の概要説明になっているので、以下のような問いを立てる。

<問い>
    テスト駆動開発とは何か?

グリーン:答えを作る

キーワードを拾う感じでとにかく質問に対する答えを作る。

<問い>
    テスト駆動開発とは何か?

<答え>
    動作する綺麗なコードを書くことを目指す開発手法

リファクタリング:ブラッシュアップ

とりあえず作った答えは抽象的でよくわからないので具体的に書き直す。

<問い>
    テスト駆動開発とは何か?

<答え>
    * テストが失敗した時のみ新しいコードを書く  
    * 重複を除去する
    という2つのシンプルなルールに従って開発を進める手法。  

    具体的には TDD のマントラである以下の3ステップに従って開発を進める。  
    * レッド:実行またはコンパイルするとエラーになるテストを書く  
    * グリーン:テストを通すためのコードを書く、この段階ではコードの質は問わない  
    * リファクタリング:コードをブラッシュアップする  

さらに、必要であれば問いを別に抽出する。

<問い>
    テスト駆動開発とは何か?

<答え>
    2つのシンプルなルールに従って開発を進める手法。  
    具体的には TDD のマントラである3ステップに従って開発を進める。  


    <問い>
        TDD において従うべき2つのシンプルなルールとは何か?

    <答え>
        * テストが失敗した時のみ新しいコードを書く  
        * 重複を除去する


    <問い>
        TDD のマントラである3ステップは何か?

    <答え>
        * レッド:実行またはコンパイルするとエラーになるテストを書く  
        * グリーン:テストを通すためのコードを書く、この段階ではコードの質は問わない  
        * リファクタリング:コードをブラッシュアップする  
    


メリット・デメリット


メリットは最初に問いを立てることで、目的意識がはっきりして読書効率が上がること、また、問いと答えという形で整理し文章化することで、読んだ内容をしっかりと自分のものにできること。

デメリットはとにかく時間がかかること。
全ての本を対象にすると全く量が読めなくなりそうなので、しっかり理解したい本に対象を絞って実践すると良さそう。

おわりに


ゴールを明確にする(レッド)、最初からベストを目指さず少しずつベターなものにしていく(グリーン・リファクタリング)という考えは、読書に限らず全ての知的作業に応用できると思う。