SlideShare a Scribd company logo
1 of 21
Download to read offline
Copyright © DeNA Co.,Ltd. All Rights Reserved.
iOS Test Night #1
2016/11/18(Fri)
平田敏之@DeNA
iOSアプリの自動テストを
はじめよう
Copyright © DeNA Co.,Ltd. All Rights Reserved.
自己紹介
 平田 敏之@DeNA
⁃ 経歴
• GWの開発 → ホムペサービスの開発、iOSアプリの開発 → SWET
⁃ SWET(Software Engineer in Test)
• 事業サポートチーム / テスト基盤チーム
• ミッション
⁃ DeNAサービス全般の品質向上
⁃ DeNAエンジニアの開発生産性向上
⁃ 私がやっていること(の一部)
• クライアントアプリ周りのテスト戦略、自動テストの開発
• CI/CD環境整備
• テスト基盤環境の開発
Copyright © DeNA Co.,Ltd. All Rights Reserved.
今日の発表の流れ
 本日のプロローグ
⁃ iOS Test Nightを開催した理由
 本日のメイン
⁃ iOSの自動テストをはじめるにあたって
• 自動テストを書く際におきがちなこと
• どうやって自動テストをはじめるか
Copyright © DeNA Co.,Ltd. All Rights Reserved.
iOS Test Nightを開催した理由
 iOSにおけるテスト周りに関する情報がまだまだ少ない(と感じている)
⁃ Qiitaのキーワード検索結果(11/18時点)
• XCTest: 159
• XCUITest: 10
• EarlGrey: 3
• Espresso: 127
• Appium: 124
• JUnit: 866
• RSpec: 1728
• fastlane: 113
 しかし、興味はあるはず(と信じている)
⁃ 参加者が少なかったらどうしようと震えながら本勉強会を開催しました
 勉強会を開催すれば知見が共有できて良い循環がまわるはず
Copyright © DeNA Co.,Ltd. All Rights Reserved.
IOSの自動テストをはじめるにあたって
主な対象ユーザ:
これから自動テストを書こうかなと思っている人
コンテンツ
1) 自動テストを書く際におきがちなこと
2) どうやって自動テストをはじめるか
Copyright © DeNA Co.,Ltd. All Rights Reserved.
自動テストを書く際に起きがちなこと
いきなり闇雲に自動テストを書いてもうまくいかないことが往々にしてあります
Copyright © DeNA Co.,Ltd. All Rights Reserved.
自動テストを書く際に起きがちなこと
闇雲に書きはじめると以下の様なことがおきたりします
 意味のないテストコードを書く
⁃ テストになっていないテスト
 読めないテストコードを書く
⁃ 可読性が悪く何をしているのかが分からない
⁃ なんのテストをしているのかが分からない
 自分の環境でしか動かないテストコードを書く
⁃ 他の人の環境やCI上では動かない
 テスト結果が分かりづらくなるコードを書く
⁃ テストが落ちたときの調査が大変
 無駄な(不必要な)テストコードを書く
⁃ テストの実行時間だけが増える
Copyright © DeNA Co.,Ltd. All Rights Reserved.
自動テストを書く際に起きがちなこと(1/3)
 意味のないテストコードを書いてしまう
 例)テストになっていないテスト
⁃ 自動テストで確認する箇所が不適切
• UIテストでいえば要素が「存在する」のか「叩ける」のか etc
• 手動用のテスト項目を自動テスト化すると発生しがち
⁃ 手動用のテスト項目は曖昧に書かれていることがある
⁃ 失敗することがないテスト
• 常にgreenになる
Copyright © DeNA Co.,Ltd. All Rights Reserved.
自動テストを書く際に起きがちなこと(2/3)
 テスト結果が分かりづらいコードを書いてしまう
 例)使うべきAssertionが不適切
⁃ XCTAssertTrue(expression1== expression2)
• Xode
• JUnit x Jenkins
⁃ XCTAssertEqual(expression1, expression2)
• Xode
• JUnit x Jenkins
Copyright © DeNA Co.,Ltd. All Rights Reserved.
自動テストを書く際に起きがちなこと(3/3)
 無駄な(不必要な)テストコードを書いてしまう
 例)パラメータだけを変えたテストを「無駄に」増やす
• どのテストレベルでも起こりうる
• 境界値や同値とかを意識していない
⁃ 「自動テスト」だからといってむやみに増やすケースがある
 その結果、実行時間の増加につながっていく
Copyright © DeNA Co.,Ltd. All Rights Reserved.
おとずれる自動テストとのお別れ
 テストの実行結果からコードを追うのが大変
 可読性が悪くコードを読むのに時間がかかる
 どのようなテストをしているのかがわからない
 テストコードを直すコストが高すぎて失敗が放置される
失敗したまま放置されだすと
• 割れ窓理論(1つがredになりだすと..)
• 聞こえてくるこわい声
⁃ 「この落ちているテストは落ちてて問題ないテストです」
⁃ 「とりあえずredなのを全てdisableにさせておこう」
そして自動テストは放置され価値を無くし、
「自動テスト=良くない」という認識が..
Copyright © DeNA Co.,Ltd. All Rights Reserved.
自動テストをはじめるにあたって
「どこから」「どこまで」「どうやって」やるかを考えましょう
Copyright © DeNA Co.,Ltd. All Rights Reserved.
そもそも「テスト」とは?
よく言われることですが、
 テスト自体はプロダクトの「品質」をあげてはくれません
 現時点での品質が「わかる」だけです
 その品質を良くするのは自分たちです
 テストは、その良くしようとする行為を支えてくれます
