開発を楽しくする
ソフトウェアテスト～ソフトウェアテストは開発の「達成感」に貢献する～

JaSST'13 Tohoku
31 May 2013 13:10 ～14:50© Copyright 2013 Hewlett-Packard Development Company, L.P. The information contained herein is subject to change without notice.

自己紹介

湯本 剛
Consultant at HPSoftware Japan

ソフトウェアテスト現場で10年ほど経験を積んだ後、テストプロセス改善のコンサルティング、
教育に約7年ほど従事
2010年8月よりHP Softwareのテストツール導入支援コンサルタントに転職し、主にテスト
ケース管理ツール、キャプチャリプレイツールの導入支援に従事

外部活動
ＮＰＯ法人ASTER 理事• JSTQB 技術委員
• ISTQB CTAL WPメンバー• ソフトウェアテストシンポジウム（JaSST）東京実行委員

ISO/IEC JTC1 SC7 WG26 エキスパート
日科技連SQiPステアリング委員

書籍、Web記事や雑誌への執筆や翻訳

得意分野
テストマネジメント、テスト分析
2© Copyright 2013 Hewlett-Packard Development Company, L.P. The information contained herein is subject to change without notice.

HPのアプリケーション品質管理ツール群
HPのテストツール全体像
スタブツール
手動テスト支援ツール

キャプチャリプレイツール

Sprinter

QuickTestProfessional
Unified
Functional Testing(UFT)

Service Virtualization
外部サービスをシミュレーション
して、実際のサービス稼動を想定したテスト環境を作成①アプリケーション操作を記録（スクリプト化）②スクリプトを再生し、自動検証
データ駆動、キーワード駆動テスト

さまざまなテスト対象
Webサーバ

APサーバ

データベース

負荷テストツール
PerformanceCenter&LoadRunner（ with Diagnostics）①アプリケーション操作を記録（スクリプト化）②別PC上で多重実行③パフォーマンスデータの収集④結果分析

セキュリティテストツール
Weblnspect,Fortify
Webアプリケーションに対して様々なアタックをかけ、脆弱性を検証する

データベース

テストマネジメントツール
QualityCenter
リリース管理、要件管理
テスト条件、テストケースの管理
不具合管理
テスト実行管理（スケジューラ）
テスト結果収集、進捗参照

3

データベース

テスト実行管理（自動、手動）© Copyright 2013 Hewlett-Packard Development Company, L.P. The information contained herein is subject to change without notice.

要件カバレッジ

品質リスク分析アジェンダ「楽しい」ソフトウェア開発について考えた• 「達成感」を感じながら仕事ができるか？

ソフトウェアテストは開発にどう貢献しているか• ソフトウェアテストの役割と価値

ソフトウェアテストの全体像• ソフトウェアテストに必要な活動を知る＝何をよくしていけばよいかを知る

ソフトウェアテストにて押さえておくべきこと• テスト設計• テスト分析• テストツール

4© Copyright 2013 Hewlett-Packard Development Company, L.P. The information contained herein is subject to change without notice.

「楽しい」ソフトウェア開発について考えた「達成感」を感じながら仕事ができるか？

© Copyright 2013 Hewlett-Packard Development Company, L.P. The information contained herein is subject to change without notice.

ソフトウェア開発は楽しいですか？
コーディングは楽しいけど。。。

みんなのを統合してビルドすると動かない

元の仕様がよくわからないときはキツイ

仕様変更が終盤に多発するとげんなりする

6© Copyright 2013 Hewlett-Packard Development Company, L.P. The information contained herein is subject to change without notice.

ソフトウェアテストは楽しいですか？
もっと効率的にテストしたいテストを書いてから実装しないと気持ち悪い

バグが出続ける夢を見て夜も寝れません
これからテストってなると憂鬱になる

バグを見つけろと言われても見つかりません

7© Copyright 2013 Hewlett-Packard Development Company, L.P. The information contained herein is subject to change without notice.

たとえばこんなこと言われますか？
テスト「あるある」その1

できごと

考え

気分

「とにかく全部テストしろ！残された時間でできる限りテストして品質を上げろ！」と言われる「とりあえずテストしておいて！
ちゃんと動けばよいから」って言われる「バグ密度が○○だから、そこに達成するまでバグを見つけなさい！」と言われる「信頼度成長曲線の予測だと後○件はバグが潜在しているから
まだテストしなさい」と言われる
8© Copyright 2013 Hewlett-Packard Development Company, L.P. The information contained herein is subject to change without notice.

ご自身で埋めてみてくださいたとえばこんなことありますか？
テスト「あるある」その2
できごと

考え

気分

想定外のバグが出て困る

バグが出ても対応工数がな
いので困る

バグがでると怒られるバグが出なくて怒られる

9© Copyright 2013 Hewlett-Packard Development Company, L.P. The information contained herein is subject to change without notice.

ご自身で埋めてみてください「楽しい」ってどういうことか？
「楽しい」の意味• １ 満ち足りていて、愉快な気持ちである• ２ 富裕である。金持ちである• ３ 作物の出来が豊かである（goo 辞書：http://dictionary.goo.ne.jp/leaf/jn2/138112/m0u/）

どんなとき楽しいか？
• お酒を飲んでる• デートしている• 音楽をしている（i.e.趣味に没頭している）• ゲームをしている＜楽しい時の状態＞• 自分の想い/気持ちが通じる/繋がる• 没頭する• 時間を忘れる

ゲーミフィケーション
ゲームデザイン手法や仕組みを用いて問題の解決やユーザー契約などを獲得すること• 単にチャラチャラ面白いだけでは、満足しない…はず（だよね！）–
10

何かを達成するための仕掛け…達成感が物事を楽しくする© Copyright 2013 Hewlett-Packard Development Company, L.P. The information contained herein is subject to change without notice.

これは楽しいですか？

撃ったのか
な？

11

© Copyright 2013 Hewlett-Packard Development Company, L.P. The information contained herein is subject to change without notice.

