This exercise teaches you to build and re-evaluate your solution in an iterative manner to handle changing requirements.
First, create a class diagram for the use case described in STEP 1, and add attributes, event types, non-default FSMs and constraints if necessary. For each step, revise your model and add, remove or change elments where necessary.

STEP 1
Your brand new company sells goods to local supermarkets. You want to create a simple information system to keep track of your stock, your customers and their orders.

When you register a new customer, you enter their address and VAT number.

To keep track of your stock, you want to be able to register the products you offer and the current stock of each product. Your customers' orders consist of one or more order lines, with each order line recording the quantity ordered of a particular product.

To minimise the overhead of managing payments and deliveries for your small business, your customers are required to pay for their order in full before it is sent out for delivery. Similarly, orders are always shipped in their entirety to keep shipping simple. To ensure that you have the information you need for your accounts, you want to record when orders are paid for and shipped.

At the end of each working day, you manually adjust the stock levels of your products in the system based on the orders placed that day.

STEP 2

As your business grows, you start to offer more exclusive products that are not always available. To ensure customer satisfaction, you want to start organising deliveries on a line-by-line basis so that available products can be shipped immediately and unavailable products can be shipped later.

Of course, you need to adapt your information system to keep track of partially shipped orders so that you can record which order lines have been shipped and which are still on the to-be-shipped list. Orders that have been fully shipped will also be marked so that you know that they can be removed from your watchlist.

STEP 3

As your products become more popular, you start supplying larger supermarkets. These supermarkets sometimes have several warehouses that they use for different locations. You want to start keeping track of both the customer's head office address and the addresses where the orders are delivered.

 To further professionalise your business, you want to send invoices to your customers for their orders. Customers can now choose to pay the invoice directly when they place the order, or after the order has been delivered. An order should still be paid in full.

STEP 4
As your business grows, keeping track of shipments on a line-by-line basis becomes too cumbersome. You would prefer to do this for each group of order lines that are shipped together.

 In addition, you have recently noticed some problems with the delivery service you use, as customers have informed you that some deliveries are missing or damaged. You want to gather more information about the deliveries in order to decide whether you should switch to another delivery service or start delivering yourself. To do this, you want to know the status of each delivery (remember that partial deliveries of one or more order lines are possible). You want to track a shipment as it is packed, shipped and received by the customer.