⁃ 適切な自動テストは力強く支えてくれます
Copyright © DeNA Co.,Ltd. All Rights Reserved.
まずはじめに
闇雲に書き出しても求めているものは得られません
 まずは以下の3つを考えましょう
⁃ 「どこからやるか」
⁃ 「どこまでやるか」
⁃ 「どのようにやるか」
Copyright © DeNA Co.,Ltd. All Rights Reserved.
「どこから」やればいいですか?
まず書きはじめるところを見つけましょう
 Unitテストで基盤といえるControllerに関わるModel周り
 UIテストでアプリで共通となっている画面フロー周り
⁃ ログインがあるアプリならログイン周りだけやるという手も
 あなたが不安を感じているところから
⁃ 開発者の不安は当たります
• ただし不安なところはテストコードが書きづらいことも多い
 バグを修正するタイミングで該当機能に対して
 新機能追加のタイミングで新機能に対して
Copyright © DeNA Co.,Ltd. All Rights Reserved.
「どこまで」やればいいですか?
 最初からやりすぎようとしない
⁃ やりすぎると息切れをおこす
⁃ カバレッジ100%とかを意識しすぎない
 まずは小さく「はじめる」のが良い
⁃ 小さく作って運用にのせていく
• CI環境で動かせるようにするのが良い
 運用に乗り始めてから少しずつ改善していく
⁃ テストの網羅性
⁃ テストの実行速度
⁃ アプリのバージョンカバレッジ
⁃ OSカバレッジ
⁃ 画面カバレッジ
Copyright © DeNA Co.,Ltd. All Rights Reserved.
「どのように」やればいいですか?
 テスティングフレームワークの選定
⁃ XCTest / Quick etc
⁃ XCUITest / EarlGrey / Appium etc
 テストコードを書く際には以下の点に注意
⁃ テストの独立性
⁃ テストの再現可能
⁃ テストが繰り返し可能
⁃ テストが自分の環境以外でも動く
 文化を育てるためにも
⁃ サンプルとなるコードをしっかりと用意
• 他の人がはじめやすいようにする
⁃ 実行結果などの見える化
Copyright © DeNA Co.,Ltd. All Rights Reserved.
iOSの自動テストのために付き合う必要があるもの
 テスティングフレームワークのバグ
⁃ XcodeのRelease Notesの「Testing」のコーナを見るようにしま
しょう
• 既知のバグに対するworkaroundがのってたりもします
 バージョンアップ対応
⁃ Xcodeのバージョンアップに対応する必要があったりもします
• 例) Xcode8.1のRelease Notesより
⁃ UI tests may fail to run for apps written with Swift 2.3
Copyright © DeNA Co.,Ltd. All Rights Reserved.
自動テストのステップ例
どのようなステップですすめていくかの例
 セットアップ
⁃ 自分のマシンのセットアップ
⁃ CI環境のセットアップ
• 誰もが見れる環境でも動かせるようにする
• fastlaneを使うのが良い
⁃ セットアップのためのREADMEを用意
 テストコードの実装
⁃ テストを書くところを決める
⁃ テストを書く
⁃ 書いたテストをCI環境で動かす
• PR状態のbranchで動かし続けるのが良い
Copyright © DeNA Co.,Ltd. All Rights Reserved.
「自動テストをはじめましょう」
iOSに根を下ろし、Appleと共に生きよう
テストと共にリリースを乗り越え
ユーザと共に新バージョンを歌おう
ラピュタより
Copyright © DeNA Co.,Ltd. All Rights Reserved.
さいごに
 「どこから」「どこまで」「どうやって」を考えて、是非テストをはじ
めてみてください
 テストをはじめて得た知見をiOS Test Nightで是非発表をしてください
 その話を聞いた人がその知見を元に新たな知見を得て発表をしてくれる
と思います
⁃ これが幸せなループになると思っています
 皆様の応募をお待ちしております!!

More Related Content

What's hot

45分間で「ユーザー中心のものづくり」ができるまで詰め込む
45分間で「ユーザー中心のものづくり」ができるまで詰め込む45分間で「ユーザー中心のものづくり」ができるまで詰め込む
45分間で「ユーザー中心のものづくり」ができるまで詰め込むYoshiki Hayama
 
テスト文字列に「うんこ」と入れるな
テスト文字列に「うんこ」と入れるなテスト文字列に「うんこ」と入れるな
テスト文字列に「うんこ」と入れるなKentaro Matsui
 
品質を加速させるために、テスターを増やす前から考えるべきQMファンネルの話(3D版)
品質を加速させるために、テスターを増やす前から考えるべきQMファンネルの話(3D版)品質を加速させるために、テスターを増やす前から考えるべきQMファンネルの話(3D版)
品質を加速させるために、テスターを増やす前から考えるべきQMファンネルの話(3D版)Yasuharu Nishi
 
シリコンバレーの「何が」凄いのか
シリコンバレーの「何が」凄いのかシリコンバレーの「何が」凄いのか
シリコンバレーの「何が」凄いのかAtsushi Nakada
 
Test Yourself - テストを書くと何がどう変わるか
Test Yourself - テストを書くと何がどう変わるかTest Yourself - テストを書くと何がどう変わるか
Test Yourself - テストを書くと何がどう変わるかTakuto Wada
 
UXデザインが大事なのはわかるけど エンジニアの私ができることってなんでしょう?
UXデザインが大事なのはわかるけどエンジニアの私ができることってなんでしょう?UXデザインが大事なのはわかるけどエンジニアの私ができることってなんでしょう?
UXデザインが大事なのはわかるけど エンジニアの私ができることってなんでしょう? Masaya Ando
 
