Maintenance and maintainability within agile software development

Scientific paper information

Original Scientific Paper distributed under the CC BY 4.0

Year 2021, Volume 1, Issue 1, Pages 9-19


Milena Vujosevic Janicic 

University of Belgrade, Faculty of Mathematics, Belgrade, Serbia


software maintenance; maintainability; software verification; software refactoring;


In agile software development, software maintenance is present almost from the beginning of software development life cycle and is usually considered together with software evolution. Making changes in software, either as corrective, preventive, adaptive or perfective maintenance, comes with additional risks and costs. In this paper, we discuss formal static software verification approaches and their influence on triggering software maintenance processes and on lowering costs and risks through automating regression verification checks. We also discuss software maintainability as a key software quality attribute in context of the overall software quality and describe the effects of software refactoring to maintainability. We present formal static verification approaches that can support the refactoring process.

How to cite this paper

Janicic, V.M. (2021) Maintenance and maintainability within agile software development, Science of Maintenance Journal, vol. 1, no. 1, 9-19


  1. Lowell Jay Arthur. Software evolution: the software maintenance challenge. Wiley-Interscience, 1988.
  2. J. Backes, S. Person, N. Rungta, and O. Tkachuk. Regression verification using impact summaries. In International Conference on Signal Processing and Integrated Networks (SPIN), pages 99–116, 2013.
  3. Roberto Baldoni, Emilio Coppa, Daniele Cono Delia, Camil Demetrescu, and Irene Finocchi. A Survey of Symbolic Execution Techniques. ACM Computing Surveys, 51(3), 2018.
  4. Rajiv D Banker and Robert J Kauffman. Reuse and productivity in integrated computer-aided software engineering: An empirical study. MIS quarterly, pages 375–401, 1991.
  5. Mario Barbacci, Mark H Klein, Thomas A Longstaff, and Charles B Weinstock. Quality Attributes. Technical report, Carnegie-Mellon University, Software engeineering Institute, Pittsburgh PA, 1995.
  6. Inc. Beanbag. Review board, 2021., retrieved March 15nd, 2021.
  7. Keith H Bennett and Vaclav T Rajlich. Software maintenance and evolution: a roadmap. In Conference on the Future of Software Engineering, pages 73–87, 2000.
  8. A. Bessey, K. Block, B. Chelf, A. Chou, B. Fulton, S. Hallem, C. Henri-Gros, A. Kamsky, S. Mc- Peak, and D. Engler. A few billion lines of code later: using static analysis to find bugs in the real world. Communications of the ACM, 53(2):66–75, 2010.
  9. Armin Biere, Marijn Heule, Hans van Maaren, and Toby Walsh, editors. Handbook of Satisfiability, volume 185 of Frontiers in Artificial Intelligence and Applications. IOS Press, 2009.
  10. B. Blanchet, P. Cousot, R. Cousot, J. Feret, L. Mauborgne, A. Min e, D. Monniaux, and X. Rival. Design and Implementation of a Special-Purpose Static Program Analyzer for Safety-Critical Real- Time Embedded Software, invited chapter. In T. Mogensen, D.A. Schmidt, and I.H. Sudborough, editors, The Essence of Computation: Complexity, Analysis, Transformation. Essays Dedicated to Neil D. Jones, volume 2566 of Lecture Notes in Computer Science (LNCS), pages 85–108. Springer-Verlag, 2002.
  11. Robert Brummayer and Armin Biere. Boolector: An Efficient SMT Solver for Bit-Vectors and Arrays. In Tools and Algorithms for the Construction and Analysis of Systems (TACAS), volume 5505 of Lecture Notes in Computer Science (LNCS). Springer, 2009.
  12. R. Bruttomesso, A. Cimatti, A. Franz en, A. Griggio, and R. Sebastiani. The MathSAT 4 SMT Solver. In Computer-Aided Verification (CAV), volume 5123 of Lecture Notes in Computer Science (LNCS), pages 299–303. Springer, 2008.
  13. C. Cadar, D. Dunbar, and D. Engler. KLEE: Unassisted and Automatic Generation of High- Coverage Tests for Complex Systems Programs. In Operating Systems Design and Implementation (OSDI), pages 209–224. USENIX, 2008.
  14. Ned Chapin, Joanne E. Hale, Khaled Md. Kham, Juan F. Ramil, and Wui-Gee Tan. Types of software evolution and software maintenance. Journal of Software Maintenance: Research and Practice, 13(1):3–30, 2001.
  15. S Chen, KG Heisler, Wei-Tek Tsai, X Chen, and E Leung. A model for assembly program maintenance. Journal of Software Maintenance: Research and Practice, 2(1):3–32, 1990.
  16. Tsong Yueh Chen, Fei-Ching Kuo, Huai Liu, Pak-Lok Poon, Dave Towey, T. H. Tse, and Zhi Quan Zhou. Metamorphic testing: A review of challenges and opportunities. ACM Computing Surveys, 51(1), 2018.
  17. Edmund Clarke, Daniel Kroening, and Flavio Lerda. A Tool for Checking ANSI-C Programs. In Tools and Algorithms for the Construction and Analysis of Systems (TACAS), pages 168–176. Springer, 2004.
  18. Edmund M. Clarke, Thomas A. Henzinger, Helmut Veith, and Roderick Bloem, editors. Handbook of Model Checking. Springer, 2018.
  19. Jason Cohen, Eric Brown, Brandon DuRette, and Steven Teleki. Best kept secrets of peer code review. Smart Bear Somerville, 2006.
  20. Software Engineering Standards Committee et al. IEEE Standard for Software Maintenance. IEEE Std, pages 1219–1998, 1998.
  21. Software Freedom Conservancy. Selenium automates browsers, 2021. https://www.selenium. dev/, retrieved March 15nd, 2021.
  22. Lee Copeland. A practitioner’s guide to software test design. Artech House, 2004.
  23. Lucas Cordeiro, Bernd Fischer, and Joao Marques-Silva. SMT-Based Bounded Model Checking for Embedded ANSI-C Software. IEEE/ACM International Conference on Automated Software Engineering (ASE), pages 137–148, 2009.
  24. Patrick Cousot and Radhia Cousot. Abstract Interpretation: A Unified Lattice Model for Static Analysis of Programs by Construction or Approximation of Fixpoints. In Principles of Programming Languages (POPL), pages 238–252. ACM Press, 1977.
  25. Leonardo De Moura and Nikolaj Bjorner. Z3: An Efficient SMT Solver. In Tools and Algorithms for the Construction and Analysis of Systems (TACAS), pages 337–340, 2008.
  26. A. Deutsch. Static Verification of Dynamic Properties, 2003. White paper, PolySpace Technologies Inc.
  27. B. Dutertre and L. de Moura. The Yices SMT solver. Tool paper at tool-paper.pdf, 2006.
  28. D. Felsing, S. Grebing, V. Klebanov, P. Rummer, and M. Ulbrich. Automating Regression Verification. In IEEE/ACM International Conference on Automated Software Engineering (ASE), pages 349–360. ACM, 2014.
  29. Martin Fowler. Refactoring: improving the design of existing code. Addison-Wesley Professional, 2018.
  30. John E Gaffney Jr and Thomas A Durek. Software reuse — key to enhanced productivity: some quantitative models. Information and Software Technology, 31(5):258–267, 1989.
  31. Daniel Galin. Software quality assurance: from theory to implementation. Pearson education, 2004.
  32. Erich Gamma, Richard Helm, Ralph Johnson, John Vlissides, and Design Patterns. Elements of Reusable Object-Oriented Software. Design Patterns. massachusetts: Addison-Wesley Publishing Company, 1995.
  33. Gerrit. Gerrit code review, 2021., retrieved March 15nd, 2021.
  34. Patrice Godefroid, Michael Y. Levin, and David Molnar. SAGE: Whitebox Fuzzing for Security Testing. Queue, 10(1):20:20–20:27, 2012.
  35. B. Godlin and O. Strichman. Regression verification: proving the equivalence of similar programs. Software Testing, Verification and Reliability, 23(3):241–258, 2013.
  36. Stephan Goericke. The future of software quality assurance. Springer Nature, 2020.
  37. Carsten Gorg and Peter Weiundefinedgerber. Error Detection by Refactoring Reconstruction. In International Workshop on Mining Software Repositories, MSR 05, pages 1–5, New York, NY, USA, 2005. ACM.
  38. Mark I. Halpern. Machine independence: Its technology and economics. Communications of the ACM, 8(12):782–785, 1965.
  39. Phacility Inc. Phabricator: Discuss. plan. code. review. test., 2021. phabricator/, retrieved March 15nd, 2021.
  40. ISO. ISO/IEC 14764:2006 and IEEE Std 14764-2006, 2006. Software Engineering — Software Life Cycle Processes — Maintenance. Online at: 14764:ed-2:v1:en, retrieved March 15nd, 2021.
  41. ISO. IEEE/ISO/IEC 12207-2008, 2008. ISO/IEC/IEEE International Standard - Systems and software engineering – Software life cycle processes. Online at: standard/12207-2008.html, retrieved March 15nd, 2021.
  42. ISO. ISO/IEC 25010:2011, 2011. ISO/IEC Systems and software engineering – Systems and software Quality Requirements and Evaluation (SQuaRE) – System and software quality models. Online at:, retrieved March 15nd, 2021.
  43. Inc. Katalon. An all-in-one test automation solution, 2021., retrieved March 15nd, 2021.
  44. Yoshio Kataoka, Michael D Ernst, William G Griswold, and David Notkin. Automated support for program refactoring using invariants. In IEEE International Conference on Software Maintenance (ICSM), pages 736–743. IEEE, 2001.
  45. Amandeep Kaur and Manpreet Kaur. Analysis of code refactoring impact on software quality. In MATEC Web of Conferences, volume 57, page 02012. EDP Sciences, 2016.
  46. Miryung Kim, Thomas Zimmermann, and Nachiappan Nagappan. An Empirical Study of Refactoring Challenges and Benefits at Microsoft. IEEE Transactions on Software Engineering, 40(7):633– 649, 2014.
  47. James C. King. Symbolic Execution and Program Testing. Communications of the ACM, 19(7):385–394, 1976.
  48. Barbara A Kitchenham, Guilherme H Travassos, Anneliese Von Mayrhauser, Frank Niessink, Norman F Schneidewind, Janice Singer, Shingo Takada, Risto Vehvilainen, and Hongji Yang. Towards an ontology of software maintenance. Journal of Software Maintenance: Research and Practice, 11(6):365–389, 1999.
  49. Ralf Kneuper. Software Processes and Life Cycle Models. Springer, 2018.
  50. Claude Y Laporte and Alain April. Software quality assurance. John Wiley & Sons, 2018.
  51. Chris Lattner and Vikram Adve. LLVM: A Compilation Framework for Lifelong Program Analysis & Transformation. In Symposium on Code Generation and Optimization (CGO), pages 75–86. IEEE Computer Society, 2004.
  52. Tom Mens and Tom Tourwe. A Survey of Software Refactoring. IEEE Transactions on Software Engineering, 30(2):126–139, 2004.
  53. F. Merz, S. Falke, and C. Sinz. LLBMC: Bounded Model Checking of C and C++ Programs Using a Compiler IR. In Verified Software, Theories, Tools and Experiments (VSTTE), Lecture Notes in Computer Science (LNCS), pages 146–161. Springer, 2012.
  54. Djordje Milicevic, Mirko Brkusanin, Milena Vujosevic Janiic, Teodora Novkovic, and Petar Jovanovic. Unapredjenje programskog prevodioca Clang sa podr skom za standard MISRA/AU- TOSAR. In Etran, pages 906–910. ETRAN Society, 2019.
  55. B. P. Miller, L. Fredriksen, and B. So. An Empirical Study of the Reliability of UNIX Utilities. Communications of the ACM, 33(12):32–44, 1990.
  56. Chahat Monga, Aman Jatain, and Deepti Gaur. Impact of quality attributes on software reusability and metrics to assess these attributes. In IEEE International Advance Computing Conference (IACC), pages 1430–1434. IEEE, 2014.
  57. E. Murphy-Hill, C. Parnin, and A. P. Black. How we refactor, and how we know it. IEEE Transactions on Software Engineering, 38(1):5–18, 2012.
  58. Glenford J Myers, Tom Badgett, Todd M Thomas, and Corey Sandler. The art of software testing, volume 2. Wiley Online Library, 2004.
  59. Sam Newman. Building microservices: designing fine-grained systems. O’Reilly Media, Inc., 2015.
  60. H. Post and C. Sinz. Proving Functional Equivalence of Two AES Implementations Using Bounded Model Checking. In Software Testing, Verification and Validation (ICST), pages 31–40, 2009.
  61. Vaclav Rajlich. Software evolution and maintenance. In Future of Software Engineering Proceedings, FOSE 2014, pages 133–144, New York, NY, USA, 2014. ACM.
  62. Nayan B. Ruparelia. Software development lifecycle models. ACM SIGSOFT Software Engineering Notes, 35(3):8–13, 2010.
  63. Stephen R Schach. The economic impact of software reuse on maintenance. Journal of Software Maintenance: Research and Practice, 6(4):185–196, 1994.
  64. Norman F. Schneidewind. The state of software maintenance. IEEE Transactions on Software Engineering, 1(3):303–310, 1987.
  65. Danilo Silva, Nikolaos Tsantalis, and Marco Tulio Valente. Why We Refactor? Confessions of GitHub Contributors. In ACM SIGSOFT International Symposium on Foundations of Software Engineering, FSE 2016, pages 858–870, New York, NY, USA, 2016. ACM.
  66. SmartBear Software. Automated ui testing that covers you from device cloud to packaged apps, 2021., retrieved March 15nd, 2021.
  67. Mirko Spasic and Milena Vujosevic Janicic. Verification supported refactoring of embedded SQL, Software Quality Journal, pages 1–37, 2020.
  68. Mirko Spasic and Milena Vujosevic Janicic. GitHub repository: SQLC, 2020. https://github. com/mirkospasic/sqlc, retrieved March 15th, 2021.
  69. Ofer Strichman. Special issue: program equivalence. Formal Methods in System Design, 52(3):227– 228, 2018.
  70. Offer Strichman and Benny Godlin. Regression Verification - A Practical Way to Verify Programs. In Verified Software, Theories, Tools and Experiments (VSTTE), volume 4171 of Lecture Notes in Computer Science (LNCS), pages 496–501. Springer, 2005.
  71. M. Sutton, A. Greene, and P. Amini. Fuzzing: Brute Force Vulnerability Discovery. Pearson Education, 2007.
  72. A. Takanen, J. DeMott, and C. Miller. Fuzzing for Software Security Testing and Quality Assur- ance. Artech House, Inc., Norwood, MA, USA, 1 edition, 2008.
  73. Nikolai Tillmann and Jonathan Halleux. Pex – White Box Test Generation for .NET . In Tests and proofs (TAP), volume 4966 of Lecture Notes in Computer Science (LNCS), pages 134–153. Springer, 2008.
  74. Priyadarshi Tripathy and Kshirasagar Naik. Software evolution and maintenance: a practitioner’s approach. John Wiley & Sons, 2014.
  75. Ervin Varga. Unraveling Software Maintenance and Evolution. Springer, 2018.
  76. Willem Visser, Klaus Havelund, Guillaume Brat, Seungjoon Park, and Flavio Lerda. Model Checking Programs. Automated Software Eng., 10(2):203–232, 2003.
  77. Dusan Vujosevic, Ivana Kovacevic, and Milena Vujosevic Janicic. The learnability of the dimensional view of data and what to do with it. Aslib Journal of Information Management, 2019.
  78. Milena Vujosevic Janicic. Concurrent Bug Finding Based on Bounded Model Checking. International Journal of Software Engineering and Knowledge Engineering, 30(05):669–694, 2020.
  79. M. Vujosevic Janicic and V. Kuncak. Development and Evaluation of LAV: An SMT-Based Error Finding Platform. In Verified Software, Theories, Tools and Experiments (VSTTE), Lecture Notes in Computer Science (LNCS), pages 98–113. Springer, 2012.
  80. M. Vujosevic Janicic, M. Nikolic, D. Tosic, and V. Kuncak. Software verification and graph similarity for automated evaluation of students assignments. Information and Software Technology, 55(6), 2013.
  81. Milena Vujosevic Janicic. Regression verification by system LAV. InfoM — Journal of Information Technology and Multimedia Systems, 49:14–20, 2014.
  82. Milena Vujosevic Janicic and Filip Maric. Regression verification for automated evaluation of students programs. Computer Science and Information Systems, 17(1):205–228, 2020.
  83. Milena Vujosevic Janicic and Mirko Spasi c. Tools LAV and SQLAV, 2020. http://argo.matf., retrieved March 15th, 2021.
  84. Peter Weißgerber and Stephan Diehl. Are refactorings less error-prone than other changes? In International workshop on Mining software repositories, pages 112–118, 2006.
  85. Peter Weißgerber and Stephan Diehl. Identifying Refactorings from Source-Code Changes. In IEEE/ACM International Conference on Automated Software Engineering (ASE), ASE 06, pages 231–240, USA, 2006. IEEE Computer Society.
  86. S. S. Yau and J. S. Collofello. Some stability measures for software maintenance. IEEE Transactions on Software Engineering, 6(6):545–552, 1980.
  87. Ren Yongchang, Xing Tao, Liu Zhongjing, and Chen Xiaoji. Software maintenance process model and contrastive analysis. In International Conference on Information Management, Innovation Management and Industrial Engineering, pages 169–172, USA, 2011. IEEE Computer Society.