「物事を楽しくする仕掛け」がソフトウェア開発にあるか？
ゲーミフィケーションの解説から「切迫感のある楽観性」（Urgent Optimism）• 合理的に「成功できる」と信じられると障壁に立ち向かう情熱がわき、自ら「すぐに」行動を起こしたくなる「ソーシャル構造」（Social Fabric）• ユーザー同士が共に時間を過ごし、互いを認め合う、そういう何かを一緒にして行くことで、信頼し、快く一緒に何かをしようと思える「幸せを感じる生産性体験」（Blissful Productivity）• 人間は、リラックスしているよりも、意味があり(meaningful)、報われる（rewarding）ことを一生懸
命やることに幸せを感じるように最適化されている「叙事詩的な意味合い」（Epic Meaning）• これはすごいことだ、畏敬の念をいだいてしまうと信じられることに強く動機づけられる

ジェーン・マゴニガル 「ゲームで築くより良い世界」 より引用 http://www.ted.com/talks/jane_mcgonigal_gaming_can_make_a_better_world.html
12© Copyright 2013 Hewlett-Packard Development Company, L.P. The information contained herein is subject to change without notice.

ソフトウェア開発は楽しいですか？
コーディングは楽しいけど。。。
なぜこの機能作るかがわからん！
みんなのを統合してビルドすると動かない

いつものこと、あきらめてるよ
困ったもんだ

元の仕様がよくわからないときはキツイ
調べようにも誰にも聞けばい
いのかね..

仕様変更が終盤に多発するとげんなりする
どんだけ直せばいいの？

13© Copyright 2013 Hewlett-Packard Development Company, L.P. The information contained herein is subject to change without notice.

ソフトウェアテストは楽しいですか？
もっと効率的にテストしたいテストを書いてから実装しないと気持ち悪い

だって、全部やれバグが出続ける夢を見って言ってもできないよ

それなのにテスト書く時間が確保されていない！

て夜も寝れません
一生バグを直し続けなきゃいけない気がしてくる

これからテストってなると憂鬱になるバグが出たってどう直せばい
いかわからないし
バグを見つけろと言われても見つかりません
適当に触っても一向にバグが出ないし、、帰れない

14© Copyright 2013 Hewlett-Packard Development Company, L.P. The information contained herein is subject to change without notice.

こんな状況で、ソフトウェア開発（テスト）の…
もっと効率的にテストしたいテストを書いてから実装しないと気持ち悪い

だって、全部やれバグが出続ける夢を見って言ってもできないよ

それなのにテスト書く時間が確保されていない！

て夜も寝れません
一生バグを直し続けなきゃいけない気がしてくる

これからテストってなると憂鬱になるバグが出たってどう直せばい
いかわからないし達成感ある？

バグを見つけろと言われても見つかりません
適当に触っても一向にバグが出ないし、、帰れない

15© Copyright 2013 Hewlett-Packard Development Company, L.P. The information contained herein is subject to change without notice.

ソフトウェア開発には「達成感」を得る仕掛けがあるか？
ゲーミフィケーション活用実践のための11の施策「切迫感のある楽観性」• 入門教育（Urgent Optimism）• 状況の可視化• 無理なくやり方を理解できる• 品質、進捗、課題などが常に可視化される「ソーシャル構造」（Social Fabric）• 自主・自律• 強制的でなく自主的にできる• 難易度コントロール• レベルに合わせた仕事が割り振られる• 協働「幸せを感じる生産性体験」（Blissful Productivity）• 協働で成し遂げる• 競争• 仕事において、良い意味でのライバルを持つ• ダイレクトフィードバック「叙事詩的な意味合い」（Epic Meaning）• アクションの結果が即座に出る• ルール• 物事の進め方が合理的である• 称号・成長• 成長に応じてレベルアップする• デザイン・演出• 気持ちを掻き立てる仕掛けを取り入れる• 偉大なる段階的ゴール• 「世界一になる」といった類の偉大なゴールが明確に存在し、到達するまでの段階ゴールも明確である
16

安部 一真 「ゲーミフィケーションをマネジメントに活用する方法」～ロールプレイン
を参考に加筆
http://www.pmaj.or.jp/library/regular.html© Copyright 2013 Hewlett-Packard Development Company, L.P. The information contained herein
is subject to change without notice.
グゲームに学ぶ「部下を魅了する」リーダーシップ～

ソフトウェアテストは開発にどう貢献しているか？

ソフトウェアテストの役割と価値© Copyright 2013 Hewlett-Packard Development Company, L.P. The information contained herein is subject to change without notice.

ソフトウェア開発を一軒家購入に例えると…
– 要求を満たす製品を作るための活動を定めたもの

どういった順番で作ると良いのか• 家の場合骨格

設計

部品
中身を決めていく

骨格を細かくしていくを作るにも、
順番がある

完成するまでにどういった成果物が出
来るのか

構想

設計図

各工程は誰が受け持つのか部品
検査シート• システム開発の場合
ソフトウェアシステム設計

ソフトウェア設計（アーキテクチャ設計）
void controler(void){
lampOn();fanOn();
timerStart(10);}void lampOn(void){switch(lampstate){case ON:
break;
case OFF:
lampRegister = ON;
lampSatate = ON;
break;
default:
break;}}

void controler(void){
lampOn();fanOn();
timerStart(10);}void lampOn(void){switch(lampstate){case ON:
break;
case OFF:
lampRegister = ON;
lampSatate = ON;
break;
default:
break;}}

void controler(void){
lampOn();fanOn();
timerStart(10);}void controler(void){
lampOn();fanOn();
timerStart(10);}void lampOn(void){switch(lampstate){case ON:
break;
case OFF:
lampRegister = ON;
lampSatate = ON;
break;
default:
break;}}