プロダクトに貢献する~テスト計画コンシェルジュとリリース高速化で品質向上を牽引する~
プロダクトに貢献する~テスト計画コンシェルジュとリリース高速化で品質向上を牽引する~プロダクトに貢献する~テスト計画コンシェルジュとリリース高速化で品質向上を牽引する~
プロダクトに貢献する~テスト計画コンシェルジュとリリース高速化で品質向上を牽引する~Naoki Nakano
 
LINE Developer Meetup in Tokyo #39 Presentation (modified)
LINE Developer Meetup in Tokyo #39 Presentation (modified)LINE Developer Meetup in Tokyo #39 Presentation (modified)
LINE Developer Meetup in Tokyo #39 Presentation (modified)Yasuharu Nishi
 
アジャイルにモデリングは必要か
アジャイルにモデリングは必要かアジャイルにモデリングは必要か
アジャイルにモデリングは必要かHiromasa Oka
 
組み合わせテストの落とし穴〜有則と無則〜
組み合わせテストの落とし穴〜有則と無則〜組み合わせテストの落とし穴〜有則と無則〜
組み合わせテストの落とし穴〜有則と無則〜yufu yufu
 
暗号技術の実装と数学
暗号技術の実装と数学暗号技術の実装と数学
暗号技術の実装と数学MITSUNARI Shigeo
 
それはYAGNIか? それとも思考停止か?
それはYAGNIか? それとも思考停止か?それはYAGNIか? それとも思考停止か?
それはYAGNIか? それとも思考停止か?Yoshitaka Kawashima
 
UXデザインの上流工程の考え方とプロセス  ~リサーチからアイデア発想そしてUIデザインへ
UXデザインの上流工程の考え方とプロセス ~リサーチからアイデア発想そしてUIデザインへUXデザインの上流工程の考え方とプロセス ~リサーチからアイデア発想そしてUIデザインへ
UXデザインの上流工程の考え方とプロセス  ~リサーチからアイデア発想そしてUIデザインへMasaya Ando
 
LayerXのQAチームで目指したい動き方 (社内資料)
LayerXのQAチームで目指したい動き方 (社内資料)LayerXのQAチームで目指したい動き方 (社内資料)
LayerXのQAチームで目指したい動き方 (社内資料)mosa siru
 
エンジニアの個人ブランディングと技術組織
エンジニアの個人ブランディングと技術組織エンジニアの個人ブランディングと技術組織
エンジニアの個人ブランディングと技術組織Takafumi ONAKA
 
データ履歴管理のためのテンポラルデータモデルとReladomoの紹介 #jjug_ccc #ccc_g3
データ履歴管理のためのテンポラルデータモデルとReladomoの紹介 #jjug_ccc #ccc_g3 データ履歴管理のためのテンポラルデータモデルとReladomoの紹介 #jjug_ccc #ccc_g3
データ履歴管理のためのテンポラルデータモデルとReladomoの紹介 #jjug_ccc #ccc_g3 Hiroshi Ito
 
例外設計における大罪
例外設計における大罪例外設計における大罪
例外設計における大罪Takuto Wada
 
人生がときめくAPIテスト自動化 with Karate
人生がときめくAPIテスト自動化 with Karate人生がときめくAPIテスト自動化 with Karate
人生がときめくAPIテスト自動化 with KarateTakanori Suzuki
 
What should you shift left
What should you shift leftWhat should you shift left
What should you shift leftYasuharu Nishi
 

What's hot (20)

45分間で「ユーザー中心のものづくり」ができるまで詰め込む
45分間で「ユーザー中心のものづくり」ができるまで詰め込む45分間で「ユーザー中心のものづくり」ができるまで詰め込む
45分間で「ユーザー中心のものづくり」ができるまで詰め込む
 
テスト文字列に「うんこ」と入れるな
テスト文字列に「うんこ」と入れるなテスト文字列に「うんこ」と入れるな
テスト文字列に「うんこ」と入れるな
 
品質を加速させるために、テスターを増やす前から考えるべきQMファンネルの話(3D版)
品質を加速させるために、テスターを増やす前から考えるべきQMファンネルの話(3D版)品質を加速させるために、テスターを増やす前から考えるべきQMファンネルの話(3D版)
品質を加速させるために、テスターを増やす前から考えるべきQMファンネルの話(3D版)
 
シリコンバレーの「何が」凄いのか
シリコンバレーの「何が」凄いのかシリコンバレーの「何が」凄いのか
シリコンバレーの「何が」凄いのか
 
Test Yourself - テストを書くと何がどう変わるか
Test Yourself - テストを書くと何がどう変わるかTest Yourself - テストを書くと何がどう変わるか
Test Yourself - テストを書くと何がどう変わるか
 
UXデザインが大事なのはわかるけど エンジニアの私ができることってなんでしょう?
UXデザインが大事なのはわかるけどエンジニアの私ができることってなんでしょう?UXデザインが大事なのはわかるけどエンジニアの私ができることってなんでしょう?
UXデザインが大事なのはわかるけど エンジニアの私ができることってなんでしょう?
 
プロダクトに貢献する~テスト計画コンシェルジュとリリース高速化で品質向上を牽引する~
プロダクトに貢献する~テスト計画コンシェルジュとリリース高速化で品質向上を牽引する~プロダクトに貢献する~テスト計画コンシェルジュとリリース高速化で品質向上を牽引する~
プロダクトに貢献する~テスト計画コンシェルジュとリリース高速化で品質向上を牽引する~
 
