SlideShare ist ein Scribd-Unternehmen logo
1 von 32
Xcode10での
テスト周りの進化をふりかえる
2018/12/14(Fri) @ HAKATA Test Night #1
平田敏之(@tarappo)
自己紹介
平田 敏之@DeNA / SWET (Software Engineer in Test)
ミッション
• DeNAサービス全般の品質向上
• DeNAエンジニアの開発生産性向上
私の担当(の一部)
• 自動テスト(iOS領域)
• プロセス(CI/CD周り)
• Test Night 主宰
はじめに
• 2018年が終わるいま「WWDC」を思い出してみましょう
• 「What’s New in Testing」を見ましたか?
• Appleのプラットフォームを取り巻く「Testing周り」は進化
しています
• Xcode10のテスト周りの進化をふりかえってみましょう
Xcode 10から開発時におけるサポートが増えました
今なら日本語訳もあります
本発表で話すこと
(15分)
• What’s New in Testing 2018
• ❌ Code coverage
• ⭕ Test selection and ordering
• Automatically include new tests
• Randomize execution order
• ⭕ Parallel testing
• Execute parallel on Simulator
Xcode10からの新機能
Xcode9.4.1
Edit Scheme
Xcode10.1
Edit Scheme
Xcode10からの新機能
1. Automatically include new tests
2. Randomize execution order
3. Execute parallel on Simulator
Automatically include new tests
新規に実装したテストコードを自動で含めるか否か
• 「Automatically include new tests」が指定できるよ
うになりました
• デフォルトはオン
Automatically include new tests
新規に実装したテストコードを自動で含めるか否か
• Xcode 9までの世界
• 新規テストコードはすべてEnabled
• 実行対象外にしたい場合は手動でDisableにする
必要がある
Automatically include new tests
新規に実装したテストコードを自動で含めるか否か
• Xcode 9までの世界
• SchemeのTestの箇所のチェックを外すと全て対
象外になるが…
Enableを選択しても対象外のまま
Automatically include new tests
新規に実装したテストコードを自動で含めるか否か
• Xcode10からの世界
• 「Automatically include new tests」のチェックを
外すと新規テストコードはDisableになる
Automatically include new tests
新規に実装したテストコードを自動で含めるか否か
• Xcode10からの世界
• Schemeからの一括Enabledもちゃんと動きます
Automatically include new tests
新規に実装したテストコードを自動で含めるか否か
• この機能はどんなときに利用するのか?
• 例えば
• 自動で追加しない:チェックをオフ
• 対象:常に動かすテストコード
• 安定してから実行対象にする
• 自動で追加する:チェックをオン
• 対象:Nightlyなどで動かすテストコード
• 安定するかを確かめる
Randomize execution order
テストのランダム実行
• 「Randomize execution order」が指定できるよう
になりました 🙌
• デフォルトはオフ
Randomize execution order
テストのランダム実行
• テストの実行順序
• Xcode 9までの世界
• アルファベット順(Alphabetical)
• 名前が変わらない限り常に一定
• Xcode 10からの世界
• (new) ランダム実行
• アルファベット順:デフォルト
Randomize execution order
テストのランダム実行
自動テストをランダム実行できると何が良いのか?
• 自動テストはそれぞれのテストケースが独立しているのが良い
• 他のテストケースに副作用を与えてはいけない
• 副作用を与えているかどうかは分かりづらいこともある
• テストの実行順が常に固定であれば問題が発見されづらい
ランダム実行をするとそんな依存関係が見つかるかも
Randomize execution order
テストのランダム実行
自動テストはそれぞれのテストケースが独立しているのが良い
?
• テストケースが増えたときなどにテストが急に失敗することがある
• 特定のテストケース「だけ」で実行したときに失敗することがある
• 本来テストしたかったことをちゃんと考えられてない可能性がある
全てのテストを実行すると成功するけど、
一部を指定して実行するとテストが失敗する
という世界もありえます
Randomize execution order
テストのランダム実行
• Arrange-Act-Assert
• http://wiki.c2.com/?ArrangeActAssert
• Arrange
• 前提条件
• Act
• 操作
• Assert
• 期待値の確認
別のテストケースの実行(Arrange-Act)が
他のテストケースのArrangeに
なっていることがある
Randomize execution order
テストのランダム実行
ランダム実行にして実行すると良い!
しかしまだ課題もあります
Randomize execution order
現状の課題
• ランダムで実行してテストが落ちた場合、再度そのランダム順で
実行する術がない
• Rspecの場合
• ランダム実行時は、シードが生成されるので、そのシードを使
って再度同じ順番で実行することができる
• Rspec2.8(2012/1)からの機能
• -order rand: xxxx
https://openradar.appspot.com/radar?id=4953802914398208
Execute parallel on Simulator
並列実行
• Xcodeからの実行でもシミュレーターの並列実行を
することができるようになりました 🎉
• コマンドラインからもできます
• デフォルトはオフ
Execute parallel on Simulator
並列実行
• Xcode 9までの世界
• 複数のシミュレーターを起動可能になった 🎉
• fastlaneも対応
• 欠点
• xcodebuildからの実行のみ対応
• destinationsで指定
• Xcode 10からの世界
• Xcodeからの実行に対応
• destinations毎ではない実行
Execute parallel on Simulator
並列実行
• Xcodeからの実行方法
• チェック状態になっていれば自動で並列化
• テストを実行する「だけ」でOK
• 並列の仕方
• クラス単位での並列化(テストメソッド単位ではない)
• メインとなるシミュレーターの複数のクローンを作っての実行
• 数はコマンドラインからオーバーロードできる
Execute parallel on Simulator
並列実行
• コマンドラインからの実行時は次を指定して設定の
上書きが可能
• -parallel-testing-worker-count n
• nの数はマシンのスペック次第
• -parallel-testing-enabled YES | NO
• xcprettyは未対応(テストレポート出力はできない)
• https://github.com/supermarin/xcpretty/issues/344
Execute parallel on Simulator
並列実行
• コマンドからの実行
• fastlaneの場合の例
• xcodebuildコマンド直接の場合の例
• xcodebuild -scheme testnight-testScheme -project
./testnight.xcodeproj -destination 'platform=iOS
Simulator,name=iPhone X' -parallel-testing-enabled YES -parallel-
testing-worker-count 4 test
並列化により実行時間が短縮!
開発が捗る!
しかし落とし穴もあります
Execute parallel on Simulator
並列実行
1. テストの実行時間は各クラスの実行時間に依存する
• 並列化はクラス単位おこなわれます
• Espresso(Android)のtest shardingはcase単位
• 1つでも実行時間が長いクラスがあると…
2. 並列実行を許容するテストコードでなければならない
• 例えば、同じデータを並列して変更すると…
• データの不整合の発生
Execute parallel on Simulator
現状の課題(の例)
テストの実行時間
A
B
C
D
E
実行時間
Execute parallel on Simulator
現状の課題の対策例
テストの実行時間
A
B
C
D
E
実行時間
A’
A’
クラスを良い感じに
分割しましょう
Execute parallel on Simulator
現状の課題の対策例
並列化におけるさらなる工
夫
• テスト実行するクラスを絞ることができます
• -only-testing:実行する対象を指定
• 複数指定ができる
• -skip-testing:実行しない対象を指定
• 動かない..?
Execute parallel on Simulator
さらなる工夫
活用しましょう
(今の)自動テストは毎回すべてを実行するというものでもない
• 自動テストをあらかじめグルーピングしておく
• test sizeそれぞれでわけておき実行パターンを変える
• 実行時間の履歴を用いてグルーピングする
• 並列数に応じてどうグルーピングするかを決める
Execute parallel on Simulator
さらなる工夫
さいごに
• iOS周りも以前に比べると進化しています
• WWDC 2017 「What’s New in Testing」
• 要チェック
• WWDC 2018 「What’s New in Testing」
• 要チェック!
• ぜひ、さわってみましょう
• 知見はぜひ、Test Night(など)で

