『実践プロパティベーステスト ― PropErとErlang/Elixirではじめよう』 発売のお知らせ

いつもご来店いただきありがとうございます。新刊『実践プロパティベーステスト ― PropErとErlang/Elixirではじめよう』発売のお知らせです。

本書はFred Hebert著 “Property-Based Testing with PropEr, Erlang, and Elixir” の翻訳書です。タイトルが示すとおり、「プロパティベーステスト」について実践的に解説されています。解説にあたっては、Erlang/ElixirとそのプロパティベーステストのためのフレームワークであるPropErを利用しているので、メインの対象読者は「これからErlangやElixirでアプリケーションを書く予定があり、さらにソフトウェアの品質を高めたいと考えている方々」です。

そもそも「プロパティベーステスト」とは一体どんな考え方のテスト手法なのでしょうか? 従来のテストとはどこが違い、何がうれしいのでしょうか?

ものすごく雑に、プロパティベーステストの背景にある着想を単純化すると、「従来のユニットテストで使うテストケースを人間が書くのではなく、コンピューターで大量に自動生成しよう」という考え方になります。この考え方自体は、ソフトウェア開発者にとっては自然なものでしょう。 むしろ難しいのは、どうやって大量のテストケースを自動生成し、その結果を解釈するかにあります。

ぱっと思いつくのは、自分が書くようなテストケースを一般化することでテストケースを自動生成するコードを書く、というアプローチだと思います。もちろんそれも有力な方法の1つなのですが、本書を読むと、ほかにもさまざまなアプローチがあることがわかります。 具体的には、より単純な機能だけで本質的に同一の問題を解くコードを利用する方法、テストしたいコードとは対称的な動作をするコードを利用する方法、あるいはコードにおける不変条件を利用した方法などです。本書の前半では、こうした性質を利用してテストケースを自動生成するコード(プロパティ)を書くための技法が、実践的なアプリケーション開発の例をとおして説明されていきます。この前半を通して、コードの挙動を入力と出力の事例として見るのでなく、プロパティとして捉える考え方に馴染んでいきます。

さらに本書の後半では、自分が書いたプロパティによって自動生成される大量のテストケースから「失敗する事例」をうまく見つけ出すための技術、前に生成したテストケースに依存するテストケースを生成するPropErの高度な機能、状態に依存するシステムに対するプロパティの書き方まで、テストケースの自動生成という素朴なイメージからは想像もつかない応用の世界が語られます。プロパティベーステストの深みへと読者を導こうとする原著者Fred Hebertさんの知見があますところなく盛り込まれた内容になっています。

プロパティベーステストの考え方そのものは言語に依存しないので、現在ではさまざまな言語にプロパティベーステストのためのフレームワークがあります。ただ、本書で扱われているような高度なテスト技法に踏み込むためには現状ではPropErが必要です。そのような事情もあって、本書のサンプルコードはErlangとElixirです。しかし、「訳者まえがき」で山口能迪さんが書かれているように、「プロパティベーステストでどこまで行けるかを知るには、この本を読むしか」ありません。開発しているソフトウェアの品質を上げることに興味がある方には、ふだんの開発言語がErlangやElixirであるかによらず、ぜひ手に取って読んでみていただきたい一冊です。