branch10480’s blog

Topics that I've learned.

TDD(テスト駆動開発)についての覚え書き

先日、こちらの本を概要をまとめながら読了しました。

booth.pm

前半はテスト駆動開発(TDD)についての概要説明になっていて、中盤は実際にiOSアプリ開発でTDDを実践していくという内容です。

後半は新しいアプリにへの導入や、既存プロジェクトへの導入について説明がされていて大変勉強になりました。

今回はその前半部分の私なりのまとめになりますが、実践部分を読みながら実際にコードを書いてみてTDDの触りが体験できたように思いますのでよければ是非ご購入ください。

以下、まとめになります。

テスト駆動開発とは?

以下の3ステップを細かく、リズムよく繰り返していくプログラム開発手法のこと。

Red

これから実装する機能に対する失敗コードを書く。

  • テストは複数書かずに1つ書いたら即座に実行して失敗することを必ず確認する。最初に失敗するテストを書くことをテストファーストと呼ぶ。
  • テストコードは最初に結果から書く。先に結果から書くことをアサーションファーストと呼ぶ。Xcode上のテストコード横のひし形マークが赤になればOK!

Green

失敗したテストコードを成功させるための最低限のコードを書く。

  • テストを通すための最低限のコードを書く
  • ひし形が緑に慣ればOK!
  • この時点では設計やコードが綺麗でなくても大丈夫

Refactor

外部から見たときの動作を変えずに実装コードを洗練する。

  • テストが通ったからといって、次のテストコードに移ってはいけない
  • 実装コードの重複排除を行う
  • 実装コードに変更を加えたら今までに実装したすべてのテストを実行する
  • コードを納得いくまで洗練したらこの1サイクルは完了
  • 重複部分がなければこのフェーズはスキップ

TDD(テスト駆動開発)はなぜ行う?

目的は動作するきれいなコードを書くこと。

効果としては以下のようなものがある。

  1. 不安を取り除ける
  2. テスト自動化により気軽にテストを走らせることができるのでテスト実施回数が多くなる
  3. 設計やコードの綺麗さも改善される

iOSアプリ開発でのTDD

ストーリー

ストーリーとはプロダクトマネージャが画面から操作を行い、仕様通りに動作し、正しく画面に反映されたかどうかを確認するためのテスト。

Gherkinフォーマットという自然言語で記述され、PdM, エンジニア両者が見ても何をテストしているかがわかりやすくなっている。

タイトル:
    ユーザーは記事一覧画面のタイトルを見ることができる

詳細:
    Given(前提): ユーザーは記事一覧画面にいる
    When(もし): ユーザーはステータスバーを見る
    Then(ならば): ユーザーはその下に記事一覧の一番目のタイトルを見ることができるはずだ
Keyword Meaning
Given アプリの初期状態
When イベント、もしくはアクション
Then 成果、もしくは結果
And, But 複数のGiven, When, Thenを持つ

UIWindowについて

  • UIViewを継承したView階層のルートとなる特別なViewクラス
  • rootViewControllerにUIViewControllerをセットし、makeKeyAndVisibleを呼ぶことで描画され、rootViewControllerのライフサイクルメソッドが呼ばれる
  • UIWindowの重なり順についてはkeyWindowではなく、windowLevelの大小で決定される。初期値は0。大きいほど前面に表示される
  • ただし、最前面にあってもkeyWindowでない場合タップしても何も反応しないので要注意!!