LINE Developer Meetup in Tokyo #39 Presentation (modified)
LINE Developer Meetup in Tokyo #39 Presentation (modified)LINE Developer Meetup in Tokyo #39 Presentation (modified)
LINE Developer Meetup in Tokyo #39 Presentation (modified)
 
Lean coffee
Lean coffeeLean coffee
Lean coffee
 
アジャイルにモデリングは必要か
アジャイルにモデリングは必要かアジャイルにモデリングは必要か
アジャイルにモデリングは必要か
 
組み合わせテストの落とし穴〜有則と無則〜
組み合わせテストの落とし穴〜有則と無則〜組み合わせテストの落とし穴〜有則と無則〜
組み合わせテストの落とし穴〜有則と無則〜
 
暗号技術の実装と数学
暗号技術の実装と数学暗号技術の実装と数学
暗号技術の実装と数学
 
それはYAGNIか? それとも思考停止か?
それはYAGNIか? それとも思考停止か?それはYAGNIか? それとも思考停止か?
それはYAGNIか? それとも思考停止か?
 
UXデザインの上流工程の考え方とプロセス  ~リサーチからアイデア発想そしてUIデザインへ
UXデザインの上流工程の考え方とプロセス ~リサーチからアイデア発想そしてUIデザインへUXデザインの上流工程の考え方とプロセス ~リサーチからアイデア発想そしてUIデザインへ
UXデザインの上流工程の考え方とプロセス  ~リサーチからアイデア発想そしてUIデザインへ
 
LayerXのQAチームで目指したい動き方 (社内資料)
LayerXのQAチームで目指したい動き方 (社内資料)LayerXのQAチームで目指したい動き方 (社内資料)
LayerXのQAチームで目指したい動き方 (社内資料)
 
エンジニアの個人ブランディングと技術組織
エンジニアの個人ブランディングと技術組織エンジニアの個人ブランディングと技術組織
エンジニアの個人ブランディングと技術組織
 
データ履歴管理のためのテンポラルデータモデルとReladomoの紹介 #jjug_ccc #ccc_g3
データ履歴管理のためのテンポラルデータモデルとReladomoの紹介 #jjug_ccc #ccc_g3 データ履歴管理のためのテンポラルデータモデルとReladomoの紹介 #jjug_ccc #ccc_g3
データ履歴管理のためのテンポラルデータモデルとReladomoの紹介 #jjug_ccc #ccc_g3
 
例外設計における大罪
例外設計における大罪例外設計における大罪
例外設計における大罪
 
人生がときめくAPIテスト自動化 with Karate
人生がときめくAPIテスト自動化 with Karate人生がときめくAPIテスト自動化 with Karate
人生がときめくAPIテスト自動化 with Karate
 
What should you shift left
What should you shift leftWhat should you shift left
What should you shift left
 

Similar to iOSアプリの自動テストをはじめよう

iOSアプリ開発のテスト環境 - テストをはじめる最初の一歩 -
iOSアプリ開発のテスト環境 - テストをはじめる最初の一歩 -iOSアプリ開発のテスト環境 - テストをはじめる最初の一歩 -
iOSアプリ開発のテスト環境 - テストをはじめる最初の一歩 -Toshiyuki Hirata
 
Bluepillを使ったiOS自動テストの並列化
Bluepillを使ったiOS自動テストの並列化Bluepillを使ったiOS自動テストの並列化
Bluepillを使ったiOS自動テストの並列化Toshiyuki Hirata
 
iOSアプリにおけるリリースフローとCI環境
iOSアプリにおけるリリースフローとCI環境iOSアプリにおけるリリースフローとCI環境
iOSアプリにおけるリリースフローとCI環境Toshiyuki Hirata
 
Androidアプリ開発のテスト環境
Androidアプリ開発のテスト環境Androidアプリ開発のテスト環境
Androidアプリ開発のテスト環境Toshiyuki Hirata
 
Xcodeの管理を楽に - Jenkins編 -
Xcodeの管理を楽に - Jenkins編 -Xcodeの管理を楽に - Jenkins編 -
Xcodeの管理を楽に - Jenkins編 -Toshiyuki Hirata
 
TDDを一年やってみました ~シロート集団がTDDをやってはまったこと~
TDDを一年やってみました ~シロート集団がTDDをやってはまったこと~TDDを一年やってみました ~シロート集団がTDDをやってはまったこと~
TDDを一年やってみました ~シロート集団がTDDをやってはまったこと~Tomomi Kajita
 
5minQues - SWET近況報告
5minQues - SWET近況報告5minQues - SWET近況報告
5minQues - SWET近況報告Masaki Nakagawa
 
TDDはじめる前に
TDDはじめる前にTDDはじめる前に
TDDはじめる前にYasui Tsutomu
 
UIテストの実行時間の短縮の方法
UIテストの実行時間の短縮の方法UIテストの実行時間の短縮の方法
UIテストの実行時間の短縮の方法Toshiyuki Hirata
 
STFとAppiumをもちいたAndroidアプリの自動テスト
STFとAppiumをもちいたAndroidアプリの自動テストSTFとAppiumをもちいたAndroidアプリの自動テスト
STFとAppiumをもちいたAndroidアプリの自動テストToshiyuki Hirata
 
バージョンアップの対応を軽減するためのサービスの構築
バージョンアップの対応を軽減するためのサービスの構築バージョンアップの対応を軽減するためのサービスの構築
バージョンアップの対応を軽減するためのサービスの構築Toshiyuki Hirata
 
