テストって
何するもの?
~∼テストの5W1H~∼
前川  博志(@Posaune)
⾃自⼰己紹介
•  まえかわ  ひろし  a.k.a  @Posaune
Ø #京アジャ
Ø #reviewrc
•  なんにでも興味を持つ雑⾷食系エンジニア
Ø 器⽤用貧乏っていうな
•  MS  MVP  for  Visual  Studio  ALM
Ø Visual  Studioで作ってJenkinsでビルド
するというALM
2015/01/31 MVP Community Camp 2015 大阪会場
.reviewrc  について
•  変遷
Ø TABOK(テスト⾃自動化知識識体系)読書会
Ø 関⻄西検証コレクション(検これ)
Ø .reviewrc
•  何をしている?
Ø 誰かが持ってきた資料料をレビュー
Ø 誰かの発表をレビュー
Ø 新しいサービスをレビュー
2015/01/31 MVP Community Camp 2015 大阪会場
Agenda
•  本⽇日の⽬目標
•  テストの5W1H
Ø Why      :  なぜテストするの?
Ø When  :  いつテストするの?
Ø What    :  なにをテストするの?
Ø Where:  どこをテストするの?
Ø Who      :  だれがテストするの?
Ø How      :  どうやってテストするの?
•  まとめ
2015/01/31 MVP Community Camp 2015 大阪会場
最初に質問
•  みなさん、テスト好きですか?
•  私はキライです(というか苦⼿手です)
•  でもテストを勉強するのは楽しいです!
2015/01/31 MVP Community Camp 2015 大阪会場
本⽇日の⽬目標
:  発表前
•  テストだりー。単純作業でめんどくせー。
2015/01/31 MVP Community Camp 2015 大阪会場
本⽇日の⽬目標
:  発表後
•  テストすげー!!考える事いっぱいある
じゃん!!
2015/01/31 MVP Community Camp 2015 大阪会場
Why:  なぜテストをする?
2015/01/31	
 MVP	
  Community	
  Camp	
  2015	
  大阪会場
テストをする理理由は?
•  テスト報告書を埋めないといけないから!
2015/01/31 MVP Community Camp 2015 大阪会場
テストをする理理由
•  製品の品質を向上させるため
Ø 品質保証(QA)活動の⼀一貫
•  品質が悪いプロダクトは、、、
2015/01/31 MVP Community Camp 2015 大阪会場
どーん!!!
2015/01/31 MVP Community Camp 2015 大阪会場
アリアン5爆発事故
•  ヨーロッパで打ち上げられ、発射40秒後
に爆破炎上したロケット
•  被害総額600億円
•  原因はソフトウェアのバグ
Ø 64bit型から16bit型への代⼊入で起きた
バッファオーバーフロー
2015/01/31 MVP Community Camp 2015 大阪会場
Therac  25  医療療事故
•  放射線治療療器  Therac  25  による医療療事故
•  放射線の爆射量量のコントロールが不不安定で、
少なくとも6⼈人が死亡、怪我⼈人多数
•  原因はUIの制御フローに混⼊入した
ソフトウェアバグ
Ø 8秒以内に連続してキー操作すると安全装置が
外れる
2015/01/31 MVP Community Camp 2015 大阪会場
⼗十分な品質を満たさない
ソフトウェアは・・・
•  莫⼤大な損失を⽣生む
Ø ⾦金金銭的損失
Ø 社会的損失
•  実際に市場に出てからのエラーの改修
コストは⾮非常に⾼高い
Ø 開発時に⾷食い⽌止めることが⾮非常に重要
•  そういえばなんか怖い話最近ありましたね
Ø http://blog.tokumaru.org/2015/01/
sql.html
2015/01/31 MVP Community Camp 2015 大阪会場
なぜテストをするのか?
•  ⼗十分な品質の製品を世に送り出すため
•  品質不不⼗十分な製品をリリースすると、会社
に深刻なダメージを与えてしまう
2015/01/31 MVP Community Camp 2015 大阪会場
What:  なにをテストする?
2015/01/31	
 MVP	
  Community	
  Camp	
  2015	
  大阪会場
品質保証2つの観点
•  Verification:  正しくものを作っているか?
Ø 仕様を実現できているか?
Ø 設計通りに物をつくっているか?
Ø ドキュメントと製品に乖離離はないか?
Ø プログラムバグを残していないか?
•  Validation:  正しいものを作っているか?
Ø そのソフトウェアは顧客の要求を本当に満た
すことができるか?
Ø 製品として意味があるものか?
有名な絵で⾔言うと・・・
2015/01/31 MVP Community Camp 2015 大阪会場
有名な絵で⾔言うと・・・
•  そもそも、「正しく」つくれていない
Ø 情報の伝達がメチャクチャ
Ø コード・ドキュメントもズタボロ
•  しかし、受け⼿手側が豪華なブランコを完璧
に作ったとしても、「正しい」ものかは怪
しい
Ø 顧客が本当にそれが必要だったのか?
Ø BtoCだったら価格競争で負けそう(⼩小並感)
2015/01/31 MVP Community Camp 2015 大阪会場
When:  いつテストをする?
2015/01/31	
 MVP	
  Community	
  Camp	
  2015	
  大阪会場
