Comments
Description
Transcript
ソフトウェアテスト入門(1)
ソフトウェアテスト入門(1) 2007/11/29 ディノ 竹腰彰成 目的・ターゲット 目的 ◦ テストの基本的手法を身につける ⇒経験的になんとなくやる、ではなく やるべきテストを判断できるようになる ターゲット ◦ テストについて勉強したことのない人 ◦ テスト経験の浅い人 内容(予定) テストの目的とは テストフェーズの分類 テストの難しさを認識する テスト技法 Webアプリのテスト 3回に分けて実施(予定) テストの目的 テストの目的は2つ バグ出し ◦ コーティングミスを探し出し、修正する 品質保証 ◦ テスト仕様書は品質を示す客観資料 「このシステムの品質は?」 「これだけのテストにパスしてます」 納品物に含まれることも多々ある 品質保証に重点をおいて話を進めます テストフェーズの分類 どんなテストがあるか 品質保証したい対象ごとにある 受け入れ テスト 要件定義 外部設計 総合テスト 内部設計 実装 結合テスト このあたりの 話をします 単体テスト それぞれの設計書をもとに実施 テストの難しさを認識する 始める前に みなさんどの程度できますか? ◦ 知っているつもりでも意外と難しい 演習問題:テストケース作成 次のプログラムについてテストケース を作ってみましょう ◦ 入力した三角形の種類を答えるプログラ ム 正三角形 二等辺三角形 ただの三角形(丌等辺三角形) ◦ 1~100の整数のみ受けつける 演習問題:テストケース作成 制限時間:5分 メモ書きでOK 着眼点があっていればOK 仕様にない部分も書いてみてください 入力した三角形の種類を答えるプログラム ・正三角形 ・二等辺三角形 ・ただの三角形(丌等辺三角形) 1~100の整数のみ受けつける 答え合わせ:レベル1 正常系:表示結果確認 ◦ 3辺が同じ長さで「正三角形」と表示 ◦ 2辺のみが同じ長さで「二等辺三角形」 3通り全部実施(5-5-3, 5-3-5, 3-5-5) ◦ 3辺とも違う長さで「ただの三角形」 正常系:1~100を受付 ◦ ◦ ◦ ◦ すべてに 1を入力 すべてに 100を入力 それぞれに 0を入力 それぞれに101を入力 ⇒ ⇒ ⇒ ⇒ OK OK NG NG 答え合わせ:レベル2 異常系:入力形式の異常 ◦ 3辺それぞれに数字以外の入力 ◦ 入力が2辺以下 ◦ 入力が4辺以上 異常系:入力値の異常 ◦ それぞれに0を入力 ◦ それぞれに負の数を入力 ◦ それぞれに小数を入力 答え合わせ:レベル3 異常系:三角形にならない 2辺の和 =残りの1辺 2、3、5など 2辺の和 < 残りの1辺 2、4、8など 直線に なっちゃう 2 3 5 とどかない! 2 4 8 仕様抜け:対象システムの理解が重要 演習問題で何が言いたかったか このプログラム自体は簡単 テストの難しさはそれに関係ない ◦ きっちりやるとかなり難しくなる テスト技法 技法をつかう目的 全部を入力するわけにはいかない ◦ 三角形の入力 100 × 100 × 100 = 100万パターン ◦ 現実的に無理、省略しよう どう省略する? 省略した入力パターンで バグをだしてはいけない! バグのありそうなところだけを もれなくテストする 技法を使って もれなく・効率的に テスト技法の種類 ブラックボックステスト ◦ ◦ ◦ ◦ 同値分割 境界値分析 デシジョンテーブル 原因結果グラフ 今回はこれだけ 残りは次回 ホワイトボックステスト モンキーテスト ブラックボックステスト ブラックボックステストとは ブラックボックス = 中が見えない 箱の中のロジックは考慮しない ◦ 入力と出力のみで判断 出力 入力 中で何をしているか分からないけど 期待通りの動きをすればOK 同値分割 同値分割 入力値を意味ごとに分ける それぞれの代表値でテスト もれなく ⇒ 意味別に全部網羅 効率的に ⇒ 代表値だけ 英字のみ受けつける 有効な値 無効な値 a b c d e f…… ……V W X Y Z !#$%&()?/ @ * ¥ { } …… 代表値「a」 代表値「@」 同値分割の例 入力フォーム:フリガナ ◦ 全角カナ・半角カナともにOK ◦ それ以外はNG 有効な値 無効な値 アイウ……ワヲン ガギグ……ブベボ パピプペポ ア イ ウ …… ワ ヲ ン ガギグ…… ブベボ パピプペポ あいう…… 亜意卯…… ! # $ % & …… さらに分割可能 全角・半角・ひらがな・漢字・記号 どこまで分割する? 「動作が変わらない」値に分類 ◦ 仕様上、変わらない ◦ 経験上、変わらない ひらがなと漢字を分割するかどうか XSSを考えると < などは他の記号とは別 セキュリティ関係は別テストに分ける? 最終的には工数と重要度を考えて判断 どれを代表値にする? バグが出やすそうなもの ◦ 経験上出やすい:「ソ」とか ◦ 理論上出やすい:境界値分析(これから説明します) よく使われる値 ◦ 真ん中ぐらいの値とか 境界値分析 境界値分析 処理の境目にバグはひそみやすい ◦ for文で丌等号を間違えるとか // 1~100までのfizzbuzz for ($i = 1; $i < 100; $i++) { if ($i % 15 == 0) { echo 'fizzbuzz '; } elseif ($i % 3 == 0) { echo 'fizz '; } elseif ($i % 5 == 0) { echo 'buzz '; } else { echo $i; } } あれ? 境目をテスト! 境界値分析の例 ページャを考えてみる ◦ 1ページに5件まで表示 ◦ 6件以上のときは目次を表示 1ページだけ 2ページ以上 << 1 2 3 >> ・チリチリ ・カリガリ ・gooz ・チリチリ ・カリガリ ・gooz ・ゴールドラッシュ ・つけ麺大臣 << 1 2 3 >> 目次の表示をテスト 同値分割 ◦ 目次が表示されない:0~5件 ◦ 目次が表示される :6~∞件 5件と6件で動作が変わる 「5件」と「6件」が境界値 「0」例外的な値 「0」はバグが出やすい ⇒常にテストすべき ◦ 数字の「0」 ◦ 入力が「0件」 ◦ (PHP)null、空文字列、falseとも関係 最低限これだけはしたい 0件表示 ◦ データがなくてもエラーにならないこと 5件表示 ◦ ページいっぱいに表示 ◦ 目次は表示されない 「0」は 常にテスト対象 6件表示 ◦ 1件のみ表示 ◦ 目次が表示される 動作が変わるポイ ントをテスト (ほか、目次の表示形式に関するテストなどが必要になる) 「1件のみ表示」は? 「1件」も境界値だけどやらないの? 「5件表示」とほぼ同じテストになる ◦ 無駄ではないけど重要度がやや低め 1件のみ ・チリチリ 5件 ・チリチリ ・カリガリ ・gooz ・ゴールドラッシュ ・つけ麺大臣 今日のまとめ テストの目的とは ◦ バグ出し・品質保証 ◦ 品質保証したい対象ごとにテストがある 演習問題 ◦ きっちりやるのは結構大変 テスト技法 ◦ 同値分割 ◦ 境界値分析 ご清聴ありがとうございました