2015/10/14 JJUGナイトセミナー「テスト駆動開発ここが聞きたい」
2015/10/14 JJUGナイトセミナー「テスト駆動開発ここが聞きたい」2015/10/14 JJUGナイトセミナー「テスト駆動開発ここが聞きたい」
2015/10/14 JJUGナイトセミナー「テスト駆動開発ここが聞きたい」Hiroyuki Ohnaka
 
[iOS 8] 測れる!パフォーマンス
[iOS 8] 測れる!パフォーマンス[iOS 8] 測れる!パフォーマンス
[iOS 8] 測れる!パフォーマンスTakeshi Fukasawa
 
新技術で未来の扉を開け! - Node-REDの環境構築と社内導入 -
新技術で未来の扉を開け! - Node-REDの環境構築と社内導入 - 新技術で未来の扉を開け! - Node-REDの環境構築と社内導入 -
新技術で未来の扉を開け! - Node-REDの環境構築と社内導入 - Makoto SAKAI
 
20140903 じどうかの窓口特別編 君にもなれる!?テスト自動化エンジニア
20140903 じどうかの窓口特別編 君にもなれる!?テスト自動化エンジニア20140903 じどうかの窓口特別編 君にもなれる!?テスト自動化エンジニア
20140903 じどうかの窓口特別編 君にもなれる!?テスト自動化エンジニアSHIFT Inc.
 
マスティフ (for Xcode beta) - バージョンアップ対応を軽減するためのサービス
マスティフ (for Xcode beta) - バージョンアップ対応を軽減するためのサービスマスティフ (for Xcode beta) - バージョンアップ対応を軽減するためのサービス
マスティフ (for Xcode beta) - バージョンアップ対応を軽減するためのサービスToshiyuki Hirata
 
20140918 i os8勉強会_performance
20140918 i os8勉強会_performance20140918 i os8勉強会_performance
20140918 i os8勉強会_performanceTakeshi Fukasawa
 
SeasarCon 2009 White TDD
SeasarCon 2009 White TDDSeasarCon 2009 White TDD
SeasarCon 2009 White TDDTakuto Wada
 

Similar to iOSアプリの自動テストをはじめよう (20)

iOSアプリ開発のテスト環境 - テストをはじめる最初の一歩 -
iOSアプリ開発のテスト環境 - テストをはじめる最初の一歩 -iOSアプリ開発のテスト環境 - テストをはじめる最初の一歩 -
iOSアプリ開発のテスト環境 - テストをはじめる最初の一歩 -
 
Bluepillを使ったiOS自動テストの並列化
Bluepillを使ったiOS自動テストの並列化Bluepillを使ったiOS自動テストの並列化
Bluepillを使ったiOS自動テストの並列化
 
iOSアプリにおけるリリースフローとCI環境
iOSアプリにおけるリリースフローとCI環境iOSアプリにおけるリリースフローとCI環境
iOSアプリにおけるリリースフローとCI環境
 
Androidアプリ開発のテスト環境
Androidアプリ開発のテスト環境Androidアプリ開発のテスト環境
Androidアプリ開発のテスト環境
 
Xcodeの管理を楽に - Jenkins編 -
Xcodeの管理を楽に - Jenkins編 -Xcodeの管理を楽に - Jenkins編 -
Xcodeの管理を楽に - Jenkins編 -
 
TDDを一年やってみました ~シロート集団がTDDをやってはまったこと~
TDDを一年やってみました ~シロート集団がTDDをやってはまったこと~TDDを一年やってみました ~シロート集団がTDDをやってはまったこと~
TDDを一年やってみました ~シロート集団がTDDをやってはまったこと~
 
5minQues - SWET近況報告
5minQues - SWET近況報告5minQues - SWET近況報告
5minQues - SWET近況報告
 
TDDはじめる前に
TDDはじめる前にTDDはじめる前に
TDDはじめる前に
 
UIテストの実行時間の短縮の方法
UIテストの実行時間の短縮の方法UIテストの実行時間の短縮の方法
UIテストの実行時間の短縮の方法
 
STFとAppiumをもちいたAndroidアプリの自動テスト
STFとAppiumをもちいたAndroidアプリの自動テストSTFとAppiumをもちいたAndroidアプリの自動テスト
STFとAppiumをもちいたAndroidアプリの自動テスト
 
バージョンアップの対応を軽減するためのサービスの構築
バージョンアップの対応を軽減するためのサービスの構築バージョンアップの対応を軽減するためのサービスの構築
バージョンアップの対応を軽減するためのサービスの構築
 
java-ja TDD 2nd
java-ja TDD 2ndjava-ja TDD 2nd
java-ja TDD 2nd
 
2015/10/14 JJUGナイトセミナー「テスト駆動開発ここが聞きたい」
2015/10/14 JJUGナイトセミナー「テスト駆動開発ここが聞きたい」2015/10/14 JJUGナイトセミナー「テスト駆動開発ここが聞きたい」
2015/10/14 JJUGナイトセミナー「テスト駆動開発ここが聞きたい」
 
[iOS 8] 測れる!パフォーマンス
[iOS 8] 測れる!パフォーマンス[iOS 8] 測れる!パフォーマンス
[iOS 8] 測れる!パフォーマンス
 
新技術で未来の扉を開け! - Node-REDの環境構築と社内導入 -
新技術で未来の扉を開け! - Node-REDの環境構築と社内導入 - 新技術で未来の扉を開け! - Node-REDの環境構築と社内導入 -
新技術で未来の扉を開け! - Node-REDの環境構築と社内導入 -
 
