互換性テストスイート

互換性テストスイート(CTS)は、無料でありながら商用レベルの品質をもつテストスイートです。こちらのリンクからダウンロードできます。CTS は、互換性を「機構」として表したものです。

CTS は、デスクトップ マシン上で動作し、接続されたデバイスやエミュレータで直接テストケースを実行します。CTS は、デバイスを構築するエンジニアの日々のワークフロー(継続的構築システムなど)に組み込まれるように設計された単体テストの集まりです。その目的は、初期段階で非互換性を明らかにし、開発プロセス全体を通じてソフトウェアの互換性を保つことです。

CTS は、次の 2 つの主要ソフトウェア コンポーネントを使用する自動テストスイートです。

  • CTS Trade Federation テストハーネス: デスクトップ マシン上で実行され、テストの実行を管理します。複数のテスト対象デバイス(DUT)で分割テストを実行できます。また、スイート リトライ機能を使用して、スイート全体ではなく不合格となった部分のみを再試行し、再実行時間を大幅に短縮できます。
  • 個々のテストケース: DUT で実行されます。テストケースは JUnit テストとして Java で記述され、Android .apk ファイルにパッケージ化されて実際のデバイス ターゲットで実行されます。

互換性テストスイート検証ツール(CTS Verifier)は CTS を補完するものです。こちらのリンクからダウンロードできます。CTS 検証ツールを使用すると、据え置きのデバイスでは手動の入力がないとテストできない API と機能をテストできます(たとえば、音質や加速度計など)。

CTS 検証ツールは、手動テスト用のツールであり、次のソフトウェア コンポーネントが含まれています。

  • DUT で実行される CTS 検証ツールアプリ: 結果を収集します。

  • デスクトップ マシンで実行される実行形式またはスクリプト: CTS 検証ツールアプリのテストケースの一部に、データの供給または追加の制御を行います。

ワークフロー

CTS のフロー

図 1: CTS の使い方

この図は、CTS のワークフローをまとめたものです。手順の詳細については、こちらのセットアップから始まるセクションのサブページをご覧ください。

テストケースの種類

CTS には、次の種類のテストケースが含まれます。

  • 単体テスト: Android プラットフォーム内の不可分なコードをテストします。たとえば、java.util.HashMap などの単一のクラスです。
  • 機能テスト: API の組み合わせを高レベルのユースケースでテストします。

CTS の今後のバージョンには、次の種類のテストケースが含まれます。
  • 耐久性テスト: システムにストレスを与えて耐久性をテストします。
  • 性能テスト: 定められたベンチマークでシステムの性能をテストします。たとえば 1 秒間でレンダリングするフレーム数などです。

対象分野

単体テストのテストケースは、互換性の確保のために以下の分野をカバーしています。

分野 説明
署名テスト 各 Android リリースには、そのリリースに含まれるすべての公開 API の署名を記述した XML ファイルがあります。CTS には、デバイスで使用可能な API に対して API 署名を検証するユーティリティが含まれています。署名の検証結果は、テスト結果の XML ファイルに記録されます。
プラットフォーム API テスト プラットフォーム(コアライブラリ、Android アプリケーション フレームワーク)の API が SDK クラス索引の記述どおりか否かをテストします。具体的には、クラスの署名、属性の署名、メソッドの署名、メソッドの動作などの API の正しさの確認、不正なパラメータの処理に関する動作の確認を行います。
Dalvik テスト 対象を Dalvik 実行形式に絞ったテストです。
プラットフォーム データモデル コンテンツ プロバイダを通じてアプリケーション デベロッパーに公開されるコア プラットフォーム データモデルが、SDK の android.provider パッケージの記述どおりか否かをテストします。連絡先、ブラウザ、設定などをテストします。
プラットフォーム インテント コア プラットフォームのインテントが、SDK の使用可能なインテントの記述どおりか否かをテストします。
プラットフォーム パーミッション コア プラットフォームのパーミッションが、SDK の使用可能なパーミッションの記述どおりか否かをテストします。
プラットフォーム リソース コア プラットフォームのリソースタイプが、SDK の使用可能なリソースタイプの記述どおりの正しい動作をしているか否かをテストします。単純な値、ドローアブル、9-patch、アニメーション、レイアウト、スタイル、テーマ、代替リソースの読み込みなどをテストします。