...

Slide

by user

on
Category: Documents
24

views

Report

Comments

Description

Transcript

Slide
テストにつ
いて考える
2011/1/27 #devlove Ryutaro “Ryuzee” YOSHIBA
http://www.flickr.com/photos/jakecaptive/3205277810/
⾃⼰紹介
Ryuzee
@ryuzee
http://www.ryuzee.com/
http://www.flickr.com/photos/adforce1/2539903964/
アジャイルコーチ
認定スクラムマスター(CSM)
認定スクラムプロダクトオーナー(CSPO)
オープンソース開発者、翻訳者
スクラム道の共同設⽴者
Shibuya.tracのスタッフ
TIS,野村総合研究所を経てベンチャーのCTO
http://www.flickr.com/photos/royskeane/413103429/
今⽇の話のコンテキスト
•  アジャイルな⽴場から話をします
•  もちろんウォーターフォールでも適⽤
可能です.
•  ソフトウェア開発はコンテキスト依存
性が⾼いので、唯⼀絶対解はありませ
ん.個々のプロジェクト内で良く話し
合うことをお勧めします.
http://www.flickr.com/photos/okiboi/411678818/
アジェンダ
1.  テストの⽬的と価値
2.  テストの⼿法
3.  テストのコスト
4.  テスト結果の評価
http://www.flickr.com/photos/ondablv/3959216018/
1. テストの⽬的と価値
•  品質ってなんだ?
•  何のためにテストするのか?
•  テスト範囲の決め⽅
品質ってなんだ?
顧客にとっての品質は、バグの有無ではな
く、そのソフトウェアを利⽤してビジネス
上の成果があげられるかどうかである.
http://www.flickr.com/photos/oberazzi/318947873/
極論すると…
バグは無いが、ビジ
ネスの役に⽴たない
ソフトウェア
http://www.flickr.com/photos/tschaut/875393159/
バグはあるが、ビジ
ネスの役に⽴つ
ソフトウェア
バグが少ないことだけをゴールにし
ていませんか?
http://www.flickr.com/photos/lauralie0/2988591080/
テスト範囲や内容の決め⽅
•  範囲は ⽬的 に依存する
•  範囲は ROI に依存する
•  範囲は リスク に依存する
⇒テスト範囲や内容とその完了の条件は
WFでもアジャイルでも重要
http://www.flickr.com/photos/benbunch/4816136249/
銀⾏、医療、携帯電話、Webサイトのど
れもが同じ条件によるテストが必要なわ
けではない!
http://www.flickr.com/photos/30854583@N07/4424574772/
http://www.flickr.com/photos/christianacare/4642178916/
http://www.flickr.com/photos/phossil/4849753531/
http://www.flickr.com/photos/deia/2235006720/
ビジネスによる判断
•  システムが競争⼒の源泉になる
•  サービスやシステムの早期のマーケットへの投⼊が、⼤
きなリターンにつながる
•  逆にいえば、いくら品質が良くても、マーケットへの投
⼊が遅れれば、⼤きなビジネスチャンスを失う可能性も
ある
顧客の要求例
「2011年2⽉28⽇までにサービスインしたい.品質につ
いては、正常系が動作すること、秒間3件以上のアクセ
スに耐えられること」
http://www.flickr.com/photos/maysbusinessschool/4418165194/
Doneの定義
プロジェクトごとにDoneの定義(完
了条件)は異なるので、案件開始時に
決める必要がある
http://www.scrumalliance.org/articles/107-how-do-we-know-when-we-are-done
2. テストの⼿法
•  WFにおける課題
•  アジャイルにおけるテストに対する考
え⽅
•  テストの4象限
•  テストの⼿法
•  ⾃動化・モニタリング
•  外注、パートナー混成チームにおける
品質の作り込み
http://www.flickr.com/photos/crystalcampbell/3454977037/
ウォーターフォールモデル
受⼊テスト
要件定義
基本設計
総合テスト
詳細設計
結合テスト
実装・単体テスト
ウォーターフォールのV字モデル
WFモデルの課題①
構築したソフトウェアが顧客ビジネスのニーズに
マッチしているかどうかを確認できるのは、受け
⼊れ試験の時期になってしまう
http://www.flickr.com/photos/coyotejack/2273593999/
WFモデルの課題②
モノの品質の確定は⼯期の後半に始まる
品質
品質
ビックバンリスク
⼯期
⼯期
WFでありがちな話
要件定義は順調です
○○設計は順調です
開発は遅れてますが、挽回可能です
結合試験で重⼤な問題が出ています
受⼊試験でニーズ不⼀致が判明
リリースできません
多くのリスクが後半に顕在化
http://www.flickr.com/photos/kwazar/2289418010/
アジャイルでの品質の作りこみ
Scrumの場合
24時間
スプリント
2~4週間
スプリントゴール
返品
スプリント
バックログ
キャンセル
Return
クーポン
Gift
wrap
ギフト包装
Cancel
クーポン
プロダクトバックログ
出荷可能な製品の
積み上げ
単体テスト、結合テスト、
受け⼊れテストがスプリン
ト単位(もしくはリリース単
位)で⾏われる.
アジャイルでの品質の作りこみ
スプリント終了時には「テスト」が完了.スプリントレ
ビューで顧客のビジネス要件への適合性も確認できる
http://www.flickr.com/photos/kakutani/2761992149/
アジャイルでの品質の作りこみ
Scrumではフレームワークの定義のみで、テスト⾃
動化については触れられていない.しかしアジャイル
開発においてはテスト⾃動化は必須
⼩規模リリースのたびに⼿
動でテストするとスプリン
ト後半になるにつれてテス
トコストが膨らむ
⾃動化しないとソフトウェア規模に応じて、テスト⼯数の占め
る割合が増加していく(=価値への投資が減少)
テストの4象限
ビジネス⾯(ビジネス的品質)
【⾃動と⼿動】
【⼿動】※1
機能テスト
ストーリーテスト
プロトタイプ
シミュレーション
探索的テスト
シナリオテスト
ユーザビリティテスト
ユーザー受⼊テスト
アルファ版、ベータ版
ー
チ
第2象限
ム
を
⽀ 【⾃動化】
援 単体テスト
コンポーネントテスト
第3象限
【ツール】
パフォーマンステスト
負荷テスト
セキュリティテスト
第1象限
技術⾯(技術的品質)
※1 ATDD等では⾃動化
第4象限
製
品
を
批
評
テストの4象限
第1象限 チームを⽀援する技術⾯のテスト
テスト駆動開発などアジャイル開発の中⼼。
第2象限 チームを⽀援するビジネス⾯のテスト
顧客の視点からのハイレベルの機能テストなど。
第3象限 製品を批評するビジネス⾯のテスト
ユーザー受⼊テスト、探索的テストなど。
第4象限 技術⾯のテストを使った製品の批評
パフォーマンステスト、セキュリティテストなど。
「アジャイルテスト ―⾼品質を追求するアジャイルチームにおけるテストの視点―」増⽥聡⽒
http://codezine.jp/devsumi/2010/report/07/ より引⽤
⾃動化されたテストの要件
⾃動化されたテストは以下の条件を満たしている必要がある。
RISE
繰り返し可能 (Repeatable)
何回でも繰り返し実⾏できること。また実⾏ごとに結果が変わらないこと
独⽴性 (Independent)
環境や外部のコンポーネントに依存しないこと
テストケースの実⾏順序に依存しないこと
⾃⼰検証 (Self validation)
テストが成功したか、失敗したかはプログラムが判断する。
(⼈⼿で判断しない)
簡単実⾏ (Easy)
テストの準備に⼤量の時間や⼈⼿がかかるようにしない
ツール・⼿法のマッピング(例)
ビジネス⾯(ビジネス的品質)
【⾃動と⼿動】
ー
チ
機能テスト
Selenium
ストーリーテスト
Cucumber
プロトタイプ
Rspec
シミュレーション
FitNess …
CI推奨
第2象限
ム
を
⽀ 【⾃動化】
援 単体テスト
コンポーネントテスト
TDD
xUnit
PMD, CPD …
CI必須
第1象限
【⼿動】
探索的テスト
シナリオテスト
ユーザビリティテスト
ユーザー受⼊テスト
アルファ版、ベータ版
⼀部CI可能
第3象限
【ツール】
パフォーマンステスト
Jmeter
負荷テスト
WebScarab
セキュリティテスト
RatProxy
ValGrind …
CI推奨
技術⾯(技術的品質)
第4象限
製
品
を
批
評
単体テスト⾃動化/TDDとは?
XPのプラクティスの中で、最も単体で導⼊しやすいプラクティスの1つである。
基本的な⽅法
失敗するテストを書く
できる限り早く、テストがパスするような最⼩限のコード本体を書く
リファクタリングをする
適⽤範囲
通常では、独⽴性の⾼いクラスやファンクションへの適⽤が良い。
GUIや分散オブジェクト、⾃動⽣成されたコード、DBのスキーマに関するテスト
は導⼊が難しい。
既存システムにおいて、テストが準備されていない場合に、部分的に導⼊するの
は難易度が⾼い。従って新規プロジェクトの初期から導⼊することが望ましい。
問題点
開発者が仕様を誤解していた場合、誤解に基づくテストコードが作成されるため、
誤解の検知は保証できない。あくまで開発者が作成するコードが、開発者が認識
するテストコードに適合していることのみが保証される。
結合テスト⾃動化とは?
複数のモジュールやサブシステム、実際の画⾯を使ったエンドツーエンドテスト
基本的な⽅法
内部コードではなく振る舞いを確認する.単体レベルの内容は検証しない.
Selenium、Cucumberなどを利⽤
問題点
基本的にはテストの作成コストは⾼い.
テストに際しては複数のシステムやデータベース等依存性のあるものの準備も含
めて⾃動化する必要があり、テストケースの実⾏に時間がかかることがある.(ス
ローテスト問題)
レガシープロジェクトへの導⼊
レガシープロジェクトとは?
⾃動化されたテストが備わっていないプロジェクトのこと。
利⽤している⾔語やフレームワークには関係ない。
レガシープロジェクトの問題点
機能追加や改修の際に、現⾏機能に問題がないことを保証するためには、⼈⼒
による再テストを実施するしかない。従って機能追加・改修が度重なるたびに、
テストのスコープが膨れ上がり、開発コストの増⼤につながる。
通常、ユニットテストによるテストを意識したモジュール間の依存性が低い状
態になっていないため、テストしにくく、結合度の⾼さ故、変更を加えにくく、
予期しない箇所に影響が出やすい。
どうやって導⼊するか?
結合テストレベルのテストを先に⽤意し、想定されるアプリケーション全体の
動作をチェックできるようにする。
第1象限での⾃動評価
プロジェクトの特性や要員構成等に応じて決める
テスト件数と結果(単体、結合)
PMD警告件数
Checkstyle警告件数
カバレージ
チーム活動の評価
コード⾏数
アクティビティ
コミット時間
チーム構成別リスク検出
外注する場合の注意点
品質定義、テスト範囲について委託先に任せているケースが⾮常に多いが、最
終的に⼤きなリスクを発注者が背負うことになる。従って
品質定義、テスト範囲、テスト⽅法、網羅性(カバレージ指標)について発注時
に伝えるとともに、⼯期中随時発注者側がチェックできる仕掛けを⽤意する。
(例:レポジトリ環境の提供、委託者作成のソースコードの⾃動チェック、⾃
動ビルド)
パートナー混成チームの注意点
チームの要員不⾜をパートナー(派遣契約等)混成チームで補うことがあるが、
要員のスキルの把握が事前にできないケースが多いため、特定のコーダーが作
成したモジュールに問題が頻発するといった結果になることが多い。
従って、外注する場合と同じように参画の段階で、品質定義、テスト範囲、テ
スト⽅法等を⼗分に伝える必要がある。また継続的レビューや⾃動チェックも
必要
なるべく⾃動化してリスクを⾃動で検出できる仕掛けを作る
ことが望ましい
3. テストのコスト
•  ⼿動テストのコストと⾃動テストの
コストの評価
•  初期開発とエンハンス開発
http://www.flickr.com/photos/webflunkie/5122391694/
テストのコスト評価
作成したテストを何回くらい実⾏することになるのか ?
テストの⾃動化を実現するために要するコストおよび維持コス
トはどの程度か?
ITアーキテクト「機能テストの⾃動化について考える」 より引⽤
http://www.itarchitect.jp/print/?menu3=24601
初期開発とエンハンス開発
初期開発
エンハンス開発
要員
⼊れ替わりはすくない ⼊れ替わりが多い
スキル
エース級やアーキテク エース級やアーキテク
トの存在
ト不在
リリース 回数予測可能
回数
運⽤期間に⽐例しリニ
アに増加
テスト
件数
エンハンス内容に⽐例
しリニアに増加
件数予測可能
エンハンス中はリニアにテスト件数が増加する.テストが⾃動
化されていない場合、全機能のリグレッションテストを⾏うが、
そのボリュームが増え続けてしまう.
⼿動テストのコストを顧客は負担したがるか?
4. テスト結果の評価
•  テスト結果の評価は誰がする?
•  社内の品質管理部⾨の役割は?
http://www.flickr.com/photos/billsophoto/4175299981/
テスト結果の評価は誰がする?
答え チームと顧客
SIerにおける社内品質基準での画⼀評価は、顧客に
とっては意味がない.
(例)顧客のRequirement
「2011年2⽉28⽇までにサービスインしたい.品質について
は、正常系が動作すること、秒間3件以上のアクセスに耐えら
れること」
⇒このようなケースで社内品質基準で評価すると、出荷不可
能な製品になってしまう.
http://www.flickr.com/photos/billward/2837582102/
社内の品質管理部⾨の役割は?
プロジェクトの後半ではなく、プロジェクトの提案活動、
テスト範囲の決定、テスト⽅法の決定についてチームを⽀
援する.
=Doneの定義
社内
品質基準
プロジェクト
品質基準
顧客の要求に
あわせて
テーラリング
品質管理部⾨
+
チーム
まとめ
ü  品質とはバグの有無ではなくビジネス価値が実現
できるか否かである。
ü  テストには⽬的が必要。⽬的によって実施⽅法や
範囲(完了条件)は異なる。
ü  ソフトウェアがニーズにマッチしているかどうか
は早期から確認が必要。
ü  テスト⾃動化は継続的な価値の創出に効果がある。
ü  テスト結果の評価は品質管理部⾨が⾏うものでは
なくチームと顧客が⾏う。
http://www.flickr.com/photos/meganelizasmith/4096564203/
Fly UP