ラベル CTS の投稿を表示しています。 すべての投稿を表示
ラベル CTS の投稿を表示しています。 すべての投稿を表示

2011年9月9日金曜日



 今回は、CTS failについての調査方法に関して、記載いたします。


技術部 藤井洋祐 (twitterID:@i_m_yosuke)


なお、本内容を実施し、何らかの問題、損害などが発生した場合、当社は一切の責任を負いません。
あくまで自己責任で実施してください。
これらのことを認識頂いた上で、ご利用、参考にしてください。



1. CTSでFailがでたら


CTS実施中にfailが発生する場合があります。


  主な原因としては、


  ・ターゲットデバイスの設定ミス


  ・Framework層の変更による影響


  ・ハードウェア不良


  ・CTS自身の不具合


  があげられます。






 1.1 fail内容を確認


  failが出た場合、最初に行うことは、testResult.xmlを確認することから始めます。


  result fail項目にFailure Details(英語のみ)が表示されます。


  (下図のように表示されます。)


f:id:bs-android:20110907093249p:image


    (図1.1)




  1.1.1 fail要因調査(瞬殺編)


   図1.1のFailure Detailesを確認したところ、内容から、このfailは、WiFiセッティングでアクセスポイント設定がされていないことが原因(ターゲットデバイスの設定ミス)と考えられます。






  1.1.2 fail除去(瞬殺編)


  このケースでのfailはすぐに除去できます。


  WiFiアクセスポイント設定後、メソッド単位で再実施します。


f:id:bs-android:20110907093836p:image:w640




   passしました。testResult.xmlのfail情報は、この時点でpassとして、上書きされます。


   確認のため、ブラウザでtestResult.xmlを読み込んでみました。


f:id:bs-android:20110907094745p:image




  Note.


  メソッド単位実行した場合、testResult.xmlの結果を上書きします。設定ミスなどで、少数のfail項目再確認


  するには、メソッド単位でCTSを実行することをお勧めします。


  クラス単位、パッケージ単位の実施は、未実行(No Executed)項目に関しては、実行しますが、fail項目は、


  実行しません。




  Note.


  このように設定ミスでCTS failは、すぐに発生します。特にWiFi設定などは気をつけたほうがいいでしょう。


  また、必要なAPKがデバイスにインストールされていない場合も、当然ながらfailになります。






2. fail要因調査(中級編)


  前項のように、設定ミス等であった場合、即原因判明 → 即対応可能です。


  しかし、そうでない場合もあります。最悪の場合、kernelまで調査することがあるとかないとか。




f:id:bs-android:20110907095341p:image


 少し見にくいですが、上図を見ください。これは、たまたま出たのですが。。


 「-1を期待しているところに。-16777216が返却されてきた」ということでしょうが、この段階で、筆者には何のことかわかりません。






2.1 fail発生箇所特定


 まず、testResult.xmlをTextEditerで開き、stacktraceを見ます。


f:id:bs-android:20110907095342p:image


  (図2.1)




  TypefaceTest.java:208 というのが見えます。これは、「TypefaceTest.javaファイル208行目でfail検知しました。」ということです。   TypefaceTest.javaを見る必要があります。


  使用しているCTSがAndroid 2.3 R5 ですので、Android Open Source Projectで、android-cts-2.3_r5


  のタグから、repo syncでソースを取得します。


  Note.


   git cloneでcts.gitを取得しても特に問題はありません。Framework側のソースも必要になる事態を考慮し


   ここではあえてrepo syncで取得することを前提とします。 






2.2 fail発生箇所調査


  下はTypefaceTest.java 208行目付近のソースです。





202 Bitmap expected = BitmapFactory.decodeResource(
203 getContext().getResources(), R.drawable.typeface_test, opt);
204 assertEquals(expected.getWidth(), bitmap.getWidth());
205 assertEquals(expected.getHeight(), bitmap.getHeight());
206 for (int y = 0; y < bitmap.getHeight(); y++) {
207 for (int x = 0; x < bitmap.getWidth(); x++) {
208 assertEquals(expected.getPixel(x, y), bitmap.getPixel(x, y));
209 }
210 }


  リソースtypeface_testと何らかの方法で作成したbitmapとをpixel毎に等しいかチェックしています。


  比較元データ(リソース)を見てみます。


  framework/cts/tests/res/drawable/typeface_test.png


f:id:bs-android:20110907100748p:image






  もう少し、TypefaceTest.javaを見てみます。(bitmap作成処理)





