Designing and maintaining a software system's architecture typically involve making numerous design decisions, each potentially affecting the system's functional and nonfunctional properties. Understanding these design decisions can help inform future decisions and implementation choices and can avoid introducing regressions and architectural inefficiencies later. Unfortunately, design decisions are rarely well documented and are typically a lost artifact of the architecture creation and maintenance process. The loss of this information can thus hurt development. To address this shortcoming, we develop RecovAr, a technique for automatically recovering design decisions from the project's readily available history artifacts, such as an issue tracker and version control repository. RecovAr uses state-of-the-art architectural recovery techniques on a series of version control commits and maps those commits to issues to identify decisions that affect system architecture. While some decisions can still be lost through this process, our evaluation on Hadoop and Struts, two large open-source systems with over 8 years of development each and, on average, more than 1 million lines of code, shows that RecovAr has the recall of 75% and a precision of 77%. Our work formally defines architectural design decisions and develops an approach for tracing such decisions in project histories. Additionally, the work introduces methods to classify whether decisions are architectural and to map decisions to code elements. Finally, our work contributes a methodology engineers can follow to preserve design-decision knowledge in their projects.
@inproceedings{Shahbazian18icsa, author = {Arman Shahbazian and Youn Kyu Lee and Duc Le and Yuriy Brun and Nenad Medvidovic}, title = {\href{http://people.cs.umass.edu/brun/pubs/pubs/Shahbazian18icsa.pdf}{Recovering Architectural Design Decisions}}, booktitle = {Proceedings of the IEEE International Conference on Software Architecture (ICSA)}, venue = {ICSA}, address = {Seattle, WA, USA}, month = {May}, date = {2--4}, year = {2018}, pages = {95--104}, doi = {10.1109/ICSA.2018.00019}, note = {\href{https://doi.org/ 10.1109/ICSA.2018.00019}{DOI: 10.1109/ICSA.2018.00019}}, accept = {$\frac{22}{86} \approx 26\%$}, abstract = {<p>Designing and maintaining a software system's architecture typically involve making numerous design decisions, each potentially affecting the system's functional and nonfunctional properties. Understanding these design decisions can help inform future decisions and implementation choices and can avoid introducing regressions and architectural inefficiencies later. Unfortunately, design decisions are rarely well documented and are typically a lost artifact of the architecture creation and maintenance process. The loss of this information can thus hurt development. To address this shortcoming, we develop RecovAr, a technique for automatically recovering design decisions from the project's readily available history artifacts, such as an issue tracker and version control repository. RecovAr uses state-of-the-art architectural recovery techniques on a series of version control commits and maps those commits to issues to identify decisions that affect system architecture. While some decisions can still be lost through this process, our evaluation on Hadoop and Struts, two large open-source systems with over 8 years of development each and, on average, more than 1 million lines of code, shows that RecovAr has the recall of 75% and a precision of 77%. Our work formally defines architectural design decisions and develops an approach for tracing such decisions in project histories. Additionally, the work introduces methods to classify whether decisions are architectural and to map decisions to code elements. Finally, our work contributes a methodology engineers can follow to preserve design-decision knowledge in their projects.</p>}, fundedBy = {NSF CCF-1453474, NSF CCF-1564162, NSF CCF-1618231, NSF CCF-1717963, U.S. Office of Naval Research N00014-17-1-2896, Huawei Technologies}, }