T06 - SYSTEM DESIGN - Latest
CSC577 CHAPTER 6 - SOFTWARE DESIGN
Contents
System design principles
Design Paradigm - OOAD
Relationship between requirement and designs
Software architecture concepts and standard architectures
Design pattern
Design modelling
Outcomes
Introduce the process of software design
Describe the different stages in the design process
Show how object-oriented design strategies work
Discuss design quality attributes
Introduction
Definition of design within the context of software:
Analysis: understanding organizational informational needs
Documentation: requirements in a specification format
Construction: building a system satisfying the requirements
Design: organizing and structuring final solution components, serving as a blueprint for construction.
Analysis
What the system should do: Understanding requirements
How the system will be built: Determining design methodologies
Levels of Design
Analysis
Design Vision Document
Architectural Design
Detailed Requirements
Detail Design
General Design/Conceptual Design
Purpose of Design
Refine and expand software architecture to be suitable for implementation.
Deep dive into each component to define internal structure and behavior for efficient construction.
Software Design
Represents a meaningful engineering model of what is to be built.
It derives solutions meeting software requirements through an iterative process, resulting in a 'blueprint' for construction.
System Design Principles
Software design is both a process and a model:
Process: a sequence of steps to describe all aspects of software.
Model: equivalent to an architect's plans, representing various aspect views of software.
Set of Principles for Software Design
Avoid tunnel vision in the design process.
Ensure design traceability to the analysis model.
Do not reinvent wheels; use existing solutions where applicable.
Minimize the intellectual distance between software and the real-world problem functions.
Design should be uniform and integrated, establishing style rules prior to design.
Ongoing Set of Principles for Software Design
Accommodate design for change.
Assess design quality continuously.
Structure design to handle unexpected situations gracefully.
Differentiate design activities from coding activities.
Review designs to minimize semantic errors.
Relationship between Requirements and Design
Software design activity revolves around evaluating and translating software requirements into a structured collection that communicates both behavioral and structural aspects of the components.
The Design Process
Involves several abstraction levels
Stages include:
Understanding the problem
Identifying solutions
Evaluating options
Describing solution abstractions using various notations
Iterating until expressed in primitive terms.
Phases in the Design Process
Architectural design: Identify subsystems
Abstract specification: Specify subsystems
Interface design: Subsystem interfaces description
Component design: Decomposing subsystems into components
Data structure design: Designing data storage
Algorithm design: Designing functional algorithms
Software Architecture Concepts and Standard Architecture
Software design consists of activities and controls ensuring effective software design artifacts.
Major activities include software architecture and detailed design.
Advantages of Explicit Architecture
Facilitates the transition from requirements to design, programming, testing, and maintenance.
Enhances stakeholder communication and systemic analysis of nonfunctional requirements.
Supports large-scale reuse across varying systems.
Definition of Architectural Design
Identifies subsystems and frameworks for their controls and communications.
The output comprises a comprehensive description of the software architecture.
Architectural Design Decisions
Decisions in this creative process can vary based on system type and architect experience.
Key questions:
Structural approach
Appropriate architectural styles
Control strategies
Decomposing structural components
Generic application architecture usage
Organization for fulfilling non-functional requirements
System distribution and architectural evaluation methods
Documentation strategies
Analogy of House Architectural View
Exterior and interior elevations showing layout and features.
Detailed floor and roof plans. Schematic electrical layouts.
Views of Design
Functional views based on task performance rather than data-centric views.
Architecture and System Characteristics
Performance, security, safety, reliability, availability, maintainability, and quality aspects are crucial in design.
Architectural Patterns and Styles
Architectural patterns represent common good design practices proven in various environments. They include details on usage contexts and are often visually represented.
The Model-View-Controller (MVC) Pattern
Separates presentation and interaction from system data.
Comprises three components:
Model: Manages system data
View: Defines data presentation
Controller: Manages user interactions and coordinates between model and view.
When to use: Valuable for systems needing multiple data views and unknown future interaction requirements.
Web Application Architecture Using MVC Pattern
Interaction between browser, form displays, application logic, and database is structured under the MVC paradigm.
Repository Architecture
Shared data either in a central repository or maintained separately by subsystems.
Suited for data-intensive systems where longevity of shared data matters.
Client-Server Architecture
Illustrates a distributed system model with data and processing spread across components, supporting access from diverse locations.
Layered Model
Organizes systems into layers with distinct roles, enhancing isolation of changes and responsibilities among layers. Effective for securing systems and incremental development.
Pipe and Filter Architecture
Structures data processing into discrete components with data flowing like a pipeline.
Ideal for data handling applications, though not suitable for interactive systems.
Application Architectures
Common organizational frameworks for application systems designed to meet business requirements, adaptable for specific needs.
Various Application Types
Different applications address specific needs including data processing, transaction processing, event processing, and language processing systems.
Transaction Processing Systems
Handle sequences of operations from users directed toward database interaction.
Information Systems Architecture
Typically viewed as layered structures with user interactions leveraging database transactions.
Web-based Information Systems
Often structured as multi-tier client-server systems, facilitating user communications through web interfaces and managing backend processing via application servers and databases.
Language Processing Systems
Convert input languages to other formats, often with interpreters aiding in instruction execution.
Compiler Components
Include key elements for transforming programming languages efficiently into machine-readable formats.
Design Patterns
General, repeatable solutions to common design problems; not finalized designs but templates usable in multiple contexts.
Using Patterns in Design
Application involves inheritance for subclass creation or composition for complex functionality. Patterns enable effective reuse and problem-solving capabilities.
The Design Concept: Modularity
Structural criteria assessing module interconnections: cohesion keeps a module together, and coupling measures connection strength.
The Design Concept: Cohesion
Focus on implementing single logical functions within components fosters ease of modification and maintenance.
The Design Concept: Coupling
A measure of how interdependent components are; loose coupling enhances independence and adaptability among components.
Design Modelling
Involves creating models for system representation, often using UML for graphical communication.
UML Diagram Types
Various UML diagrams serve specific purposes, such as activity diagrams, use case diagrams, sequence diagrams, and class diagrams.
Key Points
Design is crucial to software engineering, refining data structures and procedural details.
Results yield representations assessable for quality.
Principles guide progression through design processes.
Concepts underpin criteria for evaluating design quality.
Modularity in programming enables simplification and reuse of elements.