Typeface typeface = Typeface.createFromAsset(getContext().getAssets(), "samplefont.ttf");
assertNotNull(typeface);
Bitmap bitmap = Bitmap.createBitmap(100, 100, Config.ARGB_8888);
bitmap.eraseColor(Color.BLACK);
Canvas canvas = new Canvas(bitmap);
Paint p = new Paint();
p.setTypeface(typeface);
p.setColor(Color.WHITE);
p.setTextAlign(Paint.Align.CENTER);
p.setTextSize(50);
p.setFlags(0); // clear all flags (not sure what defaults flags are set)
canvas.drawText("test", bitmap.getWidth() / 2, 3 * bitmap.getHeight() / 4 , p);




  Note.


   CTSソースは、framework/cts/tests/testsの下にパッケージ単位(当然ですが)で存在します。


   failを検知(発生)させているソースは、failを出しているパッケージから、どこにあるかがわかります。






 2.3 解析




  テストシナリオ(処理内容)の解析結果:


   ARGB32bit作成した画像データとtypeface_test.pngをpixel単位で同一であるかをチェックしています。


   参考: 作成したデータはサイズ100x100、背景黒、文字色白、ttf-font、


       中央揃え、FontSize 50、文字列”test”で作られます。






  エラー要因の解析結果:


  期待値 -1(ARGB32bit Alpha 255, R 255, G 255,B 255 (白色))


   に対して、


  返却値 -16777216(ARGB32bit Alpha 255, R 0, G 0,B 0 (黒色))


   であったためです。


  ※リソースでは白色である部分が、作成したデータでは黒色であったということになります。






 2.4 対応方法




 当事例に関してまして、当方の対応方法を時系列で記載します。


 あくまで例となりますが、参考にしてください。




   1) AOSPで TypefaceTest.javaの最新コードをチェックします。


    failを出している該当箇所に変更があれば、使用中のCTSコードに未反映ではありますが、


    次回リリースのCTSに反映される可能性が高いということになり、


    Google社が、そのfailは互換性という観点で問題は無いと、現在考えているということです。


    よって、それ以上の調査は必要ないと判断可能です。  




   2) https://review.source.android.com/ にTypefaceTest.javaのsubmitがされていないか確認します。


    verifyまでされていれば、merge待ちとなりますので、AOSPにいずれ反映される見込みです。


    判断内容としては、1)と同じになります。


    ※rejectされていれば、framework側の調査が必要となります。




   3) 1)、2)のどちらにも当てはまら無ければ、framework側の調査が必要となります。


    当テストシナリオにおいては、Bitmapクラス、Colorクラスなどが使用されていますので、


    使用されているクラスについても、1)、2)のように変更がされていないかの調査が必要です。


   Note.


   調査した結果、failがでた項目を削除したpatchがbranch gingerbreadに対してsubmitされ、


   verify、mergedとなっておりました。(なぜか、CTS2.3R5には未反映ですが)


   つまり、対応方法1)にあたります。


   また、今回使用したターゲットデバイスは、Nexusシリーズでは無いためframework側の


   ソースコード入手も不可能です。


   よってこれ以上の深追いはしません。。。(出来ません)






以上です。







CTSでFailが出たときの調査方法(その1)



 今回は、CTS failについての調査方法に関して、記載いたします。


技術部 藤井洋祐 (twitterID:@i_m_yosuke)


なお、本内容を実施し、何らかの問題、損害などが発生した場合、当社は一切の責任を負いません。
あくまで自己責任で実施してください。
これらのことを認識頂いた上で、ご利用、参考にしてください。



1. CTSでFailがでたら


CTS実施中にfailが発生する場合があります。


  主な原因としては、


  ・ターゲットデバイスの設定ミス


  ・Framework層の変更による影響


  ・ハードウェア不良


  ・CTS自身の不具合


  があげられます。






 1.1 fail内容を確認


  failが出た場合、最初に行うことは、testResult.xmlを確認することから始めます。


  result fail項目にFailure Details(英語のみ)が表示されます。


  (下図のように表示されます。)


f:id:bs-android:20110907093249p:image


    (図1.1)




  1.1.1 fail要因調査(瞬殺編)


   図1.1のFailure Detailesを確認したところ、内容から、このfailは、WiFiセッティングでアクセスポイント設定がされていないことが原因(ターゲットデバイスの設定ミス)と考えられます。






  1.1.2 fail除去(瞬殺編)


  このケースでのfailはすぐに除去できます。


  WiFiアクセスポイント設定後、メソッド単位で再実施します。


f:id:bs-android:20110907093836p:image:w640




   passしました。testResult.xmlのfail情報は、この時点でpassとして、上書きされます。


   確認のため、ブラウザでtestResult.xmlを読み込んでみました。


f:id:bs-android:20110907094745p:image




  Note.


  メソッド単位実行した場合、testResult.xmlの結果を上書きします。設定ミスなどで、少数のfail項目再確認


  するには、メソッド単位でCTSを実行することをお勧めします。


  クラス単位、パッケージ単位の実施は、未実行(No Executed)項目に関しては、実行しますが、fail項目は、


  実行しません。




  Note.


  このように設定ミスでCTS failは、すぐに発生します。特にWiFi設定などは気をつけたほうがいいでしょう。


  また、必要なAPKがデバイスにインストールされていない場合も、当然ながらfailになります。






2. fail要因調査(中級編)


  前項のように、設定ミス等であった場合、即原因判明 → 即対応可能です。


  しかし、そうでない場合もあります。最悪の場合、kernelまで調査することがあるとかないとか。




f:id:bs-android:20110907095341p:image


 少し見にくいですが、上図を見ください。これは、たまたま出たのですが。。


 「-1を期待しているところに。-16777216が返却されてきた」ということでしょうが、この段階で、筆者には何のことかわかりません。






2.1 fail発生箇所特定


 まず、testResult.xmlをTextEditerで開き、stacktraceを見ます。


f:id:bs-android:20110907095342p:image


  (図2.1)




  TypefaceTest.java:208 というのが見えます。これは、「TypefaceTest.javaファイル208行目でfail検知しました。」ということです。   TypefaceTest.javaを見る必要があります。


  使用しているCTSがAndroid 2.3 R5 ですので、Android Open Source Projectで、android-cts-2.3_r5


  のタグから、repo syncでソースを取得します。


  Note.


   git cloneでcts.gitを取得しても特に問題はありません。Framework側のソースも必要になる事態を考慮し


   ここではあえてrepo syncで取得することを前提とします。 






