1/72
Lecture 1: Software Design Concepts and Principles
Name | Mastery | Learn | Test | Matching | Spaced |
|---|
No study sessions yet.
Software Design
It encompasses the set of principles, concepts, and practices that lead to the development of a high-quality system or product.
Design principles establish and override the philosophy that guides the designer as the work is performed.
Design concepts must be understood before the mechanics of design practice are applied.
practices change continuously as new methods, better analysis, and broader understanding evolve
Data/Class Design
transform analysis classes into implementation classes and data structures.
Architectural Design
defines relationships among the major software structural elements
Interface Design
defines how software elements, hardware elements, and end-users communicate
Component-level design
transform structural elements into a procedural description of software components
Design and Quality
The design must implement all of the explicit requirements contained in the analysis model, and it must accommodate all of the implicit requirements
Design and Quality
It should be a readable, understandable guide for those who generate code and for those who test and subsequently support the software.
Quality Guidelines
A design should be modular
Quality Guidelines
A design should contain distinct representations of data, architecture, interfaces and components
Quality Guidelines
A design should lead to data structures that are drawn from recognizable data patterns
Quality Guidelines
A design should contain functionally independent components
Quality Guidelines
A design should lead to interfaces that reduce the complexity of connections between the components and the external environment.
Quality Guidelines
A design should be derived using a repeatable method that is driven by software requirements analysis
Quality Guidelines
A design should be represented using meaningful notation.
Abstraction
data (named collection of data describing a data object) and procedural (named sequence of instructions with a specific and limited function).
Architecture
data (named collection of data describing a data object), procedural (name sequence of instructions with a specific and limited function).
Design Patterns
Describe a design structure that solves a well-defined design problem within a specific context.
Separation of concerns
Any complex problem can be more easily handled if it’s subdivided into pieces.
Modularity
Compartmentalization of data and function
Information Hiding
controlled interfaces that define and enforce access to the component procedural
detail and any local data structure used by the component.
Functional Independence
single-minded (high cohesion) components with aversion to excessive interaction with other components (low coupling).
Stepwise Refinement
incremental elaboration of detail for all abstractions
Refactoring
A reorganization technique that simplifies the design without changing functionality.
Design Classes
provide design detail that will enable analysis classes to be implemented.
Complete
includes all necessary attributes and methods, and is sufficient (contains only thos
Primitiveness
each class method focuses on providing one service
High cohesion
small, focused, single-minded classes
Low coupling
class collaboration to kept to minimum
Principle #1
Design should be traceable to the requirements model
Principle #2
Always consider the architecture of the system to be built
Principle #3
Design of data is as important as the design of processing functions.
Principle #4
Interfaces (both internal and external) must be designed with care
Principle #5
User interface design should be tuned to the needs of the end-user and stress ease of use
Principle #6
Component-level design should be functionally independent
Principle #7
Components should be loosely coupled to each other rather than the environment
Principle #8
Design representation(models)should be easily understandable.
Principle #9
The design should be developed iteratively.
Principle #10
Creation of a design model does not preclude using an agile approach.
Data Model
data objects and database architectures. It also examines data objects independently of processing.
Data Object
can be an external entity, a thing, an event, a place, a role, an organizational unit, or a structure.
Interface
A set of operations that describes the externally observable behavior of a class and provides access to its public operations.
UI/User Experience (UX)
is a major engineering action to ensure the creation of usable software products.
Deployment Design Elements
Indicates how software functionality and subsystems will be allocated within the physical computing environment.
Descriptor form deployment diagrams
Shows the computing environment but does not indicate configuration details
Instance form deployment diagrams
Identify specific hardware configurations that are developed in the latter stages of design.
Software Architecture
The architecture is not the operational software; it is a representation that enables a software engineer to:
> Analyze the effectiveness of the design in meeting its stated requirements
>Consider architectural alternatives at a stage when making design changes is still relatively easy, and
>Reduce the risks associated with the construction of the software.
set of components
that performs a function required by a system
set of connectors
that enable “communication, coordination and cooperation” among components
constraints
that define how components can be integrated to form the system
semantic models
that enable a designer to understand the overall properties of a system by analyzing the known properties of its constituent parts.
Data Centered Architecture

Data Flow Architecure

Call Return Architecture

Object-Oriented Architecture

Layered Architecture

Model View Controller Architecture

Economy
software is uncluttered and relies on abstraction to reduce unnecessary detail
Visibility
architectural decisions and their justifications should be obvious to software engineers who review
Spacing
separation of concerns in a design without introducing hidden dependencies
Symmetry
Architectural symmetry implies that a system is consistent and balanced in its attributes
Emergence
Emergent, self-organized behavior and control are key to creating scalable, efficient, and economic software architectures.
Archetype
is an abstraction (similar to a class) that represents one element of system behavior.
User Experience Design
We’re not just referring to how the software looks, but also how it feels and functions from the user perspective
“by accident”
UX ensures that no part of the software exists ____.
Strategy
identifies user needs and customer business goals, which form the basis for all UX design work.
Scope
includes both the functional and content requirements needed to realize a feature set consistent with the project strategy.
Functional Requirements
These describe what the system should do — the specific features, actions, or behaviours it must perform.
Non-functional requirements
These describe how the system should perform its tasks.
Structure
consists of the interaction design
interaction design
how the system reacts to user actions
information architecture
how the information is organized
Skeleton
compromising three components: information design, interface design, navigation design. Think of this as your wireframe
Surface
presents visual design, or the appearance of the finished project, to its users. The final visual design— the overall look and feel of your app.