erating dependency graphs, which is helpful in re-
moving the macros, but in turns creates a risk of pre-
processing failure. In that case, the whole file poses
risk of not getting processed. Another threat is that
if a project size is extremely big or very small, the
metrics values might not represent the true degree of
skewness.
6 CONCLUSION AND FUTURE
WORK
We believe that our discussed metrics and evolution-
ary analysis for C language help identify and local-
ize architecture anomalies in files, functions, version
releases as well as provide refactoring support. We
used file-based dependency graphs to generate so-
cial network and dependency metrics. These metrics
are strongly correlated with fixing commits, indicat-
ing files with a higher fixing frequency could have
unique patterns with the corresponding metrics. This
relation helps identify such files beforehand, allow-
ing preemptive actions to mitigate complex files and
modules that lead to breakdown to be taken. These
actions could include splitting huge files, separating
header file interfaces, or investing more resources (de-
velopers and time) to specific files/modules. We also
showed that the evolution of metrics as a product
grows and sudden changes indicate refactoring, ma-
jor bug fixes, or a defect induction.
Our study excluded module-based and function-
based metrics. In the future, we plan to use such de-
pendencies to gain insights on the modular and in-
tricate analysis of the relationships among modules,
files, architecture quality, and defects. The density
of fixing commits could identify files/modules which
face high dependency strain. This information will
allow developers to know entities in project that need
extra care. Moreover, we plan to add design rules and
new metrics, like decoupling level (Mo et al., 2016)
which will add additional descriptive ability for the
structure of project. The evolutionary phase could
use evolution models to quantify change (Aoyama,
2002), determining when and how the files and ver-
sions heavily changed, and their consequences in ar-
chitecture. Understanding the commit messages and
investigating phrase patterns in bug fixing and induc-
ing commits could also lead to insightful results.
The studied projects had high numbers of com-
mits, which totaled tens of thousands in some
projects. Thus we also plan to analyze the commit
messages for phrase pattern in bug fixing/inducing
commits. In future, we plan to parallelize our ap-
proach and study the evolution of metrics for all com-
mits, instead of versions. We will also include more
projects with varying size and different domains, as
this will help understand the relationship between
metrics, defects and domains.
REFERENCES
Aoyama, M. (2002). Metrics and analysis of software ar-
chitecture evolution with discontinuity. In Proceed-
ings of the International Workshop on Principles of
Software Evolution, IWPSE ’02, pages 103–107, New
York, NY, USA. ACM.
Behnamghader, P., Alfayez, R., Srisopha, K., and Boehm,
B. (2017). Towards better understanding of soft-
ware quality evolution through commit-impact anal-
ysis. In 2017 IEEE International Conference on Soft-
ware Quality, Reliability and Security (QRS), pages
251–262.
Biaggi, A., Fontana, F. A., and Roveda, R. (2018). An archi-
tectural smells detection tool for c and c++ projects.
In 2018 44th Euromicro Conference on Software En-
gineering and Advanced Applications (SEAA), pages
417–420.
Cai, Y., Xiao, L., Kazman, R., Mo, R., and Feng, Q. (2019).
Design rule spaces: A new model for representing and
analyzing software architecture. IEEE Transactions
on Software Engineering, 45(7):657–682.
Capilla, R., Jansen, A., Tang, A., Avgeriou, P., and Babar,
M. A. (2016). 10 years of software architecture
knowledge management: Practice and future. Jour-
nal of Systems and Software, 116:191 – 205.
E.J. Newman, M. and Girvan, M. (2004). Finding and eval-
uating community structure in networks. Physical re-
view. E, Statistical, nonlinear, and soft matter physics,
69:026113.
Erdemir, U., Tekin, U., and Buzluca, F. (2011). Object ori-
ented software clustering based on community struc-
ture. In 2011 18th Asia-Pacific Software Engineering
Conference, pages 315–321.
Glass, R. L. (2001). Frequently forgotten fundamental
facts about software engineering. IEEE Software,
18(3):112–111.
Hagberg, A. A., Schult, D. A., and Swart, P. J. (2008). Ex-
ploring network structure, dynamics, and function us-
ing networkx. In Varoquaux, G., Vaught, T., and Mill-
man, J., editors, Proceedings of the 7th Python in Sci-
ence Conference, pages 11 – 15, Pasadena, CA USA.
Kruchten, P., Lago, P., and van Vliet, H. (2006). Building
up and reasoning about architectural knowledge. In
Hofmeister, C., Crnkovic, I., and Reussner, R., edi-
tors, Quality of Software Architectures, pages 43–58,
Berlin, Heidelberg. Springer Berlin Heidelberg.
Lattix (2019). Lattix.
Lutellier, T., Chollak, D., Garcia, J., Tan, L., Rayside, D.,
Medvidovic, N., and Kroeger, R. (2015). Comparing
software architecture recovery techniques using accu-
rate dependencies. In 2015 IEEE/ACM 37th IEEE In-
ternational Conference on Software Engineering, vol-
ume 2, pages 69–78.
Commit–Defect and Architectural Metrics–based Quality Assessment of C Language
585