MasaoApril's Library.

Software Testingなネタを書いてみた。

"Rapid Software Testing"のスライドを読んでみた:(1)概要

本稿を書いたきっかけ

ふと、

とつぶやいていたら、

@yumotsuyoさんから

とリクエストを頂きましたので、"Rapid Software Testing"について2~3回に分けてまとめてみます。

 今回は、概要(考え方や知恵)です。

"Rapid Software Testing"の資料

 下記サイトの右側の囲みにある"RST Slides(pdf)"を参照下さい。 →http://www.satisfice.com/info_rst.shtml

 念のため、ファイルの参照先を下記に示します。
http://www.satisfice.com/rst.pdf

注意

 本稿は、英訳が誤っている可能性がありますので、"Rapid Software Testing"の資料で紹介したスライド(英語)をご確認下さい。また、指摘事項がありましたら、コメントに記入頂けると助かります。

"Rapid Software Testing" とは?

  • より早く、少ない手間で、優れた結果を出すためのテストの方法に焦点を当てた考え方や知識や技能
  • 高速に学習すること。例えば、製品の問題を見つけ、報告したり...

(1)テストする方法を学ぶ

(1-1)テスターは道を照らす

 [1]リスクのギャップ

 「知っていること」と「知る必要があること」の間にギャップがある。
→テストの目的は、そのギャップを縮めること。

 [2]品質やバグの定義
  • 品質は誰かのための価値である。
  • バグは、製品の価値を脅かす何らかのものである。

 これらの定義は、うっかり重要な問題を見逃すことを最小限になるように設計されている。

(1-2)"Checking"はテストじゃないと言いたい

 製品を操作することで仕様の成果物をチェックすること。

 [1]観察

  仕様の観察を収集する特定の方法で製品に影響される。

 [2]評価

  アルゴリズム的に決まったルールに沿った観察を適用。

 [3]報告

  失敗した判断材料を報告。

(1-3)テストの3つの役割

 [1]自由

  製品の利用者に害を与えるための能力。

 [2]知恵

  製品の利用者に害を与えない方法を知る。

 [3]責任

  製品の利用者に害を与えない選択をする。

(2)バグはどこにいるか?

 バグを探すなら、製品を取り扱う必要がある。そのためには、製品の良いモデルが必要である。

(2-1)"Rapid Testing"とは?

 早く学習することである。

以下の3要素がある。

 [1]モデル
 [2]思考
  • 垂直(論理)思考
  • 横断(創造)的思考
 [3]感覚
  • 漠然とした感じ
  • 直感
  • 動機

(2-2)モデルは観察と推測を結びつける

 [1]モデル:考え、行動、オブジェクト

  例えば、図やリスト、集計表、人、おもちゃ、方程式、実演、プログラム

 [2]良いモデル

  考え方などの説明を理解したり、操作することを手助けする。

 [3]テスターへ

  推測と観察を区別すべき。

 [4]メンタルモデル

  観察と推測の関連を形成する。

 [5]Defocus

  水平思考である。

 [6]Focus

  論理(垂直)思考である。

(2-3)Coverage(対象範囲)

 [1]製品の対象範囲

  どのような製品の側面で見つけているのか?

 [2]リスクの対象範囲

  どのようなリスクがあってテストしているのか?

 [3]要求の対象範囲

  どのような要求があってテストしているのか?

(2-4)テスト条件

 [1]テスト実施時に網羅できる製品の明確な要素
 [2]モデル→テスト条件→テスト設計→テスト手順→テスト

(2-5)製品を網羅したいかい?

 [1]構造
 [2]機能
 [3]データ
 [4]インターフェイス
 [5]基盤
 [6]操作
 [7]時間

(2-6)本質的なテスト容易性:可観測性と可制御性

 ガラスで保護された時計を想像しよう。
→近づくこともできないし、突っついたり、探ることが許されない...

(2-7)"A Heuristic Test Strategy Model(経験則によるテスト戦略モデル)"

 [1]Input
  [1-1]プロジェクト環境

   進め方のリスク

  [1-2]品質基準

   oracleのリスク

  [1-3]製品要素

   対象範囲

 [2]Process(テスト)
  [2-1]多様性
  [2-2]コストvs価値
  [2-3]スキル
  [2-4]経験
 [3]Output

   把握された品質(報告)

(2-8)テストとは何か?

  1. テスト空間とリスクをモデル化する
  2. 対象範囲を決める
  3. Oracle(実在するシステムや競合製品、マニュアル、専門知識など)を決める
  4. テスト手順を決める
  5. テストシステムを設定する
  6. テストシステムを操作する
  7. テストシステムを観察する
  8. テスト結果を評価する
  9. テスト結果を報告する
 上記の1.~4.は「テスト設計」である。また、5.~9.は「テスト実行」である。

(3)テスターのようになるにはどのように考えればよいか?

(3-1)問題解決することを好きになろう!

(3-2)科学者のように考える!

(3-3)どうやって我々は"何を"知るか?

 もしXを見たら、多分Yだろう。理由は恐らく、A, B, C, D, 等々だから。

(3-4)科学的スキル

 [1]受けることを記述する
 [2]知ることについてクリティカル思考すること
 [3]仮説と実験を設計すること
 [4]既に知っていることに関わらず考える
 [5]他の考えを分析すること
 [6]原因と影響について理由付ける
 [7]この瞬間として知ることを信じるこに過ぎない事実を扱う

(3-5)テストとは問うことである

 [1]理解できないかもしれない

  「解釈」「モデルの状態」「コミュニケーション」の誤り。

 [2]理解したことが真実でないかもしれない

  「情報を見逃す」「観察から何も生まない」「動かないテスト」

 [3]ストーリー全体を知ることができないかもしれない

  恐らく、見ていることが全てではない

 [4]真実は考えることより望ましくないかもしれない

(3-6)テスターのように考える:失った言葉を見つける

 [1]プログラマ曰く、「バグを直した」

  私は何にもかも生み出せない。したがって、修正すべきだ。

 [2]某シアトルのソフトウェア開発会社のワードプロセッサ

  使っているとよくクラッシュする。したがって、それは悪い製品である。

 [3]段階
  • 第1段階:テストシステムを再起動
  • 第2段階:アプリを起動する

(3-7)手品のトリックと分かりにくさ

 [1]我々の思考は限界がある
  1. 可能性を誤解する
  2. 経験則を間違って利用する
  3. 専門知識にかける
  4. 詳細を忘れる
  5. 正しいことに注意を払わない
 [2]製品を取り巻く世界は隠れている
  1. 状態
  2. 順序
  3. 過程
  4. 属性
  5. 可変
  6. 識別

所感

 英語に四苦八苦しながら一通り読んだところ、自分が過去に担当したプロジェクトで工夫していることに当てはまったり、次の案件で試してみようと思うこともあり、これまでのテスト及びプロジェクト全体をふりかえるきっかけとなった。

次回

 Key Ideaについて、まとめてみます。