Weitere ähnliche Inhalte

Was ist angesagt?

Was ist angesagt? (20)

fastlane snapshotの並列実行についてまとめてみた
fastlane snapshotの並列実行についてまとめてみたfastlane snapshotの並列実行についてまとめてみた
fastlane snapshotの並列実行についてまとめてみた
 
2017年のiOSアプリ開発におけるCI事情
2017年のiOSアプリ開発におけるCI事情2017年のiOSアプリ開発におけるCI事情
2017年のiOSアプリ開発におけるCI事情
 
Bluepillを使ったiOS自動テストの並列化
Bluepillを使ったiOS自動テストの並列化Bluepillを使ったiOS自動テストの並列化
Bluepillを使ったiOS自動テストの並列化
 
DroidKaigi_devicefarm
DroidKaigi_devicefarmDroidKaigi_devicefarm
DroidKaigi_devicefarm
 
マスティフ (for Xcode beta) - バージョンアップ対応を軽減するためのサービス
マスティフ (for Xcode beta) - バージョンアップ対応を軽減するためのサービスマスティフ (for Xcode beta) - バージョンアップ対応を軽減するためのサービス
マスティフ (for Xcode beta) - バージョンアップ対応を軽減するためのサービス
 
DeNAにおけるSWETの役割
DeNAにおけるSWETの役割DeNAにおけるSWETの役割
DeNAにおけるSWETの役割
 
