RULE 6: If it’s not on the Context or Domain models, you can’t talk about it
(If you haven’t already read it, I’d suggest having a quick look over Part 1 of the Baker’s Dozen to familiarise yourself with the fundamentals of use case descriptions.)
Engineers love to solve problems. It’s what they do. A use case model though is not a design model – it’s an analysis model. Use cases describe what the system should do, and in what order. What use cases shouldn’t do is say how the system should achieve these things. That’s what design is for.
Stopping analysts (particularly if they’re developers) from writing implementation details in the use case descriptions is difficult. One safe way of doing this is to limit the concepts written in the use case descriptions to only those defined on the Context or Domain models.
Both the Context model and Domain model describe things beyond the scope of software implementation. That is, they describe the problem domain, not the solution (software) domain.
The Context model defines the physical parts of the system – external systems, users, interfaces, communication channels, etc.
The Domain model describes the informational context of the system – what artefacts exist, are produced, are inputs or outputs; and how these elements relate to each other.
(See Rule 4 for more on these models; and more.)
All the data in these two models will exist irrespective of what software solution is developed. If they change then our understanding of the problem has changed.
When reviewing use cases look for concepts that are not defined on the Domain or Context models. These concepts are very likely to be implementation details. Look for items like ‘database’, ‘Hardware Abstraction Layer’, ‘Observer’, ‘RTOS’, etc. These are an indication your requirements are actually describing the solution rather than the problem.
Glennan is an embedded systems and software engineer with over 20 years experience, mostly in high-integrity systems for the defence and aerospace industry.
He specialises in C++, UML, software modelling, Systems Engineering and process development.