[わんくま同盟 名古屋勉強会 #20] TDD ワークショップのお題
2012/1/14 わんくま同盟 名古屋勉強会 #20 で開催する TDD ワークショップのお題です。
LruCacheMap (TDDBC 東京 1.0 などでのお題を改造)
■ 要求
キャッシュの最大数に達したときに、最も使われていないデータから順に消される Map のような仕組みが欲しい。
void Put(string キー, string データ) ※ Java 系では put(string キー, string データ)
string Get(string キー)
[以下の例は、キャッシュサイズ=2 のとき]
・ひとつも使われていない場合は、最初に追加したものから消える
lru.Put("a", "dataA");
lru.Put("b", "dataB");
lru.Put("c", "dataC"); // 先に入れた "dataA" が消える
lru.Get("a"); // ⇒ null
lru.Get("b"); // ⇒ "dataB"
・Get() されたら、そのときに使われたとみなす
lru.Put("a", "dataA");
lru.Put("b", "dataB");
lru.Get("a"); // ⇒ "dataA" // "dataA" を「使った」
lru.Put("c", "dataC"); // 使われていない "dataB" が消える
lru.Get("a"); // ⇒ "dataA"
lru.Get("b"); // ⇒ null
■ お題
上の要求を、3つのステップに分けて、お題とします。
◆ お題その1: Map (のようなもの)
クラス名: LruCacheMap
メソッド:
void Put(string キー, string データ) ※ Java 系では put(string キー, string データ)
string Get(string キー)
※ 必要なら public メソッドも追加して良い。
- データに null は入る。
- キーに null は不可。 Put()/Get() とも、「引数に null が渡された」という例外が発生する。
- 同じキーで Put() できる。 データが置き換わる。
- Get() は、該当するデータがないときは null を返す。
◆ お題その2: キャッシュサイズの導入
- LruCacheMap に入るデータは 2件までとする。
- 2件入っているときに、さらに異なるキーを Put() すると、 最初のデータが消える。
◆ お題その3: 「データを使う」という概念の導入
- Get() でデータを取り出した時、 そのときに「使われた」と考える。
- Put() されたときも、「使われた」と考える。
- 2件入っているときに、さらに異なるキーを Put() すると、 最も以前に「使われた」データが消える。(要求では、2通りに分けて表現されていた)
※ 「使われた」ことをどうやって表現するか? 時刻? 並び順?
■ レビュー
ワークショップ後半では、みんなでレビューをします。
- 各言語チームから、ひとりずつ発表者を選出。
- スクリーンにコードを表示しながら、発表者が解説。
- 全員で質疑応答。
[発表するときの観点]
テストコードを全部説明していると長くなるので、観点を絞ってください。
- これは良く出来た! --- 上手くできたこと、閃いたテストケースの書き方、美しくできた製品コード、など。
- なにが問題だったか? --- テストケースを書くときに問題になったこと、また、その解決方法。
- やり残したリファクタリング (もっともやっておきたいことを、ひとつだけ)
| 固定リンク