2.2 fail発生箇所調査


  下はTypefaceTest.java 208行目付近のソースです。





202 Bitmap expected = BitmapFactory.decodeResource(
203 getContext().getResources(), R.drawable.typeface_test, opt);
204 assertEquals(expected.getWidth(), bitmap.getWidth());
205 assertEquals(expected.getHeight(), bitmap.getHeight());
206 for (int y = 0; y < bitmap.getHeight(); y++) {
207 for (int x = 0; x < bitmap.getWidth(); x++) {
208 assertEquals(expected.getPixel(x, y), bitmap.getPixel(x, y));
209 }
210 }


  リソースtypeface_testと何らかの方法で作成したbitmapとをpixel毎に等しいかチェックしています。


  比較元データ(リソース)を見てみます。


  framework/cts/tests/res/drawable/typeface_test.png


f:id:bs-android:20110907100748p:image






  もう少し、TypefaceTest.javaを見てみます。(bitmap作成処理)





Typeface typeface = Typeface.createFromAsset(getContext().getAssets(), "samplefont.ttf");
assertNotNull(typeface);
Bitmap bitmap = Bitmap.createBitmap(100, 100, Config.ARGB_8888);
bitmap.eraseColor(Color.BLACK);
Canvas canvas = new Canvas(bitmap);
Paint p = new Paint();
p.setTypeface(typeface);
p.setColor(Color.WHITE);
p.setTextAlign(Paint.Align.CENTER);
p.setTextSize(50);
p.setFlags(0); // clear all flags (not sure what defaults flags are set)
canvas.drawText("test", bitmap.getWidth() / 2, 3 * bitmap.getHeight() / 4 , p);




  Note.


   CTSソースは、framework/cts/tests/testsの下にパッケージ単位(当然ですが)で存在します。


   failを検知(発生)させているソースは、failを出しているパッケージから、どこにあるかがわかります。






 2.3 解析




  テストシナリオ(処理内容)の解析結果:


   ARGB32bit作成した画像データとtypeface_test.pngをpixel単位で同一であるかをチェックしています。


   参考: 作成したデータはサイズ100x100、背景黒、文字色白、ttf-font、


       中央揃え、FontSize 50、文字列”test”で作られます。






  エラー要因の解析結果:


  期待値 -1(ARGB32bit Alpha 255, R 255, G 255,B 255 (白色))


   に対して、


  返却値 -16777216(ARGB32bit Alpha 255, R 0, G 0,B 0 (黒色))


   であったためです。


  ※リソースでは白色である部分が、作成したデータでは黒色であったということになります。






 2.4 対応方法




 当事例に関してまして、当方の対応方法を時系列で記載します。


 あくまで例となりますが、参考にしてください。




   1) AOSPで TypefaceTest.javaの最新コードをチェックします。


    failを出している該当箇所に変更があれば、使用中のCTSコードに未反映ではありますが、


    次回リリースのCTSに反映される可能性が高いということになり、


    Google社が、そのfailは互換性という観点で問題は無いと、現在考えているということです。


    よって、それ以上の調査は必要ないと判断可能です。  




   2) https://review.source.android.com/ にTypefaceTest.javaのsubmitがされていないか確認します。


    verifyまでされていれば、merge待ちとなりますので、AOSPにいずれ反映される見込みです。


    判断内容としては、1)と同じになります。


    ※rejectされていれば、framework側の調査が必要となります。




   3) 1)、2)のどちらにも当てはまら無ければ、framework側の調査が必要となります。


    当テストシナリオにおいては、Bitmapクラス、Colorクラスなどが使用されていますので、


    使用されているクラスについても、1)、2)のように変更がされていないかの調査が必要です。


   Note.


   調査した結果、failがでた項目を削除したpatchがbranch gingerbreadに対してsubmitされ、


   verify、mergedとなっておりました。(なぜか、CTS2.3R5には未反映ですが)


   つまり、対応方法1)にあたります。


   また、今回使用したターゲットデバイスは、Nexusシリーズでは無いためframework側の


   ソースコード入手も不可能です。


   よってこれ以上の深追いはしません。。。(出来ません)






以上です。







2011年8月29日月曜日



今回は、CTSで覚えておいたら楽、得、自慢(?)できる操作について記載いたします。


技術部 藤井洋祐 (twitterID:@i_m_yosuke)


なお、本内容を実施し、何らかの問題、損害などが発生した場合、当社は一切の責任を負いません。
あくまで自己責任で実施してください。
これらのことを認識頂いた上で、ご利用、参考にしてください。





1. CTSの操作(応用編)


 1.1 テスト中の操作


  1.1.1 中断


   プランCTS実施中に、中断せざるを得ない事態(ターゲットデバイスフリーズ、microSD入れ忘れに気づくなど)が発生することがあります。


   その場合、”Ctrl+C”(下図 青丸部分)で中断が可能です。