void fanOn(void){･････

void lampOn(void){switch(lampstate){case ON:
break;
case OFF:
lampRegister = ON;
lampSatate = ON;
break;
default:
break;}}

void fanOn(void){･････

void fanOn(void){
･････

}

void timerStart(int time){
･････

}

void timerStart(int time){･････

void timerStart(int time){
･････
}

}

骨格を細かくしていく

中身を決めていく
void controler(void){
lampOn();fanOn();
timerStart(10);}void controler(void){
lampOn();fanOn();
timerStart(10);}コンポーネント

void controler(void){
lampOn();fanOn();
timerStart(10);}void lampOn(void){switch(lampstate){case ON:
break;
case OFF:
lampRegister = ON;
lampSatate = ON;
break;
default:
break;}}

void fanOn(void){･････}
void timerStart(int time){･････}

void controler(void){
lampOn();fanOn();
timerStart(10);}void lampOn(void){switch(lampstate){case ON:
break;
case OFF:
lampRegister = ON;
lampSatate = ON;
break;
default:
break;}}
void fanOn(void){･････}
void timerStart(int time){･････}

void controler(void){
lampOn();fanOn();
timerStart(10);}void controler(void){
lampOn();void lampOn(void){
fanOn(); switch(lampstate){case ON:
timerStart(10);break;}
void controler(void){case OFF:lampOn(); void lampOn(void){
lampRegister = ON;
switch(lampstate){
fanOn();
lampSatate = ON;case ON:
timerStart(10);break;
break;}
default:case OFF:
break;
void lampOn(void){
lampRegister = ON;}
switch(lampstate){
lampSatate = ON;}case ON:
break;･････
void fanOn(void){
}
･････
}
void timerStart(int time){･････}

ソースコードvoid fanOn(void){･････}
void timerStart(int time){･････}

void lampOn(void){switch(lampstate){case ON:
break;
case OFF:
lampRegister = ON;
lampSatate = ON;
break;
default:
break;}}

void lampOn(void){switch(lampstate){case ON:
break;
case OFF:
lampRegister = ON;
lampSatate = ON;
break;
default:
break;}}

void controler(void){
lampOn();fanOn();
timerStart(10);}void lampOn(void){switch(lampstate){case ON:
break;
case OFF:
lampRegister = ON;
lampSatate = ON;
break;
default:
break;}}

break;
default: void fanOn(void){case OFF:･････
break;
lampRegister} = ON; }lampSatate }= ON;void timerStart(int time){
break;･････
void fanOn(void){
default:}･････
break;}}}
void timerStart(int time){© Copyright 2013 Hewlett-Packard Development Company, L.P. The information contained herein is subject to change without notice.

void timerStart(int time){･････}

void timerStart(int time){･････}

void lampOn(void){switch(lampstate){case ON:
break;
case OFF:
lampRegister = ON;
lampSatate = ON;
break;
default:
break;}}}

18

void fanOn(void){･････}

void fanOn(void){･････}

void controler(void){
lampOn();fanOn();
timerStart(10);}コンポーネント}コンポーネント

void lampOn(void){switch(lampstate){case ON:
break;
case OFF:
lampRegister = ON;
lampSatate = ON;
break;
default:
break;}}

void lampOn(void){switch(lampstate){case ON:
break;
case OFF:
lampRegister = ON;
lampSatate = ON;
break;
default:
break;}}

void timerStart(int time){･････

void timerStart(int time){･････}

システム を作るにも、順番がある

void controler(void){
lampOn();fanOn();
timerStart(10);}void controler(void){
lampOn();fanOn();
timerStart(10);}void fanOn(void){
･････
}

}

void fanOn(void){･････}

コンポーネント

void fanOn(void){･････}

void fanOn(void){･････

void timerStart(int time){･････}
void timerStart(int time){･････}
void controler(void){
lampOn();fanOn();
timerStart(10);}void lampOn(void){switch(lampstate){case ON:
break;
case OFF:
lampRegister = ON;
lampSatate = ON;
break;
default:
break;}}
void fanOn(void){･････}
void timerStart(int time){
･････
}

}
void controler(void){
lampOn();fanOn();
timerStart(10);}void lampOn(void){switch(lampstate){case ON:
break;
case OFF:
lampRegister = ON;
lampSatate = ON;
break;
default:
break;}}
void fanOn(void){･････}
void timerStart(int time){･････}

void controler(void){
lampOn();fanOn();
timerStart(10);}void lampOn(void){switch(lampstate){case ON:
break;
case OFF:
lampRegister = ON;
lampSatate = ON;
break;
default:
break;}}
void fanOn(void){･････}
void timerStart(int time){･････}

開発の各段階はいつ達成するのか？
偉大なる段階的ゴール

テストレベル

最終
ゴール

ユーザ要求

他システム

システム

要求一覧

本番環境

段階
ゴール

システム
要件

システム 擬似本番環境

要件書
仕様書

段階
設計 ゴール
設計書

ビルド環境

サーブレット EJB
RDB

コード

段階
ゴール
詳細設計
コーディング

クラス
開発用PC

段階
ゴール
コンパイル

19

静的テスト

© Copyright 2013 Hewlett-Packard Development Company, L.P. The information contained herein is subject to change without notice.

ユ
ニ
ッ
ト
テ
ス
ト

統
合
テ
ス
ト

シ
ス
テ
ム
テ
ス
ト

受
入
テ
ス
ト

ソフトウェアテストをサッカーに例えると…
•サッカーにたとえれば、「守り」がテスト
全員がそれぞれの立場で「守り」を行う•テスターはゴールキーパー
だが守り（テスト）はゴールキーパー一人でやることではない
キーパーが大活躍している試合は見ていてハラハラしないか？

•FWやMFが優秀で攻めも守りも出来ればゴールキーパーは要ら
ないか？
20

2

© Copyright 2013 Hewlett-Packard Development Company, L.P. The information contained herein is subject to change without notice.

ソフトウェアのテストといってもみんなが関与する
開発の最後に「誰かが」守ってくれているものではない
みんながテストについて理解を持って取り組んだほうが上手くいく

