doctestにみるアーキテクトとプログラマの協調作業

最近 Python Testing Beginners Guide 読んでます。
ここのdoctestの入り方が非常に面白かったので、ちょっと紹介と考察をまとめてみようと思い書いてみる。

Python Testing Begginers Guideって何

まずこの本をさくっと。
Packt Publishingが発行してるPythonのテスト手法のHow to本。
Expert Python Programmingのテスト手法、TDD、CIなどをもっと詳細かつ分野を特化した感じ。
Pythonのテスト技法をもっと知りたいって方はおすすめな1冊。
英語で書いてあるけどサンプルコードが豊富なので写経するだけでもある程度わかるかも。
以上宣伝乙。

doctestの章について

この本のdoctestの解説は

doctest概要・機能説明→振る舞いの設計→コード実装→リファクタリング*1→仕様変更→以下略...

と言った具合に進む*2

設計の段階ではdocstringにdoctestのコードを埋めると言った方法ではなく、テキストファイルdoctestのコードを記述する。
そしてPythonから実行するには、


python -m doctest doctest_file.txt
を実行しなさいと書いてある。
これだけみれば、本当にコードを書いて実装しているという感じがしない。
いやdoctestを記述するテキストファイルには思いっきりコード書くんだけどさ。
でも振る舞いしか書かないから、実装しているという感じはしない。

doctestはなぜdoctestなのか

doctestがdoctestと言われる由縁はズバリ


docstringに直接書き、仕様書になるから

だろう。
恥ずかしながらテキストファイルにdoctestを書くっていうのは知らず(or あまり使わず忘れていた)、もしかしたらこれってウォーターフォールモデル開発でのアーキテクトとの接点を作るための強力なツールになるんじゃないかと思った。

とりあえず例でも

風呂入っていたときに妄想していたストーリー。


アーキテクト(以下ア)「こんなモジュール作ってくれないかな?仕様はmodule.txtを確認してくれ。」
プログラマ(以下プ)「了解です。doctest形式にちゃんとなってるっぽいですね。」
ア「それじゃ任せた。」

実装完了

プ「できました。テスト結果はいつもの方法で見てください。」
ア「問題ないようだな。ところでプログラマ君、このモジュールにxxxの機能を追加したいんだよ。」
プ「えっ」*3
ア「追加する仕様は別途ファイルに書いておいた。module_add_xxx.txtを確認してくれ」
プ「了解しました。」

以下、無限ループ

次回予告

近々これのちゃんとしたコードを書いてみようかなと。
続きはWebで!

*1:明示的に書いてある訳ではないけど内容はリファクタリングそのもの

*2:この説明を書いていて気づいたがTDDに近い方法を自然に書いている作者に嫉妬したw

*3:inspired by id:t-wada