In software development the term architecture is associated with the overall structure of a software system or, at a higher level, a family of software systems. For this course, we will adopt the following definition, taken from Bass et al (2012).
The software architecture of a system is the set of structures needed to reason about the system, which comprise software elements, relations among them, and properties of both.
It is important to understand the software architecture because it tells the developer, among other interested parties, about the overall shape of the actual or proposed software system. It explains how the development team can use various technologies to construct or assemble a software system.
Software requirements come in all shapes and sizes, so developers need to consider what the most appropriate process to develop an architecture is for a given context. Choosing a software architecture, or at least part of it, is one of the earliest decisions a development team has to make. There is always something that can be called a software architecture, whatever software system is being developed. Even a basic software system has an architecture.
Architecture serves as a main guide for developers but it is also of importance to other stakeholders in software development, all of whom will have different concerns about the software. For example:
- users may be concerned with how easy it is to use and learn
- the customer is interested in how much it will cost and when it will be delivered
- software maintainers will be thinking about how easy it is to modify and understand the repercussions when a change is required to one of the modules.
The architecture will therefore embody many decisions that will affect how the concerns of the many stakeholders are dealt with. It will also serve as an important means of communication between the different groups of stakeholders. It is the role of the software architect to balance these different concerns and reach compromises among competing concerns.
Activity 6 Architecture
Suggest some similarities and differences between software architecture and building architecture.
They are both abstractions of the structure of a system. They represent decisions that will affect concerns of different stakeholders. They are used as a communication vehicle with different stakeholders.
Changing a building once complete is expensive, whereas changing details or internal decoration is quite cheap but may incur costs in wastage in materials. Software has different properties from building components, in particular its malleability and complexity. Reworking the whole architecture of a software system is also expensive because of the complexity involved – making internal changes does not incur costs in wastage of materials, as software is malleable, but it incurs other costs in terms of time and work invested.