エンドユーザー

ソフトハウス（設計者）
SIer（PM、アナリスト）

要求分析

誤解や漏れ

ソフトハウス（PM、設計者）

システム基本設計

誤解や漏れ

サブシステム基本設計
サブシステム基本設計
サブシステム
基本設計
誤解や漏れ

テストで守る=クリア
21

テストで守る=クリア
テストで守る=クリア© Copyright 2013 Hewlett-Packard Development Company, L.P. The information contained herein is subject to change without notice.

ソフトハウス（実装、テスト）
ソフトウェア基本/詳細設計、実装

ソフトウェア
設計、実装

ソフトウェア
設計、実装

ソフトウェア
設計、実装

ソフトウェア
設計、実装

ソフトウェア
設計、実装

ソフトウェア
設計、実装

ソフトウェア
設計、実装

誤解や漏れ

テストで守るテスト=クリアソフトウエアテストを家計簿に例えると…

≒家計簿を付ける

ソフトウエアをテストする• 家計を決められた金額でまかなえない恐れがあるから家計簿をつける• 期待通りに動かない恐れがあるからテストをする
22© Copyright 2013 Hewlett-Packard Development Company, L.P. The information contained herein is subject to change without notice.

実情を確認しているだけ？
•家計簿付けているだけじゃ何も変わらない•家計簿の結果をベースに夕飯のおかずを節約するなどのフィードバックをすることに価値がある•テストを実行するだけじゃ何も変わらない•期待通りに動作するか確認し、動作しなかったらバグ
レポートを起票して修正してもらうことに価値がある23© Copyright 2013 Hewlett-Packard Development Company, L.P. The information contained herein is subject to change without notice.

余計な手間？
•レシート集めたり、帳簿に転記したり。。
•その手間を惜しむか惜しまないかが目標達成しているか判断できるかどうかの分かれ道•テストを実施するだけじゃなくって、テストを計画/設計/保守していく事が大事•テストをエンジニアリングすることがテストの目的を達成し、テストの価値を高める

24© Copyright 2013 Hewlett-Packard Development Company, L.P. The information contained herein is subject to change without notice.

テストの目的
テストの目的の典型例

ダイレクトフィードバック

欠陥の検出• 仕様・要件に対する不具合を見つける（当たり前品質の確保）• 意図的な欠陥識別–e.g. ストレス系・評価系のテスト

品質レベルが十分であることを確認• 仕様・要件に対する合致性の確認• 技術課題に関連して： 解決策の妥当性確認・検証• リスクに関連して： リスクの評価、対応策の妥当性確認・検証

状況の可視化判断のための情報を提示• 信頼度の測定–

e.g. 運用プロフィールに沿ってランダムに生成した

早期にテスト視点で、レビューを行うことで欠陥の作りこみを防ぐ• 要求に関連して： 要求の妥当性確認、要求の抽出（の促進）• 要件・設計に関連して：要件・設計の妥当性確認・検証
25© Copyright 2013 Hewlett-Packard Development Company, L.P. The information contained herein is subject to change without notice.

テストの役割と価値「ゲーミフィケーション活用実践のための11の施策」とのつながり

テストの直接的な効果

テストの間接的な効果

欠陥の検出
ダイレクトフィードバック

デザイン・演出
状況の可視化

ユニットテストツールのグリーンライト

競争

品質レベルが十分であることを確認
ダイレクトフィードバック

状況の可視化

欠陥検出数で競争するなど

偉大なる段階的ゴール
ルール
テスト結果という事実を基に進捗を測る（理にかなっている）

判断のための情報を提示
ダイレクトフィードバック

状況の可視化偉大なる段階的ゴール

早期にテスト視点で、レビューを行うことで欠陥の作りこみを防ぐ
ダイレクトフィードバック

入門教育
テスト結果、過去のバグをナレッジにして学習をする（リアルな教材）

状況の可視化開発の達成感を共有するための有益な情報提供をすることにテストの価値がある！
26© Copyright 2013 Hewlett-Packard Development Company, L.P. The information contained herein is subject to change without notice.

有益な情報提供とは具体的にいうとどんなものがある？
有益な情報の例• 欠陥除去–テストでバグがでてから修正、再確認までをトレースする• 今後の改善（欠陥予防）–

欠陥原因分析、DREなどのデータ収集を行なう／テスト設計を並行させて設計と相互レビューする• リリースのための判断材料–

要件カバレッジ、テスト実施カバレッジ、バグ修正状況（重要度別）、信頼度成長曲線、
バグ管理図などのデータ収集を行なう• 品質リスクのマネジメント情報–

品質リスク（市場でのお客様からのクレーム/運用開始後の機会損失etc..の恐れ）を数値化し、テストすることによりどれだけ軽減されているかを確認する。

言うのは簡単！実際には、何を達成したいか決
めて、段取りや仕掛けを入れこまないとね！
27© Copyright 2013 Hewlett-Packard Development Company, L.P. The information contained herein is subject to change without notice.

これは楽しいですか？

28© Copyright 2013 Hewlett-Packard Development Company, L.P. The information contained herein is subject to change without notice.

ソフトウェアテストの全体像

テストに必要な活動を知る＝何をすればよいかを知る© Copyright 2013 Hewlett-Packard Development Company, L.P. The information contained herein is subject to change without notice.

そもそもテストとはテスティングの定義
ソフトウェアテスティングとは、通常は無限に大きいと考えられる「プログラムの振る舞
いの実行領域」から、最適だと考えられる有限な「テストケースの集合」を選定し、所期の通りかどうかを実際に動かして検証すること（SWEBOK 2004）• 単に「動かして検証する」だけの行為である。

例えるならテストは品質を写す「鏡」、テスティングは鏡を使って知る「行為」–

e.g. コード，コーディング

テストには「何故その行為をするのか？」が必要• どこを見たいのか？
• 見ることで何を知りたいのか？
• 知ってどうするのか？
• どう見るのか？いつ見るのか？

