『ソフトウェア品質を高める開発者テスト』を読んだ

ソフトウェア品質を高める開発者テスト 改訂版 アジャイル時代の実践的・効率的でスムーズなテストのやり方

『ソフトウェア品質を高める開発者テスト』は、テストを通してソフトウェアの品質を上げるための方法論について解説した書籍。

テストに関する書籍の中には、ソフトウェアテスト技術者をターゲットにしたものが多いが、本書はソフトウェア開発者をターゲットにしている点が特徴。

ある程度大きなチームでソフトウェアを開発している場合、ソフトウェアを開発するチームとは別にテストを担当するチーム(いわゆるQAチーム)がいることが多い。

そのような環境では、QAがソフトウェアの品質を守るゲートキーパーの役割を果たすことが少なくない。しかし、QAチームによるテストでバグを見つけて修正することは効率が悪い。なぜなら、ソフトウェアのバグを修正するコストは、下流工程ほど高くなるから。したがって、バグはできる限り要求仕様やコーディングの段階で修正することが望ましい。

しかし、現実にはそのような開発体制が取れていることは少ない(と著者は述べている)。では、どのようにしてソフトウェアの品質を上げ、開発効率を改善していくか、というところが本書の主題になる。

本書の提唱する手法のうち、最も効果が高く、ぜひとも導入すべきなのは単体テストである。本書では、単体テストを「関数の網羅率を計測しロジックの確らしさを確認するホワイトボックステスト」と定義している。コードの品質を上げるためには単体テストは欠かせない。また、単体テストがちゃんと書けていることを確認するには、カバレッジの計測が必要だし、アサーションをちゃんと書いていることをレビューする必要もある。十分なカバレッジを確保できていれば、ミューテーションテストを使って単体テストの抜け漏れを確かめることもできる。

では、どの程度のカバレッジを目指すべきなのか? この点、本書は「C1カバレッジ(分岐網羅)で80%」という数字を提唱している(医療や自動車などミッションクリティカルなソフトウェアは「100%」)。この数字は決して低くはなく、レガシーアプリケーションにテストを追加しようとする場合には絶望的な数字に思える。そのような場合は、本書でも紹介されているHotSpotという手法を用いて、最もバグの出る可能性の高い部分から単体テストの追加を始めることが望ましい。

単体テストに加えて実施すべき手法としては、コードの静的解析による複雑度の計測とリファクタリング、コードレビュー、ペアプログラミングなどがある。

これらの手法でコードの品質を高めれば、システムテストで検出されるバグの数は少なくなる。そこで、システムテストを大胆に省略し、探索的テストによって効率的にテストした上でリリースする、という状態まで持っていくことができれば、本書のゴールは達成できたことになる。

ソフトウェアの品質に悩んでいる開発者はもちろん、もっと素早く効率的に開発したいと思っている開発者も、一読をお勧めしたい。

コメントをどうぞ

コメントを残す