スマホアプリディレクターが考えていること
スマホアプリディレクターが考えていることスマホアプリディレクターが考えていること
スマホアプリディレクターが考えていること
 
コードレビューをより良くする Danger x Android
コードレビューをより良くする Danger x Androidコードレビューをより良くする Danger x Android
コードレビューをより良くする Danger x Android
 
Pull request時の画面差分取得の自動化
Pull request時の画面差分取得の自動化Pull request時の画面差分取得の自動化
Pull request時の画面差分取得の自動化
 
Android e2e testing at mercari
Android e2e testing at mercariAndroid e2e testing at mercari
Android e2e testing at mercari
 
Androidアプリ開発のテスト環境
Androidアプリ開発のテスト環境Androidアプリ開発のテスト環境
Androidアプリ開発のテスト環境
 
iOSにおけるコードレビューを一歩先へ進める
iOSにおけるコードレビューを一歩先へ進めるiOSにおけるコードレビューを一歩先へ進める
iOSにおけるコードレビューを一歩先へ進める
 
Dangerでpull requestレビューの指摘事項を減らす
Dangerでpull requestレビューの指摘事項を減らすDangerでpull requestレビューの指摘事項を減らす
Dangerでpull requestレビューの指摘事項を減らす
 
iOSで利用できるデバイスファームのメリット・デメリットの紹介
iOSで利用できるデバイスファームのメリット・デメリットの紹介iOSで利用できるデバイスファームのメリット・デメリットの紹介
iOSで利用できるデバイスファームのメリット・デメリットの紹介
 
iOSアプリ開発のテスト環境 - テストをはじめる最初の一歩 -
iOSアプリ開発のテスト環境 - テストをはじめる最初の一歩 -iOSアプリ開発のテスト環境 - テストをはじめる最初の一歩 -
iOSアプリ開発のテスト環境 - テストをはじめる最初の一歩 -
 
20151021 cookpad talk_test_engineer
20151021 cookpad talk_test_engineer20151021 cookpad talk_test_engineer
20151021 cookpad talk_test_engineer
 
5minQues - SWET近況報告
5minQues - SWET近況報告5minQues - SWET近況報告
5minQues - SWET近況報告
 