20140903 じどうかの窓口特別編 君にもなれる!?テスト自動化エンジニア
20140903 じどうかの窓口特別編 君にもなれる!?テスト自動化エンジニア20140903 じどうかの窓口特別編 君にもなれる!?テスト自動化エンジニア
20140903 じどうかの窓口特別編 君にもなれる!?テスト自動化エンジニア
 
Sue445 Style TDD #atest_hack
Sue445 Style TDD #atest_hackSue445 Style TDD #atest_hack
Sue445 Style TDD #atest_hack
 
マスティフ (for Xcode beta) - バージョンアップ対応を軽減するためのサービス
マスティフ (for Xcode beta) - バージョンアップ対応を軽減するためのサービスマスティフ (for Xcode beta) - バージョンアップ対応を軽減するためのサービス
マスティフ (for Xcode beta) - バージョンアップ対応を軽減するためのサービス
 
20140918 i os8勉強会_performance
20140918 i os8勉強会_performance20140918 i os8勉強会_performance
20140918 i os8勉強会_performance
 
SeasarCon 2009 White TDD
SeasarCon 2009 White TDDSeasarCon 2009 White TDD
SeasarCon 2009 White TDD
 

More from Toshiyuki Hirata

iOSにおけるパフォーマンス計測
iOSにおけるパフォーマンス計測iOSにおけるパフォーマンス計測
iOSにおけるパフォーマンス計測Toshiyuki Hirata
 
iOSにおけるパフォーマンス計測
iOSにおけるパフォーマンス計測iOSにおけるパフォーマンス計測
iOSにおけるパフォーマンス計測Toshiyuki Hirata
 
iOSにおける自動テストの並列化
iOSにおける自動テストの並列化iOSにおける自動テストの並列化
iOSにおける自動テストの並列化Toshiyuki Hirata
 
UIテスト(Espresso)の高速化をさらにすすめる
UIテスト(Espresso)の高速化をさらにすすめるUIテスト(Espresso)の高速化をさらにすすめる
UIテスト(Espresso)の高速化をさらにすすめるToshiyuki Hirata
 
Xcode10での テスト周りの進化をふりかえる
Xcode10での テスト周りの進化をふりかえるXcode10での テスト周りの進化をふりかえる
Xcode10での テスト周りの進化をふりかえるToshiyuki Hirata
 
UIテストの実行時間を短縮させる方法
UIテストの実行時間を短縮させる方法UIテストの実行時間を短縮させる方法
UIテストの実行時間を短縮させる方法Toshiyuki Hirata
 
我が家のLINEを中心とした情報共有
我が家のLINEを中心とした情報共有我が家のLINEを中心とした情報共有
我が家のLINEを中心とした情報共有Toshiyuki Hirata
 
レビューのコストを削減するための施策
レビューのコストを削減するための施策レビューのコストを削減するための施策
レビューのコストを削減するための施策Toshiyuki Hirata
 
fastlane snapshotの並列実行についてまとめてみた
fastlane snapshotの並列実行についてまとめてみたfastlane snapshotの並列実行についてまとめてみた
fastlane snapshotの並列実行についてまとめてみたToshiyuki Hirata
 
DeNAにおけるSWETの役割
DeNAにおけるSWETの役割DeNAにおけるSWETの役割
DeNAにおけるSWETの役割Toshiyuki Hirata
 
コードレビューをより良くする Danger x Android
コードレビューをより良くする Danger x Androidコードレビューをより良くする Danger x Android
コードレビューをより良くする Danger x AndroidToshiyuki Hirata
 
2017年のiOSアプリ開発におけるCI事情
2017年のiOSアプリ開発におけるCI事情2017年のiOSアプリ開発におけるCI事情
2017年のiOSアプリ開発におけるCI事情Toshiyuki Hirata
 
バージョンアップ対応を軽減するサービス:マスティフ
バージョンアップ対応を軽減するサービス:マスティフバージョンアップ対応を軽減するサービス:マスティフ
バージョンアップ対応を軽減するサービス:マスティフToshiyuki Hirata
 
fastlane x iOSアプリのCI
fastlane x iOSアプリのCIfastlane x iOSアプリのCI
fastlane x iOSアプリのCIToshiyuki Hirata
 
iOSアプリ開発のCI環境 - Jenkins編 -
iOSアプリ開発のCI環境 - Jenkins編 -iOSアプリ開発のCI環境 - Jenkins編 -
iOSアプリ開発のCI環境 - Jenkins編 -Toshiyuki Hirata
 

More from Toshiyuki Hirata (15)

iOSにおけるパフォーマンス計測
iOSにおけるパフォーマンス計測iOSにおけるパフォーマンス計測
iOSにおけるパフォーマンス計測
 
iOSにおけるパフォーマンス計測
iOSにおけるパフォーマンス計測iOSにおけるパフォーマンス計測
iOSにおけるパフォーマンス計測
 
iOSにおける自動テストの並列化
iOSにおける自動テストの並列化iOSにおける自動テストの並列化
iOSにおける自動テストの並列化
 
UIテスト(Espresso)の高速化をさらにすすめる
UIテスト(Espresso)の高速化をさらにすすめるUIテスト(Espresso)の高速化をさらにすすめる
UIテスト(Espresso)の高速化をさらにすすめる
 
Xcode10での テスト周りの進化をふりかえる
Xcode10での テスト周りの進化をふりかえるXcode10での テスト周りの進化をふりかえる
Xcode10での テスト周りの進化をふりかえる
 
UIテストの実行時間を短縮させる方法
UIテストの実行時間を短縮させる方法UIテストの実行時間を短縮させる方法
UIテストの実行時間を短縮させる方法
 
