Better Architecture, Better Software, Better Research
Creators: name: Eisty, Nasir
name: Cohen, Myra
name: Chue Hong, Neil
name: Cocking, Ryan
name: Druskat, Stephan
name: Felderer, Michael
name: Grayson, Samuel
name: Grunske, Lars
name: Hasselbring, Wilhelm
name: Harris, Sarah
name: Linxweiler, Jan
name: Venters, Colin
Publisher: name: Zenodo
Year: 2024

description: Research software requires flexible and modular architectures to accommodate rapid evolution and interdisciplinary collaboration [1]. Software architectures are fundamental to the development of technically sustainable software systems as they are the primary carrier of architecturally significant requirements, such as extensibility and maintainability, and influence how developers are able to understand, analyse and test a software system. Hence, research software engineering should focus on architectural metrics to evaluate and improve their code [2]. Architectural metrics in research software ensure the software's scalability, performance, maintainability, and overall quality, facilitating reproducible and reliable research outcomes [3]. We already have many metrics and tools to measure and improve the quality of software architecture. However, we hypothesize that research software is often built using limited resources and without a long-term vision for maintainability, which leads to a range of rotten symptoms, including software rigidity, fragility, immobility, and viscosity, which results in high-maintenance and evolution costs, which are the foundation for software decay and death in all software investment.

In a recent Dagstuhl seminar, we, the authors (consisting of software engineers, software engineering researchers, and research software engineers), discussed key software metrics such as code smells, duplication, test coverage, cyclomatic complexity, etc., and how these can be used to improve research software. We explored our hypothesis by applying existing static analysis tools to a few open-source research software repositories. We discovered high cyclomatic complexity, large God classes, cyclic dependencies, improper inheritance, modularity violations, propagation error-prone and change-prone issues, and low test coverage, which confirmed non-trivial maintenance and evolution costs. We concluded that we should explore this idea further and that there may be an opportunity to build better tools and techniques to help research software engineers improve the architecture of their software, which in turn can improve its quality.

In this poster presentation, we will demonstrate the critical role of software architecture in ensuring software quality. We will explore its importance for research software and how it can significantly enhance the quality of these systems. Research software can become more maintainable, scalable, and reliable by adopting software architecture principles. We will illustrate the tangible benefits and practical applications of adopting robust software architecture principles through detailed example analyses of real research software projects. Attendees will gain insights into best practices and strategies for integrating architectural frameworks into their research software development processes.

Our goal is to spread appropriate software architecture knowledge among research software engineers, highlighting its transformative impact on research outcomes and the sustainability of software projects. By adopting these principles, research teams can ensure their software is better equipped to handle future challenges, fostering innovation and collaboration in the research software community.