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