やらなイカ?

たぶん、iOS/Androidアプリの開発・テスト関係。

『ソフトウェア品質を高める開発者テスト アジャイル時代の実践的・効率的なテストのやり方』レビュー

昨日発売された『ソフトウェア品質を高める開発者テスト アジャイル時代の実践的・効率的なテストのやり方』、ざっくりと読んだので簡単にレビューします。

対象読者

まず対象読者について。タイトルにある「開発者テスト」や「ユニットテスト」というものを実践している方はもちろん、言葉は知っていて良いテストを書きたいを思っている方などには 向きません *1

そうではなく、旧来の、開発の後工程としてテストを実施し、バグを潰しきれずに疲弊している組織の方におすすめしたい書籍です。

早期工程でのバグ検出・品質作り込み(本書では「上流品質向上」と表現)、ユニットテストリファクタリング、CI(継続的インテグレーション)といったモダンな開発手法に馴染みのない方にとって、一通りの知識をこの一冊でざっくり得られるはずです。

おすすめできる点

  • はじめにモチベーションとして、上流品質向上やShift Leftの効果についてしっかり語られている
  • コードカバレッジについて、ステートメントカバレッジ (C0) とブランチカバレッジ (C1) の違いについて詳しく書かれている
  • サイクロマティック複雑度(本書では単に「複雑度」や「McCabe数」と表現)について、詳しく書かれている
  • Googleのバグ予測(修正回数の多いファイルはバグ混入率が高い)に触れられている
  • テストケースを作るためのテスト技法について触れられている(ただし境界値テストと状態遷移テストのみ。これを目的にするのであれば後述する別書籍をおすすめします)
  • システムテストなど後工程のテストにも言及、全体を俯瞰できるはず
  • Android Studioを使ったユニットテスト、コードカバレッジ採取、Circle CIによるCIなど、実践的なサンプルやスクリーンショット(ただし巻末の1割程度のボリューム)

おすすめできない点

  • 用語が独自なので、この書籍を読んだ次のステップで調べたり、他のテストエンジニアと交流する段階でギャップが出そう。本書を読んだ後、 JSTQB認定テスト技術者資格-シラバス(学習事項)・用語集- などを参照してテスト用語の認識を合わせたほうがよさそうです *2 *3
  • リファクタリングの根拠がファイルの大きさとサイクロマティック複雑度のみなので、もう少し内部品質やSOLID原則あたりに言及してほしかった
  • 「7.5 出口は1つ」は鵜呑みにしてほしくない。サイクロマティック複雑度を根拠にしているので仕方ないが、関数/メソッドから早期リターンすることはネストを下げて可読性向上につながるので

テスト技法についてのおすすめ資料・書籍

ユニットテストを書く開発者が、テストケースを作るために参考となる「テスト技法」についての資料・書籍を紹介します。

JaSST'21 Tokyoでの河野哲也さんのセッション資料。ユニットテストで使える「同値分割」「デシジョンテーブル」「状態遷移図」が例題とともに紹介されています。

www.slideshare.net

こちらも各テスト技法を解説している書籍です。

各テスト技法の事例・問題集。

所感

書籍などでユニットテストについて紹介するとき、テストケースを作るためのテスト技法は省略されがちです*4。 しかし、開発者もテストを書くならば持つべきスキルだと考えており、その点で本書のように開発者テストとテスト技法を結びつける書籍に期待していました。

本書は残念ながら方向性の異なるものでしたが、「開発者テスト」の概念を知らない方に向けて、薄く広く、俯瞰して理解できる書籍ですので、最初の一冊としてはおすすめできそうです。

*1:内容が悪いという意味ではなく、タイトルがミスリードなのでは感

*2:ISTQB/JSTQBが絶対ということではないのですが

*3:私が「単体テスト」でなく「ユニットテスト」という言葉を使うのは、「単体テスト」が人によって様々なバリエーションを持っているため無用な混乱を避けるためです。この点、本書p.34でも言及されていながら「単体テスト」の語を使っていたりする

*4:自著『iOSアプリテスト自動化入門』では、同値クラス、境界値テスト、デシジョンテーブルについては紹介していましたが