01_Why Software Architecture Flashcards
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