Advanced Software Design and
Architecture
Introduction
Objective
• To be introduced to principles of good design, and techniques for the evaluation of
software design quality.
• To cover the principal architectural issues associated with the design and
construction of software systems including architectural design and documentation,
component models and technologies, and frameworks.
• To introduce the students to a number of design patterns and their applications.
Course Contents
• The course is divided into two major modules
• The first module covers the software design and provides details of software
architecture and architectural styles.
• The second module covers the detailed design phase with introduction to Object
Oriented Design and various design patterns.
Motivation
• A staircase that leads right
into a wall!!!
• A door that would drop you 10 feet down!
• An impossible to use
ATM machine
• What do you think is wrong in these real life scenarios?
• The requirements are correct!
– A staircase next to the outer wall
– A door on the first floor
– An ATM outside the bank branch
– The bridge
• The design is flawed!
– The execution based on the design results in disaster.
• For a useful software, it has to be ‘engineered’; which involves giving specific
attention to every phase of software development.
Problems in software development
• Common issues
– The final software does not fulfill the needs of the customer
– Hard to extend and improve: if you want to add a functionality later its mission impossible
– Bad documentation
– Bad quality: frequent errors, hard to use, ...
– More time and costs than expected
Software Design
What is Design?
• Design is the first step in the development phase for any engineered product
or system.
•
Design is about HOW the system will perform its functions.
Software Design
• A software design is a meaningful engineering representation
of some software product that is to be built.
“The process of applying various techniques and
principles for the purpose of defining a device, a process or a
system in a sufficient detail to permit its physical realization”
Software Design
• The literature on design methods began to appear in the 1950s and 60s.
• Since then, design methodology has become an independent discipline of
scientific study.
– What are the essential characteristics of design?
– What processes are used by designers?
• Is one process better than another, constituting ‘right’ and ‘wrong’ ways to
design?
• Why are some processes favorable over others?
• Do different processes lead to different qualities of results?
17
Software Design
• As one of the most complex man-made artifacts, computer software is
very difficult to design.
• There are many factors that affect designs and many stakeholders,
– i.e. people who participate in the design process, play various
different roles in the design processes and influence the design of
software.
18
Software Design - Simplified
Requirements specification was about the WHAT the system will do
Design is about the HOW the system will perform its functions
• provides the overall decomposition of the system
• allows to split the work among a team of developers
• also lays down the groundwork for achieving non-functional requirements
(performance, maintainability, reusability, etc.)
• takes target technology into account (e.g., kind of middleware, database
design, etc.)
Why Design is important?
• Without a proper design, we risk building an unstable system
– one that will fail when small changes are made
– one that may be difficult to test
– one whose quality cannot be assessed until late in the software process,
perhaps when critical deadlines are approaching and much capital has
already been invested into the product.
Major Design Challenges
• Design team should not do too much
– Detailed design should not become code
• Design team should not do too little
– It is essential for the design team to produce a complete detailed
design
Software Development Activities
• Requirements Elicitation
• Requirements Analysis (e.g., Structured Analysis, OO Analysis)
– analyzing requirements and working towards a conceptual mode.
– part of requirements engineering
• Design
– coming up with solution models taking the target implementation technology
into account
• Implementation
• Testing
Software Design in SDLC
• In SDLC (Software Development Life Cycle), Design phase is one of the
most important phases.
• In the software engineering context, design focuses on four major areas of
concern: data, architecture, interfaces and components.
Design Process Activities
• Architectural design
– Modules, inter-relationships etc
• Abstract specification
– Services of each sub-system, constraints etc
• Interface design
– Interface to other sub-system or outside environment
• Component design
– Services allocated to components and their interfaces designed
• Data structure design
• Algorithm design
Levels of Software Design
• Architectural design (high-level design)
– architecture - the overall structure, main modules and their
connections
– addresses the main non-functional requirements (e.g., reliability,
performance)
– hard to change
• Detailed design (low-level design)
– the inner structure of the main modules
– detailed enough to be implemented in the programming language
Design vs. Architecture
• Architecture is concerned with the selection of architectural
elements, their interaction, and the constraints on those
elements and their interactions
• Design is concerned with the modularization and detailed
interfaces of the design elements, their algorithms and
procedures, and the data types needed to support the
architecture and to satisfy the requirements.
• Architecture…is specifically not about…details of
implementations (e.g., algorithms and data structures.)
Summary
• Introduction to design
• Importance of design
• Difference between design and architecture