Unit 10: Critical Analysis
Learning Objectives
- Apply quality criteria (maintainability, scalability, usability, reliability, security) to evaluate a software design
- Produce a justified critique of a UML model, citing specific elements as evidence
- Engage in structured debate about alternative design decisions
Core Input
Read through each tab before working through the key concepts.
A software design can be evaluated against five core quality criteria:
- Maintainability — how easily can the system be changed? A maintainable design has high cohesion, low coupling, and clear separation of concerns. Changes can be made safely and in isolation.
- Scalability — can the system handle growth? In load (more users, more data), in scope (new features), and in team size (more developers working on it simultaneously)?
- Usability — does the design support the users' actual needs? Are the right use cases implemented? Is the interaction model appropriate for the users' context?
- Reliability — does the design account for failure? Are error conditions modelled? Are there points of failure that could bring down the whole system?
- Security — at a design level, does the model reflect appropriate authorisation (who can do what), data protection (what is kept private), and separation of concerns (no single point of compromise)?
A structured analytical critique follows four steps:
- Describe — state what you are evaluating. Name the specific element, relationship, or pattern you are examining. Be precise.
- Evaluate — apply one or more quality criteria to it. Does this element support or undermine maintainability, scalability, usability, reliability, or security?
- Justify — provide evidence. Why does this element raise the concern you have identified? Reference specific notation, multiplicity, relationships, or the number of dependencies.
- Suggest — propose a specific, feasible improvement. Not "make it better" — but "split this class into X and Y, assigning responsibility Z to Y".
A critique that stops at step 2 is an observation. Only at step 4 does it become analysis.
In practice, evaluating a software design requires looking for specific signals:
- Classes with many associations — potential god class or high coupling. Count the associations. More than 5–7 from a single class warrants scrutiny.
- Use cases with no error flow — what happens when the user enters invalid data, or the network fails? A sequence diagram that only models the happy path is incomplete.
- Missing actors — a use case diagram that only shows end users may be missing system actors (email services, payment gateways) or administrative roles.
- Deep inheritance hierarchies — more than two or three levels of inheritance often signals that inheritance is being overused. Consider composition.
- Absent non-functional requirements — does the design reflect any NFRs? Performance, security, and reliability leave traces in the class structure if they have been considered.
Key Concepts: Quality Criteria
Each quality criterion applies differently to different parts of a design. Work through each item and think about how it would be assessed in a class diagram, a use case diagram, or a sequence diagram.
Maintainability is the ease with which a system can be modified — to fix bugs, add features, or adapt to changing requirements.
In a class diagram, signs of good maintainability:
- Classes with clearly bounded responsibilities (high cohesion)
- Few and purposeful associations (low coupling)
- Encapsulated attributes (private visibility) with controlled access via operations
- Use of inheritance only where justified — not as a shortcut
Signs of poor maintainability:
- God classes with many attributes, operations, and associations
- Bidirectional associations between many classes (high coupling)
- Direct access to attributes across class boundaries
Scalability is the ability of a system to handle increased demand without degradation in performance or correctness.
Three types of scalability matter:
- Load scalability — can the system handle more users or more data? Class design issues include: shared mutable state, god classes that become bottlenecks, insufficient separation between data access and business logic.
- Feature scalability — can new features be added without redesigning the core? Designs with low coupling and clear abstractions scale well; tightly coupled designs resist extension.
- Team scalability — can multiple developers work on the system without conflicts? High coupling means many developers touching the same class; low coupling allows independent parallel development.
Usability is usually associated with user interface design, but it has a place in UML analysis too — at the level of use case and requirements.
Usability questions to ask of a use case diagram:
- Are all user goals represented as use cases?
- Is the number of steps to achieve a common goal reasonable?
- Are optional features («extend») used to keep the core flow simple?
- Are there any mandatory steps that users would find unnecessary?
A system that is functionally correct but requires ten steps to perform a simple task has a usability problem that is visible — and solvable — at the design stage.
Reliability concerns a system's ability to perform correctly under expected and unexpected conditions. At the design level, this means thinking about failure modes.
In a sequence diagram, signs of reliability awareness:
altfragments modelling error conditions (not just the happy path)- Explicit handling of null responses, timeouts, and service failures
- No single object handling every interaction (a single point of failure)
A sequence diagram that only models the "everything goes right" scenario is incomplete. Real systems fail. A design that does not model failure has not been properly analysed.
Security in software design concerns two primary concerns: authorisation (who is allowed to do what) and data protection (what information is kept private).
In a use case diagram:
- Are actor permissions correctly modelled? Can a Guest perform use cases reserved for a Registered User?
- Are administrative use cases separated from user-facing ones?
In a class diagram:
- Are sensitive attributes (passwords, payment data) private?
- Is there a clear separation between authentication/authorisation logic and business logic?
Security is not an add-on — it is visible in the structure of a well-designed model.
Key Concepts: How to Analyse a Design
Analysis is a skill. Work through these items to understand what separates a good critique from a superficial one.
Compare these two critiques of the same class diagram element:
Descriptive (not analytical):
"The SystemManager class has many associations. This seems complex."
Analytical:
"The SystemManager class has associations to nine other classes and twenty-three operations. This indicates low cohesion — the class is responsible for authentication, logging, report generation, and user management simultaneously. This will reduce maintainability: any change to the reporting logic risks breaking unrelated authentication code. I recommend extracting ReportService, AuthService, and AuditLogger as separate classes, each with a single responsibility."
The analytical version names the element, cites the evidence (nine associations, twenty-three operations), applies the criterion (maintainability / cohesion), and proposes a specific improvement.
This four-step structure ensures a critique is complete:
- Describe — name the specific element you are examining. "The Enrolment class has a composition relationship with Student."
- Evaluate — apply a quality criterion. "This raises a reliability concern."
- Justify — explain why, with evidence. "If a Student record is deleted, all associated Enrolment records are destroyed too. This could result in unintentional data loss if a student account is deactivated rather than deleted."
- Suggest — propose a specific improvement. "Change the relationship to aggregation, and add a status attribute to Student (active/inactive) to handle deactivation without deletion."
Evidence in a design critique is specific and observable — something another person looking at the same diagram would also see.
Valid evidence:
- The number of associations from a single class
- The number of operations in a class
- The multiplicity values on an association
- The absence of an error path in a sequence diagram
- A missing class or operation
- The direction and type of a relationship (composition vs aggregation)
Not valid evidence:
- "It looks complicated" — this is an impression, not evidence
- "I would have done it differently" — this is preference, not analysis
- "The names are confusing" — this is valid only if you explain why a specific name is misleading
Vague criticism: Stating that a design "has problems" or "could be improved" without identifying the specific element, the criterion violated, or the improvement. This is the most common weakness in student critiques.
Criticism without suggestion: Identifying a problem but not proposing a solution. A good critique closes the loop: here is the problem, here is what to do about it.
Unrealistic suggestions: Proposing improvements that ignore the constraints of the project (e.g. "rebuild from scratch", or suggestions that violate stated requirements). Suggestions should be targeted, feasible, and justified.
Praising without justification: "The class diagram is well-structured" is not an evaluation. If something is done well, cite what it is and why it works.
Watch
Video coming soon
Check Your Understanding
Select the best answer for each question.
Which quality criterion asks: 'If the number of users doubles, will the system still perform acceptably?'
A class has 25 methods, 15 attributes, and associations to 12 other classes. Which quality concern does this most directly raise?
Question Bank
Test your knowledge of key UML and software engineering concepts from across the course. Questions are drawn randomly from a bank of 44 items — once every question has appeared, the set resets automatically.
Click New Question to begin
0 of 44 questions seen this session
Activities
Individual task
Review the complete set of UML diagrams you have built in this course. Choose one diagram and write a structured critique using the describe-evaluate-justify-suggest framework.
Your critique should:
- Identify at least one strength with evidence and justification
- Identify at least one weakness with evidence and a specific, feasible suggestion for improvement
- Apply at least two quality criteria (e.g. maintainability and reliability)
Pair task
Exchange critiques with a partner and evaluate the critique itself:
- Is each point of criticism specific? (Does it name an element?)
- Is each point justified with evidence? (Is there something observable in the diagram to support it?)
- Is the suggested improvement feasible and clearly described?
- Does the critique go beyond description to genuine analysis?
Identify the strongest part of your partner's critique — and the one part that could be made more analytical. Explain both.
Group task — design debate
Select one design decision your group made during Units 5 or 8 — one where alternatives were discussed or where the right choice was not obvious.
Reconstruct the debate:
- What were the alternatives?
- What criteria did you use to decide (implicitly or explicitly)?
- What trade-offs did you accept?
- Having now completed all 10 units — would you make the same decision? Why or why not?
This final task asks you to think like a senior engineer: not just "what did we do?" but "was it the right thing to do, and what have we learned?"
Review
- Maintainability — how easily can the system be changed safely?
- Scalability — can the system handle more load, more features, or more developers?
- Usability — does the design genuinely support user goals?
- Reliability — does the design account for failure and error conditions?
- Security — does the design enforce appropriate authorisation and data protection?
This course was designed as a spiral: each unit revisited and deepened earlier work.
- Units 1–2 — the foundation: what is software engineering and how do we capture requirements?
- Units 3–7 — the four diagram types, each building on the last: use cases → class structure → behaviour → processes
- Unit 8 — integration: ensuring all diagrams form a coherent, consistent whole
- Unit 9 — communication: presenting and explaining designs to different audiences
- Unit 10 — evaluation: applying critical judgement to assess the quality of any design
A software engineer who can do all five of these things — specify, model, integrate, communicate, and evaluate — is equipped to work effectively on real systems. That is the goal this course was designed to support.
You have completed UML for Software Engineering. Return to the course home page.