SWBR | Beautiful Architecture | What is Architecture ?
Chapter One : What is Architecture - John Klien, David Weiss
We speak of the “architecture” of a symphony, and call architecture, in its turn, “frozen music” –Deryck Cooke, The Language of Music
Architecture : “The art or science of building; esp. the art or practice of designing and building edifices for human use, taking both aesthetic and practical factors into account” –The Shorter Oxford English Dictionary, fifth edition, 2002
The architecture of a computer system we define as the minimal set of properties that determine what programs will run and what set of properties that determine what programs will run and what results they produce. –Gerrit Blaauw & Fredrick Brooks, Computer Architecture
This chapter introduces the reader to concepts of architecture and how it is perceived in different discipline, it enlightens the reader so that he can find the find the common thread running in all of the different meanings of architecture. It also talks about the Architect who provides solutions for problems, assuring the clients that the built system has required properties and behaviors.
In summary good architecture exhibits conceptual integrity, that is, it comes equipped with a set of design and in-system verification.
Good architecture has the following characteristics.
- Expected functionality
- Safe to build on the required schedule
- Performs adequately
- Conforms to legal standards
- Outlast its predecessors and its competitors.
It is difficult for a complex system to perfectly satisfy all of the above characteristics and the architecture is game of trade-offs. A decision that improves one of these characteristics often diminishes the another. The architect must determine what is sufficient conditions to satisfy, by discovering the important concerns for a particular system and considerations for satisfying them.
Structure, is the basic notation of architecture, each Structure is defined by Components of various sorts and their relations: how they fit together, invoke each other, communicate, synchronise, and interact. The benefit of Structure is that it helps to handle the complexity in order to ensure that resulting system has the required properties. Structures provide ways to understand the system as sets of interacting components. Each structure is intended to help the architect understand how to satisfy particular concerns such as changeability or performance.
The Role of Architect
Here is brief about the role of architect, irrespective of the discipline.
- Meet the needs of the client
- Has conceptual integrity by using the same design rules throughout
- Meets legal and safety requirement
- Ensure design concepts are consistently realized during implementation
- Mediate between the builder and client
The role of software architect is different from other disciplines because of the following reasons.
- Lack of traditions
- Intangible nature of the product
- Complexity of the system
Creating a Software Architecture
It is important to note that in Software architecture, quality concerns comes first before the functionality. To meet the quality concerns the software architect must get the stake holders buying.
The stakeholders are:
- Funders, who want to know if the project can be completed within resource and schedule constraints
- Architects, developers and testers, who are first concerned with initial construction and later with maintenance and evolution
- Project Managers, who need to organise teams and plan iterations
- Marketers, who may want to use quality concerns to differentiate the system from competitors
- Users, including end users, system administrators, and people who do installation, deployment, provisioning and configuration
- Technical support staff, who are concerned with number of complexity of Help desk calls.
The Architect should understand the stakeholders quality concerns and then consider the trade-offs necessary. This invokes understanding the requirements and prioritising quality concerns and constraints.
The challenge for an architecture team is to maintain a single-mindedness and single philosophy as they go about creating the architecture. Keep the team as small as possible, work in a highly collaborative environment with frequent communication and have one or two ‘chief’s act as benevolent dictators with the final say in all decisions. The architect have to address the following concerns.
- Functionality : What functionality does the product offer to its users?
- Changeability : What changes may be needed in the software in the feature, and what change are unlikely and needed not be especially easy to make in the future?
- Performance : What will the performance of the product be?
- Capacity : How many users will use the system simulate, how much data will system need to store for its users?
- Ecosystem : What interactions will the system have with other systems, where it is deployed?
- Modularity : How is the task of writing the software organised into work assignment, particular modules that can be developed independently and suit each others precisely and easily?
- Buildability : How can the software be built as a set of components that can be independently implemented and verified? WHat components should be reused from other products which should be acquired from external suppliers?
- Producibility : If the product will exist in several variations, how can it be developed as product line, taking advantage of the commonality among the versions, and what are the steps by which products in the product line can be developed? What investment should be made in creating a software product line? What is the expected return from creating the options to develop different members of the product line? In particular, is it possible to develop the smallest minimally useful product first and then develop additional members of the product line by adding/subtracting components without having to change the previously written code?
- Security : If the product requires authorization for its use or must restrict access to data, how can security of data be ensured?
An architect who is handling the complex system should address the above quality concerns by organizing the complex system into structures, each defining specific relations among certain types of components. The architect’s chief focus is to organize the system so that each structure will address the above concerns.
There are four main structure that an architect can use to address the concerns of the complex system, these structures are
- The Information Hiding Structures
- The Uses Structures
- The Process Structures
- Data Access Structures
The Information Hiding Structure
The Information Hiding modules are the primary component of the this structure, where each module is a work assignment for a group of developers and each modules embodies a design decision. If the decision can be changed in the module without affecting other modules, then it is known as the secret. The different modules interact with each other via set of interfaces. The module may contain one more programs and two programs are included in the same module only if they share the secret.
The Information Hiding Structures should be designed so that they satisfy Changeability, Modularity and Buildabiliy
The Uses Structure
The Uses Structure has component that are programs that may be invoked independently. The invocation can be made either at compile time or at run time. The Uses Structure determines what working subsets can be built and tested. A desirable property in the Uses Relation for a software system is that it defines a hierarchy, to make sure there are no loops in it. When there is a loop in the Uses Relation, all programs in the loop must be present and working in the system for any of them to work.
The Uses Structure address the Producibility and Ecosystem.
The Process Structure
The Process Structure’s components are Processes. Processes are run-time sequences of events that are controlled by programs. Each Processes executes as part of one or many processes. The sequence of events in one Processes proceed independently of the sequence of events of another Process, except when the Processes synchronize with each other. Processes are allocated resources, like memory and processor time. Processes are the components of several distinct relations. The Performance Structure address the following concerns Performance, Capacity and Changeability.
Data Access Structures
The Data Access Structure deals with partitioning the data into segments and also defining the scope of data to the given program. This structure has two kinds of components, programs and segments. This address the concern of Security.
Examples of Beautiful Architecture
- A-7E On board Floght Processor developed at Navel Research Laboratory (pdf link)
- Lucent 5ESS Telephone Switch
- World Wide Web (WWW) created by Tim Berners-Lee
- Unix Operating System