テスト駆動開発のワークショップのお題の設計
某ワークショップでTDDのライブコーディングをするので、お題を考えることになった。これはそのときのメモを再編した記事だよ!
ほんものぽくしたい
実際の仕事の状況に近い題材にしたい、ので
- ペアプロのふたりだけでなく、オンサイト顧客相当のひとも巻き込むようにしたい
- 契約プログラミングをどうにかして持ち込みたい
- 仕様メモを上からやっていくと、実装を見直さなくてはならないようにしたい
- よいAPIを考えないと詰んでしまうようにしたい
を意識した。
今回のお題
「とある架空の画像処理アプリケーション」の部品となるライブラリ(クラス?)を作ってね!
架空のアプリケーション
画像群の中の最大値n画素を塗りつぶしたり、中央値を塗りつぶしたりするアプリケーションだよ。nはインタラクティブに変更できるやつ。
ライブラリ
画像群を模したshortの画素値の配列に対する統計処理を行うライブラリ(仮称Stat)を作ってね。 画像処理なので、画素値の場所に意味があるので、最大の画素の値も場所(配列の添字)もほしい。
こんな感じのAPIが要るかな
- 画像群に相当するshortの配列を引数にして初期化する
- 最大値の画素の場所と値がほしい(APIが二つに分かれてもよい)
- 中央値の画素の場所と値がほしい(偶数画素(2n)のときn番を中央値とする)
- 画素値の上位n位までの画素と値がほしい(APIどうする!?)
プレーンなCとassert.hだけで作ってね
工夫したこと(ネタバレ)
もともとの外部仕様には隙があって、オンサイト顧客と相談しないと進まないようになっている。
中央値や上位n画素が必要なことから画素をソートする必要があるが、最大値から始めるとやりなおしになる。
画素値だけでなく、画素の場所も必要なので、ソートする対象は画素の場所になる。ちょっと気づきにくいかも。またAPIも面倒くさくて、二つの値を返さなきゃならないので、どんなAPIにするか工夫が要る。
こっそり自分でも実装して実験しとく