読者です 読者をやめる 読者になる 読者になる

sos の 作業メモ

プログラミングや英会話学習、マイルや旅行、日常生活など。最近はWebFormなASP.NETのお守りがお仕事です。

日々の生活にhappyをプラスする|ハピタス Gポイント

「Androidアプリ テスト技法」第2章前編

android 読書

Androidアプリテスト技法

Androidアプリテスト技法

前回の続き

§2 Android テスト実践

挑戦!テスト設計

ソフトウェア品質モデル

ソフトウェア品質モデルの検討を行う。以下を6段階で評価する。( ISO/IEC 9126を元に作ったものらしい) 全ての項目をきっちりやろうとしないということが大切なんだそうだ。

  • 機能の実装度合い

    機能は、主要機能(必須)と貢献機能(あればいいな)とに分類されるが、後者の貢献機能の実装度を示すパラメータ

  • セキュリティとプライバシー

    • 気密性 - 適切な権限をもつ人のみがデータへアクセスできること
    • 完全性 - データに破損が無いこと、
    • 可用性 - 製品を利用したい時に利用できること

    プライバシーは、これらセキュリティを確保した上でなりたつもの

  • 操作の覚えやすさと気持ちよさ

    ユーザビリティのうちでも特に重要なもの

  • 時間と資源のパフォーマンス

    • 時間効率性 - 操作や目的を達成する際の、ユーザーの待ち時間の少なさ
    • 資源効率性 - CPUやメモリ等の資源の利用効率
  • 変更のしやすさ

    構成管理や、ソースの可読性、コーティング規約への準拠といった、機能変更、拡張のし易さを指す

  • スケーラビリティ

    利用規模やネットワークが増大した時に、どれだけ容易に追従できるか

6段階の基準は以下

  • 0 - 一切考慮しない
  • 1 - 余裕があれば考慮する
  • 2 - あまりリソースをかけずに考慮する
  • 3 - 考慮する
  • 4 - 重要。慎重に考慮する
  • 5 - 最重要。最大限のリソースを投入する

メタ水準

1以上の評価がついたものに対し、「製品としての特性に置き換えたら何になるか」(何が x どうなら良い?)のメタな水準を考え、ステークホルダに合意をとる。

メタ水準を検証するためのテストを考える

メタ水準について、どのようなテストを行えば"良い"が検証できるのかを考える

テスト設計に進む

  • タスクの設計
  • ペルソナの検討
  • ユーザテスト実施
  • インタビュー

テスト設計技法

テスト分析やテスト設計をして、考えるべき観点を明確化しても、実際のテストで用いるテストケースを求めにくい場合がある。こういった時に有効なのが、テスト設計技法。

同値分割法、境界値テスト、状態遷移テスト、デシジョンテーブル、直行表、ペアワイズ法を紹介する。

同値分割法

入力値を意味的・仕様的に同じように扱えるグループに分け、各グループの代表値をテストデータとして選ぶ技法。

同値分割法のメリットは、膨大なパターンの入力を絞り込めることと、使用に体するテストの網羅性を高める事。

境界値テスト

テストの入力の境界を分析し、それをテストデータに選ぶ技法。 境界をピックアップする方法にはいくつかのバリエーションがあり、一般的には以下の2つを使う。

  • 境界の内側と外側の2つの値
  • 境界値と、隣り合わせの2つの値の、計3つの値

境界値のメリットは、「欠陥が境界に偏在する」という傾向に依拠している。

同値分割法と境界値テストの使い所

他のテスト設計技法を使う際も、まず同値分割でどのような同値クラスがあるかを分析し、それから各同値クラスの組み合わせを他のテスト設計技法で明らかにしていく場合も少なくない。 一方、境界値テストは、数値入力、入力も次数、時間経過、数や大小比較を扱う場合に汎用的に活用できる。

同値分割法、境界値テストを使う際は、以下にきをつけるとより効果的なテスト設計が可能となる

  • 無効同値クラスに気をつける

    仕様で明記されていない、無効な値の同値クラスがないか検討する

  • 入力を分ける

    複雑な仕様の場合、入力を切り分けてから同値分割・境界値分析をするとよい

  • 図化する

    ミスを防ぐテクニックとして、仕様を図化するとよい

  • グレーボックスで設計する

    内部構造を見て、間引きが適切かどうかを判断する

状態遷移テスト

ユーザの操作がなくとも継続的に保持され、テスト対象に影響をあたえるものを状態と呼び、この状態の遷移に着目したテストを状態遷移テストという。

