✏️

SwiftでTDDの練習 (Roman Numerals Kata)

2021/01/14に公開

動機

もともとテストを書くのが好きなんですが、最近は業務的に「動けばOK」なプロトタイプばかり扱っていてテストを書く機会が減っていました。今年は個人開発やプロダクト開発などしていきたいのでリハビリも兼ねて TDDで開発する練習をしようと思いました。

題材

今回使うのはアラビア数字をローマ数字に変換するクラスを TDDで作るKataです。下記の記事を参考にしました。

https://codingdojo.org/kata/RomanNumerals/
https://remonsinnema.com/2011/12/05/practicing-tdd-using-the-roman-numerals-kata/

空手の型みたいに、コーディング練習のためのKataがあるようです。”守破離”の”守”、まずは型通りに練習を重ねる段階です(空手やったことありませんが)。

TDD

日本語だとテスト駆動開発です。主に以下の流れで開発を進めていく開発手法です。

  1. 失敗するテストを1つ書く
  2. テストをパスするシンプルな実装をする
  3. 必要ならリファクタリングする
  4. 1~3の繰り返し

テストを書くと色んなメリットがあります(開発者目線)。

  • バグを早期に発見しやすくなる
  • テストが仕様書として機能する
  • 自信を持ってリファクタリングできる

練習開始

1つ目のテスト

1を渡したらローマ数字の"Ⅰ"を返すテストを書いていきます。

プロジェクト作成

空のプロジェクトを作成(テストありで作成してください)

1. 失敗するテストを1つ書く

テストクラスにデフォルトで書かれている内容を全て消してテストメソッドを書き始める。

まずはテストしたいクラスのインスタンスを作る。実装してないので当然エラーが出ます。

エラーが消えるようにクラス(struct)を空で実装

テストを実装する。テストしたいメソッドが実装されてないのでエラーが出る。

メソッドを空で実装(まだテストはパスしないように)

エラーが消えて、テストが失敗する。

2. テストをパスするシンプルな実装をする

何も難しいことは考えずとにかくシンプルに書きます。

3. 必要ならリファクタリングする

今回は必要ないのでしません。

2つ目のテスト

2を渡したらローマ数字の"ⅠⅠ"を返すテストを書いていきます。

1. 失敗するテストを1つ書く

1つ目のようにエラーが出ないのですぐ書けます。

2. テストをパスするシンプルな実装をする

動けばOKです。

3. 必要ならリファクタリングする

今回もしません。

するorしないの判断ですが、私の場合はまとめられそうな処理が3つ以上ないとあまり手を出しません。2つだと偶然似たような処理が出ただけでまだパターンとは言えない可能性もありますし、リファクタリングが楽しくて実装が進まなくなったりしてしまうので。

ただ、状況や考え方にもよるので自分なりのルールを決めるといいかもしれません。

3つ目のテスト

3を渡したらローマ数字の"ⅠⅠⅠ"を返すテストを書いていきます。

1. 失敗するテストを1つ書く

2. テストをパスするシンプルな実装をする

3. 必要ならリファクタリングする

同じようなパターンが増えてきたのでまとめてみます。

リファクタリングした後にテストをもう一度流してパスすれば仕様通りなので問題なしです。(テストがあるから安心してコードをいじれる)

テストコードも少しだけリファクタリング

以下4つ目のテスト・・・とどんどん続けていく。

Next step

4つ目からは別のパターンが出たりするので、とりあえず1000くらいまでは続けてみようと思います。

以下のリポジトリで練習してます。
es0612/RomanNumeralsTDD

Discussion