CI 自動化のタイプ

CI システムで使用する一般的な自動化の形式は次のとおりです。

基本ジョブ

  • ビルド: プロジェクトをゼロからビルドすることで、新しい変更が正しくコンパイルされ、すべてのライブラリとツールに互換性が確保されます。

  • lint チェックまたはスタイル チェック: このステップは省略可能ですが、実行することをおすすめします。スタイルルールを適用して静的解析を行うと、コードレビューがより簡潔で的を絞ったものにできます。

  • ローカル(ホスト側のテスト): ビルドを実行するローカルマシンで実行されます。Android では、これは通常 JVM であるため、高速で信頼性があります。Robolectric テストも含まれます

インストルメンテーション テスト

エミュレータまたは実機で実行されるテストでは、プロビジョニング、デバイスの起動や接続、その他の複雑な操作を待機する必要があります。

CI でインストルメンテーション テストを実行するには、いくつかの方法があります。

  • Gradle で管理されているデバイスを使用すると、使用するデバイス(たとえば、「API 27 上の Google Pixel 2 エミュレータ」など)を定義し、デバイスのプロビジョニングを処理します。
  • ほとんどの CI システムには、Android Emulator を処理するサードパーティ プラグイン(「アクション」、「統合」、「ステップ」とも呼ばれます)が付属しています。
  • インストルメンテーション テストを Firebase Test Lab などのデバイス ファームに委任する。デバイス ファームは信頼性が高く、エミュレータまたは実機で実行できます。

パフォーマンス回帰テスト

アプリのパフォーマンスをモニタリングするには、ベンチマーク ライブラリを使用することをおすすめします。開発中のパフォーマンス テストを自動化するには、一貫性のある現実的なテスト結果を保証するために実機が必要です。

特に、ベンチマーク対象のコードとユーザー ジャーニーの対象範囲が大きい場合は、ベンチマークの実行に時間がかかることがあります。マージされた機能や commit ごとにすべてのベンチマークを実行するのではなく、夜間ビルドなど、定期的なメンテナンス ビルドの一環として実行することを検討してください。

パフォーマンスのモニタリング

ステップ フィッティングを使用すると、パフォーマンスの低下をモニタリングできます。ステップ フィッティングは、現在のビルドと比較する以前のビルド結果のローリング ウィンドウを定義します。このアプローチでは、複数のベンチマーク結果を 1 つの回帰固有の指標に結合します。回帰テストでは、ステップ フィッティングを適用してノイズを低減できます。

これにより、1 回のビルドでベンチマーク時間が長くなった場合に発生する偽陽性の発生が減り、その後で再度正規化されます。

テスト カバレッジ回帰チェック

テスト カバレッジは、テストで変更が十分にカバーされているかどうかをチームで判断する際に役立つ指標です。しかし、それが唯一の指標になることは避けるべきです。ベースブランチと比較してカバレッジが低下したときに、不合格になるか警告を表示する回帰チェックを設定するのが一般的です。