仕様分析

テストすべき情報をすべてピックアップし、状態遷移図、状態遷移表で整理していく。 状態遷移図は全体像をビジュアルで把握するのに役立ち、状態遷移表は漏れのない分析が得意。 こうした差異があるため、両方を作成して互いのメリットを活かす。

状態遷移表は、状態x状態と状態xイベントのものがあり、前者は漏れのない遷移、後者はイベント発生時の遷移を網羅的にチェックすることが可能。

テスト設計

分析で仕様を明確化したら、次に対象を切り分けて、状態に対するテスト、遷移に対するテストを作って行く。

Nスイッチカバレッジ・Nスイッチテスト

遷移に対するテストでは、「N+1回の連続遷移に対する網羅性」という意味で、Nスイッチカバレッジという用語を使用する。Nには任意の数字が入り、例えば0スイッチカバレッジでは、"1回の遷移に対する網羅性"であり、ある状態からある状態への遷移のことで、1スイッチカバレッジでは、ある状態からある状態へ遷移し、さらにある状態に遷移するパスの網羅性であり、これらのパスが全て網羅される時に100%となるもの。

Nスイッチカバレッジを基準にしたテストをNスイッチテストと呼び、100%の網羅を目的とする場合は行列計算でテストケースを求める。 状態遷移表をそのまま行列として、N+1乗の行列計算を行い、テストケースに展開する。 (積算は連続して発生するイベントとし、加算の部分で別のテストケースに分ける)

遷移に対するテスト

0スイッチカバレッジ100%のテストと、重要な状態遷移を選び、Nが1以上のスイッチカバレッジをテストする

状態に対するテスト

全ての状態を通るようにテストケースを作成し、それぞれの状態が適切に動作するかを確認する

状態遷移テストの使いどころ

ソフトウェアの状態は一般的に膨大で複雑。状態遷移テストの適用には、「多くの機能が依存している」「安全性を支えている」「バグリスクがある」といった重要度を見定めて選出するとよい

組み合わせテスト

OSのバージョン: 3.0 / 4.0 
機種: 製品A / 製品B 
言語: 日本語 / 英語

こういったパターンの組み合わせのテスト

  • 因子 - OSのバージョンや機種
  • 水準 - 3.0や4.0といった、入力がとりえる値

デシジョンテーブル

入力と出力の因子を一列目におき、二列目以降で組み合わせを明示する表。記述方法は JIS X 0125等で規格化されている。デシジョンテーブルは、任意の値を表す"-"(空白やIgnoreでも可)といった記述で、表を最適化することも可能。

入力や出力の因果関係を表で整理して、縦軸をテストケースに展開する形がとられる。

ペア構成テスト

組み合わせ数が膨大で全網羅が困難な場合、2因子間の組み合わせを網羅するペア構成テストを用いて組み合わせ数を削減する。

代表的な技法は「直交表」と「ペアワイズ法」

直交表

2次元の表で、因子を一行目、水準を表中に記述する。 となり同士の因子は全組み合わせになるのを利用して、冗長な全組み合わせのテストを省略する

  • テスト対象の因子・水準に合う直交表を選択する
  • 直交表に因子・水準を割り付けていく

ペアワイズ法

全てを網羅する組み合わせをを被覆で生成する。様々なアルゴリズムが考案されており、自動化ツールを使って設計する。

一般的なツールとして PICTがある

ペア構成テストのメリット

2因子間の組み合わせバグを効率的かつ網羅的に検出できることと、全網羅と比べて全体的な網羅性をある程度確保しつつ、組み合わせ数を削減できること。

ペア構成テストの使いどころ

直交表とペアワイズ法のどちらを使うかは、どのメリットを重視するかで決める。

直交表は、3因子以上の組み合わせ網羅度でもある程度平均的に確保でき、組み合わせ数を最小限に抑えられる

ペアワイズ法は、ツールによる自動化の恩恵で、因子や水準の数への柔軟な対応や、禁則の設定ができる

  • 特にテストの必要性が高い重要な組み合わせは、全網羅やデシジョンテーブル
  • テストの必要性がやや高い組み合わせは、ペア構成テストで設計士、さらに不足する組み合わせを追加
  • 重要でない組み合わせは、単機能テストとピンポイントで適宜組み合わせを選択

なんだか用語がちらほらでてきてわかりにくくなってきましたが、最初に抱いていたイメージよりは簡単そう。 この調子で頑張って読み進めて行きます。

次回へ続く