我が家のLINEを中心とした情報共有
我が家のLINEを中心とした情報共有我が家のLINEを中心とした情報共有
我が家のLINEを中心とした情報共有
 
レビューのコストを削減するための施策
レビューのコストを削減するための施策レビューのコストを削減するための施策
レビューのコストを削減するための施策
 
fastlane snapshotの並列実行についてまとめてみた
fastlane snapshotの並列実行についてまとめてみたfastlane snapshotの並列実行についてまとめてみた
fastlane snapshotの並列実行についてまとめてみた
 
DeNAにおけるSWETの役割
DeNAにおけるSWETの役割DeNAにおけるSWETの役割
DeNAにおけるSWETの役割
 
コードレビューをより良くする Danger x Android
コードレビューをより良くする Danger x Androidコードレビューをより良くする Danger x Android
コードレビューをより良くする Danger x Android
 
2017年のiOSアプリ開発におけるCI事情
2017年のiOSアプリ開発におけるCI事情2017年のiOSアプリ開発におけるCI事情
2017年のiOSアプリ開発におけるCI事情
 
バージョンアップ対応を軽減するサービス:マスティフ
バージョンアップ対応を軽減するサービス:マスティフバージョンアップ対応を軽減するサービス:マスティフ
バージョンアップ対応を軽減するサービス:マスティフ
 
fastlane x iOSアプリのCI
fastlane x iOSアプリのCIfastlane x iOSアプリのCI
fastlane x iOSアプリのCI
 
iOSアプリ開発のCI環境 - Jenkins編 -
iOSアプリ開発のCI環境 - Jenkins編 -iOSアプリ開発のCI環境 - Jenkins編 -
iOSアプリ開発のCI環境 - Jenkins編 -
 

