Design Concepts  «Prev  Next»
Lesson 1

Key Analysis and Design Concepts

Programming versus Analysis and Design

Although there is a well-defined academic foundation for object-oriented concepts, most developers are not aware of it or would not know what to make of it if they were. Most of the work of analysis is driven by the concepts we will cover in this module. The diagramming notation will lend precision to diagrams, but the meaning and content must be assessed against the principles of good object-oriented modeling. Object-oriented analysis and design (OOAD) is a software engineering approach that models a system as a group of interacting objects. Each object represents some entity of interest in the system being modeled, and is characterised by its class, its state (data elements), and its behavior. Various models can be created to show the static structure, dynamic behavior, and run-time deployment of these collaborating objects. There are a number of different notations for representing these models, such as the Unified Modeling Language (UML). Object-oriented analysis (OOA) applies object-modelling techniques to analyze the functional requirements for a system. Object-oriented design (OOD) elaborates the analysis models to produce implementation specifications. OOA focuses on what the system does, OOD on how the system does it.
  • Module Learning Objectives
    In this module, you will learn:
    1. What it means to create an object
    2. How to assess the quality of an abstraction
    3. What it means to encapsulate an object
    4. How to model objects using encapsulation
    5. How to assess object quality using cohesion and coupling
    6. How to create an object by assembling other objects using aggregation and composition
    7. How to organize similar objects using generalization and specialization

SDLC Project Management

The Interconnected Nature of Analysis and Design in Software Engineering (2024)

In software engineering literature, definitions of "analysis" are as diverse as the authors who attempt to define it. Ironically, while analysis is universally acknowledged as a crucial phase in software development, its exact definition remains elusive. A traditional distinction often drawn is that analysis defines the "what" (what the system must do), whereas design focuses on the "how" (how the system will achieve those objectives). At first glance, this distinction appears logical by clarifying "what" seems like a necessary precursor to determining "how." However, in practice, this differentiation is far more nuanced and often contentious.

The What-How Paradox
In real-world discussions, teams often find themselves mired in debates over whether they are engaging in analysis or design. These debates stem from a fundamental truth: every "what" inherently implies a "how", and every "how" serves as the "what" for the next level of abstraction. For instance:
  • When defining "what" a feature must accomplish, decisions about how it integrates with the system are unavoidable.
  • Conversely, when outlining how a feature will be implemented, it implicitly shapes the "what" the system ultimately delivers.

This recursive relationship illustrates that the distinction between analysis and design is more of a conceptual guideline than a strict boundary. Each level of abstraction reveals that "what" becomes "how" at the next level, and how becomes "what" for the level below. This process continues indefinitely, blurring the lines between analysis and design.

The Recursive Nature of Software Development
Analysis and design can be thought of as a recursive descent into detail:
  • At high levels of abstraction, analysis defines broad requirements (the "what"), while design identifies structural approaches (the "how").
  • At lower levels, these structural decisions become the new what, and implementation details are the new "how."

This recursive nature means that analysis and design are virtually indistinguishable, as their operations overlap extensively at every level of abstraction.

Unified Perspective: Analysis as Design, Design as Analysis
If we consider analysis as defining "what" and design as defining "how," we find that they are inherently equivalent processes. They are two perspectives of the same iterative activity:
  • Analysis identifies the needs of the system (what), but in doing so, it inevitably begins to shape the solutions (how).
  • Design formalizes the solutions (how), but in doing so, it refines the understanding of the requirements (what).

In practice, software engineers alternate seamlessly between analysis and design during problem-solving, without explicitly labeling their activities.

Practical Implications for 2024
Given this intrinsic overlap, modern software engineering emphasizes Unified Perspective: Analysis as Design, Design as Analysisintegrated workflows**:
  • Agile methodologies treat analysis and design as iterative, collaborative processes, rather than sequential steps.
  • Model-driven development (MDD) encourages moving between high-level models ("what") and implementation models ("how") seamlessly.
  • DevOps practices integrate design decisions directly into operational processes, reinforcing the fluidity between analysis and design.

In conclusion, the traditional distinction between analysis and design as separate phases is less relevant in today’s iterative and collaborative development environments. Instead, they are seen as interconnected, recursive activities that together drive the creation of effective software solutions. Understanding this relationship helps teams avoid futile debates and focus on delivering value.

Project Management Cycle

Key Concepts

Before we launch into the analysis process, I need to explain some key concepts. In analysis and design, as with any syntax-oriented environment, you ensure quality by applying the proper principles and concepts more than by perfecting the use of the syntax. In fact, it is very possible to create a diagram with perfect syntax that will never work.
So the question is,
What concepts or guiding principles can we apply that will help us measure the quality of our models?

To define all classes, the operations, the attributes, the relationships and the behavior the following tasks must be done:
  1. Basic user requirements must be communicated between the customer and the software engineer.
  2. Classes must be identified.
  3. A class hierarchy must be specified.
  4. Object to object relationships should be represented.
  5. Object behavior must be modeled.
  6. Above Tasks must be reapplied iteratively until the model is complete
  • What is Software Quality?
    The question, "What is software quality?", is bound to generate many different answers, depending on 1) whom you ask, 2) under what circumstances, and 3) for what kind of software systems. An alternative question that is probably easier for us to get more informative answers is: "What are the characteristics for high-quality software?" In this module, we attempt to define software quality by defining the expected characteristics or properties of high-quality software. In doing so, we need to examine the different perspectives and expectations of users as well as other people involved with the development, management, marketing, and maintenance of the software products. We also need to examine the individual characteristics associated with quality and their inter-relationship, and focus our attention on the critical characteristics of functional correctness.

SEMrush Software