タグ: テスト

  • アジャイル開発におけるテストの役割とは?特徴や手法から導入方法まで詳しく解説!

    アジャイル開発におけるテストの役割とは?特徴や手法から導入方法まで詳しく解説!

    最近アジャイル開発という言葉を聞くことは多いと思います。
    アジャイル開発とは、短期間のサイクル(スプリント)を何周にも渡って行う開発工程のことで、欠陥を早期に除去することができるため、品質の高い製品の作成が望めます。
    従来の開発工程であるウォーターフォールモデルやV字モデルでは、長期間にわたる開発になればなるほど、開発過程の途中で振り返ることが難しいことが課題でしたが、アジャイル開発ではそれを解消することができます。

    今回は、そんな「アジャイル開発」でのテスト工程についてフォーカスをあて、アジャイル開発にてテスト責任者を務めていた筆者の経験から、注意した点や苦労したポイントなどを中心にリアルな目線で記載したいと思います。

    本記事のポイント

    前述したように、アジャイル開発は短期間のサイクル(スプリント)を何周にも渡って行うため、開発者・ステークホルダー共に状況が見えやすく、また欠陥を早期に除去することができるため、品質の高い製品の作成が望める革新的な開発工程です。

    しかし、大きな落とし穴としては、導入にあたってチーム内の協議や土壌作りに時間を割かなければならず、テスト工程において原因が曖昧な問題が多発してしまいます。
    また最終ゴールが明確に定められていないため、チーム内の協議や土壌作りに左右されることが少ない従来のウォーターフォール等の開発工程に比べて劣る製品になってしまう恐れがあります。

    図版_1.svg

    本記事では、アジャイル開発に携わったことが少ない方に向けて、この工程における検証の重要性と効果的な導入方法についてテストを通じて詳しく解説していきます。

    アジャイル開発におけるテストとは

    従来の開発工程も含め開発工程におけるテストとは作成された成果物に対して評価を行う作業です。
    ここでは、テスト工程がアジャイル開発においてどのような役割を果たしており、どのような特徴があるかについて簡単に解説していきます。

    アジャイル開発におけるテストの特徴

    アジャイル開発におけるテストと言っても、当然検証という目的は同じため従来のテストの基盤(前回のテストへのリンク)を適応することが可能です。
    そこで最初に気になるのは従来の開発工程(ウォーターフォールモデルやV字モデル)との違いなのではないでしょうか。

    それでは、従来のテスト工程とどのように違うのか、アジャイル開発におけるテストの代表的な特徴を5つ紹介します。

    図版_2.svg

    ①スプリントという短いスパンでサイクルが実行されることによるステークホルダーへの迅速な価値と結果の提供
    仕様・成果物・スケジュールといった部分が、従来の開発工程と比べてステークホルダーと開発間の現状の共有が頻繁に行われることによって、認識齟齬の事前防止・認識齟齬があった場合に速やかな対応が可能です。
    また、ステークホルダー側から定期的に提供される結果を元に最終納品時の営業戦略を立てやすい点が利点として挙げられます。

    ②テストが開発活動の最後ではなく恒常的に行われるため、迅速に開発側へのフィードバックと分析結果を提供できる
    クリティカルな障害が発生した際に従来の開発工程と比べてテストが定期的に動いているため作りこむ前に対応できる点と、従来の開発工程では最後に行われるテスト結果分析をサイクルの中で何度も行い、その情報を開発側にフィードバックすることで事前にクリティカルな障害の作りこみを防ぐことができます。

    ③リスクベースのテスト戦略を取り、分析の主導にテスト担当者がなることが多い
    テスト担当者としては、テスト結果分析の回数が従来のテスト工程に比べて多いため、より精度の高いリスク分析を行うことができる点と、その分析結果を他のプロジェクトでも流用可能な点が利点として挙げられます。

    ④手動テストの手法が従来のテストより偏った技法を用いることが多い
    テスト自動化の導入が優先されるアジャイル開発では、従来のテストで用いられる一部技法を自動化によって省略することが重要であるため、経験ベースおよび欠陥ベースの技法(ソフトウェア攻撃、探索的テスト、エラー推測等)といった自動化によって賄うことが難しい技法が偏って用いられます。

    筆者コメント

    筆者がアジャイル開発に携わったときは、ホワイトボックステスト(ユニットテスト等)は従来の開発工程でも開発チーム内でレビューを行う関係上自動化されることが多いですが、アジャイル開発では負荷テストやセキュリティテストといった非機能要件と受け入れ基準の確認項目を洗い出し、そのテスト自動化の導入をしてもらったことがあります。
    そして自動化した項目を除いたときに残るテストケースはユーザ受け入れテスト・シナリオテストと呼ばれる項目の割合が大多数を占めていました。

    ⑤ドキュメントを削減することができる
    テスト工程のプロジェクト成果物の内容は従来のテストと同様ビジネス指向の成果物、開発成果物、テスト成果物の3件に分類されます。
    しかし従来のテストに比べ、要件に従っていることを示す自動化の成果物と動くソフトウェアといった開発成果物に重点を置いているため、ステークホルダーに価値を提供しないドキュメントを削減することが指針となっています。

    アジャイル開発におけるテスト導入の注意点

    イラスト-01.svg

    アジャイル開発のテストは利点も多い反面、リスクもそれ相応のものが挙げられます。

    アジャイル開発におけるテスト担当者のスキル

    ここではテスト担当者の必要スキルにフォーカスを当てた注意点を紹介します。

    ① 人間関係の構築スキル
    従来のテスト工程に比べ、前述したリスク分析やスクラムミーティング等で各チームやステークホルダーと品質について協議する機会が多くなります。
    そのため、コミュニケーション能力は勿論、事前に連携が円滑に行えるチーム作りを怠ると、チーム間において認識齟齬が発生する恐れがあります。

    ② テスト自動化の経験
    アジャイル開発のテストは短いテスト期間のため、自動化導入の重要度が従来のテストに比べて高くなっています。
    そのため、テスト担当者にテスト自動化の経験があまりない場合、テスト担当者が導入に際して導入の可否の判断といった自発的な行動を起こしづらく、開発メンバーに余計な工数(本来テスト担当者が担う工数)が発生してしまう恐れがあります。

    ③ テスト分析の経験
    アジャイル開発のテストではテスト分析を実行する回数が多く、そのプロジェクト全体が影響範囲となっているため、従来のテストとは比べ物にならないレベルで重要度が高くなります。
    そのため、テスト分析の経験が薄い場合、対外的には前述している開発工程やステークホルダーへのフィードバックが難しくなってしまう点が挙げられますが、こちらは利点が失われるのみで従来のテスト工程に劣る結果になる程のリスクとなることはあまりありません。
    しかし、テストチーム内において分析が正確に行われないことは期間内に完遂できるテストケースの作成が難しくなり、必要なテストが実行できない可能性も出てくるため、プロジェクト全体の品質が大きく低下してしまう恐れがあります。

    アジャイル開発におけるテスト担当者の役割

    アジャイル開発におけるテスト担当者の役割は、テスト実行工程以外に「チームワーク」、「スプリントゼロ」、「統合」、「テスト計画作業」、「追跡性の保持」等が挙げられます。

    ここでは特にリスクとなる3つを説明していきます。

    ① チームワーク
    アジャイルでは、開発者、テスト担当者およびステークホルダーが一緒に作業するチーム全体でのアプローチが重要です。
    テスト担当者が開発チーム、ステークホルダーと折り合いを付け、信頼関係を結ぶことが重要となるということです。

    ② スプリントゼロ
    これはアジャイル開発におけるプロジェクトの準備活動段階にテスト担当者が行う作業のことを示しています。
    主な作業は下記の通りです。

    • プロジェクトの範囲の識別
    • 必要なツールの計画、手配
    • テストスコープ、テクニカルリスク、カバレッジの目標を考慮
    • 最初のテスト戦略を作成
    • 品質リスクの分析
    • タスクボードの作成
    • 完了の定義の明確化

    この作業ではテストで何を達成しなければならないのか、それをテストでどのよう達成するかの方針決めであるため、上記一覧のどれかが不十分である場合、テスト工程において問題が多発する恐れがあります。

    ③ 追跡性の保持
    追跡(トレーサビリティ)とは仕様書・テスト計画書・テスト設計書等の各種プロジェクト資料に変更があった場合に影響範囲を特定するため、相互に紐付けておく作業です。

    この作業は、変更の入った箇所の影響範囲や合わせて変更する必要のある資料の割り出しが速やかに行えるという利点があり、アジャイル開発は前述の通りサイクルを複数回行い都度仕様や計画を協議しながら進める関係で変更の入る回数が従来のテスト工程とは比較にならない程多く、追跡の重要度が上がると言えます。
    そのため、追跡性が保持されていないプロジェクトでは、各協議の結果で一部変更が入った際に影響範囲の特定ができず、都度余計な工数が発生し品質が大きく落ちてしまう恐れがあります。

    組織的なリスクと独立したテストの重要性

    従来のテスト工程にも同じことが言えますが、独立したテスト担当者は開発チーム内に所属する担当者に比べ欠陥を効果的に見つける能力が高いとされています。
    つまり、開発担当者は独立したテスト担当者に比べて成果物への批判的な視点が欠けやすいということです。
    そのため、テスト担当者やチームの選出には3つの選択肢があります。

    ① アジャイル開発チーム内にテスト担当者を設ける
    開発チームとして簡単な選択方法ですが、前述した通り独立性と評価の客観性を失うリスクが存在します。

    ② 完全に独立かつ分離したテストチームを設ける
    成果物への批判的な視点が欠けやすいという問題点が解消される選択肢ですが、外部である以上プロダクト内の新しい仕様の理解不足・ステークホルダーや開発者との人間関係の行き詰まりといった問題を抱えやすいリスクが存在します。

    ③ アジャイルチーム内に開発チームとは別の独立かつ分離したテストチームを設け、長期に渡りテストのみを担当する
    独立性を維持し、プロダクトを十分に理解し、他のチームメンバーと強固な関係を築くことができるため、①②に示した問題を解消することができます。
    しかしながら、テスト担当者へ求めるスキルレベルが上がる傾向にあるため、選定の段階でそれを考慮する必要があります。

    上記3件であれば③が理想的ですが、それに見合うスキルを持ったテスト担当者を選出することが出来なければ運用が不可能であるため、3つの中から状況に合わせた選定をすることが不可欠であると言えます。

    筆者コメント

    当社では、③のテスト担当者を選択し、アジャイル開発を進めたことがあります。
    このプロジェクトでは、テスト担当者はアジャイル開発がスタートする以前にプロジェクトを把握することに多くの時間を費やしていたため、テストチーム自体が想定以上の問題を抱えることはありませんでした。

    しかし、アジャイル開発スタート以前に時間が取れないテスト参画であった場合を考えると、想定できる障害やリスクの分析が筆者のスキルレベルでは十分にできず、対象の品質を大きく落としている可能性がありました。
    もちろん準備に潤沢に時間が取れるプロジェクトは稀かと思います、そのため③を選択する場合は準備時間に見合ったスキルレベルのテスト担当者がいることが必須であると感じました。

    アジャイル開発におけるテストの種類・手法

    ここまではアジャイル開発のテスト導入に関して話してきましたが、本章では具体的にアジャイル開発のテスト工程が担う事項について述べていきます。

    アジャイル開発におけるテストの種類

    ここでは「アジャイルテストの四象限」と言われる4つのテストの種類を判別する定義を紹介します。これはテストを縦軸ビジネス(ユーザ)、テクノロジ(開発者)、横軸製品支援、チーム支援の面に分け、テストタイプを区別し説明する方法論です。

    図版_4.svg

    ・第一象限(Q1)「ユニットレベルのテクノロジ指向」
    開発者のサポートが目的であり、単体テストやユニットテストが含まれます。
    この工程のテストは基本的には自動化され、継続的に繰り返されることが多いです。

    ・第二象限(Q2)「システムレベルのビジネス指向」
    プロダクトの振る舞いの確認が目的であり、機能テストが含まれます。
    この工程は受け入れ基準をチェックするものであり、手動・自動どちらの方法でも実行されることがあります。

    ・第三象限(Q3)「システムレベル・ユーザ受け入れレベルのビジネス指向」
    現実的に使用されるシナリオやデータを使用してプロダクトを評価することが目的であり、探索的テスト・ユーザ受け入れテスト・シナリオテスト・αテストβテストが含まれます。
    この工程のテストは基本的には手動で実行されます。

    ・第四象限(Q4)「システムレベル・運用受け入れレベルのテクノロジ指向」
    運用された際のプロダクト自体を評価することが目的であり、負荷テストやセキュリティテスト等の非機能テストが含まれます。
    この工程のテストは自動化の対象とできる事項が多いため、基本的には自動化されます。
    この定義はスプリント毎にこれらのいずれか又は全てのテストが必要となり、各関係者に説明することが容易となるため、テスト担当者はこの4つを判別することが重要です。

    アジャイル開発におけるテストの手法

    まずテストを行うにあたって、どこへ向かうべきかという「完了」の定義を明確にする必要があります。具体的には「Webアプリケーションの検証について」3-1.に記載のある各テストレベルとその完了基準を満たしているかということです。
    完了条件は従来の開発工程のテストと同じくテストケースの消化・欠陥/品質リスクの修正済みが基盤となりますが、アジャイル開発では「できる限りのテストが自動化されていること」が完了基準に含まれます。

    ここで注意しなくてはならないことが、テストスコープは従来のテスト工程と異なりリスクベースであるため、「完了」の定義自体は似通っていますが、テストの基準自体が異なっていることが多いという点です。

    「完了」の定義が決定した後に「テスト」を行うわけですが、ここで主に用いられる技法が「ブラックボックステスト設計」「探索的テスト」です。

    ・ブラックボックステスト設計
    開発者のプログラミング作業と並行して、ユーザストーリーと受け入れ基準に基づいてテスト項目を作成する作業のことです。
    従来型のブラックボックステスト設計技法と同じものであるため、「Webアプリケーションにおけるテストの役割とは?項目や工程まで細かくご紹介」の3-3に記載がある技法が適応できます。

    ・探索的テスト
    探索的テストとは、テスト担当者がユーザストーリーに沿ってテスト設計と実行を同時に行う技法のことです。
    この技法はテストチャータというカバーすべきテスト条件のみが提供され、テスト担当者がリスクであると考える部分のテストを手当たり次第実行する技法であり、テスト分析結果等を元に形作られる経験ベースのテスト手法により良い結果を得ることができます。

    これを実施する利点としては、短時間で成果を生み出しやすいということが言えます。
    ただし、テスト担当者の想像力・直感・認識力・スキルといった様々な要素に左右されるものであるため、テスト担当者のプロジェクトへの理解が不可欠であるテスト手法です。
    また、探索的テストは設計と実行が同時に行う関係上、文書化が十分でないとどのように問題が発見されたかを遡って確認することが困難になるため、行ったテストについては正確に文章化することが重要です。

    筆者コメント

    当社では、ここまで説明したスプリントを期間で区切る手法ではなく、「カンバン」というアイテム単位でリリースを可能とするアジャイルアプローチを実践したことがあります。
    そこでは、タスク管理ツールにて対象の成果物のタスクに対してテストステータスを変更していくという形でブラックボックステストとリスクの高いと判断した箇所の探索的テストを行っていました。

    このプロジェクトはチーム内のコミュニケーション量の多さからテスト指針が定まらないことや障害の作りこみというリスクの回避はできました。成果物をリリースするたびにステークホルダーや開発メンバーとのやり取り、仕様変更の中でそれに合わせたテスト工程の改善を実行し、より良い品質が実現できたと考えています。
    しかし、筆者がプロジェクトに途中参画したという経緯があったため、テスト分析による工程改善やステークホルダーへの価値提供という面が活かしきれなかったことは反省点です。
    反省点も時期が進むに連れて改善していきましたが、やはりアジャイル開発におけるテスト分析は積み上げていくものであるため、初期からチーム全体で意識して行っていた場合と差ができていたと思われます。

    アジャイル開発のテスト導入でより質の高い製品を

    ここまで、アジャイル開発におけるテストについてお話してきました。
    最初に記載したように、正しい理解の元で準備を行わなければ上手くいかないリスクを多く抱えていますが、正しい理解の元準備を行うことで従来の開発工程以上の成果をもたらしてくれます。

    特に今回はテストにフォーカスを当てた記事であったため、テスト担当者に求めるレベルが大きく上がっていることが理解できたと思いますが、それを満たせるテスト担当者がチーム内に在籍している場合は、より高品質の製品を作るためにアジャイル開発という選択肢があるということを理解し、検討していただけると幸いです。

  • Webアプリにおけるテストの役割とは?項目や工程まで細かくご紹介

    Webアプリにおけるテストの役割とは?項目や工程まで細かくご紹介

    Webアプリケーション(以下Webアプリ)開発に携わる企業の方の中には、開発工程が多岐にわたるため、実装後の作業であるWebアプリにおけるテストの必要性や、実施方法について把握しきれていないという方も少なくないと思われます。

    本記事では、検証工程に携わったことが少ない方に向けて、検証の重要性と効果的な導入方法について詳しく解説していきます。

    Webアプリにおけるテストとは

    Webアプリの開発工程におけるテストとは、作成された成果物に対して評価を行う作業です。

    評価基準は工程やWebアプリによってさまざまですが、まずはWebアプリにおけるテストの前提である実施の理由について簡単に解説していきます。

    テストを実施する目的

    Webアプリにおけるテストで最初に思い浮かぶ目的は、欠陥(バグ)の摘出ではないでしょうか。
    ただ、欠陥の摘出とはあくまで目的を達成するための手段であり、本来の目的は欠陥の摘出を内包した、より広義的なものになります。

    目的はプロジェクトによってさまざまですが、ここではよく用いられるステークホルダー(利害関係者)基準での、Webアプリにおけるテストの達成基準について4件ご紹介します。

    • 明確にしたすべての要件を満たしていることを確認
    • ソフトウェアの品質が不適切になるリスクレベルを軽減
    • 契約上、法律上、または規制上の要件や標準を遵守
    • ステークホルダーが意志決定できる品質レベルについての十分な情報提供

    テスト工程を実施しなければならない理由

    【1-1】において、テストを実施する目的は明確になりましたが、ここでは目的を達成するためになぜテストを実施する必要があるのかについて解説していきます。

    まず、ステークホルダーの観点からすると「開発工程における大きな手戻りや、リリース後の致命的な不具合による損失を防ぐため」が挙げられます。
    開発工程の手戻りは工数の増加、リリース後の致命的な不具合は利益の損失につながってしまいます。そのため、テスト実施の理由としては損失の回避と将来的な利益の確保となります。

    また、開発工程の観点からすると「テスト終了後に欠陥の根本原因を分析するため」が挙げられます。
    開発工程においては、どこでどのような欠陥が出たか、どのような欠陥が開発工程のスケジュールに影響を及ぼしたかなどを欠陥ベースで情報集積することで、次回以降の開発工程における改善案の提示を行うこともテスト実施の理由となります。

    Webアプリテストの作業工程

    ここでは、Webアプリテストの目的と理由についてより理解を深めるため、具体的な作業工程を解説していきます。

    実行計画

    Webアプリにおけるテスト工程を実行することが決まった段階で、まずは実行計画を開始します。

    最初に、テストに必要なリソースの確認を行います。
    必要なリソースは主に下記の6つになります。

    • プロジェクト方式
    • 仕様書
    • 設計書
    • 製品マニュアルやテスト対象機器
    • 旧バージョンが存在する場合の各種テスト情報
    • 競合製品が存在する場合は競合製品の情報や実機

    これらの情報をもとにテストの内容やスケジュールを策定していきます。

    次に、スケジュール策定を実施します。
    テスト対象物のテスト実行範囲(確認を行う事項)を明確化し、優先順位を付けます。また前述の過去のテストデータなどから不具合の予想件数を想定できる場合はその数を割り出しておきます。
    必要な情報を集め終えた後、その情報を元にタスク・工数・マイルストーン・要員・終了基準を決定し、スケジュールを組みます。

    最後に、テスト工程における連携手段とリスクの明確化を実施し、本工程を終了します。
    考えられる主なリスクは下記の4つになります。

    • 要員のトラブル
    • コミュニケーションミス
    • テスト実行を阻害するブロックバグやテスト対象物の品質
    • 機器の不足や故障

    上記に関しては発生してからの対応のため、スケジュール策定段階で想定することは難しいですが、前述の過去のテストデータなどから計画段階で回避策を用意しておくことでリスクを低減することが可能となります。

    環境準備

    Webアプリにおけるテスト環境準備とは、テスト実行する上で必要なリソースを確保・確認する段階になります。
    具体的な準備は下記の6件になります。

    • 作業環境の準備
    • テスト環境やテスト対象の準備
    • 必要なリソースの動作確認
    • プロジェクト用語集と組織図の準備
    • コミュニケーションツールと運用ルールの準備
    • テスト実行に必要な管理表の用意

    テストケース準備

    Webアプリにおけるテストケース準備とは、テスト実行に必要な実施条件、動作、期待結果を示したドキュメントの作成を行う段階になります。
    具体的な事例は【3-3】において説明します。

    実行

    Webアプリにおけるテスト実行とは、【2-1】~【2-3】の工程で作成した内容を用いてテストを実行する段階になります。
    基本的には「テスト項目と予定時間の確認・打鍵」を行うだけの作業ですが、障害の発生に伴い不具合報告と確認テストが追加で発生する場合があります。

    不具合報告

    実行段階において確認された不具合や確認事項はエンジニアへ報告する必要があるため、不具合報告書を作成します。
    手順としては下記の通りになります。

    • 期待値と異なる事象の確認(テスト実行時に確認)
    • 不具合かどうかの判定(各種ドキュメントとの整合性チェック)
    • 事象の発生条件の明確化
    • 再現手順の明確化
    • 不具合の評価(品質への影響度や修正優先度)
    • (3)~(5)を記載した不具合報告書の作成
    • 環境準備において不具合管理表を作成した場合は管理表へ記載

    実行報告

    実行完了後にテストケースの実行件数や不具合率などの実行計画段階で定めた終了基準を満たしているか確認し、テストを終了する判定が下された際にはテスト実行報告を作成します。
    テスト実行報告にまとめる内容は下記の4点になります。

    • 実行件数や不具合率などの集計
    • 実行中に発生した問題点とその解決策の提示
    • 次回への改善点や要望の提示
    • テストに使用した各種データ・物品の整理・保管

    本工程は欠陥を取り除くというテストの直接的な目的からは乖離する内容ではありますが、【1-2】の「テスト終了後に欠陥の根本原因を分析するため」に該当するテストを実行する理由の一端であるため、必要不可欠と言えます。

    Webアプリテストの手法

    ここでは、【2】で示したテストの流れを実行する際のテストの区分方法や、テスト仕様書の作成方法について解説していきます。

    テストレベル

    テストレベルとは、テストを系統的にまとめ、マネジメントしていくグループです。
    具体的には下記の4件になります。

    ・単体テスト
    個別にテスト可能なコンポーネントに焦点をあてるテスト。

    ・結合テスト
    コンポーネントまたはシステム間の相互処理に焦点をあてるテスト。

    ・総合テスト
    システムが実行するエンドツーエンドのタスクと、タスクの実行時にシステムが示す非機能的振る舞いといったシステムや製品全体の能力に焦点をあてるテスト。

    ・受入テスト
    システムテストと同様、一般的に受け入れテストはシステムやプロダクト全体の振る舞いや能力に焦点をあてるテストではあるが、目的は不具合を検出することではなく、システムが導入に向けて準備できているかどうか、および顧客 (エンドユーザー)が使用できるかどうかを評価するテスト。

    各工程は一回だけ行い、原則として後戻りは許されません。
    前工程の成果物をインプットし、次工程にアウトプットする成果物を作成することをウォーターフォールモデルと呼びます。

    下記のような左側が設計プロセス(上流工程)、右側が検証プロセス(下流工程)のV字モデルでは、横に対応する仕様書をインプットとして、仕様書通りの成果物ができているかどうかの確認を行います。

    ウォーターフォールのV字モデル
    図1:ウォーターフォールのV字モデル

    出典:https://thinkit.co.jp/article/22/3/

    テストレベルごとに目的・テストベース・典型的な欠陥・アプローチ方法が異なるため、【2-1】実行計画段階の必要な情報として挙げることができます。

    テストタイプ

    テストタイプとは、ソフトウェアシステムの目的や特性毎に条件を束ねたものです。
    具体的には下記の4件になります。

    ・機能テスト
    システムが実行する事項が機能要件を満たしているかを評価するテスト手法。

    ・非機能テスト
    システムやソフトウェアの使用性、性能効率性、セキュリティといったシステムが「どのように上手く」振る舞うかを評価するテスト手法。
    こちらの具体例は【3-3】の”手順⑦”に記載してあります。

    ・ホワイトボックステスト
    システムの内部構造や実装にもとづいてテストを導出する手法。
    この手法は内部構造を理解しているコードの実装者で行われるテストやレビューが主軸になるため、テストチームとして実行されることは少ないです。

    ・確認テストとリグレッションテスト
    欠陥を修正、追加、変更といったシステム対応を行った場合、元の欠陥が修正されたこと、機能が正しく実装されていること、予測しなかった悪い影響が発生していないことを確認するためのテスト。

    すべてのテストタイプはすべてのテストレベルで実行可能ではありますが、プロジェクトの方針にあわせて各テストレベルに全テストタイプを適用する必要はありません。
    テストタイプは必要となるもっとも早い段階のテストレベルで行うことで大きな手戻りや致命的な欠陥の作りこみを防ぐことができるため、どのテストタイプも可能な限り早い段階で実施することが重要です。

    テスト項目作成

    ここでは、【2-3】の工程において作成する仕様書の内容について解説していきます。

    手順①:開発仕様の確認と熟知

    下記5件の資料を収集し、収集した内容をテスト設計文書として記録する。

    • テスト設計の上で必要なドキュメント
    • テスト対象の機能要求から必要なドキュメント
    • テスト対象のコンプライアンスに関わる情報
    • テスト対象の非機能要件
    • 過去のテストドキュメント

    またテスト設計文書は作成した際に修正作業や後の作業工程のために参照元のドキュメントとのトレーサビリティ(追跡性)を確保しておくことが重要です。

    手順②:テスト対象物の仕様をベースにテスト要素とテスト条件の抽出

    テスト要素は”手順①”で作成したテスト設計文書をベースにテストの実行できるパターンを抽出したものになり、テスト条件はテスト要素に与えるさまざまな入力値になります。
    また、この2件は量が増えやすく、テキストでの管理が困難であるため、下記のような管理体制であることが望ましいです。

    ・テスト要素
    抽出後に要素同士の関係性を明確化し、樹形図の作成によって管理する。

    図2:テスト要素-樹形図
    図2:テスト要素-樹形図

    (参考:IVEC知識試験テキスト制作委員会 『IT検証技術者認定試験(IVEC) 知識試験 テキスト』よりP115「図 M3-3 機能樹形図(Function Tree)」を参考の上作成)

    ・テスト条件
    複数条件が絡み合う場合、テキストベースでの管理は難しいためデシジョンテーブルやマトリクス表の作成によって管理する。
    ※例として、有効値と無効値の数値処理を行う条件には下記の2件を用いる場合が多いです。

    同値分割法:有効値と無効値といった条件をひとまとめにし、その中から代表の値を選定する手法
    境界値分析:有効値と無効値の境目の値にフォーカスをあて、その数値を条件とする手法

    図3:同値分割法・ 境界値分析
    図3:同値分割法・ 境界値分析

    (参考:IVEC知識試験テキスト制作委員会 『IT検証技術者認定試験(IVEC) 知識試験 テキスト』よりP132「図 M4-7 同値分割と境界値分析による”月”データの有効値と無効値の抽出」を参考の上作成)

    手順③:テスト要素とテスト条件を組み合わせる

    テスト要素とテスト条件を組み合わせたものが、テスト設計の最小単位であるテストケースとなります。
    この工程で組み合わせるものを検討するのではなく、”手順①”で示したテスト設計文書のトレーサビリティを参照し、組み合わせを導き出していきます。

    手順④:テスト要素と例外のテスト条件又はテスト要素と異常のテスト条件を組み合わせる

    本来は開発仕様書を始めとするドキュメントを用いることで、想定する動きが正常に動作しているか確認できるため、問題はないように思います。
    しかし、想定していない状況(サーバーダウンなど)に陥った際、次に説明する2パターンのテスト条件を実行していない場合、脆弱性により大きな損失を被る可能性があります。

    例外のテスト条件とは、仕様の範囲内ではあるが仕様で定められていない値を与えられる条件のことです。
    ・例外条件(数値パターン)
    web_test4.jpg

    (参考:IVEC知識試験テキスト制作委員会 『IT検証技術者認定試験(IVEC) 知識試験 テキスト』より P144「表 M5-4 有効値30~50の例外条件」を参考の上作成)

    ・例外条件(名称パターン)
    web_test4.jpg

    (参考:IVEC知識試験テキスト制作委員会 『IT検証技術者認定試験(IVEC) 知識試験 テキスト』よりP144「表 M5-5 都道府県名称の例外条件」を参考の上作成)

    異常のテスト条件とは、仕様に関係なくテスト要素に本来使用する想定ではない値が与えられる条件のことです。
    具体的な例としては下記が挙げられます。

    • 整数入力欄に文字コードではないデータが与えられた
    • データが与えられなかった
    • データの処理中に次のデータが与えられた
    • データの入力先が排他状態だった

    上記2パターンのテスト条件については、開発仕様書などで範囲が定められていないため、条件になり得る量は膨大になります。
    そのため、テスト仕様書作成担当者とレビュアーがテスト設計文書や開発仕様書からプロジェクトのスコープに適応する条件や、リスクの大きい条件を選定することが理想です。

    手順⑤:テストケースをテスト仕様書へ落とし込む

    ”手順③”と”手順④”で作成したものを実際にテスト仕様書に落とし込んでいく作業になります。
    この作業で重要なのは、テスト実行担当者のレベル、テストの期日、工数を考慮した上で『記述の粒度』を変えるという点です。
    『記述の粒度」の例としてログイン確認の項目を書いた場合、下記のようになります。

    ・『記述の粒度』が低い場合
    「登録済みアカウントでログイン」

    ・『記述の粒度』が高い場合
    「IDに“XXXX”、Passwordに“AAAA”を入力し、ログインボタンを押下する」

    スキルレベルが高いテスト実行担当者の場合、『記述の粒度』が低い場合でも理解することが可能ですが、スキルレベルが低いテスト実行担当者の場合、『記述の粒度』が高いと、テストケースの意図を理解するまでに時間を要してしまいます。
    また、『記述の粒度』が高い場合、スキルレベルが高いテスト実行担当者が読了に時間を要し、テスト仕様書作成担当者が記述に多くの時間を割くことになります。
    そのため、テスト実行担当者のスキルレベル、テストの期日、工数にあわせて最適化することを念頭に置き、テスト仕様書作成にあたることが重要になります。

    当然ではありますが『記述の粒度』の高低に関わらず、理解しやすい文章や作りにすることはテスト実行担当者の補助のみならず、実行報告や次回以降のテスト工程のサンプルとして生かしやすくなるため、気を付ける必要があります。

    手順⑥:作成したテスト項目に対して期待値を設定する

    作成したテスト仕様書のテスト項目に対して、正誤の判断に用いる期待値が必要になります。
    こちらはテスト設計文書と参照元のドキュメントとのトレーサビリティ(追跡性)を用いて設定することが多いです。
    例外のテスト条件や異常のテスト条件を用いた項目や参照元のドキュメントとの整合性が取れない場合に関しては、開発者やプロジェクト責任者に確認を取る必要があります。
    また期待値が文章化できない場合には、リファレンスを用意して期待値を示します。

    手順⑦:非機能テストのテスト基準策定

    【3-2】で示した非機能テストの内容を精査します。
    代表的なものは下記の3件になります。

    ・性能テスト
    ・負荷テスト
    ・脆弱性テスト

    これらのテストの実行可否、使用方法、ツールを選定しテスト仕様書に追加またはチェックリストを作成します。

    Webアプリテストの今後の展望

    今後Webアプリにおけるテスト実行は、テスト自動化ツールや “Sizzy”などの検証補助に利用できるツールを導入することで最適化できると考えます。

    テスト自動化ツールは、そもそもツールを開発できる技術者がテストチームにいないことや、短期的な視点で見れば工数を損失するなどの障害も多いですが、導入後の長期的な視点で見ると工数の削減やヒューマンエラーの削減につながるため、導入には前向きな検討が必要です。

    検証補助ツールは、昨今の開発従事者の在宅勤務化に伴い、在宅環境における検証端末の有無や、テストチーム内の検証環境の差異といった問題を解消するためにも急務であると考えます。
    もちろん“Sizzy”を始めとする検証補助ツールは、検証の効率化といった面でも大変役に立ちます。
    そのため、在宅勤務化がこれからというテストチームであったとしても、テスト実行者の負担軽減、工数削減、そしてプロジェクト全体の品質向上につなげるため、導入への前向きな検討が必要です。

    Webアプリにおけるテストまとめ

    Webアプリのテストは開発工程で発生するあらゆる不具合を拾い上げ、製品としての魅力を担保する役割を担っています。

    将来的な不利益を回避や利益の確保につながるため、Webアプリに携わる方は最低限の目的と工程を理解することでよりよい成果物を目指しましょう。