サイボウズの開発運用研修で使用した資料です。
ソフトウェアテスト2022-05-19サイボウズ開運研修小山晃久(Garoon/生産性向上)
View Slide
ソフトウェアテストの位置づけ「ソフトウェアテストはソフトウェアの品質を評価し、運用環境でソフトウェアの故障が発生するリスクを低減する1つの手段である。」(JSTQB FL p.15)JSTQB FL 1.1
よいソフトウェアテストをやっていくには?よいソフトウェアテスト適切な情報を、適切なタイミングで、適切な相手にフィードバックする
適切な情報テストによってさまざまな情報を得ることができるテストに抜け・漏れがあり、適切な情報を取得できないのは避けたい
適切なタイミング重大な不具合は早くフィードバックしたい
適切な相手テストで得られた情報が欲しいのは誰だろう?
どうやってよいテストを実現するかテストは「テスト実行」だけからなるわけではない
テスト活動とテストプロセステスト計画テストのモニタリングとコントロールテスト分析 テスト設計 テスト実装 テスト実行 テスト完了今回は、テスト分析~テスト実行を扱うJSTQB FL 1.4
1. 何をテストすればよいだろうか?––––テスト分析
機能のテストを考えてみよう題材: 「Garoon のスケジュールのコメントで、参加者全員宛の宛先指定をできるようにする」機能機能のイメージは次のページにあります
何をテストしよう?仕様通りであること?
「仕様通り」の罠仕様通りでも、ユーザーの課題を解決していないことがあるVerification(正しく作っているか?)だけでなく、Validation(正しいものを作っているか?)も重要JSTQB FL 1.1
ユーザーや関わる人は誰だろう?今作っているものは誰のためのもの? その人はそれをどうやって使う?直接のユーザー以外にもこれに関わる人はいる?
リスク分析今作っているものが上手く動かなかったとき、何が起こるだろう?
テスト対象は何からなる?図示してみる機能以外にも、注目すべき点があるかも
仕様どんな機能? 何ができる?仕様に不足はない?
機能の周辺影響があるところは?過去の不具合は?
まとめ: テスト分析何をテストするのかを決めるそのために、必要な情報を集め、分析する
2. どうテストすればよいだろうか?––––テスト設計
欠陥の偏在欠陥は特定の箇所に集中していることが多いリスクに応じてテストの優先度や細かさを変えていくとよいJSTQB FL 1.3
全数テストは不可能すべての事前条件、入力を網羅するのは難しいテスト技法を使って、テストすべきことを絞り込んでいくJSTQB FL 1.3
テストを設計しようどのようにテストする領域を分ける?どの領域をどの優先度で行う?どうやってテストケースを作る?自動でやる? 手動でやる?
テストする領域の分割必要であれば、テスト分析結果を踏まえて領域を分けていく参加者全員宛の宛先指定をできるようにする機能の例UI のテスト、通知のテスト、ユースケースに従ったテストなどに分けられそうそれぞれのテストで、共通する観点もあれば異なる観点もある
テスト技法によるテストケースの絞り込み全数テストは不可能なので、テストケースを実現可能な数に絞り込む必要があるただし、重要なケースが漏れるのは避けたいこういう場合にテスト技法が使える
テスト技法の例:同値分割法同等に処理されると想定したデータをひとまとまり(同値クラス)にして扱う例: パスワードは8文字以上100文字以下0や負の値なども、無効同値クラスと扱ってよい?87 100 101有効無効 無効JSTQB FL 4.2.1
テスト技法の例:境界値分析同値クラスの最小値、最大値(境界値)を使ってテストする例: パスワードは8文字以上100文字以下87 100 101JSTQB FL 4.2.2
テスト技法は他にも色々デシジョンテーブルテスト、状態遷移テスト、ユースケーステスト、All Pair法、……技法を使う理由を説明できるのが重要JSTQB FL 4
ハイレベルテストケース具体的な入力値と期待結果の値が記載されていないテストケース対義語: ローレベルテストケース(具体的な値や手順が記載されており、実行できるテストケース)JSTQB FL 1.4.3
まとめ: テスト設計テスト分析を踏まえつつ、何をどうテストするのか決める欠陥が偏在することや、全数テストが不可能であることを踏まえて、テストの優先度や、テストケースの粒度も決める
3. テストを実行するためには何が必要か?––––テスト実装
テストケース設計したテストを、実施可能な形にする形式は様々(表、チェックリスト、プレーンテキスト、……)テスト分析やテスト設計の成果物に基づいて作成する
テスト環境正確なバージョンのテスト環境を構築する自動化がおすすめ
テスト自動化テストプロセスに割り当てるなら、テスト自動化の実装もここ
まとめ: テスト実装テストを実行可能な状態にするいきなりここからやると、テストケースの抜け・漏れや重複が発生するかも
4. 探索とフィードバック––––テスト実行
いざテスト実行作成したテストケースを実行していく
テスト実行のテクニック楽できないか考える細かいことでもメモを残す違和感やちょっと気になることを大事にする
想定外の事態が起こったら不具合かどうか確認適切なタイミングでのフィードバックブロック要素の管理
不具合報告チームごとの不具合管理方法に従って不具合を管理BTS (Bug Tracking System) に不具合を登録するなど不具合の再現に必要十分な手順を記載するJSTQB FL 5.6
テスト実行テストを実際に実行するフェーズソフトウェアテストはこのフェーズだけから成り立つわけではない
ソフトウェア開発ライフサイクルとテスト
ソフトウェア開発ライフサイクル例: スクラム
スクラムイベントとテストスクラムイベントに合わせて、どのようにテストを行っていくか?以下は一例です
リファインメントテストのことを考えながらバックログを見てみる(テスト分析)ユーザーが実際に行う操作は?テストしやすい?例外処理は考慮されている?
スプリントプランニング何を作るかの認識を合わせつつ、テスト設計を行ってみる(テスト分析、テスト設計)実装に関する議論を聞きながら、テストすべき箇所やテストしなくてよい箇所を考える/聞くテストの観点を出してみる(何をテストするか)テストケースの型を考えてみる(どうテストするか)
スプリント内実装の状況に応じてテスト設計をアップデート(テスト設計)テスト設計に基づきテストケースを作成(テスト実装)手動テストするテストケースの特定自動テストの作成実装が完了したらテスト開始(テスト実行)不具合が出たらすぐにフィードバック
まとめ
まとめ適切な内容を、適切なタイミングで、適切な相手にフィードバックしていくために、テスト分析で何をテストするのか考え、テスト設計でどうテストするのか考え、テスト実装でテストを実行可能にし、テストを実行しようテスト計画テストのモニタリングとコントロールテスト分析 テスト設計 テスト実装 テスト実行 テスト完了
参考文献[JSTQB FL] ISTQB著、JSTQB訳、「ISTQBテスト技術者資格制度Foundation Level シラバス 日本語版 Version 2018V3.1.J03」、2021https://jstqb.jp/dl/JSTQB-SyllabusFoundation_Version2018V31.J03.pdf