つまり…何を持って「達成した」とするのかが重要だということ！
30© Copyright 2013 Hewlett-Packard Development Company, L.P. The information contained herein is subject to change without notice.

テストは実行だけではない
テスト実行だけでは、「何故その行為をするのか？」が不明のまま
仕組みや仕掛けを入れ込んでおかないと、実行するのもままならない
開発ライフサイクル
計画

ビジネス
要件

設計

開発

テスト

アプリケーション
配備

一般的な開発ライフサイクルの表現では、開発が終わるとテストをするという流れになっている
31© Copyright 2013 Hewlett-Packard Development Company, L.P. The information contained herein is subject to change without notice.

テストは実行だけではない
テスト実行はだけでは、「何故その行為をするのか？」が不明のまま
仕組みや仕掛けを入れ込んでおかないと、実行するのもままならない
開発ライフサイクル
計画

ビジネス
要件

設計

開発

アプリケーション
配備

テスト

テストポリ
シー
テスト
計画
テスト
分析

テスト
条件

テスト準備
テスト開発

テストの
目的

テスト実行

テスト
設計
テストケース

マネジメント系のアウトプット

コスト,人

32

テスト
ベース
テスト
実装

テスト
手順

進捗
基準評価
欠陥管理
テストモニタリングとコントロール
テストマネジメント
管理
報告

テスト
資産管理

© Copyright 2013 Hewlett-Packard Development Company, L.P. The information contained herein is subject to change without notice.

フィード
バック

ISTQBが定義するテストプロセス
http://jstqb.jp/

ISTQBでは、テストプロセスは、以下の活動に分けて考えるとしている。
• 計画• コントロール• 分析• 設計
テスト開発プロセス• 実装• 実行• テスト終了基準の評価と報告• テスト終了作業

計画
実行

労力
比率
分析

設計 実装

終了基準の評価と報告

コントロール
時間

これらの活動はひとつづつ順番に行われるとは限らず、重なったり、並行したり、繰り返されたりする。

33© Copyright 2013 Hewlett-Packard Development Company, L.P. The information contained herein is subject to change without notice.

終
了
作
業

テストを開発するとは何か？
テスト開発プロセス「何を持ってそれを達成したか？」がわかるテストを実行するための活動• テストの目的やテスト対象を明らかにする（計画する）• テストを造れるようにテスト対象を分解する（分析する）• 目的に沿ったテストを造る（設計する）• テストを実行できるようにする（実装する）

目的…「達成」したいこと

段取りや仕掛け（手動なら手順を考える）（自動ならテストコードを作る）– 環境構築、テストデータ作成
–

テストポリ
シー
テスト
計画
テスト
分析

テストの
目的

テスト
条件

テスト
設計
テストケース

マネジメント
関連
34

テスト
ベース

© Copyright 2013 Hewlett-Packard Development Company, L.P. The information contained herein is subject to change without notice.

テスト
実装

テスト
手順

テスト開発プロセスについてさらに知りたい人は…
テスト分析・テスト設計手法の活用

JaSST’09Tokyoパネルディスカッション「テスト技法からテストメソドロジへの進化を目指して」と題して、日本のテスト業界での第一人者が各自の考え方/実践手法を紹介
秋山 浩一 （富士ゼロックス）• HAYST法池田 暁 （日立情報通信エンジニアリング）• マインドマップを使ったソフトウェアテスト/TAME

工藤 邦博 （ベリサーブ）• 俺流！（現場で実践している）テスト設計方法論

鈴木 三紀夫 （TIS）• マインドマップを使ったソフトウェアテスト/Tiramis

西 康晴 （電気通信大学）• VSTeP

松尾谷 徹 (デバッグ工学研究所)• CFD法（探索理論/VOP）

湯本 剛 （豆蔵…現日本HP）• 豆蔵流テスティングプロセス/ゆもつよメソッド

35© Copyright 2013 Hewlett-Packard Development Company, L.P. The information contained herein is subject to change without notice.

智美塾
テスト開発のメタモデルを作り各自が独自の方法論をつくれるようにするための場（TEFに入ると案内が流れます）

ここで…
今日説明している
ソフトウェアテストの概念の整理「～テスト」って言葉が多く出てきて混乱するよ！

© Copyright 2013 Hewlett-Packard Development Company, L.P. The information contained herein is subject to change without notice.

開発のどの詳細レベルをターゲットにテストをするのか？
テストレベル

テストレベル

最終
ゴール

ユーザ要求

他システム

システ
ム

要求一覧

本番環境

段階
ゴール

システム
要件

システ
ム

要件書
仕様書

擬似本番環境段階
設計 ゴール
設計書

ビルド環境

サーブレット EJB
RDB

段階
コードゴール
段階
ゴール
37

詳細設計
コーディング

クラス
開発用PC

コンパイル

静的テスト

© Copyright 2013 Hewlett-Packard Development Company, L.P. The information contained herein is subject to change without notice.

ユ
ニ
ッ
ト
テ
ス
ト

統
合
テ
ス
ト

シ
ス
テ
ム
テ
ス
ト

受
入
テ
ス
ト

テストを実行するまでどのように進めていくのか？
テストプロセス

テストレベル

最終
ゴール

ユーザ要求

要求一覧

段階
ゴール

システム
要件

テスト計画

テスト分析・設計

要件書
仕様書

テスト計画

段階
ゴール

本番環境報告書作成

システ
ム

シ
ス
テ
擬似本番環境 ム
テ
報告書作成 ス
ト

テスト分析・設計

統
合
テ
ビルド環境
サーブレット EJB
ス
RDB
テスト実装
報告書作成 ト
テスト実行

詳細設計
コーディング
テスト計画

テスト実行

テスト実装

設計書
テスト計画

テスト実装

テスト分析・設計段階
設計 ゴール段階
コードゴール

他システム

システ
ム