f:id:bs-android:20110824184042p:image:w600


  Note.


   CTSは、随時 /android-cts/repository/results/[日付フォルダ]/testResult.xml へ実行結果の書き込みを行ってます。中断のタイミングによっては、testResult.xmlが破損する可能性もあります。


   よって、この方法によっての中断は、リスクがあることを承知した上で、実行してください。


   書き込みを行っていないと思われるタイミング、たとえば、ターゲットデバイスReboot中などが狙い目です。




  1.1.2 再開


   1.1.1で中断させたプランCTSを再開させる場合は、通常のCTS起動と同じです。


f:id:bs-android:20110824184230p:image:w600




  再開させずに新規で開始したい場合:


   ”0” → エンター


  再開させたい場合:


   ”1” → エンター


  選択した内容で、プランCTSが実行されます。


f:id:bs-android:20110824184412p:image:w600




  Note.


   中断しているプランが複数ある場合は、cts_hostプロンプトで、”ls -r”によって、実行プラン一覧が


  表示することが出来ます。


   ここでSession Id毎に表示される情報を確認し、再開させたいプランを確認します。


f:id:bs-android:20110824184611p:image:w640


   Session ID 5(プランCTS)を再開させる場合は、”1” → エンター → ”1” → エンターとなります。


f:id:bs-android:20110824184612p:image:w640




 1.2 プランCTSのピンポイント実施


  1.2.1 クラス単位で実施する


   ときには、パッケージ単位より、細かい単位で実施したい場合もあります。


   例えば、android.textパッケージのEditable_FactoryTestクラスだけを実行したい場合があったとします。


   cts_hostプロンプトで”start --plan CTS -p android.text.cts.Editable_FactoryTest”を入力します。


   書式:start --plan test_plan_name -p java_package_name.class_name


f:id:bs-android:20110824185009p:image:w640


   Note.


    パッケージに含まれるtest suite単位で実施したい場合です。


    図1.2.1の例からいきますと、


    ”start --plan CTS -p android.text.cts”と入力することで、


    ”android.text.cts”Test Suiteが全て実行されます。


    ※但し、Not Executedの項目のみです。




  1.2.2 メソッド単位で実施する


   CTS実施の最小単位です。


   android.textパッケージのStaticLayoutTestクラスのtestGetLineForVerticalメソッドだけを実行したい場合cts_hostプロンプトで


   ”start --plan CTS -p android.text.cts.StaticLayoutTest#testGetLineForVertical”


   と入力します。


   書式:start --plan test_plan_name -p java_package_name.class_name#method_name


f:id:bs-android:20110824185010p:image:w640


   Note.


   メソッド単位実行した場合、対象メソッドが既に実行済み(pass/failのどちらか)であっても、結果(testResult.xml)を上書きします。




以上です。



当記事内容をPDF化してます。


下記LinkからDownloadできます。


BS_CTS_Doc04(応用編).pdf








CTS応用編(覚えておいたら得する操作方法)



今回は、CTSで覚えておいたら楽、得、自慢(?)できる操作について記載いたします。


技術部 藤井洋祐 (twitterID:@i_m_yosuke)


なお、本内容を実施し、何らかの問題、損害などが発生した場合、当社は一切の責任を負いません。
あくまで自己責任で実施してください。
これらのことを認識頂いた上で、ご利用、参考にしてください。





1. CTSの操作(応用編)


 1.1 テスト中の操作


  1.1.1 中断


   プランCTS実施中に、中断せざるを得ない事態(ターゲットデバイスフリーズ、microSD入れ忘れに気づくなど)が発生することがあります。


   その場合、”Ctrl+C”(下図 青丸部分)で中断が可能です。


f:id:bs-android:20110824184042p:image:w600


  Note.


   CTSは、随時 /android-cts/repository/results/[日付フォルダ]/testResult.xml へ実行結果の書き込みを行ってます。中断のタイミングによっては、testResult.xmlが破損する可能性もあります。


   よって、この方法によっての中断は、リスクがあることを承知した上で、実行してください。


   書き込みを行っていないと思われるタイミング、たとえば、ターゲットデバイスReboot中などが狙い目です。




  1.1.2 再開


   1.1.1で中断させたプランCTSを再開させる場合は、通常のCTS起動と同じです。


f:id:bs-android:20110824184230p:image:w600




  再開させずに新規で開始したい場合:


   ”0” → エンター


  再開させたい場合:


   ”1” → エンター


  選択した内容で、プランCTSが実行されます。


f:id:bs-android:20110824184412p:image:w600




  Note.


   中断しているプランが複数ある場合は、cts_hostプロンプトで、”ls -r”によって、実行プラン一覧が


  表示することが出来ます。


   ここでSession Id毎に表示される情報を確認し、再開させたいプランを確認します。


f:id:bs-android:20110824184611p:image:w640


   Session ID 5(プランCTS)を再開させる場合は、”1” → エンター → ”1” → エンターとなります。


f:id:bs-android:20110824184612p:image:w640




 1.2 プランCTSのピンポイント実施


  1.2.1 クラス単位で実施する


   ときには、パッケージ単位より、細かい単位で実施したい場合もあります。


   例えば、android.textパッケージのEditable_FactoryTestクラスだけを実行したい場合があったとします。


   cts_hostプロンプトで”start --plan CTS -p android.text.cts.Editable_FactoryTest”を入力します。


   書式:start --plan test_plan_name -p java_package_name.class_name


