Software projects are becoming complex, larger, more integrated, and are implemented by the use of several varieties of technologies. These various technologies need to be managed and organized to deliver a quality product. Quality attributes usually assessed and analyzed at the architecture level not at the code level. And finally software architecture has gained increasing visibility in the last years as the software industry has recognized the role of software architectures in maintaining high quality and ensuring high quality and sustainability of software products. However, there is still no consensus on how to measure various aspects of software architecture, therefore today I wanted to talk about software architecture metrics, but found out that in software architecture there are no standard metrics yet, this field is still very immature. However, there are some experts who start talking about it,for example, I highly recommend you to attend Global Software Architecture Summit in Barcelona ( October, 1-2), where Alexander von Zitzewitz will talk about “Software Metrics for Architects”.
As for the post, I decided to slightly change it and talk about software architecture quality attributes as metrics will be based on them.
And next step is to run a survey and find out what software architecture metrics are used in different companies, btw, you can contribute to it here. Once we have the results, I will write a post featuring them as well as highlight metrics we use in Apiumhub software projects.
Software Architecture Quality Attributes
Creating good architectures usually comes at the price of significant initial investment. This is why ensuring a good quality throughout the entire software project is of utmost importance.
Measurement is crucial and organizations strive to come up with meaningful measures that indicate progress and performance. Measurement in software architecture is a crucial factor to evaluate the software quality characteristics such as scalability, efficiency, maintainability, performance,etc.
Here are key software architecture quality attributes that you should monitor continuously, to make incremental improvements:
Maintainability is the degree to which software is understood, repaired, or enhanced. It should be easy to make changes in software, either for the addition of a new feature or for a bug fix. Maintainability is the ease with which you can modify software, adapt it for other purposes, or transfer it from one development team to another. Compliance with software architectural rules and consistency across the application combine to make software maintainable.
Extensibility is the ability of software architecture to handle the addition of new functionalities and components. It is very valuable in agile development as features are added throughout the life of the project.
Making a software architecture as simple as possible is key to make it most understandable for everyone.
Shows the response of the system to performing certain actions for a certain period of time. It includes architecture metrics like, latency: time spent on responding to an event, Channel capacity: the number of events that occur at a certain point in time.
Scalability is the ability of the system to handle load increases without decreasing performance, or the possibility to rapidly increase the load. The key indicators for measuring this attribute are if the system allows for horizontal scaling, the time needed to increase scaling, in seconds, scaling limitations: the number of servers or the network capacity and possibility to scale: the increase in the number of transactions or the amount of content.
Responsible for the operation and the transmission of data and its exchange with other external systems. A well-designed system facilitates integration with third-party systems. To improve the interoperability, you can use well-designed external interfaces, standardization systems, etc.
Software architecture exposes the dimensions along which a system is expected to evolve.
Risk of software failure and the stability of a program when exposed to unexpected conditions. Reliable software has minimal downtime, good data integrity, and no errors that directly affect users.
Assesses how well an application protects information against the risk of software breaches. For example, the quantity and severity of vulnerabilities found in a software system are indicators of its security level. Also, you can measure security by assessing how long it takes to patch or fix software vulnerabilities.
- Rate of Delivery
Rate of delivery means how often new versions of software are shipped to customers. Since a new software version typically comes with improvements that directly impact users, you can infer that higher rates of delivery correspond to better quality software for customers.
Quality software requires a high degree of testability. Finding faults in software with high testability is easier, making such systems less likely to contain errors when shipped to end users. The harder it is to provide quality assurance, the tougher time you’ll have ensuring that quality applications are deployed into production.The main indicators for this attribute are percentage of coverage with integration, unit tests, etc.
I hope you found it useful, if you have any questions, let us know! We specialize in software architecture!