テスト分析・設計

テスト実装

テスト実行

ユ
ニ
ッ
クラス
ト
テ
テスト実行
報告書作成
開発用PC
ス
ト

テスト管理（モニタリングとコントロール）

コンパイル

静的テスト

欠陥トラッキング

構成管理（バージョン管理、履歴管理、トレース管理）38© Copyright 2013 Hewlett-Packard Development Company, L.P. The information contained herein is subject to change without notice.

受
入
テ
ス
ト

[補足]どのテストの目的に対するテストをするのか？
テストタイプ
品質特性に向けたテスト活動の分類
各テストタイプは、特定のテストの目的にフォ－カスしている

テスト目的を満たす事が「十分」であるということは…
プログラムコードを実行してエラーにならなければよい

構造の視点
ホワイトボックステスト• 全ソースコードを一回は動かしてエラーにならなかった• 全部の分岐を一回は動かしてエラーにならなかった

ソフトウェア
ｆ1
ｆ2

ＵｓｅＣａｓｅ（使用例）

仕様に書いてある通りに動けばよい• ●●仕様書通りに動いた• ●●仕様書に書いてないが本来書くべき事（例外、異常）「いつでもどんな時でも」仕様に書いてある通りに動けばよい

非機能要件の視点
性能テストetc
応答時間は3秒• ●●を何回も繰り返しても、一度エラーになった後にやってみても…

「いつでもどんな時でも」「所定の速度で」仕様に書いてある通りに動けばよい• データ量が膨大でも、、CPU負荷が高いときも…

etc…
39

© Copyright 2013 Hewlett-Packard Development Company, L.P. The information contained herein is subject to change without notice.

機能の視点
ブラックボックステスト

[補足]テスト実行をどういう順番で進めるか？
テストサイクル （by HP QualityCenter）
リリーススケジュールに基づいて共通の目標を達成するために行われる一連テスト作業

40© Copyright 2013 Hewlett-Packard Development Company, L.P. The information contained herein is subject to change without notice.

ソフトウェアテストにて押さ
えておくべきこと

テスト設計
テスト分析
テストツール© Copyright 2013 Hewlett-Packard Development Company, L.P. The information contained herein is subject to change without notice.

テスト設計© Copyright 2013 Hewlett-Packard Development Company, L.P. The information contained herein is subject to change without notice.

テスト設計…テスト目的を実現するための「手段」
テスト目的とテスト対象を決めたらテストが実行できるか？
• テスト対象に関することは全て仕様書に書かれているか？
• 仕様書に書かれた事全てテストしたほうがよいか？
時間が足りますか？（工夫して適切な量に収めることが必要）– 十分ですか？（テストの目的に沿ってないといけない）–

テストを設計すること＝テストの目的を満たすテストケースを造ること
テスト設計なしのテストケース
・気になるところ
・仕様書に記載があるところを選択

・すぐ着手できるところ・場当たり的or・総当り的に選択

テスト設計をしたテストケース

確認ポイント・どの要件/機能
→機能一覧
・どの視点
→テストカテゴリ

的確になる
よう順番付け確認優先順
位
・製品リスク・作業効率性サンプリング方法
・代表値・境界値・組み合わせソフト
ウェア

43

プロジェクトの意図に合うよう抽出し選択© Copyright 2013 Hewlett-Packard Development Company, L.P. The information contained herein is subject to change without notice.

『確認ポイント』の意図に合うように抽出し選択一般的なテスト設計の説明
テストケース設計技法の使用例

e.g.2桁の数字２つの和を求めるプログラムをテスト

・正常な計算パターンの全数テスト=「 」のテス
トケース・入力した数字が3桁以上のパターン
・数字以外（e.g.英字、記号）を入力したパターン
・入力手順（e.g.バックスペースで入力し直し）・計算処理繰り返し
・表示、レイアウト
・・・・・・

絞込み「 」個のテストケース

同値分割適用上記を考慮すると限りなく無限に近い

テストケース設計技法を使用しない場合

テストケース設計技法を使用した場合

テストケース設計技法の例• 同値分割、デシジョン・テーブル・・・
44© Copyright 2013 Hewlett-Packard Development Company, L.P. The information contained herein is subject to change without notice.

状態遷移モデルを使ったテスト設計