f:id:bs-android:20110824185009p:image:w640


   Note.


    パッケージに含まれるtest suite単位で実施したい場合です。


    図1.2.1の例からいきますと、


    ”start --plan CTS -p android.text.cts”と入力することで、


    ”android.text.cts”Test Suiteが全て実行されます。


    ※但し、Not Executedの項目のみです。




  1.2.2 メソッド単位で実施する


   CTS実施の最小単位です。


   android.textパッケージのStaticLayoutTestクラスのtestGetLineForVerticalメソッドだけを実行したい場合cts_hostプロンプトで


   ”start --plan CTS -p android.text.cts.StaticLayoutTest#testGetLineForVertical”


   と入力します。


   書式:start --plan test_plan_name -p java_package_name.class_name#method_name


f:id:bs-android:20110824185010p:image:w640


   Note.


   メソッド単位実行した場合、対象メソッドが既に実行済み(pass/failのどちらか)であっても、結果(testResult.xml)を上書きします。




以上です。



当記事内容をPDF化してます。


下記LinkからDownloadできます。


BS_CTS_Doc04(応用編).pdf








2011年8月24日水曜日





今回は、CTS概要、環境、基本操作について記載いたします。


なお、本内容を実施し、何らかの問題、損害などが発生した場合、当社は一切の責任を負いません。
あくまで自己責任で実施してください。
これらのことを認識頂いた上で、ご利用、参考にしてください。



0.はじめに


 昨今、注目を浴びているAndroidですが、CTSというのは、みなさんご存知でしょうか?


 名前は聞いたことあっても、実際、使ったこと無い人がほとんどだと思います。


 なぜなら、アプリベンダーにはあまり関係ないことですから。しかし、Androidを利用して、世に


 何らかのハードを出そうという人たち(メーカ、個人含む)、またはframeworkを改変(Bug対応など)し、


 Android Open Source Projectsにsubmitしようとする人にとっては、実は避けては通れない道です。


 本記事は、そんな人たちのために捧げます。




 株式会社ブリリアントサービス    


 技術部 藤井洋祐(twitterID:@i_m_yosuke) 




 (校正) 


 技術部 藤田竜史(twitterID:@ryuuuji) 


 ※藤田くん、チェックありがとう。


 


1.CTS概要


 1.1 CTSの目的


  CTS(正式にはCompatibility Test Suite。以下、CTS)は、Google社が


  Android Platform採用端末に実施を義務付けているTest群です。Google社は、


  今までOEM、もしくはキャリア依存であったPlatformをAndroidで汎用化しました。


  CTSは、Android Marketで配布されるアプリケーションが、


  どのOEMのAndroid端末でもスムーズに利用可能なよう(OEMによって、特化されすぎないよう)に、


  主要な公開APIを実行し、チェックします。


  世の中にAndroidPlatform採用端末を配布する場合、これらTest群を全てpassすることが


  互換性を保つという証になり、そういうプロセスを経て初めて「Android端末」を


  名乗ることが出来るのではないでしょうか。




  蛇足ですが、Android 2.3 Compatibility Definition Document(CDD)という、


  Android Platform使用するためのRequirementがあります。


  こちらもあわせて、目を通されることをお勧めします。


  参照: http://source.android.com/compatibility/2.3/android-2.3.3-cdd.pdf


  注.本内容は、2011年8月22日現在、Google社が提供する環境を元に作成しております。




 1.2 CTSの動作


  CTSは、自動化されたハーネスです。以下の二つを含みます。


  ・テスト実行の管理


  ・ターゲットデバイス上で実行されるテストケースのAPKファイル


http://d.hatena.ne.jp/bs-android/files/1-2.png?d=.png


  大まかな手順としては、以下のようになります。


  1.CTSをDownload


  2.ターゲットデバイスの接続


  3.アクセスビリティテスト実行準備


   a)android-cts/repository/testcases/CtsDelegatingAccessibilityService.apk をインストール


   b)以下の手順でインストールしたアクセスビリティサービスを有効にします。


     Settings > Accessibility > Accessibility > Delegating Accessibility Service


  4.アドミニストレータテスト実行準備


   a)android-cts/repository/testcases/CtsDeviceAdmin.apk をインストール


   b)Settings > Location & security 以下にあるandroid.deviceadmin.cts .* を全て有効にします。


  5.CTSを起動します。


  6.CTSレポートが作成されます。


  参照: http://source.android.com/compatibility/cts-intro.html




 1.3 CTSのテスト範囲


  テスト範囲は以下の通りです。(現在、大きく分けて7つになります)


f:id:bs-android:20110823201340p:image:w640


  参照:http://source.android.com/compatibility/cts-intro.html 


2. CTSの環境作り


 2.1 必要なもの


  (ハード)


  ・PC - DownloadしたCTSを実施します。


  ・ターゲットデバイス - Android Platformを採用したデバイスです。


  (ソフト)


  PCに必要なもの


  ・Android Developersから、SDKをDownloadしてください。(PC OSに適合したもの)


   ※Build環境が整っているということが前提となります。


   参照: http://developer.android.com/sdk/index.html


f:id:bs-android:20110823201251p:image:w640


  Note.


  CTS実施環境について、PC側のOSは、こちら側で確認取れているのは、Linux(Ubuntu)、MacOSです。


  Windowsに関しましては、CTS側環境がWindowsに適合していない部分があり、実行Errorとなります。


  CTS側環境を改変+Cygwinで、動作は確認しています。機会があれば別途紹介いたします。




  ・Android Open source project から、ターゲットデバイスのFirmware versionにあわせたCTSを


   PCの任意の場所にDownloadしてください。


   参照: http://source.android.com/compatibility/downloads.html