Androidのテストを効率的にするために考えたこと
Androidのテストを効率的にするために考えたことAndroidのテストを効率的にするために考えたこと
Androidのテストを効率的にするために考えたこと
 
STFとAppiumをもちいたAndroidアプリの自動テスト
STFとAppiumをもちいたAndroidアプリの自動テストSTFとAppiumをもちいたAndroidアプリの自動テスト
STFとAppiumをもちいたAndroidアプリの自動テスト
 
SEゼミ2015 - OSS Hack 4 Beginners - フィードバック
SEゼミ2015 - OSS Hack 4 Beginners - フィードバックSEゼミ2015 - OSS Hack 4 Beginners - フィードバック
SEゼミ2015 - OSS Hack 4 Beginners - フィードバック
 

Ähnlich wie Xcode10での テスト周りの進化をふりかえる

#NagoyaTesting アジャイルなテストの見積りと計画づくり
#NagoyaTesting アジャイルなテストの見積りと計画づくり #NagoyaTesting アジャイルなテストの見積りと計画づくり
#NagoyaTesting アジャイルなテストの見積りと計画づくり
kyon mm
 
Trac Plugin Developement with Jenkins
Trac Plugin Developement with JenkinsTrac Plugin Developement with Jenkins
Trac Plugin Developement with Jenkins
Takahisa Wada
 
Test Plugins
Test PluginsTest Plugins
Test Plugins
ykhr
 
#STAC2014 システムテスト自動化ハンズオン
#STAC2014 システムテスト自動化ハンズオン#STAC2014 システムテスト自動化ハンズオン
#STAC2014 システムテスト自動化ハンズオン
kyon mm
 
Integration test with Arquillian and JBoss AS 7
Integration test with Arquillian and JBoss AS 7Integration test with Arquillian and JBoss AS 7
Integration test with Arquillian and JBoss AS 7
Takayuki Konishi
 
Firefoxの開発プロセス
Firefoxの開発プロセスFirefoxの開発プロセス
Firefoxの開発プロセス
Makoto Kato
 

Ähnlich wie Xcode10での テスト周りの進化をふりかえる (20)

GCSアジャイル開発を使ったゲームの作り方
 GCSアジャイル開発を使ったゲームの作り方 GCSアジャイル開発を使ったゲームの作り方
GCSアジャイル開発を使ったゲームの作り方
 
java-ja TDD 2nd
java-ja TDD 2ndjava-ja TDD 2nd
java-ja TDD 2nd
 
Jenkins + awsで並列テスト
Jenkins + awsで並列テストJenkins + awsで並列テスト
Jenkins + awsで並列テスト
 
テスティングフレームワークに入門してみた - Swift編
テスティングフレームワークに入門してみた - Swift編テスティングフレームワークに入門してみた - Swift編
テスティングフレームワークに入門してみた - Swift編
 
テストを分類してみよう!
テストを分類してみよう!テストを分類してみよう!
テストを分類してみよう!
 
Gamedevenvstudy1
Gamedevenvstudy1Gamedevenvstudy1
Gamedevenvstudy1
 
#NagoyaTesting アジャイルなテストの見積りと計画づくり
#NagoyaTesting アジャイルなテストの見積りと計画づくり #NagoyaTesting アジャイルなテストの見積りと計画づくり
#NagoyaTesting アジャイルなテストの見積りと計画づくり
 
Trac Plugin Developement with Jenkins
Trac Plugin Developement with JenkinsTrac Plugin Developement with Jenkins
Trac Plugin Developement with Jenkins
 
Test Plugins
Test PluginsTest Plugins
Test Plugins
 
アジャイルなテストの見積もりと計画作り
アジャイルなテストの見積もりと計画作りアジャイルなテストの見積もりと計画作り
アジャイルなテストの見積もりと計画作り
 
