Take A Number: Requirements / OOA
Published:
During the lab classes I teach, I find it hard to give my attention equally to all student groups.
I’ve been using part of the WayApp.Cards app that issues deli-counter style numbers and tickets that can be saved in the iOS or Android wallets.
However, that app can do much more than I need, so I thought I’d make my own, simpler, app that does just what I need: the deli-counter part.
Shall Statements
Functional Requirements
The Take A Number system shall allow the Customer to take a number.
The Take A Number system shall allow the Servicer to see the next number to be serviced.
The Take A Number system shall notify the Customer associated with the next number to be serviced.
The Take A Number system shall allow the Servicer to register with the system.
The Take A Number system shall allow the Servicer to see how many people are yet to be served.
Non-Functional Requirements
The Take A Number system shall issue notifications to the Customer in less than a second.
Use Cases
This is what it needs to do.
It needs to:
- Register the Lecturer or Store (Servicer) with the system.
- Allow a Customer to Take A Number.
- Allow the Servicer to get the next number to service and notify the Customer with that number that it’s their turn.
- Allow the Servicer to see the length of the queue.
To speed things up a little, I’ve added the simple use case reports to each of the sequence diagrams blow.
Analysis
After a bit of playing around, this yields the following analysis classes. Note that I’ve taken the braindead approach of generating an analysis class for:
- Every line in the use case diagram connecting an actor with a use case.
- Every use case (except that I merged two of them).
- Some of the nouns in the use case reports.
Sequence Diagrams
Use Case: Register
Use Case: Take A Number
Use Case: Service Next Number
Use Case: See Queue Length
What’s Next?
Now that we’ve fleshed out the shall statements a little with use cases and analysis classes, we need to switch to high level design to answer the question: what technology are we going to use to implement this?