f:id:bs-android:20110823201017p:image:w640


 Note.


  CTSは、ターゲットデバイスで採用されているFirmware versionにあわせて、選択する必要があります。


  Android2.3(Gingerbread)採用の場合、CTS2.3R5が実施すべきCTS versionとなります。(図2.1-2参照)




 2.2 実施準備


  2.1.1  CTS実施フォルダ作成


   2.1章でDownloadしたCTS 2.3R5(android-cts-2.3_r5-x86.zip)を任意の場所で解凍します。


f:id:bs-android:20110823201715p:image:w360


 解凍後、図2.2-2のようなフォルダが作成されます。


f:id:bs-android:20110823201716p:image:w360


  2.2.2 環境変数の設定


   CTSは、/android-cts/tools/startctsを実行することで起動します。startctsは、


   スクリプトで書かれており、CTS2.3R5では、そのスクリプト中で環境変数を


   2つ使用しています。


  環境変数その1 CTS_ROOT



if [ -z "${CTS_ROOT}" ]; then
# CONFIGURATION
# Set this variable to the root of unzipped CTS directory
# This only needs to be changed if this script has been moved
CTS_ROOT="$(dirname $0)/.."
fi;


  通常使用の場合、特に意識、変更、設定する必要は、ありません。




  環境変数その2 SDK_ROOT



# Add SDK_ROOT to the PATH for backwards compatibility with prior startcts
# commands that required SDK_ROOT to find adb.
if [ -n "${SDK_ROOT}" ]; then
PATH=${SDK_ROOT}/platform-tools:${SDK_ROOT}/tools:${PATH}
fi


  ~/.bashrcに、exportを追加します。



export SDK_ROOT=~/android-sdk-linux_x86


Note.


.bashrcを変更せずに、下記のようにSDK_ROOTの初期値を直接与えても構いません。



# Add SDK_ROOT to the PATH for backwards compatibility with prior startcts
# commands that required SDK_ROOT to find adb.
SDK_ROOT=”~/android-sdk-linux_x86”
if [ -n "${SDK_ROOT}" ]; then
PATH=${SDK_ROOT}/platform-tools:${SDK_ROOT}/tools:${PATH}
fi




 2.2.3 CTS実行


   CTS実行するには、前述のようにstartctsを実行します。


f:id:bs-android:20110823204831p:image:w640


上記のようにcts_hostプロンプトが表示されれば正常に起動されています。




3. CTSの操作(基本編)


 3.1 プランCTSの確認


  CTSのプランは、”ls –plan”で確認することが出来ます。


  現在は、計8種類提供されています。プランCTSは、そのうちのひとつです。


f:id:bs-android:20110823205146p:image:w640


  Note.


  Google社へは、プランCTS(図3.1-1の赤丸)実施、作成されたレポートを提出します。


  本記事では、プランCTS以外の説明は割愛いたしますが、プランCTSで実施される各種テストが


  目的別に小分けされたようなものだと考えてください。




 プランCTSが提供する項目を”ls --plan CTS”で確認することが可能です。


 現在は、計42項目のテストパッケージが提供されております。


f:id:bs-android:20110823205450p:image:w640




 3.2 プランCTSの実施


  3.2.1 プランCTS実施方法その1


   プランCTSは、“start –plan CTS”で実行されます。


   書式:start --plan test_plan_name


f:id:bs-android:20110823205451p:image:w640


Note.


  自動で、端末Rebootを繰り返しながら、プランCTSの項目を順に実施していきます。




  3.2.2 プランCTS実施方法その2


   プランCTSを図3.1-2で表示したテストパッケージ単位で実施することが可能です。


   ”-p”オプションにて、テストパッケージ名を指定します。


   書式:start --plan test_plan_name -p java_package_name


   下記の例では、”android.apidemos.cts”を実施させています。


f:id:bs-android:20110823205452p:image:w640


  Note.


  指定されたテストパッケージに含まれるテストシナリオが全部実行された後、


  cts_hostプロンプトが表示されコマンド入力待ちとなります。




  3.2.3 プランCTS結果確認


   CTS実施結果は、android-cts/repository/results 直下に、CTS開始日付フォルダが作成され、そこに格納されます。


f:id:bs-android:20110823210136p:image:w640


  Note.


  resultsフォルダの下に、zipファイルが作成されます。


  これは、前述のCTS実施結果が格納されるCTS開始日付フォルダをcompressしたものです。


  Google社へは、このzipファイルを提出します。




 CTS実施結果フォルダには、図3.2.3-2で示すようなファイル群が存在します。


f:id:bs-android:20110823210348p:image:w640


  testResult.xmlに実行毎に結果が反映されていきます。その結果は、ブラウザで確認可能です。


  testResult.xmlをブラウザでOpenすると下記、図3.2.3-3のように表示されます。


f:id:bs-android:20110823210349p:image:w640




  他の情報もブラウザスクロールによって表示されます。


f:id:bs-android:20110823210350p:image:w640




  CTSがエラーを検知した場合、下記のように、Result列が赤くなり、エラー詳細が表示されます。