自社開発プロダクト ALL-IN で行っている単体テストのパフォーマンスチューニングTips
自社開発プロダクト ALL-IN で行っている単体テストのパフォーマンスチューニングTips自社開発プロダクト ALL-IN で行っている単体テストのパフォーマンスチューニングTips
自社開発プロダクト ALL-IN で行っている単体テストのパフォーマンスチューニングTips
 
xUnit Test Patterns - Chapter16
xUnit Test Patterns - Chapter16xUnit Test Patterns - Chapter16
xUnit Test Patterns - Chapter16
 
JavaのテストGroovyでいいのではないかという話
JavaのテストGroovyでいいのではないかという話JavaのテストGroovyでいいのではないかという話
JavaのテストGroovyでいいのではないかという話
 
テスト勉強会よしおか100311 1
テスト勉強会よしおか100311 1テスト勉強会よしおか100311 1
テスト勉強会よしおか100311 1
 
分散開発チームによるAgile開発実践 ~いろいろハマった!よかった
分散開発チームによるAgile開発実践 ~いろいろハマった!よかった分散開発チームによるAgile開発実践 ~いろいろハマった!よかった
分散開発チームによるAgile開発実践 ~いろいろハマった!よかった
 
#STAC2014 システムテスト自動化ハンズオン
#STAC2014 システムテスト自動化ハンズオン#STAC2014 システムテスト自動化ハンズオン
#STAC2014 システムテスト自動化ハンズオン
 
Play jjug2012spring
Play jjug2012springPlay jjug2012spring
Play jjug2012spring
 
TDDはじめる前に
TDDはじめる前にTDDはじめる前に
TDDはじめる前に
 
Integration test with Arquillian and JBoss AS 7
Integration test with Arquillian and JBoss AS 7Integration test with Arquillian and JBoss AS 7
Integration test with Arquillian and JBoss AS 7
 
Firefoxの開発プロセス
Firefoxの開発プロセスFirefoxの開発プロセス
Firefoxの開発プロセス
 

Mehr von Toshiyuki Hirata (7)

iOSにおけるパフォーマンス計測
iOSにおけるパフォーマンス計測iOSにおけるパフォーマンス計測
iOSにおけるパフォーマンス計測
 
iOSにおけるパフォーマンス計測
iOSにおけるパフォーマンス計測iOSにおけるパフォーマンス計測
iOSにおけるパフォーマンス計測
 
iOSにおける自動テストの並列化
iOSにおける自動テストの並列化iOSにおける自動テストの並列化
iOSにおける自動テストの並列化
 
UIテスト(Espresso)の高速化をさらにすすめる
UIテスト(Espresso)の高速化をさらにすすめるUIテスト(Espresso)の高速化をさらにすすめる
UIテスト(Espresso)の高速化をさらにすすめる
 
UIテストの実行時間を短縮させる方法
UIテストの実行時間を短縮させる方法UIテストの実行時間を短縮させる方法
UIテストの実行時間を短縮させる方法
 
我が家のLINEを中心とした情報共有
我が家のLINEを中心とした情報共有我が家のLINEを中心とした情報共有
我が家のLINEを中心とした情報共有
 
レビューのコストを削減するための施策
レビューのコストを削減するための施策レビューのコストを削減するための施策
レビューのコストを削減するための施策
 

Kürzlich hochgeladen

Kürzlich hochgeladen (10)

Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
 
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
 
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアルLoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
 
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
 
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
LoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイスLoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイス
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
 
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
 
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
 
Utilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native IntegrationsUtilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native Integrations
 
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
 
新人研修 後半 2024/04/26の勉強会で発表されたものです。
新人研修 後半        2024/04/26の勉強会で発表されたものです。新人研修 後半        2024/04/26の勉強会で発表されたものです。
新人研修 後半 2024/04/26の勉強会で発表されたものです。
 

Xcode10での テスト周りの進化をふりかえる