Software Product Lines ¶
많은 조직에서 소프트웨어에 대한 긴 투자 회수 기간과 소프트웨어 생산예측 때문에 어려움을 겪고 있다.
Product lines은 비용절감과 복잡한 소프트웨어 생산 시간을 줄이기 위한 중요한 접근방식으로 부각되고 있다.
{{|
software product line은 정해진 방식으로 핵심 자산의 공통집합으로부터 개발되거나 특별한 시장 영역 또는 임무에 대한 특수한 요구를 만족시키는 공통적인 특징을 공유하는 소프트웨어 중심의 시스템 집합이다.
|}}
Product lines은 비용절감과 복잡한 소프트웨어 생산 시간을 줄이기 위한 중요한 접근방식으로 부각되고 있다.
{{|
software product line은 정해진 방식으로 핵심 자산의 공통집합으로부터 개발되거나 특별한 시장 영역 또는 임무에 대한 특수한 요구를 만족시키는 공통적인 특징을 공유하는 소프트웨어 중심의 시스템 집합이다.
|}}
Definition of Software Architecture ¶
A software architecture for a system is the structure or structures of the system, which comprise elements, their externally-visible behavior, and the relationships among them.
Issues addressed by an Architectural Design ¶
- Gross decomposition of a system into interacting components
- using rich abstractions for component interaction
- often using common design idioms/styles
- using rich abstractions for component interaction
- Emergent system properties
- performance, throughput, latencies
- reliability, security, fault tolerance, evolvability
- performance, throughput, latencies
- Rationale and assignment of function to components
- relates requirements and implementations
- relates requirements and implementations
- Envelope of allowed change
- load-bearing walls, limits of scalability and adaptation
- design idioms and styles
- load-bearing walls, limits of scalability and adaptation
Many views (perspectives) of Architecture ¶
- There are many possible views of software systems
- Module structures : code/implementation structures
e.g., class diagrams, work breakdown structures, "def-use" graph
- Deployment structures: physical/resources structures
e.g., processors, networks
- Run-time structures: system structure and behavior at run time
e.g., clients, servers, databases, instances of objects
- Module structures : code/implementation structures
- Each has its purpose in understanding the overall nature of a system
- Modules good for reasoning about maintenance
- Deployment good for reasoning about resources
- Run-time good for reasoning about system behavior
- Modules good for reasoning about maintenance
Why care about Software Architecture? ¶
- Understanding
- Precise definition of system
- Clarification of requirements
- Precise definition of system
- Analysis
- System-level analysis of critical properties (Performance, security, ...)
- System-level analysis of critical properties (Performance, security, ...)
- Construction - How to implement
- Blueprint for construction; basis for code generation
- Identify opportunities for reuse
- Blueprint for construction; basis for code generation
- Evolution
- Define allowable envelope of change, ensure that system invariants are not violated
- Define allowable envelope of change, ensure that system invariants are not violated
Elements of Architectural Descriptions: Systems ¶
- Components: define the locus of computation
- Examples: filters, databases, objects, ADTs
- Examples: filters, databases, objects, ADTs
- Connectors: mediate interactions of components
- Examples: procedure call, pipes, event broadcast
- Examples: procedure call, pipes, event broadcast
- Properties: specify information for construction & analysis
- Examples: signatures, pre/post conditions, RT specs, procotols, performance attributes
- Examples: signatures, pre/post conditions, RT specs, procotols, performance attributes
Elements of Architectural Descriptions: Styles ¶
- An architectural style defines a family of architecture instances including
- Component/connector types
- the vacabulary of architectural building blocks
- the vacabulary of architectural building blocks
- Constraints on how the building blocks can be used, including
- topological rules
- interface standards
- required properties
- topological rules
- Component/connector types
Taxonomy of Architectural Styles ¶
- Data Flow
- Batch sequential
- Dataflow network (pipes&filters)
acyclic, fanout, pipeline, Unix
- Closed loop control
- Batch sequential
- Call-and-Return
- Main program/subroutines
- Information hiding
ADT, object naive client/server
- Main program/subroutines
- Interacting processes
- Communicating processes
LW processes, distributed objects
- Event systems
implicit invocation, pure events
- Communicating processes
- Data-oriented repository
- Transactional databases
- Blackboard
- Transactional databases
- Data-sharing
- Compound documents
- Hypertext
- Compound documents
- Hierarchical
- Layered Interpreter
- Layered Interpreter
Styles: Questions to address ¶
- System Model
- What is the overall organizational pattern?
- What is the overall organizational pattern?
- Structure
- What are the basic components and connectors?
- What are the basic components and connectors?
- Computation
- What is the underlying computational model?
- How is control and data transferred between components?
- What is the underlying computational model?
- Properties
- Why is this style useful?
- What kinds of properties are exposed?
- Why is this style useful?
- Analyses
- What kinds of analysis does the style support?
- What kinds of analysis does the style support?
Software Architectures & Recent Trends ¶
- Product lines
- One architecture, many products
- Large-scale economies through reuse
- One architecture, many products
- Component-integration standards and frameworks
- e.g., Corba, COM, J2EE
- Defines an architecture
- e.g., Corba, COM, J2EE
- Systems of systems (put together systems, many other systems)
- Integrate many systems built by many organizations
- Requires an architecture to have effective integration
- Integrate many systems built by many organizations
- Ubiquitous Computing
- Heterogeneous devices and services
- Requires architecture for service discovery, naming, invocation (e.g., .NET)
- Heterogeneous devices and services
What should Software Architecture Engineers know? ¶
- Architectural Sytles ( know common styles -> how to use them )
- What are the main styles, and how to specialize/combine them.
- What are the main styles, and how to specialize/combine them.
- Product Lines
- What a product lines, and how to define one
- What a product lines, and how to define one
- Architectural Tradeoff Analysis (security/resource limitation)
- How to make tradeoffs between architectural alternatives.
- How to make tradeoffs between architectural alternatives.
- Architectural Design Reviews
- How to conduct a design review to determine if an architecture will satisfy its requirements
- How to conduct a design review to determine if an architecture will satisfy its requirements
- Documentation
- How to specify ana architecture accurately.
- The difference between different architectural viewtypes.
- How to specify ana architecture accurately.
Product Line Frameworks ¶
- Observation: most products are similar to others built before and to be built in the future
- Can achieve huge economies of production by
- defining the common, shared aspects
- providing reusable infrastructure to support these common aspects
- defining a way to specialize the framework for a particular product
- defining the common, shared aspects
- At the core of this effort one typically finds an architecture that establishes a common vision for the structure, content, and variability of products in the family
Component Integration Standards ¶
- The Problem: it is hard to make components developed by different parties work together
- One way to alleviate the problem is to get the parties to agree on certain standards of interoperability
- Often these are called component integration standards (or component frameworks)
- State of practice is to define this in terms of API conformance
- But "signature" conformance is not enough. Also care about
- orders of invocation
- assumptions about locus of control
- data representations
- synchronization conditions
- lookup/discovery/naming
- failure handling
- orders of invocation
Elements of Component Integration Standards ¶
- Rules about interfaces of components
- structure, content, required capabilities
- structure, content, required capabilities
- Rules of engagement
- the connectors: ways components interact
- the connectors: ways components interact
- Run time infrastructure to support interoperability
- often as an API to lower level communication services
- often as an API to lower level communication services
- Naming/discovery conventions
- often via a name registry
- often via a name registry
- Base of reusable assets
- component building blocks
- component building blocks
- System generation tools
- create running systems from descriptions of the parts
- create running systems from descriptions of the parts
From Requirements to Architectures ¶
- The problem: develop an architecture for a system or product family that satisfies critical system requirements
- Impediments
- Requirements specification is not a mature discipline
- Requirements may change frequently
- Requirements may not be fully known independently of a solution
- The need to develop a product line changes requires new processes for relating requirements and architectures
- Requirements specification is not a mature discipline
- Caveats
- This is an area of active research and change
- What we know represents only a partial solution
- Your mileage may vary
- This is an area of active research and change
Technique ¶
- Architectural Design Reviews
bring stakeholders together to determine feasibility of an architectural design to solve a particular problem
- Product-line Engineering/Commonality Analysis
identify common requirements of a group products
- Rules-of-thumb and Automated Design Guidance
codify criteria and guidance for choosing appropriate architectural designs
- Problem Frames
identify recurring structures of problems that lend themselves to methodological solutions
- Architecture-based Analysis
use analytic techniques to decide whether an architectural design will lead to a system that meets its requirements
Architectural Review ¶
- Complements normal design review process
- Prescribe guidelines for architectural description and rationale
- Define a process of formal airing of architecture that leads to list of issues that must be resolved
- May be done using corporate "design review boards" or by a product group itself
- Can be used to produce corporate architectural assets
- Checklists of issues that an architecture must consider
- Standard solutions to common domain-specific problems
- Case studies and examples
- Measurement of costs/benefits
- Checklists of issues that an architecture must consider
Tradeoff Analysis ¶
- Determining whether an architecture satisfies its requirements often involves
- Being very explicit about what the requirements really are
- Understanding where one has to make tradeoffs between different designs
- Applying formal analysis where possible to determine the consequences of an architectural choice
- Mediating between desires of different stakeholders
- Being very explicit about what the requirements really are
- These goals can be achieved by an architectural evaluation process
Architecture Description Languages ¶
- Each language and supporting tool set
- emphasizes different aspect of architecture
- is good for some things; bad for others
- emphasizes different aspect of architecture
- Examples
- Rapide events with simulation and animation
- Unicon emphasizing heterogeneity and compilation
- Wright formal specification of connector interactions
- Aesop style-specific arch design language
- Darwin service-oriented architectures
- SADL SRI language emphasizing refinement
- Meta-H arch description for avionics domain
- C-2 arch style using implicit invocation
- Rapide events with simulation and animation
Frontier 1 : Ubiquitous ¶
- Computers and information potentially everywhere
- Heterogeneous universe
- Desktops, mainframes, PDAs
- Smart appliances, Wearable computers, Sensors and actuators
- Desktops, mainframes, PDAs
- Not just keyboards: voice/gesture interfaces
- Heterogeneous universe
- Increasingly, systems must
- be composed of parts built by many organizations
- run continuously
- operate in environments where resources change frequently
- be usable by mobile users
- be composed of parts built by many organizations
Frontier 2 : Mobility ¶
- Use a variety of devices, with significant resource constraints
- We must do a better job of reducing user distraction, while enabling continuity of computation across environments
Frontier 3 : From Architecture to Code ¶
- How bridge the gap from Architecture to Code?
- Make sure the architecture is consistent with the implementation?
- Past approaches
- Formal refinement theory
- Not practical for most industrial developers
- Not practical for most industrial developers
- Code generation
- Not feasible for most systems
- Not feasible for most systems
- Build and check
- Hard to reverse-architect a system from code
- Hard to reverse-architect a system from code
- Formal refinement theory
- New approach: provide user with 2-tiered model
- Top tier captures abstract functionality
- Bottom tier captures implemenation dependencies
- Various manifestations
- Top tier captures abstract functionality