SWEBoK Design Flashcards
Software Design
activity in which requirements are analyzed in order to produce a description of the software’s internal structure that will serve as the basis for its construction
Two Main Activities of Design
- Architectural Design
- Software Detailed Design
Wicked Problem
A problem with no definitive solution
General Design Concepts
Form of Problem Solving
Also includes goals, constraints, alternatives, representations, and solutions
Architectural Design
High-Level Design
describes how software is organized into components
Detailed Design
describes the desired behavior of architectural components
Design Principle
Key notations that provide the basis for many different design approaches and concepts.
Abstraction
design principle
a view of an object that focuses on information relevant to a specific purpose and ignores the remainder of information.
Coupling
design principle
a measure of the interdependence among modules in a computer program
Cohesion
design principle
a measure of the strength of association of the elements within a module
Decomposition and Modularization
design principle
means that large software systems are divided into a number of smaller named components having well-defined interfaces that describe component interaction.
Encapsulation and Information Hiding
design principle
means grouping and packaging the internal details of an abstraction and making those details inaccessible to external entities
Separation of Interface and Implementation
design principle
involves defining a component by specifying a public interface that is separate from the details of how the components is realized
Sufficiency, Completeness
design principle
means ensuring that a software component captures all the important characteristics of an abstraction and nothing more
Primitiveness
design principle
means the design should be based on patterns that are easy to implement
Separation of Concerns
design principle
“area of interest with respect to a software design”
an area of design that is relevant to one of more of its stakeholders.
Separating concerns by views allows interested stakeholders to focus on a few things at a time and offers a means of managing complexity
Key Issues in Design
Issues that must be dealt with in designing software
Concurrency
key issue
decomposing software into processes, tasks, and threads and dealing with related issues of efficiency, atomicity, sychronicity, and scheduling
Control
key issue
concerned with how to organize data add control flow
Handling Events
key issue
concerned with how to handle reactive and temporal events through various mechanisms such as implicit invocation and call-backs
Data Persistence
key issue
how to handle long-lived data
Distribution of Components
key issue
how to distribute the software across the hardware (including local and network), how the components communicate, and how middleware can be used to deal with heterogeneous software
Error and Exception Handling and Fault Tolerance
key issue
how to prevent, tolerate, and process errors and deal with exceptional conditions
Interaction and Presentation
key issue
how to structure and organize interactions with users as well as the presentation of information
(eg. separation of presentation and business logic using MVC)
NOTE: This does not specify user interface details
Security
key issue
how to prevent unauthorized disclosure, creation, change, deletion, or denial of access to information and other resources.
also how to tolerate sec-related attacks or violations by limiting damage, continuing service, speeding repair and recovery, and failing and recovering securely
Software Structure and Architecture
“the set of structures needed to reason about
the system, which comprise software elements,
relations among them, and properties of both”
Architectural Structures and Viewpoints
architecture
Different high-level facets of a software design
can be described and documented.
(Facet) View: “A view represents a partial
aspect of a software architecture that shows specific properties of a software system”
Views pertain to distinct issues associated with software
design.
Logical View
satisfying the functional requirements
physical view
distribution issues
development view
how the design is broken down into implementation units
with explicit representation of the dependencies
among the units
Architectural Styles
architecture
“a specialization of element and relation types, together with a set of
constraints on how they can be used”
provides the software’s high-level organization
General structures (major architectural style)
How programs in software are structured to handle problems
Distributed systems
major architectural style
Software distributed over a series of interconnected hardware components whether locally or over a network
Interactive systems
major architectural style
Software designed around interactions with the user and how data is hidden or loaded (MVC)
Adaptable systems
major architectural style
Software designed to adapt to the environment it is in or one being migrated to or to changing requirements. Being agnostic.
Design Patterns
architecture
“a common
solution to a common problem in a given context”
3 Lower Level Design Patterns
• Creational patterns (for example, builder,
factory, prototype, singleton)
• Structural patterns (for example, adapter,
bridge, composite, decorator, façade, flyweight, proxy)
• Behavioral patterns (for example, command,
interpreter, iterator, mediator, memento,
observer, state, strategy, template, visitor).
Architecture Design Decisions
architecture
software designers make to make a number of fundamental decisions that
profoundly affect the software and the development process.
decision-based, software affecting