Ask 5 Software Architects for a definition of Software Architecture and you'll get 10 definitions. However definition important to understand responsibilities, skills requirements and activities. Furthermore, separation of Software Architecture and Application Design has many practical benefits.
2. 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 be
applied across
Buildings: The art and science of designing and erecting buildings.
City:
Organizations:
Software: ???
. . .
3. Software Architecture
The purpose of architecture
Propose: Purpose of Architecture
To provide the specification of an appropriate software infrastructure
within which application functionality is specified, deployed and
executed, 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, system
functionality design, . . .
4. Software Architecture
Questions addressed by software architecture
Questions addressed by software architecture
1 What are the architectural components and what are their
responsibilities?
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?
5. 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?
6. Software Architecture
What is software architecture?
Definitions of software architecture
Many widely different definitions
No general consensus
5 architects = 7 definitions.
SEI has collected over 300 definitions.
No such problem in buildings architecture, quality assurance,
programming, . . .
7. Software Architecture
What is software architecture?
Definitions of software architecture
Different Between Software Architecture Definitions
Commonalities
components and connectors
Differences
Differ in what they specify
Whether 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 included
whether strategies/tactics are relevant (Aspect-Oriented ADLs)
Different definitions
Supported by different ADLs
8. 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.
9. 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 software
system is designed & developed
ISO/IEC 42010:2011, Ran, . . .
New version of IEEE 1471 (Oct 2011)
Many definitions
focus on components,
not on what software architecture semantically is.
Need to separate definition from components.
10. 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 & application
design?
Is it simply a matter of granularity.
Multiple views, e.g. Kruchten 4+1:
logical view → functionality provided to end user
class, component & sequence diagrams
development view → system modularization
package & component diagrams
process view → system processes
activity diagrams
physical view → physical deployment & physical connections
deployment diagrams
use case views → representative use cases & scenarios
use case & sequence diagrams
Architecture and technology neutral application design
typically not supported
View of deploying same functionality into different architectures.
11. Software Architecture
What is software architecture?
Definitions of software architecture
SA = Structure & externally visible properties of
software system
Definition (SEI, IEEE-1471)
Structure or structures of system which comprise software elements, their
externally visible properties, and the relationships amongst them.
Does not focus on application functionality
Main focus = structure:
Components & relationships
supported by most ADLs.
Secondary focus on properties = quality attributes
But 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 excluded
Architectural or application component? — How do we know?
12. Software Architecture
What is software architecture?
Definitions of software architecture
SA = Fundamental concepts & constraints within
which software system is designed & developed
Definition (ISO/IEC 42010:2011)
fundamental concepts or properties of a system in its environment
embodied in its elements, relationships, and the principles of its design
and evolution
Fundamental concepts:
services & pipes for SOA,
components & entities for Java-EE
commonly in form of architectural patterns
layering, pipes & filters, mikrokernel, blackboard, . . .
Constraints:
services must be stateless, self-healing, . . .
also includes components & relationships.
No strategies/tactics.
13. Software Architecture
What is software architecture?
Reference architectures
Reference Architectures, Frameworks & Instance
Architectures?
Definition
Domain-specific architectural template which aims to address
architectural concerns for a particular class of problems.
specifies infrastructure to address common architectural concerns for
that 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 frameworks
JBoss, Apache Geronimo, . . . ,
Arctic Core, Continental Engineering Services, . . .
Apache Axis, Open-ESB, . . . ,
Gigaspaces, . . .
Instance architecture
May or may not be based on reference architecture and framework.
14. 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
19. 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
stateless
self-healing
published
implements services contract
independent/re-usable
20. Software Architecture
What is software architecture?
Reference architectures
Insights from reference architectures
Architectural vs functional components
do they address application functionality, or
non-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 structure
Strategies/tactics
Concepts, structure & constraints for both
architectural components, and
application logic components,
but only architectural components defined.
21. Software Architecture
What is software architecture?
Definition of software architecture
Definition of software architecture
Definition
Software architecture is the specification of the software infrastructure
within which application logic providing user functionality can be
specified, deployed and executed.
Application functionality
addresses functional requirements for application users
Architecture
addresses non-functional requirements
22. Software Architecture
What is software architecture?
Components of software architecture
Components of a Software Architecture
Across levels of granularity
1 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
Adapters
this includes access channels
GUI = human adapter.
4 Concepts & constraints within which application logic is to be
specified
e.g. service, content based router, . . .
23. 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 components
providing user functionality
which 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 of
reliability,
providing an infrastructure for flexible, maintainable, application
development, and
providing an infrastructure for reliable, efficient and auditable process
execution.
24. Software Architecture
What is software architecture?
Pure application code
Pure Application Code
Application developers should be able to
focus on developing application functionality
leave technical concerns to software architecture.
e.g. “plumbing code”
mapping onto persistence infrastructure
integration (marshalling/demarshalling, request routing, . . . )
thread pooling, object caching, authorization, . . .
Address non-functional requirements.
Application functionality should be devoid of “plumbing code”.
25. 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 annotations
e.g. in Java-EE architecture taken out of code as of EJB 3.0.
Applications, at times,
annotated with meta-data for different architectures
deployed into different software architectures
e.g. Spring and Java-EE
26. 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 functional
requirements of the user (application)
Infrastructure within which functionality is developed, deployed and
executed.
Concepts, patterns, strategies
But, to implement strategies
We require functionality.
but the functionality designed addresses non-functional requirements,
not functional requirements of the user.
Can use URDAD
27. 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 = architecture
Specified 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 = developer
mapping entities onto some persistence technology,
performing role-based authorization,
providing a handle to the transaction manager, . . .
Architectural requirements
portability
access to system resources (threads, memory, . . . )
May decide to use bridge (JRE)
29. Software Architecture
Wish list
Wish List
Formalization of architecture methodology
Similar to URDAD
With DSL for methodology.
Usable ADL
Requires support for
Components & connectors.
Infrastructure constraints in the form of structural patterns.
Architectural strategies.
Specification of concepts & constraints for application components.
Tool support.
31. 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 architecture
technicalities around developing the software architecture.
includes identifying training needs within the development team.
Liase with client to ensure software architecture aligned with
business architecture