達人スターターキット・写経3日目

ちょっと日にちが空きました。達人スターターキットの写経です。


今日は、ECサイトでよくある「ショッピングカートについてのユニットテストを考えよう」というお題でした。ショッピングカートのインターフェースはこんな感じ。

/* 指定した数の商品をショッピングカートに追加する */
public void addItems(Item anItem, int quantity)
  throws NegativeCountException;

/* 指定した数の商品をショッピングカートから削除する */
public void deleteItems(Item anItem, int quantity)
  throws NegativeCountException, NoSuchItemException;

/* カートにある商品の合計を返す */
public int itemCount();

/* 全ての商品のイテレータを返す */
public Iterator<Item> iterator();

特に詰まることはなく順調に作っていったけど、2点ほどコーディング最中に気になる点が。

  • deleteItemsメソッドで、アイテム無しかつ数量マイナスの場合どっちの例外を返す?
  • 数量0の商品はカートから消される?(iteratorメソッドに含まれている?)

本を見ても、特にこの辺のことは触れられていないのですよね。ということは、実際の業務だったら要件定義者もしくは上流の開発者に問い合わせることになるでしょう。

こういった細かいことって、実際にコーディングするまで思いつかないですよね。この辺が、私がウォーターフォール型開発を信じてない理由の一つ。完璧に設計してコーディング時の手戻りは許さないなんて、無茶ですって…><


ちょっと話がずれました。

とにもかくにも、ユニットテストを用いた開発にも大分慣れてきました。「機能実装⇔テスト⇔リファクタリング」をいったりきたりして、自分が今どのモードなのかを意識する(いわゆる、帽子をかぶりなおす)。こうやってリズミカルに開発を進めていくと、何だか楽しくなってきます♪

実業務でも、この感覚を他の人にうまく伝えることができんかなぁ…