Android application Testing guideline 第 1.2 版 2013/2/1 Open Embedded Software Foundation 株 式 会 社 ソニックス
目 次 1.はじめに ガイドライン 策 定 の 背 景 本 ガイドラインの 位 置 付 け 2.Android Application のテスト 項 目 ビジネスロジックのテスト UI のテスト 通 信 に 関 するテスト デバイス 関 連 のテスト 操 作 / 外 的 要 因 に 対 するテスト 3.テスト 実 施 方 針 テスト 計 画 の 策 定 と 実 施 WEB アプリケーションのテスト 多 端 末 テストの 実 施 テストの 自 動 化 と CI Appendix A. テストツール
1. はじめに ガイドライン 策 定 の 背 景 Android はオープンソースである 事 からスマートフォンという 分 野 だけではなく スマート TV 等 のデジ タル 家 電 や 自 動 車 などに 搭 載 される 組 込 ソフトウェアに 至 るまで 増 大 の 一 途 をたどっており その 品 質 が 企 業 の 経 営 のみならず 人 命 や 財 産 に 及 ぼす 影 響 も 大 きくなりつつある その 一 方 でソフトウェア 開 発 の 失 敗 に よるデスマーチも 話 題 にこと 欠 かない 品 質 は 上 流 で 作 り 込 む のが 品 質 管 理 の 基 本 であり 開 発 におけ る 上 流 工 程 でのインスペクションやレビューなどの 技 法 や 管 理 方 式 は 従 来 のソフトウェア 開 発 の 物 が 導 入 さ れてきたが 最 終 的 なテストは Android という OS 特 有 の 問 題 もあり 昨 今 ではテスト 技 術 に 対 する 反 省 と 関 心 も 高 まりつつある 成 熟 技 術 ではない Android 開 発 においてテスト 技 術 に 関 しては 体 系 的 な 教 育 が 十 分 に 行 われて 来 たとは 言 い 難 く, 極 めて 属 人 的 なものであった 事 は 否 定 出 来 ない Android アプリケーションの 開 発 は 通 常 のソフトウェア 開 発 と 比 較 すると 規 模 の 小 さいものが 多 く 短 期 間 でリリースされる 成 果 物 に 対 してテストの 不 十 分 さが 指 摘 されている また 開 発 の 下 流 工 程 をオフショア 企 業 に 委 ねることが 常 態 化 しつつある 現 在 テスト 工 程 の 品 質 強 化 策 は 重 大 な 意 味 を 持 っている 発 注 者 と 受 注 ベンダーという 関 係 のみならず オフショア 企 業 を 含 めた 開 発 委 託 先 企 業 と 各 国 におけるテストの 考 え 方 や 技 術 についての 誤 解 を 解 消 し, 戦 略 的 テストプロセスやテスト 技 術 の 普 及 定 着 を 図 り 品 質 を 向 上 することが 目 的 である 本 稿 では, 特 に 誤 解 が 生 じやすく,よって 委 託 先 と 共 通 理 解 を 確 立 しておくべきテストの 考 え 方 と 技 術 について 述 べる 本 ガイドラインの 位 置 付 け Google 社 が Android Platform 採 用 端 末 に 対 し 実 施 を 義 務 付 けている CTS(Compatibility Test Suite)は Google Play を 含 む Market で 配 布 されるアプリケーションが どの OEM の Android 端 末 でもスムーズに 利 用 出 来 る 様 主 要 な 公 開 API を 実 行 し チェックを 行 うテストハーネスである CTS による Test 群 を 全 て pass する 事 は 互 換 性 を 保 っているという 一 つの 証 になると 言 われているが 実 際 にはこの CTS を 通 っても 端 末 毎 の 差 異 が 発 生 する 事 が 起 こり 得 るのが 実 状 である アプリケーションデベロッパーはこういった 端 末 毎 の 挙 動 差 異 を 開 発 時 に 個 々に 検 証 をする 事 が 必 要 になっており その 方 針 を 定 めたものは 現 在 存 在 し ていない 本 ガイドラインは Android 向 けアプリケーションを 開 発 する 際 のシステムテストにおいて どのような 観 点 でテストフェーズを 進 めるべきかを 記 したテストガイドラインであり 継 続 的 にアンチパターンを 収 集 分 析 し ガイドラインの 改 善 を 行 う 事 でリリース 前 のアプリケーションの 品 質 の 向 上 システムテストの 精 度 向 上 を 目 的 としている
2.Android Application のテスト 項 目 テストの 目 的 は, 単 体 テストにて 品 質 が 保 証 されたプログラムが 相 互 に 連 携 して 正 しく 機 能 するかどうか を 検 証 することである Android アプリケーションにおいて 全 てのプログラムが 連 携 して 動 く 事 はすなわち リリースされるものと 同 じ 状 態 である 事 を 示 しており 従 来 のソフトウェア 開 発 における 結 合 テストの 位 置 づけに 近 いもの すなわち 実 機 端 末 で 行 う 事 を 前 提 としている 本 章 では 特 に 重 点 的 にテストすべき 5 つの 項 目 をテスティングフレームワークとして 定 義 し そのテスト 手 法 についてどのように 行 うべきかを 記 す 1) ビジネスロジックのテスト 本 ガイドラインではビジネスロジックを 各 アプリケーションに 実 装 された AndroidOS 及 び 動 作 環 境 ハ ードウェアに 依 存 しない 処 理 として 定 義 し そのテストはアクティビティ(Activity) 単 位 で 行 う 事 とする Android アプリケーションでは UI の 表 示 や 各 種 イベントへの 応 答 等 ユーザとアプリケーション 間 で 行 われ るやり 取 りは 基 本 的 に 全 て Activity で 管 理 される 事 となり 多 くのケースでは 画 面 とアクティビティが1 対 1に 紐 づく 為 アクティビティ 単 位 でのテストシナリオ(テストケース)を 作 成 する 事 により 要 求 仕 様 と して 挙 げられた 全 てのビジネスロジックを 細 分 化 して 網 羅 する 事 が 出 来 る 為 である また システムに 依 存 しないビジネスロジックはテストシナリオの 自 動 化 が 容 易 であり テストツールを 用 いた 自 動 化 により 効 率 化 を 図 る 事 が 可 能 である 自 動 化 を 行 うテストスクリプトは Google が 提 供 する 公 式 のテストスクリプトである NativeDriver にて 作 成 する 事 が 推 奨 される [ 本 ガイドラインにおけるビジネスロジックテストの 基 準 ] 1. テストはアクティビティ 単 位 で 実 施 2. ビジネスロジックテストはテストスクリプトを 用 いて 自 動 化 する 事 3. 自 動 化 は NativeDriver を 推 奨 2) UI のテスト UI(User Interface)のテストはビジネスロジック 同 様 にアクティビティ 単 位 で 行 い テストツールを 使 った 自 動 化 を 行 い 実 行 時 のテストスクリプトとスクリーンショットをエビデンスとして 取 得 管 理 する 事 を 基 本 とする テストツールは Nativedriver に 対 応 したもの( Appendix A. 参 照 )を 利 用 し テストシナリオ 上 自 動 化 出 来 ない 挙 動 のテストを 行 う 場 合 には 手 動 でのテスト 実 施 エビデンスの 取 得 を 行 う [ 本 ガイドラインにおける UI テストの 基 準 ] 画 面 遷 移 (フロー)に 沿 った 確 認 が 必 要 エビデンス(スクリーンショット)の 取 得 も 必 要 異 なる 解 像 度 での 表 示 の 妥 当 性
3) 通 信 に 関 するテスト 通 信 を 行 う 機 能 ( 処 理 )を 含 むアプリケーションの 場 合 通 信 関 連 のテストを 行 う 事 は 必 須 である 但 し どのような 通 信 を 行 うかは 作 成 するアプリケーションの 仕 様 または 使 用 する 回 線 の 種 別 によって 異 な る 為 本 ガイドラインでは 最 低 限 行 うべき 通 信 関 連 のテストを 下 記 に 記 す [ 本 ガイドラインにおける 通 信 に 関 するテストの 基 準 ] 1. 通 信 事 業 者 の 回 線 を 利 用 する 場 合 事 業 者 毎 の 特 性 を 理 解 し 適 切 なセキュリティ 対 策 が 施 されていることを 確 認 通 信 の 特 性 に 対 し 受 信 断 受 信 中 の 帯 域 変 化 通 信 途 絶 時 の 各 対 応 を 検 証 する 2. 無 線 通 信 回 線 (WiFi)を 利 用 する 場 合 使 用 する 無 線 通 信 の 規 約 に 基 づく 適 切 なセキュリティ 対 策 が 施 されていることを 確 認 この 場 合 特 にアプリケーション 内 で 取 り 扱 うデータの 保 護 に 留 意 する ネットワーク 高 負 荷 状 態 における 対 応 及 び 未 接 続 接 続 断 時 の 各 対 応 を 検 証 3.その 他 通 信 Bluetooth NFC 等 の 規 格 で 通 信 を 行 う 場 合 にも 取 扱 うデータの 保 護 に 留 意 する 事 4) デバイス 関 連 のテスト 作 成 したアプリケーションのテストは 基 本 的 にターゲットとしている 実 端 末 で 行 う 事 が 望 ましい テスト の 方 針 として 想 定 した 一 連 の 動 作 を 確 認 し アプリケーションが 動 作 するハードウェアに 依 存 する 処 理 が 実 装 されている 場 合 はビジネスロジック 同 様 にアクティビティ 単 位 で 行 う 事 とする テストの 実 行 は 各 アク ティビティを1 回 以 上 実 行 するテストシナリオを 作 成 し 自 動 化 する 事 で 開 発 したアプリケーションを 改 修 する 際 のデグレーション 回 避 と 一 連 の 実 行 結 果 をエビデンスとして 残 し テストスクリプトを 残 す 事 により コードとテスト 両 方 の 継 続 的 な 品 質 の 向 上 が 出 来 るようにする 事 が 最 適 である また テスト 実 行 時 に 発 生 するアプリケーションエラーや 実 機 のログ 情 報 も 実 行 時 に 取 れるようにする 事 も 自 動 化 する 事 のメリットと なる [ 本 ガイドラインにおけるデバイス 関 連 テストの 基 準 ] アプリケーションの 動 作 確 認 は 実 機 での 動 作 を 前 提 とする 各 アクティビティ(ビジネスロジック)を 網 羅 するテストシナリオを 作 成 する 一 連 の 実 行 結 果 をエビデンスとして 残 し デグレーションを 回 避 する
5) 操 作 / 外 的 要 因 に 対 するテスト Android アプリケーションの 実 行 環 境 の 多 くはスマートフォンであることから 電 話 等 の 他 アプリの 割 り 込 み ホームボタンや 電 源 ボタンの 押 下 その 他 ユーザの 端 末 操 作 に 起 因 する 様 々な 外 的 要 因 により 実 行 中 のアプリケーション(Activity)がバックグラウンドへ 移 動 または 破 棄 されることが 頻 繁 に 行 われる その ため アプリケーションは 外 部 からの 処 理 に 影 響 される 事 無 く 正 常 に 動 作 し ユーザの 操 作 性 や 安 定 性 を 担 保 してユーザビリティを 下 げない 事 が 常 に 求 められる ユーザ 操 作 や 外 的 要 因 に 対 するテストとしては Activity がバックグラウンドへ 移 行 する(または 破 棄 さ れる) 際 に 適 切 な 処 理 が 行 われているかを 確 認 するために 各 画 面 においてホームボタンや 電 源 ボタンの 押 下 と その 後 のアプリケーションへの 復 帰 端 末 設 定 画 面 からのアプリの 強 制 終 了 などをテストケースとし て 行 う 必 要 がある さらに 普 段 のユーザ 操 作 を 意 識 して 端 末 全 体 に 渡 ってアドホックテストを 行 うことも 有 効 である このようなテストケースは 基 本 的 には 個 々の 端 末 に 対 し 手 動 での 試 験 を 行 い 網 羅 していくことが 前 提 と なるが google が 提 供 している UI Automator を 用 いることで ホームボタン 押 下 からの 復 帰 テスト 等 を 自 動 化 する 事 もできるため 担 保 したいユーザビリティによって テストケースを 分 類 して 自 動 化 すること で 試 験 を 効 率 的 に 行 うことが 可 能 である [ 本 ガイドラインにおける 操 作 / 外 的 要 因 に 対 するテストの 基 準 ] アプリケーションの 各 画 面 においてホームボタンや 電 源 ボタン 押 下 その 後 のアプリケーション 復 帰 を テストケースとして 行 う 通 信 など 非 同 期 処 理 を 行 っている 箇 所 については データ 保 持 などに 留 意 したテストを 実 施 する 普 段 のユーザ 操 作 に 近 いアドホックテストを 実 施 する
3.テスト 実 施 方 針 1) テスト 計 画 の 策 定 と 実 施 Android アプリケーション 開 発 の 開 発 規 模 は 従 来 のソフトウェア 開 発 と 比 較 すると 小 規 模 である 場 合 が 多 く また 利 用 するユーザを 特 定 する 事 が 難 しい 事 がある 本 項 目 ではテストを 下 記 3 原 則 によって 分 類 し 各 単 位 におけるテスト 計 画 の 策 定 方 法 実 施 をどのようにするべきかを 述 べる [Android アプリケーション 開 発 におけるテスト3 原 則 ] TestLevel( 単 体 テスト 結 合 テスト 受 け 入 れテスト) TestType( 機 能 性 信 頼 性 使 用 性 保 守 性 ) TestStyle( 実 機 テスト 疑 似 テスト 自 動 化 テスト) 定 義 は 各 開 発 担 当 者 により 定 義 されたものである 事 が 望 ましい 例 えば TestType の 定 義 は 下 記 のような ものとする ( 例 )TestType の 定 義 機 能 性 (Functionality) 合 目 的 性, 正 確 性, 接 続 性, 標 準 適 合 性,セキュリティに 関 するもの 効 率 性 (Efficiency) 実 行 効 率 性, 資 源 効 率 性 に 関 するもの 信 頼 性 (Reliability) 成 熟 性, 障 害 許 容 性, 回 復 性 に 関 するもの 使 用 性 (Usability) 理 解 性, 習 得 性, 運 用 性 に 関 するもの 保 守 性 (Maintainability) 解 析 性, 変 更 性, 安 定 性, 試 験 性 関 するもの 移 植 性 (Portability) 環 境 適 応 性, 移 植 作 業 性, 規 格 準 拠 性, 置 換 性 に 関 するもの テスト 計 画 ソフトウェアの 欠 陥 はそのタイプに 応 じてそれを 検 出 すべき 最 適 な 3 軸 (Level/Type/Style)の 組 合 せが 決 まるというものである 例 えばプログラムの メモリーリーク というタイプの 欠 陥 はレベル = 単 体 テス ト,タイプ = 機 能 性 テスト, 技 法 = 実 機 または 自 動 化 テストで 検 出 するのが 最 も 合 理 的 であり 経 済 的 であ る このタイプの 欠 陥 が, 結 合 受 け 入 れテストあるいは 稼 働 後 に 発 症 した 場 合 には, 再 現 性 の 乏 しい 追 及 困 難 な 現 象 となることが 多 い テスト 計 画 略 立 案 段 階 では 前 述 した3 原 則 を 元 にテスト 項 目 の 分 類 を 行 いリ スクの 高 い 欠 陥 を 特 定 する 事 が 望 ましい 例 )テストシナリオ 単 位 での 分 類 マトリクス
テストの 実 施 テストの 実 施 は 事 前 に 策 定 したテスト 計 画 とテストシナリオケースに 基 づいて 実 施 する 事 を 前 提 とする Android において アプリケーションが 内 包 する 機 能 またはその 機 能 を 構 成 する 処 理 を 最 小 単 位 の 単 体 テスト 範 囲 として 捉 え シナリオは 単 体 テストレベルを 最 小 レベルとして 作 成 する この 最 小 単 位 の 品 質 を 保 証 する 事 が 本 ガイドラインにおけるテストの 目 的 であり 単 体 テストは 最 小 単 位 の(それ 以 上 分 解 できない) 部 品 に 対 して 実 施 する 事 が 望 ましい どうしても 全 てのプログラムの 単 体 テス トやコードレビューに 投 入 する 工 数 が 捻 出 できない 場 合 には 入 念 にテストすべきものと,そうではないも のを 見 極 めるための 合 理 的 な 基 準 を 開 発 チーム 内 で 設 定 する 例 えば, 次 のようなプログラムは 工 数 をかけ てテストを 行 う 対 象 となる 経 験 の 浅 いプログラマが 作 成 したプログラム 多 数 のプログラムから 引 用 される 使 用 頻 度 の 高 いプログラム プログラムステップ 数 が,ある 数 を 超 えるプログラム 2) WEB アプリケーションのテスト Web ブラウザベースで 作 成 したアプリケーションの 場 合 Native アプリケーションと 比 較 するとハード ウェア 性 能 に 依 存 する 問 題 やバグが 出 る 可 能 性 は 少 なくなる 但 し 現 状 の Web アプリケーションにおけ る 懸 念 点 の 一 つであるとされるレスポンス 速 度 は 前 述 した testtype で 分 類 すると 効 率 性 にあたり ユー ザ 入 力 については 使 用 性 のテストが 必 要 となる その 為 作 成 するアプリケーションが WEB アプリケ ーションである 場 合 にも Native アプリケーション 同 様 のテスト 方 針 の 策 定 並 びにテスト 自 動 化 を 行 う 事 が 望 ましい [Web アプリケーションテストの 基 準 ] Android Driver を 利 用 したテストの 自 動 化 を 行 う テスト3 原 則 に 応 じたテスト 方 針 の 策 定 と 実 施 を 行 う 3) 多 端 末 テストの 実 施 Native アプリケーションの 場 合 フラグメンテーション 問 題 と 言 われるように 端 末 の 特 性 ( 画 面 解 像 度 バージョン 及 びカスタマイズ 有 無 )に 依 存 する 問 題 が 顕 著 になることが 多 い そのため 端 末 特 性 に 依 存 する 様 なテストは 対 象 条 件 と 合 致 する 複 数 の 端 末 で 行 う 事 で 端 末 依 存 性 が 問 題 とならない 様 品 質 を 保 証 することが 求 められる しかし 市 場 に 存 在 するすべての 端 末 を 調 達 し 同 じ 試 験 内 容 を 実 施 することは 非 常 に 困 難 である そこで テストを 行 う 端 末 を 特 性 毎 に 分 類 し テスト 項 目 の 自 動 化 により 反 復 作 業 を 省 力 化 してしまうこと が 重 要 となる ここで 端 末 依 存 が 顕 著 になる 主 要 な 項 目 には 以 下 が 挙 げられる [ 多 端 末 でのテストが 必 要 となる 基 準 ] AndroidOS バージョン 対 象 バージョンを 広 範 囲 に 指 定 している 場 合 表 示 画 面 解 像 度 特 に Native アプリケーションの 場 合 には 解 像 度 の 違 いによる 表 示 差 異 の 確 認 が 必 須 カメラ 等 端 の 内 蔵 デバイスを 利 用 する 場 合 特 にアプリケーションが 動 作 保 証 する 範 囲 の 確 認 外 部 デバイスと 連 携 する 場 合 アプリケーションの 要 件 から 上 記 を 考 慮 することで 品 質 を 保 証 するために 最 低 現 必 要 な 端 末 の 種 類 を 選 定 することができる
また 実 際 の 試 験 実 施 においては 本 紙 第 2 章 Android Application テスト 項 目 に 挙 げた 観 点 から 主 要 端 末 で 手 動 でのテストを 行 う 項 目 自 動 化 を 行 う 項 目 とを 分 類 することにより コスト 及 び 検 証 期 間 の 短 縮 を 図 りながら 品 質 の 担 保 が 可 能 となる 4) テストの 自 動 化 と CI テストは 最 終 的 なアプリケーションの 品 質 確 認 として 行 うだけでなく 問 題 を 早 期 に 摘 出 する 事 で 開 発 の 効 率 性 を 高 める 事 も 意 識 して 実 施 する 事 が 望 ましい その 為 には 継 続 的 インテグレーション(CI) を 導 入 し プロジェクトメンバーがそれぞれ 開 発 した 結 果 を 頻 繁 に 結 合 し 定 期 的 にビルドやテストを 行 うような 環 境 を 作 る 事 が 重 要 である 不 具 合 は 早 期 に 摘 出 し 対 応 する 方 が 対 策 費 用 が 抑 えられる 本 ガイドライン では 前 述 した 通 り Native Web アプリどちらもテストの 自 動 化 を 前 提 としており 実 施 コストと 不 具 合 発 生 時 の 対 策 コストの 両 方 を 抑 える 事 で より 作 りこみ 段 階 に 充 分 な 工 数 を 割 ける 方 法 を 推 奨 する 継 続 的 インテグレーション CI( 英 : continuous integration)とは 主 にプログラマーのアプリケーション 作 成 時 の 品 質 改 善 や 納 期 の 短 縮 のための 習 慣 のことである エクストリーム プログラミング (XP) のプラクティスの 一 つで 狭 義 にはビルドやテスト イン スペクションなどを 継 続 的 に 実 行 していくことを 意 味 する 特 に 近 年 の 開 発 においては 継 続 的 インテグレーションをサポートする ソフトウェアを 使 用 することがある
Appendix A. テストツール テストの 自 動 実 行 及 び CI においては 以 下 にあげるツール 類 を 有 効 活 用 する 事 が 望 ましい ガイドラインより 各 プロジェクトでの 開 発 /テスト 計 画 及 び CI の 策 定 を 行 い その 運 用 を 完 遂 する 事 がアプ リケーションの 安 定 的 な 品 質 確 保 に 繋 がる [ 本 ガイドラインにおいて 推 奨 するツール] Scirocco / Scirocco for Webdriver http://www.sonix.asia/service/library WebDriver http://seleniumhq.org/projects/webdriver/ NativeDriver http://code.google.com/p/nativedriver/ AndroidDriver http://code.google.com/p/selenium/wiki/androiddriver Robotium http://code.google.com/p/robotium/ UIAutomator (Provisional) http://developer.android.com/tools/help/uiautomator/index.html SOASTA Test http://www.soasta.com/testing-solutions/mobile-application-testing/ Jenkins (CI) http://jenkins-ci.org/