- being embedded in method names?
- Do all subclasses implement the "is-a-kind-of" relationship properly?
- Are all object states represented explicitly using states and transitions rather than as subclasses?
- In inheritance structures, are all attributes and methods pushed as high in the inheritance structure as is proper?
- Are all polymorphic methods within related subclasses identically named?
- Does each association reflect a relationship that exists over the lives of the related objects?
- Are each 0..* and 1..* relationships implemented with containers/collectors?
- Are each association's cardinalities consistent (instantaneous vs. over-time)?
Domain Expert Testing
After checking the syntax of the class diagrams, we proceed to the second type of testing-domain expert testing. Again, we have two options: find a domain expert or attempt to become one. (The second approach is always more difficult than the first, and the first can be very hard.) Continuing, we ask two kinds of questions: Is it correct? Is it consistent?
- Is each class named with a strong noun?
- Have all redundant, irrelevant, or vague classes been removed from the diagram?
- Is each attribute defined within the proper class? Is it of the correct type?
- Is the visibility of each attribute correct?
- Are the default values of each attribute specified correctly?
- Is each attribute essential rather than computable from others?
- Is each method in the correct class?
- Are all method names strong verbs?
- Does each method take the correct input parameters and return the correct output parameter?
- Is the visibility of each method correct?
- Does each method implement one and only one behavior?
- Is the public interface free from unnecessary methods?
- Is the class diagram drawn at the appropriate level: conceptual, specification, or implementation?
Finally, after having our domain expert scour the class diagrams, we proceed to the third type of testing-traceability testing. We want to make certain that we can trace from the use cases and the sequence diagrams to the class diagrams and from the class diagrams back to the use cases and sequence diagrams. Again, we turn to one question: Is it consistent?
- Is each object on the sequence diagram represented by a class on the class diagram?
- Is every message on the sequence diagram reflected as a method in the appropriate class?
This set of questions, based on syntax, domain expert, and traceability testing; and focused on completeness, correctness, and consistency; is designed to get you started testing in an area with which you may not be familiar. The last article will apply the same principles to testing state-transition diagrams.
Have fun testing.
Other articles in this series: