Smoke Test(スモークテスト)は、モバイルアプリケーションのビルド後に主要機能が動作することを確認するために実行される最小限のチェックセットです。Smoke Testにより、完全な回帰サイクルを実行することなく、不安定なビルドを迅速に拒否できます。Google Testing Blog(2024年)によると、Smoke Testは開発者のフィードバック時間を2~3時間から10~15分に短縮します。Smoke TestはCI/CDパイプラインにおける最初の品質フィルターであり、壊れたビルドが次のステージに到達するのを防ぎます。
重要なポイント
Smoke Test(スモークテスト)は、詳細な分析を行わずにアプリケーションの主要機能を検証する一連の迅速なテストです。この用語はハードウェア工学に由来します:組み立て後にデバイスから煙が出始めた場合、完全なテストには送られません。モバイル開発において、Smoke Testは同じ機能を果たします — 明らかに機能しないビルドをふるいにかけます。Microsoft DevOps(2024年)によると、Smoke Testの導入によりQAチームに到達する欠陥の数が40%減少します。
Smoke Testはすべての新しいビルドで実行されます — AndroidとiOSの両方で。理想的には、Smoke Testは15分以内で完了し、ビルド成功後に自動的に起動する必要があります。合格基準 — Smoke Testスイートのテストが100%成功裏に完了すること。1つでもテストが失敗した場合、ビルドは不安定としてマークされ、それ以上のテストに送られません。Google Testing Blog(2024年)によると、このアプローチによりユーザーへの機能提供時間が25%短縮されます。
Smoke Testは手動(5~10項目のチェックリスト)または自動化できます。最新のモバイルプロジェクトでは、CI/CDに組み込まれた自動化Smoke Testが優先されます。手動Smoke Testは、自動化が経済的に viable ではないプロジェクトの初期段階でのみ正当化されます。Bitrise(2025年)によると、モバイル開発チームの73%がSmoke Testを自動化しています。
Smoke Testと回帰テストはしばしば混同されますが、目的の異なる異なるプラクティスです。回帰テストは、コードの変更が既存の機能を壊していないことを検証します。アプリケーションのすべてのモジュールとシナリオをカバーし、稀なケースやエッジケースも含みます。Smoke Testはクリティカルパスのみをチェックします — アプリケーションが役に立たなくなる主要なシナリオです。カバレッジの深さが主な違いです:Smoke Testは機能の5~10%をカバーし、回帰テストは80~100%をカバーします。
2つ目の違いは実行時間です。モバイルアプリケーションの回帰テストスイートは、プロジェクトの規模とプラットフォーム数によって2~12時間かかる場合があります。Smoke Testは5~15分です。Sauce Labs(2025年)によると、iOSアプリケーションの回帰スイートの平均実行時間は4.5時間、Androidは3.2時間です。両プラットフォームでのSmoke Testは10~15分で完了します。
3つ目の違いはパイプライン上の位置です。Smoke Testはビルド直後、回帰テストの前に実行されます。Smoke Testが失敗した場合、回帰は起動されません — これによりCI/CDリソースが節約されます。パイプライン効率 — Smoke Testは回帰で失敗していたであろうビルドの最大30%をふるいにかけ、節約されたリソースは他のタスクを並行して実行するのに十分です。
| パラメータ | Smoke Test | 回帰テスト |
|---|---|---|
| 目的 | クリティカルパスの迅速なチェック | 全機能のチェック |
| 範囲 | 5~10%のシナリオ | 80~100%のシナリオ |
| 時間 | 5~15分 | 2~12時間 |
| 頻度 | すべてのビルド | リリース前または毎日 |
| CI/CD | ビルド後、回帰前 | Smoke Test後 |
アプリの起動 — 最初で最も重要なテスト。アプリケーションはすべてのターゲットデバイスでクラッシュせずに起動する必要があります。Smoke Testはコールドスタートをチェックします:インストール → 開く → 最初の画面を表示。起動時にアプリがクラッシュした場合、それ以上のテストは無意味です。XCUITestとEspressoを使用すると、起動チェックを2~3行のコードで自動化できます。起動引数 `-AppleLanguages (ru)` は、起動時のローカライゼーションの確認に役立ちます。
認証 — 2番目のクリティカルシナリオ。Smoke Testは、ログインフォームが表示されること、入力フィールドがタッチに反応すること、ログインボタンがリクエストを送信すること、認証成功後にアプリケーションがメイン画面に遷移することを確認する必要があります。認証エラーは他のすべての機能へのアクセスをブロックするため、そのチェックは最小セットに含まれます。トークンリフレッシュ — OAuth 2.0を使用するアプリケーションの追加チェック。
メインコンテンツの読み込み — 3番目のSmoke Test。アプリケーションのメイン画面またはフィードが読み込まれ、データを表示する必要があります。APIが応答しないか、応答の解析が壊れている場合、ユーザーには空の画面が表示されます。Smoke Testでのネットワークチェックには、メインエンドポイントへの基本的なGETリクエストと、応答が期待される構造であることの確認が含まれます。ナビゲーション — 4番目のシナリオ。Smoke Testはアプリケーションのメイン画面を巡回します:ホーム → 検索 → プロフィール → 設定。タブバーとサイドメニューは、Smoke Testが早期に発見する典型的なナビゲーション問題の原因です。
Fastlane — モバイルCI/CD自動化の標準ツール。FastlaneでのSmoke Testは、`scan`(XCUITest用)または`gradle`(Espresso用)を介して実行されます。Fastlaneを使用すると、複数のデバイスでSmoke Testを並行して実行するように構成でき、全体の時間を短縮できます。Fastfileの設定には、Smoke Testスイートのターゲット設定と合格しきい値(100%のテスト成功)が含まれます。
GitHub Actions(2024年)は、組み込みのSmoke Testを備えたモバイルCI/CDテンプレートを公開しました。テンプレートには3つの段階が含まれます:ビルド → Smoke Test → 回帰。Smoke Testが失敗した場合、テンプレートは自動的にパイプラインを終了し、SlackまたはTelegramに通知を送信します。マトリックス戦略により、3つのiOSバージョンと5つのAndroidモデルで同時にSmoke Testを実行できます。
CI/CDにおける責任分担:Smoke Testは迅速なフィードバックを提供し、回帰テストは完全なカバレッジを提供します。Smoke Testは回帰テストを重複させるべきではなく、その逆も同様です。Smoke Testの粒度 — クリティカルシナリオごとに1つのチェック。Smoke Testが15分以上かかる場合は、最適化する必要があります:冗長なチェックを削除するか、実行を並列化します。
# Smoke Test用のFastfile設定
platform :ios do
lane :smoke do
scan(
scheme: 'App',
devices: ['iPhone 15', 'iPhone SE'],
testplan: 'SmokeTest',
output_directory: 'reports/smoke',
fail_build: true
)
end
lane :regression do
scan(
scheme: 'App',
devices: ['iPhone 15', 'iPhone 14', 'iPhone SE'],
testplan: 'FullRegression'
)
end
end
XCUITest — iOSアプリケーションのUIテストのためのAppleのフレームワーク。XCUITestはSmoke Testsの自動化に使用されます:アプリの起動、UI要素のチェック、ユーザーアクションのシミュレーション。Xcode ServerまたはGitHub Actionsと組み合わせることで、XCUITestはすべてのコミットで実行されます。XCTest — ユニットテストのための基本フレームワークで、ロジック検証のためにXCUITestを補完します。
Espresso — AndroidのUIテストのためのGoogleのフレームワーク。EspressoはUIスレッドと同期し、チェック開始前にすべてのアニメーションが完了することを保証します。Espressoは`onView(withId(...)).check(matches(...))`を介したチェックをサポートしています。Android Test Orchestratorは各Smoke Testを個別のプロセスで実行し、前のテストが後のテストに影響を与えるのを防ぎます。
Detox — React Nativeのためのフレームワークで、Smoke Testとグレーボックステストをサポートしています。DetoxはReact Nativeブリッジと同期し、非同期操作の完了を自動的に待機します。グレーボックステストにより、Detoxはソースコードに直接アクセスせずにアプリケーションの状態を検証できます。
XCUITest for iOSには2つのチェックが含まれます:アプリケーションの起動とメイン画面の表示。テストは`XCUIApplication().launch()`を介してアプリを起動し、キー要素(例:`navigationBar`)が存在することを確認します。起動時にアプリがクラッシュした場合、XCTestフレームワークがエラーを記録し、テストはFAILで終了します。Smoke Testはコンテンツをチェックしません — 画面が開いたことのみを確認します。
Espresso for Androidは、Activityを起動するために`ActivityScenario`を、要素をチェックするために`onView`を使用します。プラットフォーム間の重要な違い:iOSシミュレーターは実際のデバイスとは異なる動作を示す可能性があるため、Android Smoke TestsはFirebase Test Labまたはエミュレーターで実行することをお勧めします。Firebase Test Labは10台のデバイスでのSmoke Testsの並列実行をサポートしています。
import XCTest
class LoginSmokeTest: XCTestCase {
let app = XCUIApplication()
override func setUp() {
continueAfterFailure = false
app.launch()
}
func testLoginButtonExists() {
XCTAssertTrue(app.buttons["ログイン"].exists)
}
func testLoginFlow() {
app.textFields["email"].tap()
app.textFields["email"].typeText("test@test.com")
app.secureTextFields["password"].tap()
app.secureTextFields["password"].typeText("password123")
app.buttons["Log In"].tap()
XCTAssertTrue(app.staticTexts["Welcome"].waitForExistence(timeout: 5))
}
}
上記の例は、iOSのログイン画面のSmoke Testを示しています。最初のテストは、ログインボタンが画面に存在することを確認します。2番目のテストは完全な認証パスを実行し、ログイン成功後にウェルカムメッセージが表示されることを確認します。`waitForExistence`のタイムアウト5秒はSmoke Testの標準値です:その時間内にUI要素が表示されない場合、アプリケーションは正しく機能していません。
よくある質問
最適な数はモジュールあたり5~15テストです。Smoke Testはユーザーのクリティカルパスをカバーする必要がありますが、すべての機能を網羅しようとしてはなりません。基準 — すべてのSmoke Testが合格した場合、アプリケーションをQA環境で開いてさらにテストを行うことができます。
Smoke Testはビルドの安定性をチェックし、すべてのビルドで実行されます。サニティチェックは、特定の変更後に行われるより狭いテストセットです。サニティチェックは「この変更は機能Xを壊しましたか?」という質問に答えますが、Smoke Testは「ビルドは基本的に動作していますか?」という質問に答えます。
はい、Smoke Testの自動化は頻繁にリリースを行うプロジェクトにとって必須のプラクティスです。自動化により、チェックの一貫性と実行速度が保証されます。手動Smoke Testは、ビルド数が週に2~3を超えないプロジェクトの初期段階でのみ正当化されます。
ビルドは不安定としてマークされ、それ以上のテストに送られません。開発者はSmoke Testの失敗ログを含む通知を受け取ります。問題修正後、新しいビルドが作成され、Smoke Testが再実行されます。ブロックする欠陥はトラッカーに記録されます。
Smoke Testは、ユーザーのクリティカルパスが変更されるたびに更新されます。新しい必須画面(オンボーディングなど)が追加された場合、Smoke Testに含める必要があります。チェックの妥当性を維持するために、毎スプリントSmoke Testスイートを見直すことをお勧めします。
まとめ
ターンキー方式のモバイルアプリケーションを開発します
IT Sectrは2017年からスタートアップや企業向けにiOS・Androidアプリケーションを開発しています。私たちがご相談に乗り、最適なソリューションをご提案します。