まだ校正中なのですが、iOSアプリのテスト自動化入門(仮)的な*1タイトルの本を執筆しました。秀和システムさんから3月中旬ごろ発売予定です。
- 作者: 長谷川孝二
- 出版社/メーカー: 秀和システム
- 発売日: 2014/03/18
- メディア: 単行本
- この商品を含むブログ (1件) を見る
昨年Androidテスト部で書いた『Androidアプリテスト技法』は、テスト技法とテスト自動化が半々という構成でしたが、本書はほぼテスト自動化について特化した一冊です。
内容、想定読者
Xcode 5・iOS 7環境*2における、ユニットテストの書きかた、システムテスト〜受け入れテスト向けのツール・フレームワークのほか、ビルドやAdHoc配布の自動化、CI、メトリック(メトリクス)採取など、アプリ開発にまつわる「自動化」できるものは盛り込みました。
また、自動化の手法・手段だけでなく、テストケースの洗い出し方、テストしやすいプロダクトコードを書くためのヒントなども、テスト用語の解説とともに書いてあります。
テストに関する用語は開発現場ごとにまちまちだと思いますが、開発者間でデザインパターンによる意思疎通ができるように、テスト用語にも拠り所があれば色々捗ると思っています。なので極力、ISTQBのソフトウェアテスト標準用語集に準拠し、引用も交えて紹介するようにしています。
「アプリ開発はできているが、テストは書いていない」という開発者をメインターゲットとしたテストの入門書として、過不足ない内容になっているはずです。
目次
全8章で、ページ数はChapter 2と3が多め、1と8は少なめ、他はほぼバランスしています。詰め混み具合は推して知るべし。
Chapter 1 テスト自動化への取り組み
- 1.1 テスト自動化とは
- 1.1.1 テスト自動化の必要性
- 1.1.2 自動テストと手動テスト
- 1.1.3 テスト自動化のROI
- 1.2 テストの種類と自動化のスコープ
- 1.2.1 テストレベル
- 1.2.2 テストタイプ
Chapter 2 テストコードの書きかた
- 2.1 モデルのユニットテストを書く
- 2.2 既存のアプリにテストを追加する
- 2.2.1 不具合修正の前にテストを書く
- 2.2.2 タイミング依存の問題に対してテストを書く
- 2.2.3 テストを書くことが困難な場合
- 2.3 ユニットテストのテクニック
- 2.4 iOSアプリのテストTips
- 2.4.1 テストフィクスチャをファイルでバンドルする
- 2.4.2 NSUserDefaultsをクリアする
- 2.4.3 アプリケーションデータを再現してテスト実行する
- 2.4.4 Core Dataを使用しているアプリのテスト
- 2.4.5 Core Dataをインメモリストアで使用する
- 2.4.6 非公開メソッドをテストする
- 2.4.7 例外発生をテストする
- 2.4.8 性能テスト(処理時間の測定)
Chapter 3 ユニットテストフレームワーク
- 3.1 XCTest
- 3.2 GHUnit
- 3.3 Kiwi
- 3.3.1 Kiwiをプロジェクトに導入する
- 3.3.2 Spec(仕様)の記述方法
- 3.3.3 Expectations(期待値の評価)
- 3.3.4 テストスタブによる間接入力の操作
- 3.3.5 モックオブジェクトによる間接出力の検証
- 3.3.6 プロトコルのモックオブジェクト
- 3.3.7 非同期処理のテスト
Chapter 4 ユニットテストの補助ツール
- 4.1 OCHamcrest
- 4.1.1 OCHamcrestをプロジェクトに導入する
- 4.1.2 OCHamcrestの使いかた
- 4.2 OCMock
- 4.3 OCMockito
- 4.3.1 OCMockitoをプロジェクトに導入する
- 4.3.2 テストスタブによる間接入力の操作
- 4.3.3 モックオブジェクトによる間接出力の検証
- 4.3.4 プロトコルのモックオブジェクト
- 4.3.5 OCMockitoでは実現できないこと
- 4.4 NLTHTTPStubServer
- 4.4.1 NLTHTTPStubServerをプロジェクトに導入する
- 4.4.2 NLTHTTPStubServerの使いかた
- 4.4.3 レスポンス操作のバリエーション
Chapter 5 システムテストの自動化
- 5.1 システムテスト自動化の予備知識
- 5.1.1 システムテストの位置付け
- 5.1.2 Drive, Judge, Report
- 5.1.3 システムレベルの機能テスト自動化のROI
- 5.2 UI Automation
- 5.3 Frank
- 5.3.1 Frankをプロジェクトに導入する
- 5.3.2 cucumberコマンドオプション
- 5.3.3 フィーチャとステップの記述
- 5.3.4 Symbioteインスペクトツールの利用
- 5.4 MonkeyTalk
- 5.4.1 MonkeyTalkのセットアップ
- 5.4.2 テスト対象アプリとの接続、キャプチャ&リプレイ
- 5.4.3 MonkeyTalkのComponentとAction
- 5.4.4 MonkeyTalkエージェントのアプリへの組み込み
- 5.5 その他のテスティングフレームワーク
- 5.5.1 KIF(Keep It Functional)
- 5.5.2 Appium
- 5.5.3 Calabash
- 5.5.4 Zucchini
Chapter 6 ビルドと配布の自動化
- 6.1 テスト用のビルドを作る
- 6.1.1 Target, Configuration, Scheme
- 6.1.2 xcconfigファイルの利用
- 6.2 ビルドとテスト実行の自動化
- 6.2.1 xcodebuild
- 6.2.2 xctool
- 6.2.3 バージョン番号、Copyrightの更新を自動化する
- 6.2.4 ビルドの配布方法
- 6.3 TestFlightによるビルドの配布
- 6.3.1 TestFlightの利用登録
- 6.3.2 Upload API
- 6.3.3 テスターの登録
Chapter 7 CI(継続的インテグレーション)
- 7.1 OS X Server/Bots
- 7.1.1 OS X Serverのインストールと設定
- 7.1.2 Botsによるビルド実行設定
- 7.1.3 ビルド結果の確認
- 7.2 Jenkins
- 7.2.1 Jenkinsのインストールと設定
- 7.2.2 ジョブの設定
- 7.2.3 ビルド結果の確認
- 7.2.4 xctoolによるテスト実行とレポート
- 7.3 Travis CI
Chapter 8 メトリック
- 8.1 コードカバレッジ
- 8.2 静的解析
- 8.2.1 Analyzeビルドアクション
- 8.2.2 OCLintによる解析
- 8.2.3 OCLintをJenkinsで実行する
Appendix
サンプルコードについて
サンプルコードは発売に合わせてGitHubで公開予定ですしました。
nowsprinting/iosAppsTestAutomationSamples · GitHub
ひとつのシンプルなアプリに対し、本書で紹介しているテスティングフレームワークを使ってゴテゴテとテストを書いています。それぞれのフレームワークによるテスト記述を比較できるはずです。
発売および予約開始はまだ先ですが、興味を持たれた方はお楽しみにお待ちください。
サポート
本書発売後のサポート、Xcodeバージョンアップへの対応などは、下記エントリを参照してください。