はじめまして、QAエンジニアのK.Kです。
今回は10年ぶりに改訂された「知識ゼロから学ぶソフトウェアテスト」を読んだ感想をお伝えします。
この本を読むきっかけ
私にとって、この本はこれからソフトウェアテストを学ぶ人におすすめの入門書であり、10年ぶりに改訂されたとのことで気になっていました。また、改定内容もソフトウェア業界で流行りのアジャイル開発・AIを取り上げたもので、日々の業務で役に立つのではと考え、この本を読もうと思いました。※1
※1 私自身、業務の中でアジャイル開発に触れる機会が増えているように感じています。また、AIに関してもいろいろなサービスが出てきており流行りを感じています。実際、既にAIのサービスを使っており、わからないことがあればすぐChatGPTに聞いたりしています。
改定内容
全体的な章の構成は大きく変わっておらず、これからソフトウェアテストを学ぶ人にとって必要な知識が書かれているため、各章について紹介していきたいところですが、以前、別の方が改定前の書籍をブログで紹介していましたので、今回は改定箇所の内容に絞って書いていきます。
改定箇所以外の内容について興味がある方は下記の記事を読んでみてください。
10年ぶりに改訂された理由
10年ぶりに改訂された理由が冒頭に書かれています。
※以下引用は第3版「知識ゼロから学ぶソフトウェアテスト」より
10年以上改訂しなかったことに、ある日突然気づいた。結構世の中は変わっているぞ!
10年前に書いたときはベストだと思った記述の多くは、現代のアジャイルやAIソフトウェア全盛にそぐわなくなってきている。
開発サイクルが短くなるだけでこんなに世界が変わるものかとも驚いている。
10年でソフトウェアテストが大きく変化しているため、現在のソフトウェアテストに合わせた記述にする必要があるとのことです。
また、現在のソフトウェアテストについて以下のように書かれています。
- アジャイル時代になり多くのテスト活動が開発者テストにシフトしているが、ソフトウェアのサイズは増え続けているので、テスト担当者の仕事は減ることなく多岐にわたっている
- アジャイルにシフトしたために多くの古くからのテスト手法がおざなりにされているが、当書で記した既存のテスト手法はアジャイル時代でも有効である
- AIのテストやカオスエンジニアリングは、10年前はほとんど話題にされなかったトピックだが、新規にテスト担当者が学習しなければならない必須トピックである
改定内容について
今回の改定では、各章の内容が現在のソフトウェアテストの状況に即したものにアップデートされており、新たに追加または削除されたテスト技法やカバレッジについての考え方の変化だけでなく、アジャイル開発についての記述も追記されています。どのようにテストをすればよいのか、なぜそのテストが必要なのかから入り、ウォーターフォール開発とアジャイル開発でのテストの違いや筆者の考えなどが書かれています。特に第8章と第9章では、テスト計画や品質管理に焦点を当てており、ウォーターフォール開発とアジャイル開発におけるテスト計画書の書き方や品質管理に使用するメトリクスの違いが大きく書かれています。
また、新たに第10章の「新しいテスト技術」が追記されており、この章では、AIに対するテストとしてメタモルフィックテストや経験ベースのテスト、ニューロンカバレッジについて書かれていたり、現代の複雑なシステム※2 に対するテストとしてカオスエンジニアリングやランダムテストについて書かれています。
※2 現代のシステムはオープンソースを利用したり、クラウド環境にシステムを構築したりすることにより複雑化しているため、すべてをテストすることが不可能です。そのため、無限大にあるテストを有限に落とし込むのもテスト担当者の仕事であり、カオスエンジニアリングやランダムテストはそのための手法として当書に記述されています。
本を読んだ感想
この本を読んで最初に感じたのは、アジャイル開発とAIのテストの難しさでした。なぜなら、これらのテストは発展途上であり、今後、アジャイル開発やAIの利用が拡大する中で成長していく技術だからです。
アジャイル開発について
アジャイル開発は柔軟な対応が可能で市場リリースを早くできるというメリットがありますが、柔軟な対応と品質の向上の両立は難しい課題です。アジャイル開発だからといって、テストすべき項目やテスト手法がウォーターフォール開発と変わることはありませんが、私の経験上、今までのホワイトボックステストやブラックボックステストでは、逐次変化する状況に対してテストケースを随時更新しながらテストを行うことが困難です。
当書では第4章の探索的テストで以下のように書かれています。
ウォーターフォールでの探索的テストと、アジャイルやAIソフトウェアでの探索的テストでは少しずつ役割が変わっていくのかもしれません。
もちろん、それはもっと探索的テストが活用する方向にです。
また、
短いイテレーションでGUIが変更するようなソフトウェアでは、探索的テストが向いていると筆者は考えています。
このように、探索テストがアジャイル開発に向いていると書かれており、私も探索的テストはアジャイル開発において有用だと感じました。しかし、探索的テストはテスト担当者のスキルに依存する部分があるため、それを主としてしまうとテスト自体が属人化してしまうのではないかとも感じました。
また、アジャイル開発ではこれらのテストの難しさに加え、テスト計画や品質管理の部分でも、ウォーターフォール開発とは異なるため、アジャイル開発のテストは発展途上であり、これからも学び続ける必要があると感じました。※3
※3 私自身はこの本を読むまで、アジャイル開発とウォーターフォール開発でのテスト計画や品質管理の違いについて、あまり意識したことはありませんでした。アジャイル開発では設計からリリースまでが短くなるため、テスト計画をどうすれば良いかと考えたことはありましたが、品質管理において、アジャイル開発に最適化したメトリクスを探そうなどは考えたこともありませんでした。
AIについて
AIのテストについては、AI以外の機能テストと明確に異なる部分があります。それは、入力に対する明確な出力が存在しないということです。AIのテストも基本的には既存のソフトウェアテストと同じく、指定した入力に対する出力が返ってくるかをテストしていきますが、その出力が定まっていないためテスト自体が難しいです。当書では、これらの期待値の定義が難しい状況に対するテスト手法の代表としてメタモルフィックテストがあげられています。この手法は、ベースとなる入力と出力が存在する状態で、入力に少しずつ変化を加えていき、出力がどのように変化するのかを確認する手法です。入力に変化を加えたことで出力が大きく変わってしまう場合、AIシステムに問題があるのではないかと考えることができます。
しかし、このテスト手法の最後に以下のように書かれていました。
メタモルフィックテストも完璧ではありませんし、定量的な品質指標を提供しにくいテスト手法です。
特にミッションクリティカルなソフトウェアでは、このテスト手法は慎重に適応したほうがよいと考えます。
ただAIのテスト手法の一番代表的なものなので、これを使うしかないのですが。
このように、まだ効果的なAIのテスト手法は存在しないというのが現状であり、これからも学び続ける必要があると感じました。
どのような人におすすめか
10年ぶりに改訂されましたが、全体的な構成は大きく変わっておらず、読みやすい文章や図により、なぜテストをするのか、どのようにテストをすればよいのかがわかりやすく書かれているので、これからソフトウェアテストを学ぶ人にとっての入門書としておすすめであることに変わりはありませんでした。
また、改定前の当書を読んだことがある人にとっても、この10年間でどのようにテストが変わっているのか、特にアジャイル開発やAIのテスト手法や現状、また、それらに対する筆者の考えがわかりやすく書かれているので、アジャイル開発やAIに触れる機会が多いのであれば、手に取って読んでみても良いのではないかと感じました。