@m_seki の

I like ruby tooから引っ越し

テスト駆動開発のワークショップのお題の設計

テスト駆動開発のワークショップのお題の設計

某ワークショップでTDDのライブコーディングをするので、お題を考えることになった。これはそのときのメモを再編した記事だよ!

ほんものぽくしたい

実際の仕事の状況に近い題材にしたい、ので

  • ペアプロのふたりだけでなく、オンサイト顧客相当のひとも巻き込むようにしたい
  • 仕様メモを上からやっていくと、実装を見直さなくてはならないようにしたい
  • よいAPIを考えないと詰んでしまうようにしたい

を意識した。

今回のお題

「とある架空の画像処理アプリケーション」の部品となるライブラリ(クラス?)を作ってね!

架空のアプリケーション

画像群の中の最大値n画素を塗りつぶしたり、中央値を塗りつぶしたりするアプリケーションだよ。nはインタラクティブに変更できるやつ。

ライブラリ

画像群を模したshortの画素値の配列に対する統計処理を行うライブラリ(仮称Stat)を作ってね。 画像処理なので、画素値の場所に意味があるので、最大の画素の値も場所(配列の添字)もほしい。

こんな感じのAPIが要るかな

  1. 画像群に相当するshortの配列を引数にして初期化する
  2. 最大値の画素の場所と値がほしい(APIが二つに分かれてもよい)
  3. 中央値の画素の場所と値がほしい(偶数画素(2n)のときn番を中央値とする)
  4. 画素値の上位n位までの画素と値がほしい(APIどうする!?)

プレーンなCとassert.hだけで作ってね

工夫したこと(ネタバレ)

もともとの外部仕様には隙があって、オンサイト顧客と相談しないと進まないようになっている。

中央値や上位n画素が必要なことから画素をソートする必要があるが、最大値から始めるとやりなおしになる。

画素値だけでなく、画素の場所も必要なので、ソートする対象は画素の場所になる。ちょっと気づきにくいかも。またAPIも面倒くさくて、二つの値を返さなきゃならないので、どんなAPIにするか工夫が要る。

こっそり自分でも実装して実験しとく