Chapter 1 - What is SW Architecture Flashcards
Definition of SW Arch
the set of structures needed to reason about the system, which comprises of both software elements, relations among them, and properties of both
AKA how sets of structures relate
3 categories of arch structures
modules
component and connector
allocation
Basic definition of module structures
structures that allow for the static structuring of code
AKA containers for written source code
2 characteristics of modules
each module has a computational responsibility
each module is the basis of work assignments for programming teams
4 important questions relating to modules
what is the primary functional responsibility assigned to each module?
what other SW elements is a module allowed to use?
what other SW does it actually use and depend on?
what modules are related to other modules by generalization or specialization (inheritance) relationships?
The basic definition of component-and-connector structures?
component - a structure that represents a runtime executable
connector - represents the SW and HW at runtime that dictates how components communicate with each other
1 important characteristic of component structures
they do not have a 1-to-1 correspondence with module structures. Typically a many-to-many correspondence
6 important questions relating to component-and-connector structures?
what are the major executing components and how do they interact at runtime?
what are the major shared data stores?
what parts of the system are replicated?
how does the data progress through the system?
what parts of the system can run in parallel?
can the system’s structure change as it executes and how?
The basic definition of allocation structures
they describe the mapping from software structures to the system’s environment
4 types of environments for a software system
organizational (company structure)
developmental (how dev teams are organized)
installation (what need to be installed on a machine that the system runs on)
execution (how are components executed on certain CPUs)
3 characteristics of an arch structure abstraction
- specifically omits info about elements that is not useful for reasoning (thinking about) the system as a whole
- omits info that has no ramifications outside of a single element
- suppresses certain info like private details of elements that solely pertain to internal implementation
Why do we have abstractions for architecture?
to tame the complexity of the system architecture
Definition of a view
a set of architectural structures and their relationships that a pertinent to a certain category of stakeholders
3 important questions in regards to allocation structures
- what processor does each software element execute on
- in what directories or files is each element stored during development, testing and system building
- what is the assignment of each software element to dev teams
5 types of module structures
decomposition structure
uses structure
layer structure
class (or generalization) structure
data model
5 characteristics of decomposition structures
- the units are modules that are related by the is-a-submodule of relation
- it shows how modules are decomposed into smaller modules recursively until the modules are small enough to be easily understood
- it determines the system’s modifiability, by assuring that likely changes are localized
- used as the basis for the project’s organization such as the documentation, and the integration and test plans
- units in this structure have names that are organization specific like “segment” or “subsystem”
3 characteristics of uses structures
- the units are modules (also possibly classes)
- the units are related by the uses relation
- is used to engineer systems that can be extended to add functionality, or from which useful functional subsets can be extracted
What does it mean for a unit of software to “use” another (e.g the two nits have a uses relation)
if the correctness of the first unit of SW requires the presence of a correctly functioning version of the second