こんにちは! テストエンジニアのマツキョーです!
「トレーサビリティ」という言葉をご存知でしょうか? トレーサビリティは英語の「trace」と「ability」を繋げた造語で、日本語では「追跡可能性」のように翻訳されます。元々は製造業の品質管理の概念として生まれたもので、部品から製品までの各製造工程で品質を管理するための手法です。近年では、IT業界においてもトレーサビリティの重要性に注目が集まっています。
もちろん品質保証(QA)においても、トレーサビリティを確保することは重要です。なぜならトレーサビリティを確保していないと、私たちが行ったテスト活動が、ソフトウェアやシステムの要件・仕様に対してどのくらいの品質を担保できているかが追跡できなくなるからです。
では、QAだけがトレーサビリティを意識していればいいかというとそうではありません。QAの責務は品質を保証することであり、品質を作り込んでいくのは、QAや開発を含めソフトウェアやシステムに関わるすべての人間だからです。組織やチーム全体でトレーサビリティを確保するための取り組みを行っていくことで品質の追跡可能性や明確性などの確立を促進することができます。
しかしながら、トレーサビリティを確保して活用していくためには、相応にコストが掛かります。私自身、業務を通して多くのプロジェクトに携わる中で、トレーサビリティの活用に取り組みながらも苦戦するチームを数多く見てきました。トレーサビリティを導入してもすぐに期待通りの効果を得ることは難しいでしょう。それでもトレーサビリティを組織やプロジェクトに導入することは、大変価値のある作業なのです。
この記事では、これからトレーサビリティを導入・運用していくにあたり、トレーサビリティとは何か、そのメリットおよび運用方法と注意点、そしてQAとしてどう関わっていくかについてご紹介していきます。トレーサビリティについて知識を深め、組織やプロジェクトの品質改善にお役立ていただければ幸いです。
トレーサビリティとは?
トレーサビリティという言葉は、元は製造業で使用されていた品質管理の概念です。ソフトウェア開発でも品質管理のための手法として一般的に利用されています。ソフトウェアの品質保証においても重要な概念であることは言うまでもありません。ISTQB glossaryでは、トレーサビリティに関する用語として以下のように掲載されています。
関連する作業成果物、または作業成果物内のアイテムを明示的に関連付ける能力。
ISTQB glossary「トレーサビリティ」
たとえばシステム開発であれば、最初に「要求」を定義し、「要求」をもとに様々な「要件」を洗い出し、「要件」を満たすための「仕様」を設計し、「仕様」をもとに「コード」を作成して実装したり、QAが「テスト」を設計したりします。トレーサビリティはこれらの繋がりを明示的に管理することで、「要求」を満たせているか、つまり意図した価値・品質を作り込めているかを測定できるようにしてくれます。トレーサビリティに関するQAの役割としては、様々な種類のテストを通してトレーサビリティの破綻や抜け漏れがないか、その繋がりに妥当性があるかを検証して保証していくことが挙げられます。
トレーサビリティを確保するメリット
トレーサビリティのイメージが少し掴めたところで、次に具体的なメリットをご紹介します。
製品の品質について追跡可能性・透明性・明確性を提供してくれる
製品が要求を満たしていることを担保するためには、まず要求をどのようにブレイクダウンして仕様やデザインに落とし込んだか、その仕様がどのコードにより実装されたかが追跡できる必要があります。そしてQAが、仕様をもとにテスト条件を抽出してテストケースを作成し検証することで、要求からテストまでの一貫したトレーサビリティが確保されます。これらを可視化して管理することで「追跡可能性」や「透明性」が生まれ、品質という目に見えない指標を計測できるようになります。また、情報を一意化することにより「明確性」も生まれ、欠陥の混入や不具合の作り込みを防ぐことができるようになります。
他にも、トレーサビリティが適切に確保されていれば、不具合が偏在している機能や、他の機能・システムとの依存関係が集中している部分が明確になります。不具合が集中している部分をリファクタリングしたり、他の機能・システムとの依存関係を緩和したりするなど、プロダクトをより管理しやすく品質を保ちやすい構造に改善していくための判断材料にすることもできます。
変更要求が発生した際に迅速な対処が可能になる
あるプロジェクトに途中から参画した時の話です。既存機能の機能変更が計画されておりテスト設計をすることになりました。その際、「以前に実施したテストケースが流用できるので使って欲しい」という指示を受けたのですが、テストケースを確認したところどのテストベースや仕様記述を基に設計されたのかがわからず、流用可能な部分と機能変更により新たに設計しなければいけない部分の調査に時間が掛かったことがありました。何とか期日までに仕上げましたが、人の入れ替わりが激しいIT業界においてトレーサビリティの重要性を再認識した出来事でした。
機能の変更発生時やインシデント発生時など、その機能変更や不具合が現在のシステムのどこに影響するのかを正しく理解していないと、予期せぬ別の不具合に繋がってしまう可能性があります。この時、トレーサビリティが適切に確保・管理されていれば、影響範囲の理解を助けて素早い対応が可能になります。たとえば既存システムに新たな要件にもとづく機能を追加することになった場合、QA視点では以下の活動が容易になります。
- 既存のテストケースでカバーできる範囲がわかり工数を節約できる
- 新たに作成する必要があるテストケースが特定でき、素早くテスト設計を行える
- 新たな要件/機能の追加により既存機能のどこに影響するかを特定でき、優先度をつけて適切なリソース投入ができる
トレーサビリティを確保して適切に活用できれば、機能変更やインシデント発生時に影響範囲の調査などにかかる工数を削減することができます。浮いた工数をより品質を高める活動に使用できるため、高品質なプロダクトの継続的な提供が可能になります。またユーザーからの問い合わせに対する調査も迅速に行えるため、お客様の要望に素早く応えることができ、顧客満足度の向上も期待できます。そして影響範囲が明確であれば、不測の事態に遭遇するリスクを大きく減少できます。開発工程では影響範囲を考慮した実装により潜在的な欠陥を減少でき、テスト工程では影響範囲が明確なため効率的なテストが可能となります。結果として不具合の減少や各種リスクの軽減が期待できます。
トレーサビリティには、プロダクト開発の生産性を高め、お客様により高品質なプロダクトを提供するためのメリットがあります。では、実際にトレーサビリティを確保して適切に管理・運用していくには、どのような方法があるでしょうか。
トレーサビリティを確保して運用していくには
トレーサビリティを管理する方法には様々ありますが、その中から一般的な方法を3つ紹介します。
ツールを導入して管理する
要件管理ツールは、要求・要件/仕様をチケットとして管理し、依存関係や関連付けをシステム上で簡単に設定できます。適切に導入・運用することで要求から仕様設計までのトレーサビリティの確保を支援してくれます。また構成管理ツールと連動させることで仕様とコードを関連付けることができるので、開発サイド全体のトレーサビリティを確保できます。さらに仕様とテスト条件・テストケース、及び、テスト結果を関連付けできるテスト管理ツールを併用することで、仕様からテスト結果までのQAサイドのトレーサビリティを確保できます。
これらのツールを連携して使用することで開発からQAまでの一貫したトレーサビリティを確保できます。
ドキュメンテーションで管理する
トレーサビリティの管理には、ツールを導入することが最も効果的でしょう。しかし組織にツールを導入するには手続きやツールの習熟にかかるコストなどが相応に必要になります。大規模な開発でなければ、Excel等でトレーサビリティマトリクス※1を作成することでもトレーサビリティを管理できます。手作業による管理になるため、プロセスをしっかり定めて実施する必要がありますが、手軽に導入できる方法としては最も効果的な方法の1つです。
※1 トレーサビリティマトリクスとは、要件(行)に対して、仕様・設計・テスト(列)がどのように対応しているかをマトリクスで表現したものです。以下にトレーサビリティマトリクスの例を示します。
レビュープロセスで担保する
ツール導入もドキュメンテーションもハードルが高いという人は、まずレビュープロセスにトレーサビリティチェックの項目を追加してみてはいかがでしょうか。
各工程のレビューにおいて、要求と要件/仕様、要件/仕様とテストといった双方向のトレーサビリティが確保されているかをチェックし、議事録やチェックシートに記録してトレーサビリティを担保する方法となります。ただし、この方法では製品全体の情報としてまとめられていないため、トレーサビリティを十分に管理できているとは言えず、効果を十分に得られません。トレーサビリティの効果を実感できたら、ツールやドキュメンテーションによるトレーサビリティ管理を導入することをオススメします。すでにツールやドキュメンテーションを導入している場合は、適切な運用を実現するためのプロセスの1つとして利用すると効果的でしょう。
以上がトレーサビリティを確保・管理する方法の一例ですが、これらの方法を導入すればトレーサビリティの恩恵を受けられるわけではありません。
たとえば、ツールを導入した場合を考えてみてみましょう。まずツールの使い方がわからなければ利用できないので、ツールを習熟するための教育方法を考える必要がありますね。次にプロセスやフォーマットが定まっていなければ活用できる情報として蓄積できないので、運用プロセスやフォーマットを策定する必要があります。プロセスやフォーマットが定まっていても利用者が認知していなければ利用されないため、組織に浸透するまで継続的に周知していくことが求められるでしょう。ただし、これらをすべてクリアしても利用時のプロセスやルールが複雑だったり冗長だったりすると、利用者に負担が掛かり継続が困難になる場合もあるため注意が必要です。
いずれの方法を採用するにしても、導入するだけでなく適切に運用できなくては効果は得られません。トレーサビリティを適切に運用して十分な効果を得るためには、学習・運用・改善のプロセスやルールを設定したり、定期的なチームミーティングの開催などでコミュニケーションを活発にするなど、チーム全員で様々な取り組みに挑戦する必要があることが分かりますね。
QAがトレーサビリティを推進する
トレーサビリティを導入して活用していくためには、プロジェクトに関わるすべての人が継続して適切に運用していかなければいけません。その中でも品質に責務を持つQAが主導権を握ってトレーサビリティを推進していくべきかと思います。なぜならQAはテスト活動を通してソフトウェアやシステム全体の仕様に精通していくため、その過程でトレーサビリティが適切に確保され管理されているかを確認できるからです。その際、不適切な運用があった場合はチームへフィードバックしたり運用を改善したりできます。
とはいえ、QAはあくまでトレーサビリティを推進する旗持ちでしかありません。最も重要なのは、全員が「品質向上のためにトレーサビリティを管理する」という共通の目標を持つということです。トレーサビリティを確保して品質向上のために活用していくためには、チーム全員がトレーサビリティの重要性を理解し、継続してトレーサビリティの確保・管理・運用に取り組んでいくことが大切ですね。
さいごに
トレーサビリティを組織やチームに適用してメリットを享受するには、チームメンバー1人1人が自分事として行動することが重要になります。トレーサビリティを適切に導入・運用して、プロダクトの品質向上に役立てていただければ幸いです!