# Mob-programming # Target Japanese vending machine Ver 2.0 # Important Things - Maximize the learning outcomes of this workshop (mob programming) - Solving all tasks is not first priority - Driver and Navigator should be changed frequently. About 5-10 minutes is good - TDD aims "Clean and working codes". Try refactoring! - Items in Object list do not correcpond to each cycles of TDD - Let's clarify and devide the specifications to make it easy TDD - Let's devide and refactor Objects, modules, classes, and methods frequently (e.g. VendingMachine, InventoryManagement, MoneyManegement, and so on) # Tasks ## Step0: Insert money and refund it - Can insert 10 yen coin, 50 yen coin, 100 yen coin, 500 yen coin, and 1000 yen bill - Can insert coins and bills multiple times - Can get total amount of inserted money - Can refund - Can output total amount of inserted money as refund money by refund operation ## Step1: Unhandled money - When unexpected object (1 yen coin, 5 yen coin, bills except 1000 yen) is inserted, it will not be added to the total money and refund it to user ## Step2: Drink Management - One type of drink which has "price" and "name" attributes can be stored - As initial state, 5 Cokes (price: 120yen, name: "Coke") are stored - Can get information (price, name, and amount) of stored drinks - !!Caution!! : Doesn't Class have roles too much? If so, let's devide it! ## Step3: Purchase - Can get whether Coke can be purchased or not in terms of inserted money and stock - If "purchase" is executed when Coke can be purchased, reduce stock of Coke and increase sales amount - If "purchase" is executed when Coke can NOT be purchased, do nothing - Can get current sales amount - If "refund" is executed, refund money ("Inserted money" - "Purchase price") - !!Caution!! : Doesn't Class have roles too much? If so, let's devide it! ## Step4: Feature Extension - Three types of drink can be stored - Can be added RedBull (price: 200yen, name: "RedBull") - Can be added Water (price: 100yen, name: "Water") - Can get total amount of inserted money and list of purchasable drinks ## Step5: Refund Management Sales Management - If "purchase" is executed when a drink can be purchased, output refund (the difference between inserted money and price of purchased drink) - If inserted money and price of purchased drink are same, output 0 yen as refund - You don't need to care the type of coin for refund # References - http://devtesting.jp/tddbc/?TDDBC%E5%A4%A7%E9%98%AA3.0%2F%E8%AA%B2%E9%A1%8C