Astah*(http://astah.change-vision.com/ja/product/astah-professional.html)で作成
45© Copyright 2013 Hewlett-Packard Development Company, L.P. The information contained herein is subject to change without notice.

原因結果グラフを使ったテスト設計
音楽再生時に着信すると一時停止した場合、着信が終了すると再生する
上記仕様から原因結果グラフ（ブールグラフとも呼ぶ）を作成する【音楽格納先】or ∨ 音楽再生
本体メモリ
マイクロSDカード

and ∧

音楽停止

着信

and ∧

【通話開始方法】
通常
オート着信
ハンズフリー
エニーキー

and ∧

通話

着信応答

（相手が切るまで着信し続ける）

or ∨
or ∨

電話でない

or ∨

再開操作

音楽再開

結果を設定する組合せを見つけてデシジョンテーブルを作成する（着信を強制的に切る）
and ∧

通話終了

【通話終了方法】 or ∨ 終了操作
通話終了ボタン
端末閉じる
ハンズフリー

単純に考えれば1024パターンとなる
デシジョンテーブルが9パターンに絞り込める

ノード名

#1

#2

#3

#4

#5

#6

#7

#8

#9

原因

本体メモリ

T

F

T

T

T

T

F

T

T

原因

マイクロSD

F

T

F

F

F

F

T

F

F

原因

着信

T

T

F

T

T

T

T

T

T

原因

通常

T

F

F

F

T

T

T

F

T

原因

オート着信

F

T

F

F

F

F

F

F

F

原因

ハンズフリー

F

F

T

F

F

F

F

F

F

原因

エニーキー

F

F

F

F

F

F

F

T

F

原因

通話終了ボタン

T

F

T

F

T

T

T

T

F

原因

端末閉じる

F

T

F

F

F

F

F

F

F

原因

ハンズフリー

F

F

F

F

F

F

F

F

T

中間

音楽再生

T

F

T

T

T

T

T

T

T

中間

音楽停止

T

F

F

T

T

T

T

T

T

中間

着信応答

T

T

T

F

T

T

T

T

T

中間

通話

T

T

F

F

T

T

T

T

T

中間

通話終了操作

T

T

T

F

T

T

T

T

T

中間

通話終了

T

T

F

F

T

F

T

T

T

中間

電話でない

T

T

T

T

F

F

T

T

T

中間

再開操作

T

T

T

T

T

F

T

T

T

結果

音楽再開

T

F

F

T

T

F

T

T

T

http://softest.cocolog-nifty.com/labo/CEGTest/で作成
46© Copyright 2013 Hewlett-Packard Development Company, L.P. The information contained herein is subject to change without notice.

テスト分析

© Copyright 2013 Hewlett-Packard Development Company, L.P. The information contained herein is subject to change without notice.

現実の問題
典型的なテストケース設計技法の教科書では…
• 小さい問題を扱っている– プログラムレベルの問題（理解しやすい）– 現実にテストする対象のごく一部しか扱うことができない

どこに適用するの？

48© Copyright 2013 Hewlett-Packard Development Company, L.P. The information contained herein is subject to change without notice.

分析してますか？
テストケースを作るためにはテスト対象をテスト技法が適用できるようなサイズに（論理的に）分解しなければならない→これが分析• 分解の切り口＝観点
テスト対象

観点

6モジュールはテストが必要！
49© Copyright 2013 Hewlett-Packard Development Company, L.P. The information contained herein is subject to change without notice.

たとえばこんな分解で詳細化した場合
テストケースを書くときに「大項目」「中項目」「小項目」といった分解、詳細化をすることが多い• 以下の２つの書き方は何が問題でしょうか？

大項目

中項目

小項目

正常系確認

他機器との接続

デジカメ×プリンタ

ピクトブリッジ

接続パターン

正常系

性能テスト

XMLパーシング

ピクトブリッジ

大項目

中項目

小項目１

小項目２

小項目３

テストケース

印刷

設定

印刷部数

---

---

100部印刷した場合

設定

プリント設定

一般

異常系

エラーメッ
セージ

「印刷部数が99部超えました」と表示されること

50© Copyright 2013 Hewlett-Packard Development Company, L.P. The information contained herein is subject to change without notice.

分解の考え方
テスト目的を２つの「観点」で具体的にする。
見方（網羅的、ピンポイント的）…目的のブレイクダウン
見る位置（外観、中身など）…テスト対象のブレイクダウン• テスト対象
システム…要件定義書– 機能…外部仕様（画面仕様）– モジュール…内部仕様（プログラム仕様）– etc–• テスト目的＜網羅＞
どれだけテストするの？

観点− 構造を網羅（ホワイトボックス）− 機能を網羅（ブラックボックス）− 非機能を網羅＜ピンポイント＞− バグが出そう− バグになると大問題

51© Copyright 2013 Hewlett-Packard Development Company, L.P. The information contained herein is subject to change without notice.

ブラックボックステストでのテスト対象に対するテスト観点
業務フロー

UseCaseUseCase記述

シナリオリスト

シナリオ
詳細記述

システム

通常業務

入出力

UseCase

ロジック

データ

影響与える

システム

機能A

テスト要件(テスト条件)
機能B

テスト要件（テスト条件）

52

･
･
･

© Copyright 2013 Hewlett-Packard Development Company, L.P. The information contained herein is subject to change without notice.

テストケース条件•••••

数（多い⇔少ない）
時間（短い⇔長い）
距離（近い⇔遠い）
環境パターン
正常、代替、例外

テストケースの構造
本来のテストケースは以下の構造となり、段階的に成果物を作っていく（つまり、プロセスがある）
画面

テスト対象機能項目

テスト分析（機能一覧、テストカテゴリ）

仕様項目
テスト条件（テストすべき事柄）

テスト設計（マトリクス、図）テストケース
テストケース条件 値

操作- 入力データ- 事前状態- 環境- タイミング
53© Copyright 2013 Hewlett-Packard Development Company, L.P. The information contained herein is subject to change without notice.

期待結果- 出力結果- 事後状態53

テストツール© Copyright 2013 Hewlett-Packard Development Company, L.P. The information contained herein is subject to change without notice.

ソフトウェアエンジニアリング
エンジニアリングの定義（IEEE610）“The application of a systematic, disciplined, quantifiable approach to structures,
machines, products,systems, or processes”（構造、機械、製品、システムまたはプロセスへ体系的で、訓練されていて、定量的なやり方を適用すること）
前の章で触れたこと

エンジニアリングの要素

・テストレベル・テストプロセス・テスト設計プロセス
活動、手順
この章で触れること

人

技術

倫理、能力

55

© Copyright 2013 Hewlett-Packard Development Company, L.P. The information contained herein is subject to change without notice.

技法、ツール

開発ツールはエンジニアリングの一要素
エンジニアリングの他の要素を支援するものが道具（ツール）• 支援する相手がエンジニアリングとして成立してないと成果が出ない− 「本来やるべきこと」を効率化する− 「やっていないもの」はツールでは効率化できない（やってないことをやると逆に工数が増える）• 人間が手でやるときには考えられなかったことが実現可能になる− 人間がやるならば100人は必要だと思うことでも道具を使えば1人で出来てしまう

人間が束になってこなすことを

56より「速く」「長く」「正確に」行ってくれる© Copyright 2013 Hewlett-Packard Development Company, L.P. The information contained herein is subject to change without notice.

テストプロセスとテストツールの関係
開発の作業

ユーザ要求

開発の成果物

テストの作業（プロセス）④コード解析②テスト設計要求分析①テスト分析
テスト分析

システム
要件

要件定義書
画面仕様書

テスト分析

テスト設計

③テスト実装

テスト実行

テスト実装

テスト設計

受
入
⑥テスト結果管理
テ
報告書作成
ス
ト

⑤テスト実行

テスト実装

テスト実行

報告書作成

設計
基本設計書
テスト分析

テスト設計

テスト実装

報告書作成

テスト実行

ユ

実装

詳細設計書
テスト分析

ソースコード

テスト設計

テスト実装

テスト実行

ニ
ッ
ト
報告書作成テス
ト

コード解析

モニタリングとコントロール
テストウェア管理57© Copyright 2013 Hewlett-Packard Development Company, L.P. The information contained herein is subject to change without notice.

インシデント管理

テシ
スス
トテ
ム

統
合
テ ⑦テストウェア管理ス
ト⑧インシデント管理

テストの作業
テスト分析

作業を支援するツールの種類
要件管理ツール

テストウェア管理

状態遷移テストツール
組合せテスト支援ツール（直交表、オールペア）
原因結果グラフツール
動的解析ツール
カバレッジ計測ツール
その他のテスト設計支援ツール
スタブツール
シミュレータラボイメージツール
テストデータジェネレータ
テストケース管理ツール
静的解析ツール
構造解析ツール
ユニットテストツール
キャプチャ/リプレイツール
性能テストツール
セキュリティテストツール
テスト自動実行支援ツール
構成管理ツール

テスト結果管理テスト結果管理/テスト結果レポートツール

インシデント管理

インシデント管理ツール

テスト設計

テスト実装

コード解析
テスト（自動）実行58© Copyright 2013 Hewlett-Packard Development Company, L.P. The information contained herein is subject to change without notice.

「テストツールまるわかりガイド」
NPO法人ASTER（ソフトウェアテスト技術振興協会）の研究事業のひとつである「テストツールWG」の活動の成果として発表
本冊子の目的・日本のソフトウェア開発の現場におけるテストツールの普及と導入推進
・開発現場の若手から管理者まで幅広い層に対してテ
ストツールを活用するための基礎的な情報を提供

本冊子の特徴・有償／無償ツールを分け隔てることなく、現場で活用できる多様なテストツールを紹介
・オープンソースのテストツールについては、ユーザの立場である策定メンバーが代表的なツールを1種ずつ選定
・市販テストツールについては、企業間の垣根を越えて多様なツールを知っていただくために、国内の14社のテストツールベンダ／販社が協力して執筆
59© Copyright 2013 Hewlett-Packard Development Company, L.P. The information contained herein is subject to change without notice.

この冊子で伝えたいポイント
道具（ツール）ありきではなくテストの作業ありき
何を効率化したいのか？

作業がそもそもちゃんとできないのに効率化は出来ない
家計簿をつけたことがない人が家計簿ソフトを買っても何も効率化しない道具（ツール）の導入は「改善」がセット
己を知る• 健康診断チェックリスト

道具（ツール）を使いながら作業もちゃんとやるようにしていく• 道具を使う場面（作業）を知る（三章）• ツールの効能を知る/使用上の注意を知る（四章）「ハイコンセプト」なエンジニアになるための一助に！
• あなたの仕事は他の国よりこれを安く出来る？
• あなたの仕事はコンピュータを活用するともっと上手く早くできる？
• あなたの仕事はこれからも需要がある？

道具（ツール）活用が必須の時代であると言うこと！
60© Copyright 2013 Hewlett-Packard Development Company, L.P. The information contained herein is subject to change without notice.

まとめ© Copyright 2013 Hewlett-Packard Development Company, L.P. The information contained herein is subject to change without notice.

まとめ「楽しい」ソフトウェア開発について考えた• 「達成感」を感じながら仕事ができるか？

ソフトウェアテストは開発にどう貢献しているか• ソフトウェアテストの役割と価値

ソフトウェアテストの全体像• ソフトウェアテストに必要な活動を知る＝何をよくしていけばよいかを知る

ソフトウェアテストにて押さえておくべきこと• テスト設計• テスト分析• テストツール

62© Copyright 2013 Hewlett-Packard Development Company, L.P. The information contained herein is subject to change without notice.

参考文献
湯本剛「日経ソフトウェア 連載 基礎から学ぶソフトウェアテスト」（日経ＢＰ 2005） http://itpro.nikkeibp.co.jp/article/COLUMN/20070222/262867/?ST=selfup

高橋寿一,湯本剛 「現場の仕事がバリバリ進むソフトウェアテスト手法」(技術評論社 )2006
湯本剛 「ソフトウェアテストPressVol.10 特集1 今こそ聞きたいテストの上流設計」（技術評論社）2010
豆蔵 「ソフトウェアエンジニアリング講座 テスティング基本編」（豆蔵）IEEE Computer Society 「SWEBOKソフトウェアエンジニアリング知識体系」(オーム社)2005
ISTQB 「ISTQBテスト技術者資格制度Foundation Levelシラバス日本語版 Version2011.J01」(NPO法人ASTER ,JSTQB )2011

ASTER テストツールWG 「テストツール丸わかりガイド入門編1.00」(NPO法人ASTER )2012
ジェーン・マゴニガル 「ゲームで築くより良い世界」
http://www.ted.com/talks/jane_mcgonigal_gaming_can_make_a_better_world.html
安部 一真 「ゲーミフィケーションをマネジメントに活用する方法」～ロールプレイングゲームに学ぶ「部下を魅了する」リーダー
シップ～ (PMAJ 2013) http://www.pmaj.or.jp/library/regular.html
参考文献ではないですが、、、奈良さん、みっきーさんには会話の中でインスピレーションをいただきました！
63© Copyright 2013 Hewlett-Packard Development Company, L.P. The information contained herein is subject to change without notice.

Thank you
ありがとうございました© Copyright 2013 Hewlett-Packard Development Company, L.P. The information contained herein is subject to change without notice.