Abstract
Lehman’s second law of software evolution suggests that under certain conditions software “becomes more difficult to evolve”. Similarly, Technical Debt (TD) is often considered as technical compromises that render future changes of software more costly. But how does one actually assess if modifying software becomes more difficult or costly? So far research studied this question indirectly by assessing internal structural complexity of successive software versions arguing that increasing internal complexity renders evolution tasks more difficult and costly too. Our goal is to assess complexity of evolution tasks directly. Therefore, we present an algorithm and tool that allows to automatically assess Contribution Complexity (CC), which is the complexity of a contribution respecting difficulty of integration work. Our initial evaluation suggests that our proposed algorithm and readily available tool are suitable to automatically assess complexity of contributions to software in Git repositories and the results of applying it on 8 686 contributions to two open-source systems indicate that evolution tasks actually become slightly more difficult.
This is a preview of subscription content, log in via an institution.
Buying options
Tax calculation will be finalised at checkout
Purchases are for personal use only
Learn about institutional subscriptionsReferences
IEEE Standard for a Software Quality Metrics Methodology. Technical report (1998)
Amanatidis, T., Chatzigeorgiou, A.: Studying the evolution of PHP web applications. Inf. Softw. Technol. 72, 48–67 (2016)
Avgeriou, P., Kruchten, P., Ozkaya, I., Seaman, C.: Managing technical debt in software engineering (dagstuhl seminar 16162). In: Dagstuhl Reports, vol. 6. Schloss Dagstuhl-Leibniz-Zentrum fuer Informatik (2016)
Basili, V.R.: Qualitative software complexity models: a summary. Tutorial on models and methods for software management and engineering (1980)
di Biase, M., Rastogi, A., Bruntink, M., van Deursen, A.: The delta maintainability model: measuring maintainability of fine-grained code changes. In: 2019 IEEE/ACM International Conference on Technical Debt (TechDebt), pp. 113–122. IEEE (2019)
Dörner, D.: The Logic of Failure: Recognizing and Avoiding Error in Complex Situations. Merloyd Lawrence Book, Basic Books (1997)
Hassan, A.E.: Predicting faults using the complexity of code changes. In: 2009 IEEE 31st International Conference on Software Engineering, pp. 78–88. IEEE (2009)
Heitlager, I., Kuipers, T., Visser, J.: A practical model for measuring maintainability. In: 6th International Conference on the Quality of Information and Communications Technology (QUATIC 2007), pp. 30–39. IEEE (2007)
Herraiz, I., Hassan, A.E.: Beyond lines of code: do we need more complexity metrics? Making Software: What Really Works, and Why We Believe It, pp. 125–141 (2010)
Herraiz, I., Rodriguez, D., Robles, G., Gonzalez-Barahona, J.M.: The evolution of the laws of software evolution: a discussion based on a systematic literature review. ACM Comput. Surv. (CSUR) 46(2), 1–28 (2013)
Hindle, A., Godfrey, M.W., Holt, R.C.: Reading beside the lines: indentation as a proxy for complexity metric. In: 2008 16th IEEE International Conference on Program Comprehension, pp. 133–142. IEEE (2008)
Hitz, M., Montazeri, B.: Measuring coupling and cohesion in object-oriented systems. Citeseer (1995)
Lakshman, A., Malik, P.: Cassandra: a decentralized structured storage system. ACM SIGOPS Oper. Syst. Rev. 44(2), 35–40 (2010)
Lehman, M.M., Fernández-Ramil, J.C.: Rules and tools for software evolution planning and management. Softw. Evol. Feedback 539–560 (2006)
Loftus, G.R.: Evaluating forgetting curves. J. Exp. Psychol. Learn. Mem. Cogn. 11(2), 397 (1985)
McCabe, T.J.: A complexity measure. IEEE Trans. Softw. Eng. 4, 308–320 (1976)
Miller, G.A.: The magical number seven, plus or minus two: some limits on our capacity for processing information. Psychol. Rev. 63(2), 81 (1956)
Rios, N., de Mendonça Neto, M.G., Spínola, R.O.: A tertiary study on technical debt: types, management strategies, research trends, and base information for practitioners. Inf. Softw. Technol. 102, 117–145 (2018)
Shao, J., Wang, Y.: A new measure of software complexity based on cognitive weights. Can. J. Electr. Comput. Eng. 28(2), 69–74 (2003)
Spadini, D., Aniche, M., Bacchelli, A.: Pydriller: python framework for mining software repositories. In: Proceedings of the 2018 26th ACM Joint Meeting on European Software Engineering Conference and Symposium on the Foundations of Software Engineering, pp. 908–911 (2018)
Tamrakar, R., Jørgensen, M.: Does the use of Fibonacci numbers in planning poker affect effort estimates? (2012)
Visser, J., Rigal, S., van der Leek, R., van Eck, P., Wijnholds, G.: Building Maintainable Software, Java Edition: Ten Guidelines for Future-Proof Code. 1st edn. O’Reilly Media Inc. (2016)
Zuse, H.: Software Complexity: Measures and Methods, vol. 4. Walter de Gruyter GmbH & Co KG (1991)
Author information
Authors and Affiliations
Corresponding author
Editor information
Editors and Affiliations
Rights and permissions
Copyright information
© 2021 Springer Nature Switzerland AG
About this paper
Cite this paper
Pfeiffer, RH. (2021). Automatically Assessing Complexity of Contributions to Git Repositories. In: Paiva, A.C.R., Cavalli, A.R., Ventura Martins, P., Pérez-Castillo, R. (eds) Quality of Information and Communications Technology. QUATIC 2021. Communications in Computer and Information Science, vol 1439. Springer, Cham. https://doi.org/10.1007/978-3-030-85347-1_9
Download citation
DOI: https://doi.org/10.1007/978-3-030-85347-1_9
Published:
Publisher Name: Springer, Cham
Print ISBN: 978-3-030-85346-4
Online ISBN: 978-3-030-85347-1
eBook Packages: Computer ScienceComputer Science (R0)