よく⾒見見る⾵風景
2015/01/31 MVP Community Camp 2015 大阪会場
おもてたんと
ちがーう!!!
どうすればよかった??
2015/01/31 MVP Community Camp 2015 大阪会場
テストします!!納品前
に死ぬほどテストしま
す!100⼈人、いや1000
⼈人雇ってしらみつぶしで
テストします!!
2015/01/31	
 MVP	
  Community	
  Camp	
  2015	
  大阪会場
テストは常に在るもの
•  最後に⼀一気にテストをするのは
『ビッグバンテスト』
と呼ばれるアンチパターン
•  各フェイズにおいて、少しずつテストを実
⾏行行する『インクリメンタルテスト』
を⾏行行うべき
2015/01/31 MVP Community Camp 2015 大阪会場
どうすればよかった??
2015/01/31 MVP Community Camp 2015 大阪会場
まず設計が無茶茶。
作れんのこれ?
そもそもニーズを捉
えられてない
ほらやっぱ作れへんかっ
た。これ事故するぞ。
いや確かにそれだと
事故らへんけどさ…
それ遊べるの?
これはさすがに
乗りにくいやろ…
いつテストをするのか?
•  常にテスト(あるいは何らかの検証作業)
が⾏行行われているのが理理想
•  ⼀一つのテストでバグを取り切切るのは不不可能
•  テストは「いつでも」すべき
2015/01/31 MVP Community Camp 2015 大阪会場
Where:  どこをテストする?
2015/01/31	
 MVP	
  Community	
  Camp	
  2015	
  大阪会場
どうすればよかった??
2015/01/31 MVP Community Camp 2015 大阪会場
まず設計が無茶茶。
作れんのこれ?
そもそもニーズを捉
えられてない
ほらやっぱ作れへんかっ
た。これ事故するぞ。
いや確かにそれだと
事故らへんけどさ…
それ遊べるの?
これはさすがに
乗りにくいやろ…
要求・機能仕様を
精査する
設計を
精査する
単体での
動作確認
結合しての
動作確認
システムとしての
妥当性確認
どこをテストする?
:  深さ軸(テストレベル)
•  開発の各段階において、検証すべき場所は
異異なる
Ø 要求・機能仕様:  対応するドキュメント
Ø 設計:  ドキュメント・モデル
Ø 実装:  関数  ⇒  モジュール  ⇒  システム
•  適切切な粒粒度度で⾒見見ておかないと死にます
2015/01/31 MVP Community Camp 2015 大阪会場
⾊色々な粒粒度度で、
考えられる限りのテストを
しよう!!
2015/01/31	
 MVP	
  Community	
  Camp	
  2015	
  大阪会場
どこをテストする?
:広さ軸(テスト範囲)
•  どこもかしこもテストしまくる時間なんて
ない!
•  範囲を絞り込む仕組みが必要
Ø コードの解析によりダメそうな箇所を発⾒見見
Ø (派⽣生開発なら)既存のプロダクトからの
変更更範囲を絞込み
2015/01/31 MVP Community Camp 2015 大阪会場
Who:  誰がテストする?
2015/01/31	
 MVP	
  Community	
  Camp	
  2015	
  大阪会場
テスターだけがテスター
じゃない
•  テスト活動は開発全体をカバーする
⇒  様々な利利害関係者を巻き込む
•  序盤:企画担当者
•  中盤:開発者
•  終盤:お客さん
誰を巻き込む??
2015/01/31 MVP Community Camp 2015 大阪会場
まず設計が無茶茶。
作れんのこれ?
そもそもニーズを捉
えられてない
ほらやっぱ作れへんかっ
た。これ事故するぞ。
いや確かにそれだと
事故らへんけどさ…
それ遊べるの?
これはさすがに
乗りにくいやろ…
要求・機能仕様を
精査する
設計を
精査する
単体での
動作確認
結合しての
動作確認
システムとしての
妥当性確認
企画者
アーキテクト
プログラマ
テスター
ユーザ
仮想ユーザ
How:どうやってテストする?
2015/01/31	
 MVP	
  Community	
  Camp	
  2015	
  大阪会場
やることがいっぱい。。。
2015/01/31 MVP Community Camp 2015 大阪会場
要求・機能仕様を
精査する
設計を
精査する
単体での
動作確認
結合しての
動作確認
システムとしての
妥当性確認
要求レビュー
プロトタイピング
設計レビュー
コードレビュー
単体テスト
結合テスト
システムテスト
βサイトテスト
あれ、、、?
なんか忘れてるような、、、?
2015/01/31	
 MVP	
  Community	
  Camp	
  2015	
  大阪会場
そうだ!!ここはMSの
イベントだった!!!
2015/01/31	
 MVP	
  Community	
  Camp	
  2015	
  大阪会場
Microsoft(と周りの⼈人)が
助けてくれる!!
2015/01/31	
 MVP	
  Community	
  Camp	
  2015	
  大阪会場
