Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
テストの目的を考えよう
Search
Sponsored
·
SiteGround - Reliable hosting with speed, security, and support you can count on.
→
imtnd
December 12, 2020
Programming
970
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
テストの目的を考えよう
In WACATE 2020 winter
テストの目的を考えよう セッション資料
https://wacate.jp/workshops/2020winter/
imtnd
December 12, 2020
More Decks by imtnd
See All by imtnd
AIプロダクト時代のQAエンジニアに求められること
imtnd
3
1k
QA/SDETの現在と、これからの挑戦
imtnd
1
2.2k
グローバルなソフトウェアテスト組織における課題と戦略 / Challenges and Strategies in a Global Software Testing Organization #mf_techday
imtnd
0
940
WACATE 2022 夏 ワークショップの目的
imtnd
0
1.1k
テスト設計技法をなぜ&どのように使うのか体験しよう!
imtnd
0
1.8k
analyze the behavior with decision table
imtnd
0
5.3k
WACATE流テスト分析のワークショップを体感してみよう
imtnd
0
310
テスト技法作成のアプローチを考える
imtnd
0
880
アジャイルとテスト / Agile and Testing
imtnd
1
2.2k
Other Decks in Programming
See All in Programming
AI時代の仕事技芸論 — ソフトウェア開発で「遊ぶように働く」職人的熟達のすすめ
kuranuki
2
680
並列実装の現場、2ヶ月間実務でAIを使い倒したAIもPCも私も限界が近い
ming_ayami
0
130
New "Type" system on PicoRuby
pocke
1
930
Inside Stream API
skrb
1
710
AIだと陥りがちなJakarta EE最新技術への移行時の落とし穴と解決策
tnagao7
0
110
ADKを使って簡単にAIエージェントを作ってみよう
k1mu21
0
260
IBM Bobを活用したレガシーアプリの最新化
oniak3ibm
PRO
1
200
キャリア迷子上等 ─ "ない道"は自分で作ればいい
16bitidol
3
2.1k
OSもどきOS
arkw
0
560
TypeScript+Orvalで実現する型安全かつ堅牢でスケーラブルなマルチチャネル通知基盤 / TSKaigi Night talks ~after conference~
d0riven
0
340
LLMによるContent Moderationの本番運用の裏側と品質担保への挑戦
suikabar
3
670
Javaの型とAI時代に型が大事な理由 / java types and type in AI era
kishida
2
140
Featured
See All Featured
個人開発の失敗を避けるイケてる考え方 / tips for indie hackers
panda_program
123
22k
HU Berlin: Industrial-Strength Natural Language Processing with spaCy and Prodigy
inesmontani
PRO
0
410
"I'm Feeling Lucky" - Building Great Search Experiences for Today's Users (#IAC19)
danielanewman
230
23k
Ten Tips & Tricks for a 🌱 transition
stuffmc
0
130
YesSQL, Process and Tooling at Scale
rocio
174
15k
Navigating Team Friction
lara
192
16k
Helping Users Find Their Own Way: Creating Modern Search Experiences
danielanewman
31
3.2k
Hiding What from Whom? A Critical Review of the History of Programming languages for Music
tomoyanonymous
2
850
Efficient Content Optimization with Google Search Console & Apps Script
katarinadahlin
PRO
1
620
Writing Fast Ruby
sferik
630
63k
So, you think you're a good person
axbom
PRO
2
2.1k
Data-driven link building: lessons from a $708K investment (BrightonSEO talk)
szymonslowik
1
1.1k
Transcript
テストの⽬的を考えよう WACATE 2020 WINTER
⾃⼰紹介 • ⾓⽥ 俊 • Twitter • @imtnd • コミュニティ活動
• WACATE実⾏委員 • NaITE運営スタッフ
セッションのゴール • テスト実施者 • ⾃分が⾏っているテストの⽬的を意識しながら、テストができるよう になること • テストマネージャー • テストレベルでやることを明確化し、テストの計画が⽴てられるよう
になること
⽬次 1. ソフトウェア開発プロセス 2. テストレベル 1. コンポーネントテスト 2. 統合テスト 3.
システムテスト 4. 受け⼊れテスト 3. テスト計画 4. テスト⽬的のヒントアイテム 5. 演習 6. まとめ
質問
移動を便利にするものを作って欲しい と⾔われたらどうしますか?
⾃動⾞を作成してほしいと ⾔われたらどうですか?
ネジが欲しいと⾔われたら どうですか?
V字モデル 要求 要件 基本設計 詳細設計 コード作成 コンポーネント テスト 統合テスト システム
テスト 受け⼊れ テスト 設計⼯程 検証⼯程 詳細化
アジャイル開発 イテレーション1 イテレーション2 イテレーション3 イテレーション4
テストレベル テストレベルは、系統的にまとめ、マネジメントしていくテスト の活動のグループである Foundation Level シラバス ⽇本語版 Version 2018V3.1.J02 http://jstqb.jp/dl/JSTQB-SyllabusFoundation_Version2018V31.J02.pdf
テストでやること(テスト活動)をグループ化して定義したもの • ⽬的 • テスト対象 など
要求 要件 基本設計 詳細設計 コード作成 コンポーネント テスト 統合テスト システム テスト
受け⼊れ テスト 設計⼯程 検証⼯程
コンポーネントテスト コンポーネントテスト(ユニットテストまたはモジュールテスト とも呼ばれる)は、個別にテスト可能なコンポーネントに焦点を あてる。コンポーネントテストの⽬的は以下の通りである。 • コンポーネントの機能的/⾮機能的振る舞いが設計及び仕様通りであることの検証 • コンポーネントに存在する⽋陥の検出 • ⽋陥がより⾼いテストレベルまで⾒逃されることの防⽌
Foundation Level シラバス ⽇本語版 Version 2018V3.1.J02 http://jstqb.jp/dl/JSTQB-SyllabusFoundation_Version2018V31.J02.pdf
• コンポーネント(部品)に対して、⼊⼒を与えて動作、出⼒ (振る舞い)が想定通りになっているのかを確認する • 開発者が⾃分の作成したものが⾃分の作成意図通りになってい るのかを確認するのが⼀般的 コンポーネント コンポーネントテスト
要求 要件 基本設計 詳細設計 コード作成 コンポーネント テスト 統合テスト システム テスト
受け⼊れ テスト 設計⼯程 検証⼯程
統合テスト 統合テストは、コンポーネントまたはシステム間の相互処理に焦 点をあてる。統合テストの⽬的は以下の通りである。 • インターフェイスの機能的/⾮機能的振る舞いが設計及び仕様通りであることの検証 • ⽋陥の検出(インターフェース⾃体、コンポーネントに内在、またはシステムに内在) • ⽋陥がより⾼いテストレベルまで⾒逃されることの防⽌ Foundation
Level シラバス ⽇本語版 Version 2018V3.1.J02 http://jstqb.jp/dl/JSTQB-SyllabusFoundation_Version2018V31.J02.pdf
• 複数のコンポーネント(部品)が統合でき(インターフェイス が仕様通りになっている)、動作することを確認する • 複数のコンポーネントを⼀度に統合しようとすると効率が悪い ことがある 統合テスト(コンポーネント統合テスト)
要求 要件 基本設計 詳細設計 コード作成 コンポーネント テスト 統合テスト システム テスト
受け⼊れ テスト 設計⼯程 検証⼯程
システムテスト システムテストは、システムが実⾏するエンドツーエンドのタス クと、タスクの実⾏時にシステムが⽰す⾮機能的振る舞いといっ たシステムやプロダクト全体の振る舞いや能⼒に焦点をあてる。 システムテストの⽬的は以下の通りである。 • システムの機能的/⾮機能的振る舞いが設計及び仕様通りであることの検証 • システムが完成し、期待通りに動作することの妥当性確認 •
⽋陥の検出 • ⽋陥がより⾼いテストレベルまたは運⽤環境まで⾒逃されることの防⽌ Foundation Level シラバス ⽇本語版 Version 2018V3.1.J02 http://jstqb.jp/dl/JSTQB-SyllabusFoundation_Version2018V31.J02.pdf
• システムの終端の振る舞いが仕様通りになっていることを確認 する (システム全体としての評価) システムテスト システム
• システム間や、複数のサービス、APIなどを統合して仕様通り に動作することを確認する システム統合テスト ※ JSTQBでは統合テストに分類されている
要求 要件 基本設計 詳細設計 コード作成 コンポーネント テスト 統合テスト システム テスト
受け⼊れ テスト 設計⼯程 検証⼯程
受け⼊れテスト システムテストと同様、⼀般的に受け⼊れテストはシステムやプ ロダクト全体の振る舞いや能⼒に焦点をあてる。受け⼊れテスト の⽬的は以下の通りである。 • システムが完成し、期待通りに動作することの妥当性確認 • システムの機能的/⾮機能的振る舞いが仕様通りであることの検証 Foundation Level
シラバス ⽇本語版 Version 2018V3.1.J02 http://jstqb.jp/dl/JSTQB-SyllabusFoundation_Version2018V31.J02.pdf 受け⼊れテストで⽋陥が⾒つかることはあるが、⽋陥を⾒つける ことは⽬的ではない
• 作成したシステムが使⽤できるか、効果があるかなどを評価する • テスト実施者は受け⼊れの相⼿による • 発注者 • ユーザ • 運⽤管理者
受け⼊れテスト
要求 要件 基本設計 詳細設計 コード作成 コンポーネン トテスト 統合テスト システム テスト
受け⼊れ テスト
None
テストレベルとテストフェーズ • テストレベル • テスト活動の段階をグループ化したもの • テストフェーズ • テストの時間を分けたもの •
以下のような場⾯も存在する • 統合テストフェーズであっても不具合があった場合はコンポーネントテストを ⾏う • 性能を早く⾒たいから統合テストでもシステムテストのテストを早く着⼿する ※ JSTQBでも区別していないので厳密に区別する必要はないが区別した⽅が良い場⾯もある
テストレベルのカスタマイズ • テストレベルという概念はすごく抽象的 • テスト対象は明確︖ • コンポーネントとは︖ • アプリ︖クラス︖メソッド、関数︖ •
システムとは︖ • 統合テストでは、何と何を統合する︖ • アプリの結合︖ • クラスの結合︖ • 作成者間で作成したものの結合︖ • テストレベルの段階は4段階で良い︖
テスト計画 • どういった⼿段やスケジュールでテストを進めていくのかを 定義したもの • テスト計画では、総合的、または、個別の各テストレベルでど ういったことを⾏うのか検討する • マスターテスト計画 プロジェクト全体で各テストレベルで何を⾏うのかなどを総合的に決
めたもの • 各テストレベルのテスト計画 各テストレベルで達成するべき⽬的などを定義したもの
テストレベルの役割を 定義できていないと。。。 • 各テストレベルで実施するテストの⽬的を定義できていないと、 以下のようなことが起こる • 下位テストレベルで⾏われるべき内容が上位のテストレベルで⾏われ る • システムテストで関数、メソッドへのパタメータの同値、境界値を確認する
• 同じテストを複数のテストレベルで⾏っている • 同じテストを複数回⾏っても時間の無駄になる • 不具合が発覚したときの不具合原因を時間がかかる • テストの積み重ねがないと、不具合が発⽣したときの原因特定の範囲が広くなり、 原因調査に時間がかかる
テスト⽬的のヒントアイテム • ヒントになるアイテム • テストベース • テスト環境、テストツール • テスト対象、テストスコープ •
テストデータ • テスト技法、カバレッジ基準 • テスト実施者 • テスト観点(テストタイプ)
テストベース • テストベースが異なるということは、テスト⽬的の視点が異なる • テストのインプットとなるもの • 要求仕様書 • 要件定義書 •
ユーザストーリー • バックログ • 基本設計書 • 詳細設計書 • ソースコード • 形のあるドキュメントとは限らない • PFDでテストレベルを定義するとインプットが明確になる
テスト環境とテストツール • そのテストレベルはどういう環境でテストを実施するのか • シュミレータ or 実機 • 開発環境 or
本番環境 • 実機や本番環境でテストする場合には実環境相当の負荷をかけて置く場合も ある 本番運⽤のときと、テスト環境が異なる場合は環境により不具合が出 る可能性がある • 使⽤するテストツール テストツールを使⽤している理由を確認する • xUnit Framework • Cucumber • ⾃作ツール
テスト対象とテストスコープ • そのテストのテストスコープはどこまでなのか • 対向のテストアイテムは 実物 or モック(スタブ) • 実物の場合はテストスコープ範囲内、モックはテスト範囲外となる
• 実物を対向テストアイテムとする場合は、バージョンなども定義する • モックを使⽤してテストを実施する場合は、それよりも上位の テストレベルで実物を使⽤してテストを⾏うタイミングを決め る必要がある。
テストデータ • どういったデータでテストを実施するのか • 試験⽤のデータ (機能が検証できる最⼩限のデータ) • 本番運⽤の実際に使⽤する想定のデータ • 実際の運⽤に使⽤していたデータ
テスト技法とカバレッジ基準 • 各テストレベルで使⽤するテスト技法と、満たすカバレッジを 定義しよう • コードカバレッジC0,C1,MC/DC • 境界値分析で2値の境界値 • 状態遷移テストで、0スイッチカバレッジを網羅
• ペアワイズテストで、2ワイズカバレッジ網羅 • ユースケーステストを網羅
テスト実施者 • 誰がテストを⾏うのか • 開発者 • 違う機能を作成していた開発者 • テストのみを⾏うテスト担当者 •
他社のチーム • 海外のチーム • QA • テスト実施する⼈によってテスト⽬的が異なる • 作成したものが開発者の想定通りになっているのかを確認 • システム全体として問題ないことの検証 • 第3者にテストしてもらうことで不具合はより⾒つけやすくなる
テスト観点(テストタイプ) • どのテストレベルでどういったテストを⾏うのか • 使⽤性テスト • 負荷テスト • 移⾏テスト •
性能テスト • 運⽤テスト • 信頼性テスト • セキュリティテスト • どの段階でどういうテストを⾏うのかを決める • アジャイル開発では⼀つのイテレーション内だけではなく、 いつのイテレーションのどのテストレベルでテストを⾏うのかを決めておく
テストレベルの名前 • テストレベルで実施している内容を踏まえて、 メンバ全員で分かりやすい名前をつける • 〇〇テスト • 〇〇統合テスト • 分かりやすい名前を付けておくと、認識ズレも起こりづらい
演習 • 関わっているテストレベルを識別アイテムを使って⽬的を認識 してみよう 時間︓20分間 • 他の上位、下位のテストレベルと何が違うのかを考えよう • ⾃分で⾏っているテストはどんな検証を⾏うことを期待されているのか •
⾏っていないテストとは何が違うのか → 他のテストレベルとの違いからテストの⽬的を考えてみよう • プロジェクト全体としてテストレベルがどう区別されているのか整理 してみよう • 段階はもっと細分化すべきではないのか • 名前を変える
まとめ • テストレベルからテストの⽬的を考えよう • テストレベルをカスタマイズして具体的に定義してみよう • 参考アイテム • テストベース •
テスト環境、テストツール • テスト対象、テストスコープ • テストデータ • テスト技法、カバレッジ基準 • テスト実施者 • テスト観点(テストタイプ)
参考情報 • テスト計画をもっと勉強したい⼈ • IEEE 829-1998 • IEEE 829-2008 •
ISO/IEC/IEEE 29119-3