iOSアプリ開発自動テストの教科書
〜XCTestによる単体テスト・UIテストから、CI/CD、デバッグ技術まで
- 平田敏之,細沼祐介 著
- 定価
- 3,608円(本体3,280円+税10%)
- 発売日
- 2019.6.27
- 判型
- A5
- 頁数
- 456ページ
- ISBN
- 978-4-297-10629-4 978-4-297-10735-2
概要
「iPhone X,XR,iPad……端末が多すぎて,テストが手動じゃ追いつかない」
「競争が激しいアプリ開発現場で,スピードを落とさずテストしなければ」
「どうして,テストしたはずのアプリで,ユーザーからこんなにバグが報告されるんだ」
競争が激化し,複雑になるiOSアプリの開発において,こんな問題を解決できる手段が「自動テスト」です。
本書は,DeNAの開発生産性や品質を担うSWETグループのエンジニアたちが,iOSアプリ開発の自動テストにフォーカスしてまとめた,これまでにない“テストの入門書”です。自動テストの基本はもちろん,単体テスト・UIテスト,CI/CD,さらに効率的なデバッグのテクニックまでを網羅できます。
iOSアプリ開発でテストに関わるエンジニアはもちろん,開発の現場のすべてのエンジニアが持っておきたい,iOSテスト必携の1冊です。
こんな方にオススメ
- iOSアプリ開発者
- 自動テストに取り組みたいエンジニアの方
目次
- はじめに
第1章 自動テストをはじめる前に
- 1-1 なぜ自動テストを実装するのか
- 1-2 テストピラミッドを意識する
- 1-3 どこまでのテストを自動化するか
- 1-4 テストの目的を把握する
第2章 自動テストにおける落とし穴を避ける
- 2-1 テストケースを独立させる
- 2-2 テストの失敗原因をわかりやすくする
- 2-3 自動テストをどこから追加していくか
- 2-4 不安定なテスト結果に向き合う
- 2-5 テストの実行時間を意識する
第3章 XCTestを利用した単体テスト
- 3-1 XCTest frameworkとは
- 3-2 XCTestを使った最初の単体テスト
- 3-3 アサーション
- 3-4 失敗時のエラーメッセージを指定する
- 3-5 独自のアサーションを作成する
- 3-6 XCTestのライフサイクル(setUp / tearDown)
- 3-7 テストを階層化する - XCTContext
- 3-8 非同期なAPIのテスト - XCTestExpectation
- 3-9 単体テストが書きづらいケースに対処する
- 3-10 APIを利用するModelクラスをテストする
- 3-11 ランダムな順序で実行させる
- 3-12 コードカバレッジを考える
第4章 単体テストに役立つOSSを活用する
- 4-1 Quick/Nimble - BDDフレームワーク
- 4-2 Mockingjay - HTTP通信のモック
- 4-3 Cuckoo - モック用のコードの自動生成
- 4-4 SwiftCheck - Property-based Testing
第5章 XCTestを利用したUIテストの基本
- 5-1 XCUITestとはなにか
- 5-2 UIテストを実装するための最初のステップ
- 5-3 Xcodeのレコーディング機能を利用する
- 5-4 UI要素に設定されている情報を調べる
- 5-5 テストコードを実装する
第6章 XCUITestのAPIを理解する
- 6-1 UI要素を特定する
- 6-2 UI要素を操作する
- 6-3 UI要素の状態を確認する
- 6-4 UI要素の情報を取得する - debugDescription
- 6-5 対象のアプリを決める - XCUIApplication
- 6-6 端末を操作する - XCUIDevice
- 6-7 テスト実行時の成果物を保存する - XCTAttachment
第7章 UIテストの一歩進んだテクニック
- 7-1 ユニークなAccessibility Identifierを設定する
- 7-2 UI要素に対する複数の操作をまとめる
- 7-3 アプリのUI変更に対応する - Page Object Pattern
- 7-4 UIテストの実行時間を短縮させる
第8章 CI/CDの基本を押さえる
- 8-1 CI/CDとはなにか
- 8-2 iOSアプリ開発で利用できるCI/CDサービスを選ぶ
- 8-3 CI/CDの結果をフィードバックする
- 8-4 CI/CDサービスと連携するサービス
- 8-5 CI/CDパイプラインを決めて自動化する
第9章 fastlaneを利用したタスクの自動化
- 9-1 fastlaneとは
- 9-2 fastlaneを導入する
- 9-3 最初のレーンを定義して実行する
- 9-4 アクションの基本
- 9-5 Fastfileのライフサイクル
- 9-6 Rubyで定数や関数を定義する
- 9-7 プラグインの利用
- 9-8 fastlaneに用意されたアクションを利用する
第10章 アプリ配信サービスとデバイスファームの活用
- 10-1 アプリ配信サービス - TestFlightを利用する
- 10-2 アプリ配信サービス - DeployGateを利用する
- 10-3 デバイスファーム - Firebase Test Labを利用する
- 10-4 デバイスファーム - AWS Device Farmを利用する
第11章 BitriseとCircleCIによるパイプラインの自動化
- 11-1 Bitriseでワークフローを設定する
- 11-2 CircleCIを使ってワークフローを設定する
第12章 デバッグのテクニック
- 12-1 ブレークポイントをもっと効果的に活用する
- 12-2 変数の値を監視する
- 12-3 Xcodeに用意されたデバッグツールを使いこなす
- 12-4 LLDBを使ったデバッグ
- 12-5 シミュレータのデバッグ機能を使う
- 12-6 実機のデバッグ機能を使いこなす
- 12-7 アプリ上でデザインを確認する - Hyperion
Appendix
- A-1 XCTestを導入する
- A-2 XCTestを実行する
- A-3 Bundlerによるツールバージョンの固定
- 索引
- 参考文献
- 著者略歴
プロフィール
平田敏之
DeNAのSWET(Software Engineer in Test)グループ所属。グループウェアの開発,女性向けWebサービスやiOSアプリ開発を経て現職のSWETにたどり着く。現職では,iOSやCI/CDに関する領域を主に担当。テストに関する勉強会である「Test Night」を立ち上げ,SWETメンバーと共に定期開催している。
細沼祐介
DeNAのSWET(Software Engineer in Test)グループ所属。JavaのテスティングフレームワークであるJUnitや,XP開発におけるテスト駆動開発について,黎明期で触れ,自動テストに興味を持つ。Web,Windows,iOSなど様々なプラットフォームでのアプリケーション開発を経て,自動テストの専門部署であるSWETにたどり着く。現在はiOS/Go言語の自動テスト領域を担当。SwiftやHaskellなどの関数型プログラミングを好む。