01_Why Software Architecture Flashcards
(32 cards)
What are small problems?
- can be solved by yourslef
- no formal qualification of the constructor needed
- Client and constructor are the same person -> Who would complain?
Example: Own Birdhouse etc.
What are medium-size problems?
- Skilled craftsmen can solve them
- not too muc formal knowledge necessary
- can be done without large planning
- experience (mostly) replaces technology
Example: Housework
What are complex problems?
- to besolved by cooperation of specialists
- needs a formal approval / certificate necessary
- needs experience, technology, design methodology and planning skills required
Example: Airplane
Around how many lines of code are needed so that software architecture becomes necessary?
Projects larger than 30.000 lines of code
What is the motivation of Software architecture?
Increasing Role of Software:
- Core part of Businesses
- Core part of products
Therefore:
- Higher risk,
- complexity (limitation of the brain, shortterm memory can save 7+-2 information) and
- economy due to increasing role of software
How to manage complexity?
We want to create uniform structures:
- easier to comprehend
- easier to remember
- easier to associate
What are methods to create manage complexity?
Chunking:
- Modularity
- Information Hiding
- Encapsulation
- Separation of concerns
- Responsibilities
Hierarchy:
- Abstraction (details in lower part of hierarchy)
- Decomposition (parting things)!!!
- Generalization
- Non-cyclic relations (tree)
Patterns:
- conceptual integrity
- consistency (use patterns in same way)
- uniformity (same structure)
- simplicity
What are the risks that projects might fail?
- tasks need more time
- things don’t work
- unexpected effects
- goals not met (Performane issues, technology changes)
- deadlines not met
- customer unsatisfied
-Investment lost
How can we manage risks?
Risk resolution:
- early assesment
- measures for resolution
- resolve biggest risks first
- accumulate and benefit from experience
Project Management:
- divide and conquer: packages and tasks
- work division and specialization
- incremental work
- goal-oriented optimization
How to achieve economic success?
Customer: Fulfill requirements: -Functions, business processes -System quality: scalability, usability... -in-time delivery
Provider: Achieve satisfaction: -plannable: predict effort & quality -efficient: avoid rework -evolution: accumulate knowledge
What are the reasons Why Software Architecture is important?
- Inhibiting or Enabling a System’s Quality Attributes (hard to change)
- Reasoning About and Managing Change
- Early Prediction of System Qualities
- Enhancing Communication Among Stakeholders (abstraction needed)
- Earliest Design Decisions (weight of a decision)
- Defining Constraints on an Implementation
- Influencing the Organizational Structure (important for communication)
- Enabling Evolutionary Prototyping
- Improving Cost and Schedule Estimates
- Transferable, Reusable Model
- Using Independently Developed Components
- Restricting Design Vocabulary (reduce number of terms, achieve abstraction e.g. domain concept)
- Basis for Training (onboarding new people)
Definition Software Architecture from Bass et. al.
The software architecture of a system is the set of structures needed to reason about the system, which comprise software elements, relations (and behaviour) among them, and properties of both.
Definition Software Architecture from Taylor
A software system’s architecture is the set of principal design decisions about the system
Definition Software Architecture from Shaw and Garlan
Software architecture [is a level of design that] involves –the description of elements from which systems are built,
–interactions among those elements,
–patterns that guide their composition, and
–constraints on these patterns.
Definition ISO42010 Systems and software engineering —Architecture description
⟨system⟩ fundamental conceptsor propertiesof a system in its environment embodied in its elements, relationships, and in the principlesof its design and evolution
Definition Software Architecture by M. Voelter (focusing on evolution)
Software architecture is all those aspects of a system that we want to be consistent throughout the system for reasons ranging from meeting nonfunctional requirements to technology best practices to maintainability to developer training.
What are the 3 architectural structures and views?
Module structures:
- module=implementation unit
- responsibilities are relations to requirements
- about static relationships/structure
Component-connector (C&C) structures:
- component-connector=runtime unit
- interaction between runtime (=components) entities
- is about behavior
- about the dynamic relationships
Allocation structures:
- how to develop the structures
- it is needed to perform a mapping:
1) mapping to hardware elements e.g. processors -> deployment
2) mapping to workpackages
What does module structure includes?
- decomposition structure (breaking things into parts)
- uses structure (between modules, e.g. call import)
- Layer structure (modules are layered)
- Class/Generalization structure (not that important for Software architecture as decomposition)
- data model
What does component-connector structure includes?
- service structure (parts may serve as services)
- concurrency structure (parallelity /sequence of structure plays important role)
What does Allocation structures includes?
- deployment structure
- implementation structure
- work assignment structure (workpackages)
What is a Structure?
Set of (architectural) elements with relations
E.g. Allocation structure:
-Deployment of components to compute units
What is a View?
Representation of this set with relations for system stakeholders (like a diagram)
E.g. Allocation View:
-UML Deployment diagram
What is Behavior in the architecture context?
- how elements interact (structure and relation) with each other
- we want to structure functionality and behavior
Definition of Architectural Patterns?
Solutions to recurring problems:
- Compositions and structures found useful (over time, over different domains)
- documented and disseminated (verbreitet)
- packaged strategies
- reuse of knowledge