テスト分析:文書で未定義の外部仕様に気づくコツ
はじめに
私の経験上、テスト設計のために必要な外部仕様がドキュメントに全て網羅的に記載されていることは多くありません。そのため、前回の記事で少し触れた通り、実際の業務ではドキュメントに記載のない情報に気づく必要があります。
そこで、本記事ではドキュメントに不足している情報、特に未定義の外部仕様(システムの振る舞い)に気づくコツをいくつか紹介します。
なお、定義された外部仕様の妥当性確認(顧客が求める品質や性能を実際に満たすかどうか)については、本記事のスコープ外となります。
欲しい情報を意識して文書を読む
テストに関する成果物のテンプレートが決まっている場合、ドキュメントを読む際にテンプレートの各項目に関連する情報(欲しい情報)を意識します。そうすると、ドキュメントの情報不足に気づきやすくなります。
例えば、ドキュメントに「存在するIDと正しいPWを入力してログインボタンを押した場合、ログインに成功する」という記載があったとします。
テストケースに「実行事前条件」「アクション」「期待結果」「実行事後条件」の記載が必要な場合[1]、これらの項目を埋めるつもりでドキュメントを読むと、ドキュメントに「期待結果」や「実行事後条件」といった情報が不足していると気づきやすくなります。
「ログインに成功する」という記載だと、画面遷移などシステムがどのように振る舞うか、ログイン履歴などのデータがどのように更新されるかがわからないですね。
このように、テストに関する成果物に照らし合わせてドキュメントを読むと、ドキュメントの情報不足に気づきやすくなります。
欲しい情報の種類について、いくつか参考になる例を紹介します。
- ゆもつよメソッドのテストカテゴリなど
- ISO/IEC 25010の品質モデルをテスト設計に活用する例
- 入力、出力、計算、データに着目した例
なお、わかりやすさのためにテストケースの例で話を出しましたが、一般的にはいきなりテストケースやテスト仕様書のような細かい粒度の成果物を作らない方が望ましいとされています。テスト対象の規模にもよりますが、抽象的な粒度(テスト観点のリスト、テストアーキテクチャなど)から何をテストするかを整理し、段階的に具体的な粒度の成果物を作成する方が良いと思います。[2][3]
テスト技法を使う
テスト技法といえばテスト設計をするタイミングで使うと思われがちですが、ドキュメントの不備を見つける際にも活用できます。
(テスト技法そのものの説明はネット上に多数ありますので、本記事では割愛させていただきます。)
例えば、先ほどと同様にドキュメントに「存在するIDと正しいPWを入力してログインボタンを押した場合、ログインに成功する」とのみ記載があったとします。
IDとPWに関してデシジョンテーブルを作成すると、ドキュメントに記載があるのは以下1のパターンのみで、2,3,4のパターンについてシステムがどのように振る舞うかは未定義であることがわかります。
1 | 2 | 3 | 4 | ||
---|---|---|---|---|---|
条件 | 存在するID | Y | Y | N | N |
正しいPW | Y | N | Y | N | |
動作 | ログイン成功 | X | |||
???? |
このように、「もし〇〇ならば、△△となる」という条件分岐の記述がある場合は、デシジョンテーブルを(頭の中ででも良いので)作成してみると、未定義のパターンを効率的に発見できます。
状態遷移表を作成した場合でも同様の効果があると言われています。
状態遷移表の具体例は以下の記事などをご参照ください。
そのほかにも、同値分割法における無効パーティション(拒否されるデータ)を考えたり、入力する数値の最小値やアップロードできるファイルサイズのや最大値(境界値分析)を考えたりすることで、未定義の外部仕様に気づくこともあります。
ロジックツリーを作成する
ロジックツリーとは1つの物事に含まれる要素を階層式に細分化するフレームワークで、さまざまな課題の全体像を把握して解決策や意思決定を促す論理的思考法です。特定の事象やモノを構成している要素を、枝分かれ式に分解した図式に洗い出すことから、ロジックツリーと呼ばれています。例えば「日本の地域」で考えるなら、「47都道府県」⇒「各都道府県の行政区画」⇒「各行政区画の区や町」など、段階的に細かく分類して整理するのに使えるフレームワークです。
引用元:https://www.recruit-ms.co.jp/glossary/dtl/0000000207/
テスト分析やテスト設計においては、ドキュメントに記載されている入力やデータの種類について、もう少し分解できないかをロジックツリーで考えることができます。
例えば、ログイン時に利用する「ID」の種類についてもう少し分解してみると、以下のようなロジックツリーを作れます。
- ID
- 存在するID
- 退会していないID
- 通常のアカウント
- ロックしているアカウント
- 退会しているID
- 退会していないID
- 存在しないID
- 存在するID
このようにロジックツリーで詳細に分解していくと、『退会しているIDでログインを試みた場合、システムはどのように振る舞うべきか?』といった、ドキュメントに記載されていないが検討すべきパターンを発見できます。
レビュー技法を使う
実際の業務シナリオを頭の中で実行してみたり、システムを利用する様々なステークホルダーの視点で考えてみたり、チェックリストを元にドキュメントをレビューしたりすることで、ドキュメントで未定義の振る舞いなどに気づく可能性が高まります。
例えば、「会員登録画面でユーザーが誤って登録するボタンを2回クリックした場合にどのように振る舞うか」など、通常ではないシナリオ(またはステークホルダー)も考えることで、エラーハンドリングなどの未定義に気づけます。
レビュー技法の説明は以下の記事をご参照ください。
参考までに、私が過去に行ったレビュー技法のワークショップの内容も紹介しておきます。
他の機能や他のプロダクトと比較する
プロジェクトの内容について、他の機能や他のプロダクトと比較してみると、不足している情報に気づくことがあります。
例えば、ログイン機能については以下のようなものが考えられます。
- 会員登録画面では登録ボタンのダブルクリックができないようになっている。ログイン画面のログインボタンでも同じようにすべきか
- 他のプロダクトでは未ログイン状態で会員情報ページのURLにアクセスするとログイン画面に遷移する。その後、ログインを実施すると会員情報ページに直接遷移できる。今回のプロジェクトでも同様にすべきか
連想力を刺激する
プロジェクトと一見関係なさそうな単語や文字列から連想するものを考えることで、ドキュメントの不備に気づける可能性があります。
例えば、「誤」という漢字を見てユーザーが操作を誤ったときにどうなるかを考える、といった具合です。
詳細は以下の資料をご覧ください。
- 刺激語カードを用いたソフトウェアレビューの実践について
連想に使う漢字の例
- 意地悪テスト観点(意地悪漢字)
これらの方法を利用する注意点
これらの方法を活用する上で注意点があります。
人の脳には「選択的注意」という認知機能があるそうです。
選択的注意とは、膨大な情報のなかから必要なものを無意識に選んで注意を向ける能力のこと。公認心理師の川島達史氏によると、この機能には以下ふたつの重要な働きがあります。
【重要な情報を集める】:日常生活では無数の情報が私たちに降り注ぐため、すべてを処理しようとすると脳がパンクしてしまう。そこで脳が自動的に優先順位をつけ、効率よく情報処理を行なってくれる。
【不要な情報を遮断する】:必要のない情報をシャットアウトすることで、本当に大切なことに集中できるようになる。
引用元:https://studyhacker.net/attention-trap
本記事で紹介した各種手法は、特定の視点や観点に意識を集中させることで、その領域における情報不足に気づきやすくする効果があります。しかし、特定の情報に意識を向けることで、意図せず他の重要な情報を不要な情報と判断して見落としてしまう可能性もあります。
例えば、デシジョンテーブルはIDとPWの組み合わせによる振る舞いの漏れに気づくことはできますが、ログインが成功した時の具体的な振る舞い(画面遷移先、ログイン履歴を残すなど)の漏れに気づくことはできません。
そのため、様々な情報を見落とさないようにするためには、自由にドキュメントを閲覧した後に上記の方法を複数利用する、といった多角的な視点で文書を読む工夫が必要になります。
おわりに
本記事では、何らかの意図を持ってドキュメントを読むことでドキュメントの情報不足に気づきやすくする方法を紹介しました。
人によってやり方が合わなかったり、現場に合わなかったりする方法もあると思います。
例えば、私には連想力を刺激する方法は相性が良くなかったです。これらの方法を利用せず、自由にドキュメントを閲覧した方が多くの問題に気づける人もいます。
また、仕様がシンプルな機能ではこれらの方法を全て利用する必要もないと思います。
そして、もしテストに必要な情報が予めわかっているならば、ドキュメントに必ず必要な情報が記載されるような工夫をしても良いと思います。
自分なりの良いやり方を探してみてください。
最後に、本記事の内容をやるのはちょっと面倒だなと思った方、これらの方法に慣れれば無意識である程度情報の不足に気づけるようになります。
皆さんがスマホを初めて触った時は、操作方法に悩んだり操作手順を思い出したりしながら操作していたと思います。しかし、今では多くの操作を無意識に行っているのではないでしょうか。
今回の記事の内容も同様です。慣れてくれば、無意識に色々な情報に気づけると思います。ぜひ、慣れるまで繰り返しチャレンジしてみてください。
Discussion