はじめに
仕事でPythonをよく使います。担当しているプロダクトについて、次々と上がってくる要望をサクッと実装して済ませて次の対応に進むのですが、品質を保つという点でみるとテストは必須です。今日日、リモートワーク&単独開発という案件も多くなってきていて、尚のこと自分自身で品質の担保もしなくてはなりません。そんな中、開発するプログラムはどのようにふるまうべきか、実装する前に決めておけば作ったものに自信を持てるはずです。
今回、参考になった書籍を2冊、紹介します。
Pythonといえばpytest
Pythonのテストフレームワークとしてunittestやpytestが有名ではないでしょうか。私の場合、pytestを選びました。両者を比べると、pytestの方がPythonらしいすっきりとした書き心地できれいなテストを書けると感じたからです。
unittestはJavaのテストフレームワークに似ていると感じました。Pythonだけではなく、Javaにも明るい方ならこちらがいいかもしれません。
pytestについて一通り順序だてて学べるのが、『テスト駆動Python』。
本編ではpytestの基本的な使い方から始まり、フィクスチャー、プラグイン、モックとより詳細にテストするための機能について紹介されています。
付録として、CircularCIやJenkinsでの使い方、TDDのやり方などが収録されているので、実務に組み込むとっかかりとして便利です。
いつでも参照できる場所に置いておきたい一冊です。
TDDについてもっと詳しく
プログラムを開発していると、期待した動作と異なる結果を出力する場面が多々あります。その場の問題は解決したように見えても、他の機能が不具合を起こすこともしばしば。品質低下につながります。
何か修正した度にすべての機能に不具合がないか確認するのは億劫です。品質を保ちつつ、不具合を起こさないようにするには、テストを書くのが定石です。
テストを書くにしても、実装してからテストを書いていては、本当にそれがあるべき姿なのか(開発者側のエゴが入っていないか)という懸念を払しょくできません。
そんなときは、こんなプログラムにしたい!という要望をそのままテストにしてしまって、それに沿うように実装するという考え方があります。これがTDDです。先にテスト(要望)が明確になる分、開発中は設計と実装に集中できます。また、設計しているときに新しい懸念が出てくることも多々あり、これもテストに書き起こしてしまいます。こうして一進一退を繰り返して出来上がるプログラムは品質も高く、また当然要望どおりの動作も期待できるでしょう。
そんな素敵な手法について、詳しく書かれているのが『テスト駆動開発』。
第I部ではTDDの進め方について、少し細かすぎるくらいステップバイステップで説明されています。チュートリアルのため、もっとイケてる設計ができるのになぁ、と感じましたが、あくまでTDDの進め方にフォーカスして参考にしてください。説明で使用されている言語はJavaです。
第II部はxUnitについて紹介されている。Pythonのunittestを用いて説明されていますが、先の『テスト駆動Python』のpytestで置き換えるのでななめ読み程度にしておきます。
第III部ではテスト駆動開発のパターンとして、第I部で使ってきたパターンのより詳しい内容となっています。第I部でも、文中に都度第III部への参照がはさまっていますが、まずは第I部の完走を目指し、2回目の第I部読み返しのときに第III部を詳しく読む、という進め方が、理解が深まっていいのではないかと思います。
おわりに
今回、PythonとTDDについての書籍を紹介しました。Python以外の言語にももちろんテストフレームワークが用意されているはずですので、その時は『テスト駆動Python』の部分を別の書籍に置き換えてもらえればと思います。
TDDが広まりますように!