iOSアプリの自動テストをはじめよう

  • 1. Copyright © DeNA Co.,Ltd. All Rights Reserved. iOS Test Night #1 2016/11/18(Fri) 平田敏之@DeNA iOSアプリの自動テストを はじめよう
  • 2. Copyright © DeNA Co.,Ltd. All Rights Reserved. 自己紹介  平田 敏之@DeNA ⁃ 経歴 • GWの開発 → ホムペサービスの開発、iOSアプリの開発 → SWET ⁃ SWET(Software Engineer in Test) • 事業サポートチーム / テスト基盤チーム • ミッション ⁃ DeNAサービス全般の品質向上 ⁃ DeNAエンジニアの開発生産性向上 ⁃ 私がやっていること(の一部) • クライアントアプリ周りのテスト戦略、自動テストの開発 • CI/CD環境整備 • テスト基盤環境の開発
  • 3. Copyright © DeNA Co.,Ltd. All Rights Reserved. 今日の発表の流れ  本日のプロローグ ⁃ iOS Test Nightを開催した理由  本日のメイン ⁃ iOSの自動テストをはじめるにあたって • 自動テストを書く際におきがちなこと • どうやって自動テストをはじめるか
  • 4. Copyright © DeNA Co.,Ltd. All Rights Reserved. iOS Test Nightを開催した理由  iOSにおけるテスト周りに関する情報がまだまだ少ない(と感じている) ⁃ Qiitaのキーワード検索結果(11/18時点) • XCTest: 159 • XCUITest: 10 • EarlGrey: 3 • Espresso: 127 • Appium: 124 • JUnit: 866 • RSpec: 1728 • fastlane: 113  しかし、興味はあるはず(と信じている) ⁃ 参加者が少なかったらどうしようと震えながら本勉強会を開催しました  勉強会を開催すれば知見が共有できて良い循環がまわるはず
  • 5. Copyright © DeNA Co.,Ltd. All Rights Reserved. IOSの自動テストをはじめるにあたって 主な対象ユーザ: これから自動テストを書こうかなと思っている人 コンテンツ 1) 自動テストを書く際におきがちなこと 2) どうやって自動テストをはじめるか
  • 6. Copyright © DeNA Co.,Ltd. All Rights Reserved. 自動テストを書く際に起きがちなこと いきなり闇雲に自動テストを書いてもうまくいかないことが往々にしてあります
  • 7. Copyright © DeNA Co.,Ltd. All Rights Reserved. 自動テストを書く際に起きがちなこと 闇雲に書きはじめると以下の様なことがおきたりします  意味のないテストコードを書く ⁃ テストになっていないテスト  読めないテストコードを書く ⁃ 可読性が悪く何をしているのかが分からない ⁃ なんのテストをしているのかが分からない  自分の環境でしか動かないテストコードを書く ⁃ 他の人の環境やCI上では動かない  テスト結果が分かりづらくなるコードを書く ⁃ テストが落ちたときの調査が大変  無駄な(不必要な)テストコードを書く ⁃ テストの実行時間だけが増える
  • 8. Copyright © DeNA Co.,Ltd. All Rights Reserved. 自動テストを書く際に起きがちなこと(1/3)  意味のないテストコードを書いてしまう  例)テストになっていないテスト ⁃ 自動テストで確認する箇所が不適切 • UIテストでいえば要素が「存在する」のか「叩ける」のか etc • 手動用のテスト項目を自動テスト化すると発生しがち ⁃ 手動用のテスト項目は曖昧に書かれていることがある ⁃ 失敗することがないテスト • 常にgreenになる
  • 9. Copyright © DeNA Co.,Ltd. All Rights Reserved. 自動テストを書く際に起きがちなこと(2/3)  テスト結果が分かりづらいコードを書いてしまう  例)使うべきAssertionが不適切 ⁃ XCTAssertTrue(expression1== expression2) • Xode • JUnit x Jenkins ⁃ XCTAssertEqual(expression1, expression2) • Xode • JUnit x Jenkins
  • 10. Copyright © DeNA Co.,Ltd. All Rights Reserved. 自動テストを書く際に起きがちなこと(3/3)  無駄な(不必要な)テストコードを書いてしまう  例)パラメータだけを変えたテストを「無駄に」増やす • どのテストレベルでも起こりうる • 境界値や同値とかを意識していない ⁃ 「自動テスト」だからといってむやみに増やすケースがある  その結果、実行時間の増加につながっていく
  • 11. Copyright © DeNA Co.,Ltd. All Rights Reserved. おとずれる自動テストとのお別れ  テストの実行結果からコードを追うのが大変  可読性が悪くコードを読むのに時間がかかる  どのようなテストをしているのかがわからない  テストコードを直すコストが高すぎて失敗が放置される 失敗したまま放置されだすと • 割れ窓理論(1つがredになりだすと..) • 聞こえてくるこわい声 ⁃ 「この落ちているテストは落ちてて問題ないテストです」 ⁃ 「とりあえずredなのを全てdisableにさせておこう」 そして自動テストは放置され価値を無くし、 「自動テスト=良くない」という認識が..
  • 12. Copyright © DeNA Co.,Ltd. All Rights Reserved. 自動テストをはじめるにあたって 「どこから」「どこまで」「どうやって」やるかを考えましょう
  • 13. Copyright © DeNA Co.,Ltd. All Rights Reserved. そもそも「テスト」とは? よく言われることですが、  テスト自体はプロダクトの「品質」をあげてはくれません  現時点での品質が「わかる」だけです  その品質を良くするのは自分たちです  テストは、その良くしようとする行為を支えてくれます ⁃ 適切な自動テストは力強く支えてくれます
  • 14. Copyright © DeNA Co.,Ltd. All Rights Reserved. まずはじめに 闇雲に書き出しても求めているものは得られません  まずは以下の3つを考えましょう ⁃ 「どこからやるか」 ⁃ 「どこまでやるか」 ⁃ 「どのようにやるか」
  • 15. Copyright © DeNA Co.,Ltd. All Rights Reserved. 「どこから」やればいいですか? まず書きはじめるところを見つけましょう  Unitテストで基盤といえるControllerに関わるModel周り  UIテストでアプリで共通となっている画面フロー周り ⁃ ログインがあるアプリならログイン周りだけやるという手も  あなたが不安を感じているところから ⁃ 開発者の不安は当たります • ただし不安なところはテストコードが書きづらいことも多い  バグを修正するタイミングで該当機能に対して  新機能追加のタイミングで新機能に対して
  • 16. Copyright © DeNA Co.,Ltd. All Rights Reserved. 「どこまで」やればいいですか?  最初からやりすぎようとしない ⁃ やりすぎると息切れをおこす ⁃ カバレッジ100%とかを意識しすぎない  まずは小さく「はじめる」のが良い ⁃ 小さく作って運用にのせていく • CI環境で動かせるようにするのが良い  運用に乗り始めてから少しずつ改善していく ⁃ テストの網羅性 ⁃ テストの実行速度 ⁃ アプリのバージョンカバレッジ ⁃ OSカバレッジ ⁃ 画面カバレッジ
  • 17. Copyright © DeNA Co.,Ltd. All Rights Reserved. 「どのように」やればいいですか?  テスティングフレームワークの選定 ⁃ XCTest / Quick etc ⁃ XCUITest / EarlGrey / Appium etc  テストコードを書く際には以下の点に注意 ⁃ テストの独立性 ⁃ テストの再現可能 ⁃ テストが繰り返し可能 ⁃ テストが自分の環境以外でも動く  文化を育てるためにも ⁃ サンプルとなるコードをしっかりと用意 • 他の人がはじめやすいようにする ⁃ 実行結果などの見える化
  • 18. Copyright © DeNA Co.,Ltd. All Rights Reserved. iOSの自動テストのために付き合う必要があるもの  テスティングフレームワークのバグ ⁃ XcodeのRelease Notesの「Testing」のコーナを見るようにしま しょう • 既知のバグに対するworkaroundがのってたりもします  バージョンアップ対応 ⁃ Xcodeのバージョンアップに対応する必要があったりもします • 例) Xcode8.1のRelease Notesより ⁃ UI tests may fail to run for apps written with Swift 2.3
  • 19. Copyright © DeNA Co.,Ltd. All Rights Reserved. 自動テストのステップ例 どのようなステップですすめていくかの例  セットアップ ⁃ 自分のマシンのセットアップ ⁃ CI環境のセットアップ • 誰もが見れる環境でも動かせるようにする • fastlaneを使うのが良い ⁃ セットアップのためのREADMEを用意  テストコードの実装 ⁃ テストを書くところを決める ⁃ テストを書く ⁃ 書いたテストをCI環境で動かす • PR状態のbranchで動かし続けるのが良い
  • 20. Copyright © DeNA Co.,Ltd. All Rights Reserved. 「自動テストをはじめましょう」 iOSに根を下ろし、Appleと共に生きよう テストと共にリリースを乗り越え ユーザと共に新バージョンを歌おう ラピュタより
  • 21. Copyright © DeNA Co.,Ltd. All Rights Reserved. さいごに  「どこから」「どこまで」「どうやって」を考えて、是非テストをはじ めてみてください  テストをはじめて得た知見をiOS Test Nightで是非発表をしてください  その話を聞いた人がその知見を元に新たな知見を得て発表をしてくれる と思います ⁃ これが幸せなループになると思っています  皆様の応募をお待ちしております!!