f:id:bs-android:20110823210351p:image:w640


  Note.


  Failure Detailsに表示されるエラー内容では、


  どのようなAPIを使用した結果エラーとなったのかが判別しにくい場合があります。


  その場合、CTSソースコード(AOSPから取得可能)を解析し、エラー要因、


  APIを特定する必要があります。




以上です。





当記事内容をPDF化してます。


下記LinkからDownloadできます。


BS_CTS_Doc01(概要).pdf


BS_CTS_Doc02(環境).pdf


BS_CTS_Doc03(基本操作).pdf






CTS概要、環境、基本操作





今回は、CTS概要、環境、基本操作について記載いたします。


なお、本内容を実施し、何らかの問題、損害などが発生した場合、当社は一切の責任を負いません。
あくまで自己責任で実施してください。
これらのことを認識頂いた上で、ご利用、参考にしてください。



0.はじめに


 昨今、注目を浴びているAndroidですが、CTSというのは、みなさんご存知でしょうか?


 名前は聞いたことあっても、実際、使ったこと無い人がほとんどだと思います。


 なぜなら、アプリベンダーにはあまり関係ないことですから。しかし、Androidを利用して、世に


 何らかのハードを出そうという人たち(メーカ、個人含む)、またはframeworkを改変(Bug対応など)し、


 Android Open Source Projectsにsubmitしようとする人にとっては、実は避けては通れない道です。


 本記事は、そんな人たちのために捧げます。




 株式会社ブリリアントサービス    


 技術部 藤井洋祐(twitterID:@i_m_yosuke) 




 (校正) 


 技術部 藤田竜史(twitterID:@ryuuuji) 


 ※藤田くん、チェックありがとう。


 


1.CTS概要


 1.1 CTSの目的


  CTS(正式にはCompatibility Test Suite。以下、CTS)は、Google社が


  Android Platform採用端末に実施を義務付けているTest群です。Google社は、


  今までOEM、もしくはキャリア依存であったPlatformをAndroidで汎用化しました。


  CTSは、Android Marketで配布されるアプリケーションが、


  どのOEMのAndroid端末でもスムーズに利用可能なよう(OEMによって、特化されすぎないよう)に、


  主要な公開APIを実行し、チェックします。


  世の中にAndroidPlatform採用端末を配布する場合、これらTest群を全てpassすることが


  互換性を保つという証になり、そういうプロセスを経て初めて「Android端末」を


  名乗ることが出来るのではないでしょうか。




  蛇足ですが、Android 2.3 Compatibility Definition Document(CDD)という、


  Android Platform使用するためのRequirementがあります。


  こちらもあわせて、目を通されることをお勧めします。


  参照: http://source.android.com/compatibility/2.3/android-2.3.3-cdd.pdf


  注.本内容は、2011年8月22日現在、Google社が提供する環境を元に作成しております。




 1.2 CTSの動作


  CTSは、自動化されたハーネスです。以下の二つを含みます。


  ・テスト実行の管理


  ・ターゲットデバイス上で実行されるテストケースのAPKファイル


http://d.hatena.ne.jp/bs-android/files/1-2.png?d=.png


  大まかな手順としては、以下のようになります。


  1.CTSをDownload


  2.ターゲットデバイスの接続


  3.アクセスビリティテスト実行準備


   a)android-cts/repository/testcases/CtsDelegatingAccessibilityService.apk をインストール


   b)以下の手順でインストールしたアクセスビリティサービスを有効にします。


     Settings > Accessibility > Accessibility > Delegating Accessibility Service


  4.アドミニストレータテスト実行準備


   a)android-cts/repository/testcases/CtsDeviceAdmin.apk をインストール


   b)Settings > Location & security 以下にあるandroid.deviceadmin.cts .* を全て有効にします。


  5.CTSを起動します。


  6.CTSレポートが作成されます。


  参照: http://source.android.com/compatibility/cts-intro.html




 1.3 CTSのテスト範囲


  テスト範囲は以下の通りです。(現在、大きく分けて7つになります)


f:id:bs-android:20110823201340p:image:w640


  参照:http://source.android.com/compatibility/cts-intro.html 


2. CTSの環境作り


 2.1 必要なもの


  (ハード)


  ・PC - DownloadしたCTSを実施します。


  ・ターゲットデバイス - Android Platformを採用したデバイスです。


  (ソフト)


  PCに必要なもの


  ・Android Developersから、SDKをDownloadしてください。(PC OSに適合したもの)


   ※Build環境が整っているということが前提となります。


   参照: http://developer.android.com/sdk/index.html


f:id:bs-android:20110823201251p:image:w640


  Note.


  CTS実施環境について、PC側のOSは、こちら側で確認取れているのは、Linux(Ubuntu)、MacOSです。


  Windowsに関しましては、CTS側環境がWindowsに適合していない部分があり、実行Errorとなります。


  CTS側環境を改変+Cygwinで、動作は確認しています。機会があれば別途紹介いたします。




  ・Android Open source project から、ターゲットデバイスのFirmware versionにあわせたCTSを


   PCの任意の場所にDownloadしてください。


   参照: http://source.android.com/compatibility/downloads.html


f:id:bs-android:20110823201017p:image:w640


 Note.


  CTSは、ターゲットデバイスで採用されているFirmware versionにあわせて、選択する必要があります。


  Android2.3(Gingerbread)採用の場合、CTS2.3R5が実施すべきCTS versionとなります。(図2.1-2参照)




 2.2 実施準備


  2.1.1  CTS実施フォルダ作成


   2.1章でDownloadしたCTS 2.3R5(android-cts-2.3_r5-x86.zip)を任意の場所で解凍します。


