見出し画像

Get your test results fasterをみた #WWDC20

こちらの記事には非公開の情報が含まれているのでApple Developer Programに登録しNDAに合意している方のみ閲覧してください

#WWDC20 3日目です(日本では木曜日ですがPDTではまだ水曜日)。

フィードバックループ

画像1

テストを書き、実行、結果を解釈して、十分な自信があれば次のタスクへ。

短いフィードバックループを持つことがテストの結果をより早く得ることができるので重要。

Xcode 12の新機能

テストがハングしている場合
何故テストがハングしてしまっているのかを調べたい。原因としては、デッドロックや、タイムアウトが考えられる。そこでTest PlanにExecution Time Allowanceというオプションが追加された。この機能を有効にするとXcodeは個々のテストにかかる時間に制限をかけることができる。

画像2

テストがこの制限を超えるとXcodeはspindumpを捕捉し、ハングしているテストを終了し、テストランナーを再起動して残りのテストを実行する。

画像3

テスト結果にspindumpの結果をアタッチするのでどこでハングしているのかを調査する助けになる。Terminalから spindump コマンドをしようして手動で結果を取得することも、アクティビティモニタから取得することも可能。
初期設定では10分の実行時間が設定されている。更に時間が必要な場合はTest Planでカスタマイズ可能。特定のテストやクラスに対して更に時間が必要な場合はexecutionTimeAllowance APIを利用することで対応することが可能。

class XCTestCase: XCTest {
    var executionTimeAllowance: TimeInterval // rounded up to nearest minute
}

デモ

画像4

画像5

時間制限の初期設定を変更する方法

画像6

時間制限の優先順位

画像7

テスト全体の制限時間

画像8

推奨事項

画像9

・テストのハングを防ぐにはexecutionTimeAllowanceを利用する
・テストを高速に保つことに関心があるのであれば、XCTestのパフォーマンス APIを利用してパフォーマンスのリグレッションのテストを自動化
・コードのどの部分が遅いかを特定する必要がある場合はInstrumentsを利用

複数のデバイスでのテストの実行

フィードバックループを更に短くするために複数デバイスでのテストの並列実行が可能になった。

画像10

画像11

Frutaというサンプルアプリではテストの実行時間が30%早くなった。

画像12

デバイスへの分散テストを使用する上での推奨事項

・テストの割り当ては決まって無いので同一のデバイスとOSバージョンを使用する
・実行しているデバイスやOSに依存しないテストを配布する
・OSのバージョンが異なっても正しく動作することを証明

まとめ

時間制限とデバイスごとの並列テストという新しい機能を利用してテストのフィードバックループを更に短くしましょう。

この記事が気に入ったらサポートをしてみませんか?