what is software architecture?
TRANSCRIPT
Software Architecture
Software Architecture
Fritz Solms
November 7, 2014
Software Architecture
Is architecture a common concept?
Is Architecture a Common Concept?
We talk of architecture of
buildings, cities, organizations, equipment, software, education,novels, . . .
Can we find a common definition for architecture which can beapplied across
Buildings: The art and science of designing and erecting buildings.City:Organizations:Software: ???. . .
Software Architecture
The purpose of architecture
Propose: Purpose of Architecture
To provide the specification of an appropriate software infrastructurewithin which application functionality is specified, deployed andexecuted, such that
1 the required access and integration channels are available
e.g. to humans, machines (trains, software systems, . . . )2 the infrastructural concerns or responsibilities are addressed
e.g. to transport people, to store information, to provide resources,. . .
3 the required quality attributes can be provided
e.g. scalability, reliability, security, performance, integrability,monitorability, auditability, flexibility, portability, deployability, . . .
Architecture addresses non-functional requirements.
Application Design addresses the functional requirements.
e.g. business process design, domestic process design, systemfunctionality design, . . .
Software Architecture
Questions addressed by software architecture
Questions addressed by software architecture
1 What are the architectural components and what are theirresponsibilities?
2 How do the architectural components communicate?3 How will the system handle the number of concurrent users?4 How will authentication, authorization, confidentiality be enforced?5 How will we ensure reliability and fail-over safety?6 Does the software architecture support pluggability, to what extend
and how?7 Is logging supported by the software architecture, and if so, how?8 What frameworks, technologies, protocols, . . . , will be used?9 How does the software architecture support monitorability and
auditability?10 How does is the system deployed or ported?11 How is maintainability supported. Can the system support life
maintenance, and if so, how?12 How is high-performance achieved?13 What frameworks and technologies are used and why?
Software Architecture
What is software architecture?
Suggestions?
What is Software Architecture?
Suggestions?
What is the purpose of software architecture?
i.e. what are the responsibilities of software architecture?
Software Architecture
What is software architecture?
Definitions of software architecture
Many widely different definitions
No general consensus5 architects = 7 definitions.
SEI has collected over 300 definitions.
No such problem in buildings architecture, quality assurance,programming, . . .
Software Architecture
What is software architecture?
Definitions of software architecture
Different Between Software Architecture Definitions
Commonalities
components and connectors
Differences
Differ in what they specifyWhether only high level or across levels of granularity
Where is the boundary?
Separation of architectural and application responsibilities
distinguish betw architectural and application components
whether functionality/processes includedwhether strategies/tactics are relevant (Aspect-Oriented ADLs)
Different definitions
Supported by different ADLs
Software Architecture
What is software architecture?
Definitions of software architecture
Choice of definition affects everything
Responsibilities and skills requirements for software architects.
The contents of the architecture requirements specification.
How we design an architecture.
How we document it.
How we evaluate/validate it.
Software Architecture
What is software architecture?
Definitions of software architecture
3 Classes of Software Architecture Definitions
3 classes:1 High-level abstraction of software system.
Fowler, Nagl, . . .2 Structure & externally visible properties of software system
IEEE-1471:2000, Bass-Clements-Katzman (SEI), . . .Perhaps definition which is currently most widely used.
3 Fundamental concepts & constraints within which softwaresystem is designed & developed
ISO/IEC 42010:2011, Ran, . . .New version of IEEE 1471 (Oct 2011)
Many definitionsfocus on components,
not on what software architecture semantically is.
Need to separate definition from components.
Software Architecture
What is software architecture?
Definitions of software architecture
SA as High-Level Abstraction of Software System
What is high level?Where is the boundary?
If one starts with a component, is there still architecture?How do we know?
Is there any difference between architecture & applicationdesign?
Is it simply a matter of granularity.
Multiple views, e.g. Kruchten 4+1:logical view → functionality provided to end user
class, component & sequence diagramsdevelopment view → system modularization
package & component diagramsprocess view → system processes
activity diagramsphysical view → physical deployment & physical connections
deployment diagramsuse case views → representative use cases & scenarios
use case & sequence diagrams
Architecture and technology neutral application designtypically not supported
View of deploying same functionality into different architectures.
Software Architecture
What is software architecture?
Definitions of software architecture
SA = Structure & externally visible properties ofsoftware system
Definition (SEI, IEEE-1471)
Structure or structures of system which comprise software elements, theirexternally visible properties, and the relationships amongst them.
Does not focus on application functionality
Main focus = structure:Components & relationshipssupported by most ADLs.
Secondary focus on properties = quality attributesBut is architecture the properties
or is it the tactics used to realize those properties?
Does not really allow for levels of granularity
Still no clear guideline for boundary between architecture &application design
though separation not excludedArchitectural or application component? — How do we know?
Software Architecture
What is software architecture?
Definitions of software architecture
SA = Fundamental concepts & constraints withinwhich software system is designed & developed
Definition (ISO/IEC 42010:2011)
fundamental concepts or properties of a system in its environmentembodied in its elements, relationships, and the principles of its designand evolution
Fundamental concepts:
services & pipes for SOA,components & entities for Java-EEcommonly in form of architectural patterns
layering, pipes & filters, mikrokernel, blackboard, . . .
Constraints:
services must be stateless, self-healing, . . .
also includes components & relationships.
No strategies/tactics.
Software Architecture
What is software architecture?
Reference architectures
Reference Architectures, Frameworks & InstanceArchitectures?
Definition
Domain-specific architectural template which aims to addressarchitectural concerns for a particular class of problems.
specifies infrastructure to address common architectural concerns forthat domain.Examples:
Java-EE for enterprise systems,AUTOSAR for vehicular software,SOA for integrating many systems,Space-Based for systems requiring complex decision making,
Implementing frameworksJBoss, Apache Geronimo, . . . ,Arctic Core, Continental Engineering Services, . . .Apache Axis, Open-ESB, . . . ,Gigaspaces, . . .
Instance architectureMay or may not be based on reference architecture and framework.also known as defined architecture
Software Architecture
What is software architecture?
Reference architectures
A Reference Architecture is Pure Architecture
Has no application functionality.Java-EE does not specify any aspects specific to
banking, retail insurance, . . .but can deploy banking, retail or insurance application into Java-EE
AUTOSAR does not contain elements for
controlling braking systems or engines,but can deploy applications for monitoring and controlling those.
Addresses only non-functional requirements of users.
Can use them to reverse engineer what architecture really is.
Even have concrete implementations of “pure” architectures
frameworks
Software Architecture
What is software architecture?
Reference architectures
Java-EE: Overview
Software Architecture
What is software architecture?
Reference architectures
Java-EE: 1st level of granularity
Component = Application server
Core responsibilities:1 Provide access to users (human & system)
→ web container2 Infrastructure for processing business logic
→ EJB container3 Integrate with backend providers (e.g. persistence).
→ JPA persistence context (O/R mapper)
Addresses quality requirements for enterprise systems:
Reliability, scalability, security, integrability, flexibility
Structural pattern:
Layering
Tactics/Strategies:
clustering, interception
No application components hosted at this level of granularity.
Software Architecture
What is software architecture?
Reference architectures
Java-EE: 2nd level of granularity
Components:
Web container, EJB container & JPA Persistence context
Patterns:
MVC, controller & layering
Tactics/strategies:
caching, resource reuse, interception, . . .
Application logic components:
Web container: facelets, backing & binding beansEJB container: stateless & stateful session beansPersistence context: entities
Software Architecture
What is software architecture?
Reference architectures
SOA: Overview
Software Architecture
What is software architecture?
Reference architectures
SOA: 2nd level of granularity
Focus on process execution engine:
Strategies/tactics:
clustering, messaging, thread pooling, . . .
Application logic concepts & constraints:Pattern:
Pipes and filters
service
statelessself-healingpublishedimplements services contractindependent/re-usable
Software Architecture
What is software architecture?
Reference architectures
Insights from reference architectures
Architectural vs functional components
do they address application functionality, ornon-functional requirements/architectural responsibilities
Need to specify architecture across levels of granularity.Architectural responsibilities.
includes providing access and integration channels
Pattern for each level of granularity constraining structureStrategies/tactics
Concepts, structure & constraints for both
architectural components, andapplication logic components,
but only architectural components defined.
Software Architecture
What is software architecture?
Definition of software architecture
Definition of software architecture
Definition
Software architecture is the specification of the software infrastructurewithin which application logic providing user functionality can bespecified, deployed and executed.
Application functionality
addresses functional requirements for application users
Architecture
addresses non-functional requirements
Software Architecture
What is software architecture?
Components of software architecture
Components of a Software Architecture
Across levels of granularity1 Set of architectural responsibilities and components to which
these are assigned.providing access and integration channels,providing a computational environment,providing a persistence infrastructure,domain specific architectural responsibilities
addressing architectural responsibilities,structural constraints
commonly in form of patterns,
integration channels between them.2 Architectural strategies
used to concretely address quality requirements.3 Integration channels to environment
Adaptersthis includes access channelsGUI = human adapter.
4 Concepts & constraints within which application logic is to bespecified
e.g. service, content based router, . . .
Software Architecture
What is software architecture?
Typical responsibilities of architecture
Typical Responsibilities of Software Architecture
The purpose of software architecture is to
provide a suitable infrastructure for application componentsproviding user functionalitywhich addresses the non-functional requirements.
Typical examples of responsibilities include
providing access and integration channels to humans and systems,managing resources effectively to achieve cost-effective scalability,enforcing security including confidentiality, authentication,authorization and non-repudiation,provide fail-over safety across all components to ensure a level ofreliability,providing an infrastructure for flexible, maintainable, applicationdevelopment, andproviding an infrastructure for reliable, efficient and auditable processexecution.
Software Architecture
What is software architecture?
Pure application code
Pure Application Code
Application developers should be able to
focus on developing application functionalityleave technical concerns to software architecture.e.g. “plumbing code”
mapping onto persistence infrastructureintegration (marshalling/demarshalling, request routing, . . . )
thread pooling, object caching, authorization, . . .
Address non-functional requirements.
Application functionality should be devoid of “plumbing code”.
Software Architecture
What is software architecture?
Architecture neutral design and implementation
Architecture-Neutral Design & Implementation
URDAD
method for architecture and technology neutral application design
Modern technologies:movement to take architecture our of code
into metadata often specified as annotationse.g. in Java-EE architecture taken out of code as of EJB 3.0.
Applications, at times,
annotated with meta-data for different architecturesdeployed into different software architecturese.g. Spring and Java-EE
Software Architecture
What is software architecture?
Interplay between architecture and application design
Interplay between Architectural and Application Design
The architecture does not address any of the functionalrequirements of the user (application)
Infrastructure within which functionality is developed, deployed andexecuted.Concepts, patterns, strategies
But, to implement strategiesWe require functionality.
but the functionality designed addresses non-functional requirements,not functional requirements of the user.
Can use URDAD
Software Architecture
What is software architecture?
Architecture as a matter of perspective
Architecture is a matter of perspective
If we, say, design a banking system
Java-EE/Spring/SOA/Space-Based architecture = architectureSpecified to address non-functional requirements
incl integration requirements.
Defined architecture based on application server, . . . = architecture.
If my job is to design a framework (e.g. an application server)application design addressing user’s functional requirements.
User = developermapping entities onto some persistence technology,performing role-based authorization,providing a handle to the transaction manager, . . .
Architectural requirements
portabilityaccess to system resources (threads, memory, . . . )May decide to use bridge (JRE)
Software Architecture
The bigger picture
The bigger picture
Software Architecture
Wish list
Wish List
Formalization of architecture methodology
Similar to URDADWith DSL for methodology.
Usable ADLRequires support for
Components & connectors.Infrastructure constraints in the form of structural patterns.Architectural strategies.Specification of concepts & constraints for application components.
Tool support.
Software Architecture
Software architecture in the context of MDD
Software Architecture in Context of MDD
Software Architecture
Responsibilities of software architecture
Responsibilities of Software Architecture?
Assist client to specify architecture requirements.
Design and document a software architecture
Validate existing and proposed software architectures
Assist with non-functional testing
Recover software architectures
Evolve architectures / re-architect
Ensure software architecture compliance
Assist developers to understand
rationale behind the software architecturetechnicalities around developing the software architecture.
includes identifying training needs within the development team.
Liase with client to ensure software architecture aligned withbusiness architecture