f:id:bs-android:20110823201715p:image:w360


 解凍後、図2.2-2のようなフォルダが作成されます。


f:id:bs-android:20110823201716p:image:w360


  2.2.2 環境変数の設定


   CTSは、/android-cts/tools/startctsを実行することで起動します。startctsは、


   スクリプトで書かれており、CTS2.3R5では、そのスクリプト中で環境変数を


   2つ使用しています。


  環境変数その1 CTS_ROOT



if [ -z "${CTS_ROOT}" ]; then
# CONFIGURATION
# Set this variable to the root of unzipped CTS directory
# This only needs to be changed if this script has been moved
CTS_ROOT="$(dirname $0)/.."
fi;


  通常使用の場合、特に意識、変更、設定する必要は、ありません。




  環境変数その2 SDK_ROOT



# Add SDK_ROOT to the PATH for backwards compatibility with prior startcts
# commands that required SDK_ROOT to find adb.
if [ -n "${SDK_ROOT}" ]; then
PATH=${SDK_ROOT}/platform-tools:${SDK_ROOT}/tools:${PATH}
fi


  ~/.bashrcに、exportを追加します。



export SDK_ROOT=~/android-sdk-linux_x86


Note.


.bashrcを変更せずに、下記のようにSDK_ROOTの初期値を直接与えても構いません。



# Add SDK_ROOT to the PATH for backwards compatibility with prior startcts
# commands that required SDK_ROOT to find adb.
SDK_ROOT=”~/android-sdk-linux_x86”
if [ -n "${SDK_ROOT}" ]; then
PATH=${SDK_ROOT}/platform-tools:${SDK_ROOT}/tools:${PATH}
fi




 2.2.3 CTS実行


   CTS実行するには、前述のようにstartctsを実行します。


f:id:bs-android:20110823204831p:image:w640


上記のようにcts_hostプロンプトが表示されれば正常に起動されています。




3. CTSの操作(基本編)


 3.1 プランCTSの確認


  CTSのプランは、”ls –plan”で確認することが出来ます。


  現在は、計8種類提供されています。プランCTSは、そのうちのひとつです。


f:id:bs-android:20110823205146p:image:w640


  Note.


  Google社へは、プランCTS(図3.1-1の赤丸)実施、作成されたレポートを提出します。


  本記事では、プランCTS以外の説明は割愛いたしますが、プランCTSで実施される各種テストが


  目的別に小分けされたようなものだと考えてください。




 プランCTSが提供する項目を”ls --plan CTS”で確認することが可能です。


 現在は、計42項目のテストパッケージが提供されております。


f:id:bs-android:20110823205450p:image:w640




 3.2 プランCTSの実施


  3.2.1 プランCTS実施方法その1


   プランCTSは、“start –plan CTS”で実行されます。


   書式:start --plan test_plan_name


f:id:bs-android:20110823205451p:image:w640


Note.


  自動で、端末Rebootを繰り返しながら、プランCTSの項目を順に実施していきます。




  3.2.2 プランCTS実施方法その2


   プランCTSを図3.1-2で表示したテストパッケージ単位で実施することが可能です。


   ”-p”オプションにて、テストパッケージ名を指定します。


   書式:start --plan test_plan_name -p java_package_name


   下記の例では、”android.apidemos.cts”を実施させています。


f:id:bs-android:20110823205452p:image:w640


  Note.


  指定されたテストパッケージに含まれるテストシナリオが全部実行された後、


  cts_hostプロンプトが表示されコマンド入力待ちとなります。




  3.2.3 プランCTS結果確認


   CTS実施結果は、android-cts/repository/results 直下に、CTS開始日付フォルダが作成され、そこに格納されます。


f:id:bs-android:20110823210136p:image:w640


  Note.


  resultsフォルダの下に、zipファイルが作成されます。


  これは、前述のCTS実施結果が格納されるCTS開始日付フォルダをcompressしたものです。


  Google社へは、このzipファイルを提出します。




 CTS実施結果フォルダには、図3.2.3-2で示すようなファイル群が存在します。


f:id:bs-android:20110823210348p:image:w640


  testResult.xmlに実行毎に結果が反映されていきます。その結果は、ブラウザで確認可能です。


  testResult.xmlをブラウザでOpenすると下記、図3.2.3-3のように表示されます。


f:id:bs-android:20110823210349p:image:w640




  他の情報もブラウザスクロールによって表示されます。


f:id:bs-android:20110823210350p:image:w640




  CTSがエラーを検知した場合、下記のように、Result列が赤くなり、エラー詳細が表示されます。


f:id:bs-android:20110823210351p:image:w640


  Note.


  Failure Detailsに表示されるエラー内容では、


  どのようなAPIを使用した結果エラーとなったのかが判別しにくい場合があります。


  その場合、CTSソースコード(AOSPから取得可能)を解析し、エラー要因、


  APIを特定する必要があります。




以上です。





当記事内容をPDF化してます。


下記LinkからDownloadできます。


BS_CTS_Doc01(概要).pdf


BS_CTS_Doc02(環境).pdf


BS_CTS_Doc03(基本操作).pdf






Related Posts Plugin for WordPress, Blogger...