What is software architecture?

Post date: Jan 14, 2019 9:36:43 PM

There is no agreed definition of "architecture" in the IT industry. The subject was researched and introduced primarily at institutes likes SEI CMU and many authors contributed in definition of the discipline, later some of the organizations like IEEE tried adopting the subject and came up with some definitions. In this case we can't ignore authors, researchers, those organizations but this creates problem of no single standard. Industry and practitioners at the other hand had been coining their own terms due to lack of single standard body, and in practice it takes shape based on needs of various organizations in the industry.

Simple definition of software architecture?

In simple words software architecture is organization of a system, its components, their relationship with each other and the environment around it.

This organization of the system is driven by some principles based on which design of the system is achieved and these principles are used to evolve the system.

System may be set of applications or a subsystem or systems of sub systems or whole organisation. Environment influences the system. System contributes in fulfillment of one or more objectives of stakeholders. Stakeholder may be an individual, group of people or an organization who have interest in the system.

Components in software architecture

Formal definition of component with respect to architecture is not strictly defined so it can be logical or physical, coarse grained or fine grained, technology specific or technology neutral. UML standard has a definition of a component with respect to UML scope. I recommend (and in practice the way people use it) to consider components as basic building blocks of a system and these building blocks may fulfill a set of features or cover specific aspect of the system in question (this aspect may be related to functional or non-functional requirements). Why I hesitate to take lower level technology specific artifacts as components at architecture level is because if they are considered here what will be the difference between scope of architecture and design.

Prescriptive, descriptive and and implemented architecture

There are three context in which word architecture is mentioned:

1. Prescriptive

When architecture of a system going to be developed is defined. In this case what is produced should be considered as blueprint of target architecture. Often people are confused with the term and consider diagrams or a document as architecture but that is not the case. A document or diagram provides a way to communicate the target architecture but the architecture is structure of a system which is built. During identifying target architecture of a new system or system under transformation, important decisions are to be taken and documented in the document often called Software Architecture Document. This is the blueprint of the target architecture. Some authors call is prescriptive architecture because a target architecture is prescribed.

2. Descriptive

When architecture of an existing system is defined in a document, it is called descriptive architecture because it describes architecture of an existing system. A prescriptive architecture document may become descriptive if it is in sync with the system evolution and system is built, at that time an existing document describing its architecture is considered as descriptive or as is architecture document.

3. Architecture of a system in running state

Architecture of an existing system or actual system structure with its behaviors and attributes and this is what is prescribed or described in the documents. This is actual architecture like we see in monuments and buildings. Even if there is no document, architecture of a system exists.

Enterprise Architecture and other terms

There are couple of terms which have word architecture with them:

Enterprise Architecture, Segment Architecture, Solution Architecture

Enterprise Architecture, Solution Architecture, Technology Architecture

Enterprise Architecture, Business Architecture, Application Architecture, Data Architecture, Technology Architecture

Information Architecture and Information System Architecture.

These terms are often used with Enterprise Architecture, scope of which is wider than software architecture. It is not limited to information technology or software but EA covers whole enterprise its vision, business, people, processes and IT is any.

When it comes to standard, the first well known standard in the field of software architecture and system architecture was IEEE 1471, approved in 2000. Latest version of it is known as ISO/IEC/IEEE 42010:2011

Software architecture key drivers

Architecture drivers are those key factors which influence architecture of the system.

    • Functional requirements

    • Constraints (business and technical), and

    • Quality attributes

Constraints are design decisions already made for the designers:

Examples of business constraints can be: Targeted market, time to market, cost, schedule constraints, human resources

Examples of technical constraints can be: An existing system to integrate the current system with, compatibility with older versions of software, operating system, existing hardware, network, software products, protocols, interfaces and standards. Constraints are those factors you don't have control up on and you will have to define the architecture considering limitations put forward by these constraints.

Note: A side note about architecturally significant requirements: there are various sources of them such as requirement document itself, captured from a stakeholder from an interview or workshop and business objectives.

Interesting resources

https://resources.sei.cmu.edu/library/asset-view.cfm?assetID=513862

(Views and beyond SEI CMU Template for SAD)

http://www.iso-architecture.org/42010/

https://resources.sei.cmu.edu/asset_files/TechnicalNote/2005_004_001_14498.pdf

(Comparison of Views & beyond template and ANSI-IEEE 1471-2000)

https://resources.sei.cmu.edu/asset_files/TechnicalNote/2003_004_001_14171.pdf

(Documenting Software Architecture in an Agile world)

http://www.informit.com/articles/article.aspx?p=2738304&seqNum=4

http://www.neverletdown.net/2014/10/architectural-drivers.html

https://www.slideshare.net/NghiaLe36/architectural-driver

https://www.linkedin.com/pulse/software-architecture-drivers-konstantinos-bakopanos/

Software Architect Handbook (https://books.google.co.in/books?id=6EZsDwAAQBAJ)

http://www.cs.uu.nl/docs/vakken/ie/ppts/ICTE06-Architecture.pdf