The primary objective of this document is to provide a standard format for the designing of architecture for any software. The first step in the Software development lifecycle is always requirement gathering as without that it is not possible to start building software. Requirement analysis will give an idea about the various aspects that are to be built into the system and these aspects are the building steps to the architecture of the system.
The Attribute Driven Design (ADD) method is an approach to defining a software architecture by basing the design process on the quality attributes the software has to fulfill. It is a recursive decomposition process where, at each stage in the decomposition, attribute primitives are chosen to satisfy a set of quality scenarios and then functionality is allocated to instantiate the component and connector types provided by the primitives. (Wojcik, R., Bachmann, F., Bass, L., Clements, P., Merson, P., Nord, R., & Wood, B. (2006))
The ADD approach is a straightforward and efficient way of defining an architecture and it facilitates consideration of every aspect of the architecture separately while decomposition. This makes it easier for modifications to occur while the architecture is being designed, allowing the formation of a more complete design.
As every system has its own set of requirements, they also have their own set of assumptions which refers to the various preconditions basing on which the entire SDLC is driven forward. It is absolutely necessary that all the preconditions are validated and checked with all the stakeholders in order to avoid rework and waste of resource.
As already mentioned, requirement gathering is the only step that can kick start the design and development of a system. Types of the requirement that are needed to be taken care of are:
- FUNCTIONAL REQUIREMENTS
- NON-FUNCTIONAL REQUIREMENTS
- PRIORITY REQUIREMENTS
It is good practice to prioritize all the requirements right at the beginning.
3.2 Design Constraints
Under this section, all the possible concerns related to the system can be discussed. For eg “ security concerns, performance overheads, memory constraints, etc.
3.3 Architectural Drivers
This is the section that discusses the major requirements of the system or in other words the requirements which have the most impact on the system. These requirements are known as architectural drivers and before deciding on a particular architectural design, it is absolutely crucial that these requirements are analyzed to see if a particular design is better suited to allow convenient implementation.
The requirement section should also validate and justify the use of a particular design over others to allow flexibility of the system as this facilitates the adoption of a new pattern or convenient combining of multiple patterns if required, without too much hassle.
4. Patterns Styles
Patterns and Styles are architectural design decisions concerning a specific problem and a development context respectively. Most systems consist of multiple styles and patterns instead of just one as this is more advantageous. Every aspect of the system is to be considered separately as well as together to make the perfect design decision about the patterns and styles to be used.
Representation of the various modules, components, and other elements of the system to be designed along with their relationships is taken care of in Views. All the stakeholders, developers and everyone involved in designing and implementing the system has a different way of visualizing the system and view models are used to create relevant representations for everyone involved. The 4+1 view model is most widely used and following are its various sections.
5.1 Logical View
The logical view is to support the functional requirements of the system. It is also known as the design view and is closer to the implementation of the software. Thus, this view is mainly for the understanding of the developers. A UML class diagram can be used to represent this view. Following is an example of a logical view and it shows a part of a certain system that handles student admissions and other such student and university administration interactions.
5. 2 Development View
In this view, we take into consideration the various modules and subsystems present in the system to be designed. A basic UML package diagram of the system can represent this view. Following is an example of the development view of the system mentioned in the logical view section.
5.3 PROCESS VIEW
The process view is to support the non-functional requirements like availability and performance. This view takes into consideration various interactions between the processes and the program flow. Activity diagrams can be constructed to represent this view. Following is such an example.
5.4 Physical View
The physical view is to provide a view of the integration of the software along with the hardware. This mapping can be represented using the UML deployment diagram.
The numerous use cases that a system will have is represented in this view. The UML use case diagram can represent this view. Following is one such example and it is a view of the system from the earlier examples.
Evaluation is another crucial step for architecture design as this can clarify and shortcomings a design might have and also clarifies all the requirements in relation to the design chosen. For the evaluation of the architecture, the Tradeoff Analysis Method can be used. This is a very widely used evaluation technique and it takes into consideration every step of the architecture development process, therefore, increasing the chances of detecting any defects in an organized manner. The method demands an evaluation of the architecture from the point of view of an entire team involved with the construction of the system.