In today's rapidly changing software world, the ability to adapt and evolve the software architecture is crucial for success. The readiness for change is a key factor in ensuring a product can meet evolving business and product requirements in the high-tech industry.
However, uncontrolled architecture drifts and erosions pose significant risks to a product's success. These drifts can result in the loss of expected extensibility and hinder the adoption of a product as the user base grows. Identifying and addressing these drifts is often done through complex and time-consuming manual architecture reviews, relying on experienced architects to assess the software architecture.
Despite the importance of manual reviews, they have limitations in terms of efficiency and coverage. Human factors can influence the identification of architectural issues, leading to inconsistencies and potentially missing critical problems.
To overcome these challenges, there is a need for automated solutions that can detect architecture drift and erosion more effectively. By leveraging automated tools and processes, organizations can achieve better outcomes in terms of identifying and preventing architectural issues.
This white paper explores the concept of detecting architectural gaps with automation. It covers the impact of architecture drift and erosion on the business, the limitations of manual reviews, and the benefits of automating architecture checks. Additionally, it discusses specific considerations related to compliance, data security, DevOps, and more when evaluating architecture review solutions. The paper also provides use case scenarios to illustrate what automated architecture checks can look like in practice.
By adopting automated architecture review solutions, organizations can improve their ability to identify and address architectural gaps, ensuring the stability, scalability, and maintainability of their software systems.
Please read this paper before proceeding to the next chapters.
You will gain insights into the following:
By reading this paper, you will develop a deeper understanding of architecture drift and erosion, the limitations of manual reviews, the benefits of automation, and important considerations when evaluating architecture review solutions.
This section outlines the requirements for implementing the solution. It is important to note that these requirements are not exhaustive and can be extended based on the specific needs of the project. The requirements are categorized into solution modes and inputs, solution integration and user interaction, and solution output with quality attributes like modifiability, extendibility, and configurability.
The proposed solution should support the following modes:
In the context of the CI/CD mode, the following features should be supported:
The proposed solution can accept various inputs, including:
These inputs collectively provide the necessary information for the solution to perform its analysis and evaluation of the software architecture.
Integration of the proposed solution with various tools and systems allows for a comprehensive analysis of software architecture. Here are the integration possibilities mentioned:
By integrating the solution with these tools and systems, users can leverage existing software design and version control workflows to enhance the effectiveness of the automatic review process.
As an example of the input code could be the code written in C# using microservices architecture. The other example could be the code written in JavaScript for multi-tier applications.
The example of configuration might be the description of nodes used in deployment. Another example could be the configuration of VPN networks and API gateways.
The example of input software design can be description of interfaces saved in Enterprise Architect.
The proposed solution provides a web interface that allows users to interact with it from a desktop computer. The interface is designed to accommodate the content and functionality required for software architecture analysis, making it unsuitable for mobile devices such as smartphones or tablets due to their smaller screen size.
There are two types of users supported by the solution: administrators and architects. Administrators have the capability to configure the system according to the intended use. They can set up various parameters and customize the solution to meet specific requirements.
Architects, on the other hand, have the ability to run the proposed solution for analysis and review the results. They can initiate the analysis process and examine the generated analysis reports. The solution provides dashboards that display relevant metrics and software architecture status, such as the count of components and dependencies. These dashboards offer a comprehensive overview of the software architecture and assist architects in understanding its structure and characteristics.
By catering to both administrators and architects and offering dedicated functionalities for each role, the solution ensures that users can effectively configure and utilize the system for software architecture analysis and evaluation.
The proposed solution offers two formats for presenting the output: text-based (plain text or table) and graphic.
The text-based format, particularly in a table structure, provides users with detailed information about identified issues.
The table typically includes the following columns:
Additionally, the table format includes separate sections that list various dependencies, such as frameworks, libraries, APIs, databases, technology stack (languages), and application layers. Each section provides a comprehensive inventory of the associated components used in the application. This allows users to gain insights into the technologies and resources utilized and understand their impact on the architecture.
Furthermore, the solution enables users to request inventories of specific elements, including languages, frameworks, libraries, and databases, at any time. This feature provides a convenient way to access comprehensive information about the software application's underlying components and dependencies.
The graphic format is utilized to visually represent the software architecture, including
Both offline and online UML diagramming tools are employed to save and document the extracted software architecture. This graphic format allows users to annotate and tag components and inventory items using user-defined keywords.
Here's an example of a graphic output:
In the graphic representation above, four services and one database are identified within the software architecture. The diagram clearly illustrates the relationships between these components and the direction of communication between them.
Modifiability and extendibility are essential attributes for the proposed solution. The solution should be designed in a way that allows for easy extension and the addition of new features, such as new checks or levels. The scope of the solution should not restrict its ability to adapt to different project needs and requirements.
By default, the solution should include a set of checks to verify the target architecture. However, for projects that already have an established architecture governance process, users should have the flexibility to extend and customize the set of checks according to their specific needs.
Given the existence of various Static Code tools like Coverity and SonarQube that handle low-level checks like indentation and formatting, it would be redundant to implement those checks in the proposed solution. Instead, the solution should focus on providing value through higher-level architectural checks and analysis.
Configurability is a crucial aspect of the proposed solution, allowing users to tailor the system to their specific needs and environment. The following configuration items can be supported:
By providing these configurability options, the proposed solution becomes versatile and adaptable, meeting the specific needs and workflows of different projects and organizations.