テストを⽀支える技術
①  VSO  /  TFS
•  Visual  Studio  Online  と  Team  
Foundation  Server  はテストにも活躍
Ø 要求のマネジメント
Ø 要求からのテストケース作成
Ø 要求  →  機能  →  コード  →  テストの⼀一気通貫
2015/01/31 MVP Community Camp 2015 大阪会場
テストを⽀支える技術
①  VSO  /  TFS
•  Visual  Studio  Online  と  Team  
Foundation  Server  はテストにも活躍
Ø 要求のマネジメント
Ø 要求からのテストケース作成
Ø 要求  →  機能  →  コード  →  テストの⼀一気通貫
2015/01/31 MVP Community Camp 2015 大阪会場
テストを⽀支える技術
②  Sketch  Flow
•  ⾼高速プロトタイピングツール
•  要求  →  画⾯面仕様  を素早く確認できる!!
•  Visual  Studio  Premium  以上に搭載
Ø できれば、Pro(Community)で使えるよう
になってほしいな。。。
2015/01/31 MVP Community Camp 2015 大阪会場
テストを⽀支える技術
③  静的コード解析
•  Visual  Studioに搭載済み
Ø 危ないコードを書いていないか確認
(FxCop,  StyleCop  などなど)
•  Sonar  Sourceというオープンソースの
解析サーバもある
Ø 危ないところを分厚くテスト
•  (番外)Googleのバグ予測ツール
“BugRep”
Ø ヤバいところ  =  頻繁に変更更があった場所
2015/01/31 MVP Community Camp 2015 大阪会場
テストを⽀支える技術
④  コードレビュー
•  最近のソースコード管理理システムは、
“プルリクエスト”という概念念で
コードレビューを取り込んでいる
Ø VSOももちろん!
2015/01/31 MVP Community Camp 2015 大阪会場
テストを⽀支える技術
④  コードレビュー
•  最近のソースコード管理理システムは、
“プルリクエスト”という概念念で
コードレビューを取り込んでいる
Ø VSOももちろん!
2015/01/31 MVP Community Camp 2015 大阪会場
テストを⽀支える技術
④  コードレビュー
2015/01/31 MVP Community Camp 2015 大阪会場
テストを⽀支える技術
⑤  ⾃自動ホワイトボックステスト
•  ホワイトボックステスト:
Ø ソースコード上取りうる、すべてのパスを
満たすようなテストを⾏行行う
Ø シンプルなケースでも全パステストは膨⼤大に
なる  (2^if⽂文の数、条件20個で100万超)
⇒  ⼈人が書くもんじゃない!
•  Pex  from  Microsoft  Research
Ø ⾃自動で「⾯面⽩白い」パスを⾒見見つけ出してくれる
Ø VS2015で  “Smart  Unit  Test”としてとうとう
標準対応
2015/01/31 MVP Community Camp 2015 大阪会場
テストを⽀支える技術
⑥  単体テストサポート
•  「単体テスト」と簡単にいうけれど、、、
モジュールの結合を外すのは⼤大変
•  そこで、Fake  from  Microsoft  Research
(旧名Moles)
Ø あらゆるオブジェクトのモックを作ってくれ
るライブラリ
•  …のOSS版  Prig
(http://urasandesu.github.io/Prig/)
Ø ⽇日本の⽅方が作ってます!
2015/01/31 MVP Community Camp 2015 大阪会場
テストを⽀支える技術
⑦  システムテスト⾃自動化
•  「完成品」に対するテスト
•  Webの世界:  Seleniumなどで先⾏行行
Ø しかし「つらい」という話をよく聞く
•  Visual  Studioにも組み込まれている
(Coded  UI  Test)
Ø けれど…やっぱり不不安定
•  ここはFriendlyが⼀一番すごい!
http://www.codeer.co.jp/AutoTest
Ø テストが⾼高速、かつ⾮非常に安定する
2015/01/31 MVP Community Camp 2015 大阪会場
「巨⼈人の肩に乗ろう!」
2015/01/31 MVP Community Camp 2015 大阪会場
要求・機能仕様を
精査する
設計を
精査する
単体での
動作確認
結合しての
動作確認
システムとしての
妥当性確認
要求レビュー
プロトタイピング
設計レビュー
コードレビュー
単体テスト
結合テスト
システムテスト
βサイトテスト
VSO・TFS
SketchFlow
VSO/TFS
  Pull  Request
Pex Fake
Coded  UI  Test
Atlassian  /
Redmine
Alloy  /  SPINなどの
モデル検査ツール
Github
Prig
Friendly
まとめ
•  テスト  ≠  単純な刺刺⾝身タンポポ作業
•  開発プロセスを⾒見見通した上で、あらゆる
関係者と協業する⾼高度度スキル  
•  テストを究める  ≒  ALM
2015/01/31 MVP Community Camp 2015 大阪会場
おすすめ書籍
•  How  Google  Test  Software
(テストから⾒見見えてくる
      Googleのソフトウェア開発)
•  知識識ゼロから学ぶソフトウェアテスト
2015/01/31 MVP Community Camp 2015 大阪会場

テストって何をするもの? - テストの5W1H -