Assessing the complexity of upgrading software modules

Modern software development frequently involves developing multiple codelines simultaneously. Improvements to one codeline should often be applied to other codelines as well, which is typically a time consuming and error-prone process. In order to reduce this (manual) effort, changes are applied to the system's modules and those affected modules are upgraded on the target system. This is a more coarse-grained approach than upgrading the affected files only. However, when a module is upgraded, one must make sure that all its dependencies are still satisfied. This paper proposes an approach to assess the ease of upgrading a software system. An algorithm was developed to compute the smallest set of upgrade dependencies, given the current version of a module and the version it has to be upgraded to. Furthermore, a visualization has been designed to explain why upgrading one module requires upgrading many additional modules. A case study has been performed at ASML to study the ease of upgrading the TwinScan software. The analysis shows that removing elements from interfaces leads to many additional upgrade dependencies. Moreover, based on our analysis we have formulated a number improvement suggestions such as a clear separation between the test code and the production code as well as an introduction of a structured process of symbols deprecation and removal.

[1]  Alexander Serebrenik,et al.  You can't control the unfamiliar: A study on the relations between aggregation techniques for software metrics , 2011, 2011 27th IEEE International Conference on Software Maintenance (ICSM).

[2]  Alexander Serebrenik,et al.  Theil index for aggregation of software metrics values , 2010, 2010 IEEE International Conference on Software Maintenance.

[3]  Laura Wingerd,et al.  High-Level Best Practices in Software Configuration Management , 1998, SCM.

[4]  Rudolf Ferenc,et al.  A Drill-Down Approach for Measuring Maintainability at Source Code Element Level , 2013 .

[5]  Tijs van der Storm,et al.  Continuous release and upgrade of component-based software , 2005, SCM '05.

[6]  Alexander Serebrenik,et al.  Detecting dependencies in Enterprise JavaBeans with SQuAVisiT , 2013, 2013 20th Working Conference on Reverse Engineering (WCRE).

[7]  Richard S. Bird,et al.  Tabulation Techniques for Recursive Programs , 1980, CSUR.

[8]  M.M. Lehman,et al.  Programs, life cycles, and laws of software evolution , 1980, Proceedings of the IEEE.

[9]  Roberto Di Cosmo,et al.  Dependency solving: A separate concern in component evolution management , 2012, J. Syst. Softw..

[10]  Diomidis Spinellis,et al.  CScout: A refactoring browser for C , 2010, Sci. Comput. Program..

[11]  Hausi A. Müller,et al.  DYNAMICO: A Reference Model for Governing Control Objectives and Context Relevance in Self-Adaptive Software Systems , 2010, Software Engineering for Self-Adaptive Systems.

[12]  Tudor Dumitras,et al.  Why Do Upgrades Fail and What Can We Do about It? , 2009, Middleware.

[13]  Inês Lynce,et al.  Apt-pbo: solving the software dependency problem using pseudo-boolean optimization , 2010, ASE.

[14]  Romain Robbes,et al.  How do developers react to API deprecation?: the case of a smalltalk ecosystem , 2012, SIGSOFT FSE.

[15]  Nicolas Anquetil,et al.  Software quality metrics aggregation in industry , 2013, J. Softw. Evol. Process..

[16]  Denys Poshyvanyk,et al.  Blending Conceptual and Evolutionary Couplings to Support Change Impact Analysis in Source Code , 2010, 2010 17th Working Conference on Reverse Engineering.

[17]  Genny Tortora,et al.  Managing and assessing the risk of component upgrades , 2012, 2012 Third International Workshop on Product LinE Approaches in Software Engineering (PLEASE).

[18]  Guy E. Blelloch,et al.  Selective memoization , 2003, POPL '03.

[19]  Inanç Birol,et al.  Hive plots - rational approach to visualizing networks , 2012, Briefings Bioinform..

[20]  Rudolf Ferenc,et al.  A Drill-Down Approach for Measuring Maintainability at Source Code Element Level , 2013, Electron. Commun. Eur. Assoc. Softw. Sci. Technol..

[21]  Michel Rueher,et al.  Handling software upgradeability problems with MILP solvers , 2010, LoCoCo.

[22]  Robert E. Tarjan,et al.  Depth-First Search and Linear Graph Algorithms , 1972, SIAM J. Comput..

[23]  Josep Argelich,et al.  Solving Linux Upgradeability Problems Using Boolean Optimization , 2010, LoCoCo.

[24]  Sushil Krishna Bajracharya,et al.  Automated dependency resolution for open source software , 2010, 2010 7th IEEE Working Conference on Mining Software Repositories (MSR 2010).

[25]  David J. Brown An Update on Software Updates , 2005, ACM Queue.

[26]  Alexander Serebrenik,et al.  Survival of Eclipse third-party plug-ins , 2012, 2012 28th IEEE International Conference on Software Maintenance (ICSM).

[27]  Alexander Serebrenik,et al.  Process Mining Software Repositories , 2011, 2011 15th European Conference on Software Maintenance and Reengineering.

[28]  Danny Holten,et al.  Hierarchical Edge Bundles: Visualization of Adjacency Relations in Hierarchical Data , 2006, IEEE Transactions on Visualization and Computer Graphics.

[29]  David Lorge Parnas,et al.  Review of David L. Parnas' "Designing Software for Ease of Extension and Contraction" , 2004 .

[30]  Ivan Herman,et al.  Graph Visualization and Navigation in Information Visualization: A Survey , 2000, IEEE Trans. Vis. Comput. Graph..

[31]  Alexander Serebrenik,et al.  Detecting Modularity "Smells" in Dependencies Injected with Java Annotations , 2010, 2010 14th European Conference on Software Maintenance and Reengineering.

[32]  Cristiano Giuffrida,et al.  Safe and automatic live update for operating systems , 2013, ASPLOS '13.

[33]  Slinger Jansen,et al.  A process model and typology for software product updaters , 2005, Ninth European Conference on Software Maintenance and Reengineering.