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
1

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:

  1. Describe — state what you are evaluating. Name the specific element, relationship, or pattern you are examining. Be precise.
  2. Evaluate — apply one or more quality criteria to it. Does this element support or undermine maintainability, scalability, usability, reliability, or security?
  3. Justify — provide evidence. Why does this element raise the concern you have identified? Reference specific notation, multiplicity, relationships, or the number of dependencies.
  4. 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.
2

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:

  • alt fragments 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.

3

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.

4

Watch

Video coming soon

5

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?'

Correct! Scalability concerns a system's ability to handle increased load — more users, more data, or higher frequency of requests — without degradation. It is distinct from reliability (consistent behaviour under normal load) and maintainability (ease of change).
Not quite — review the material and try again. Scalability concerns a system's ability to handle increased load — more users, more data, or higher frequency of requests — without degradation. It is distinct from reliability (consistent behaviour under normal load) and maintainability (ease of change).

A class has 25 methods, 15 attributes, and associations to 12 other classes. Which quality concern does this most directly raise?

Correct! A class with many methods, attributes, and dependencies has low cohesion and high coupling — the hallmarks of a god class. This is a maintainability concern: the class is too large to understand or test safely, and changes to any part of it risk affecting many others.
Not quite — review the material and try again. A class with many methods, attributes, and dependencies has low cohesion and high coupling — the hallmarks of a god class. This is a maintainability concern: the class is too large to understand or test safely, and changes to any part of it risk affecting many others.
6

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

7

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.