Future Research s in Software Evolution Tom Mens Université de Mons Director of the ERCIM Working Group on Software Evolution With contributions from: Y.-G. Guéhéneuc, J. Buckley, R. Mittermeir, A. Winter, J. Muccini, R. Wuyts, R. Laemmel, S. Ducasse, J.M. Jézéquel
PhDs in Europe in the of software evolution
Observations Software change/evolution is inevitable unpredictable costly difficult time- and resource -consuming poorly supported by tools, techniques, formalisms underestimated by managers poorly understood
Software changes are unavoidable / inevitable Requirements and business environment changes due to New customers; existing customers with new demands Changes in organisational structure; competitors Changes in legislation Feedback loop: The changed software may be the reason why the environment changes! Bug fixes New hardware and software technologies Need for better quality, performance, reliability, New versions of interacting software Software degrades/erodes/ages over time (due to deadline pressure, missing documentation, inconsistent specs, lack of modularity, code duplication, )
(Schach, 2008): Most of the effort and cost is spent on post-delivery maintenance based on various data sources Average cost between 1976 and 1981 Changing software is costly Development 33% Average cost between 1992 and 1998 Development 25% Maintenance 67% Maintenance 75% (Erlikh, 2000, IT Pro) Leveraging legacy system dollars for E-business more than 90% of companies resources dedicated to software maintenance
Software Evolution s How/why is software evolution research relevant to society and industry? Software evolution is a transversal research activity that is required In all software engineering activities e.g. requirements specifications, analysis and design, programming, deployment, At all levels of abstraction E.g. executable code, bytecode, source code, design models, In all software development paradigms For all technologies In a wide variety of application s For many different types of stakeholders
Software Evolution s We need to support evolution at higher levels of abstraction e.g. models as opposed to code In emerging paradigms and associated technologies e.g. aspect-oriented, service-oriented, ambient, mobile, multicore, open source, distributed software development e.g., the future internet, cloud computing, SaaS, sustainable software development In relevant application s E.g. banking and finance, wireless networks, distributed systems, telecommunication, internet and web-based systems, healthcare systems, embedded and real-time systems,
Software Evolution s The order of the following list of challenges does not reflect their relative importance. We consider them all very important.
Software renovation / migration / re-engineering Finance Any where legacy systems need to be upgraded to newer technologies Legacy systems that are of strategic value to the company have become too expensive to modify, or need to make use of newer technologies How to rejuvenate/renovate/migrate/re-engineer these systems in a timely, cost-effective, resource-limited manner? How to ensure that the resulting system has the desired quality and functionality?
Upgrading software frameworks ERP systems (e.g. SAP, Microsoft Dynamics, Eclipse, ) Any software framework that is subject to customisation Many major software vendors develop software frameworks, i.e. partial software systems that need to be customised by their clients. Upgrading such frameworks becomes problematic as it often conflicts with the customisations (add-ons, add-ins, plug-ins) made by the clients. Provide techniques to address the upgrade problem and to facilitate framework development and upgrading
Runtime evolution and dynamic updating Telecommunication systems, distributed systems, finance, internet applications Many systems have become so indispensable that one cannot (afford to) shut them down to upgrade them How to safely update/change/evolve a software system during its execution? How to build in a control system in the software to decide when and how to change? self-optimization and self-healing and other self-* activities How to achieve dynamic reconfiguration of (component-based, serviceoriented etc.) distributed architectures? Context-awareness: How to make software more robust to changes by dynamically adapting to its context of use. Remark The static evolution challenges are as least as important to industry as the dynamic evolution challenge stated here.
Estimating change effort Any Most changes cannot be predicted/anticipated in advance For a given change, it is very difficult to estimate its impact or the effort it takes to implement it Practitioners need better support (tools, models, theories) to address the following questions: When should an accepted change request be planned? What is the potential (local and system-wide) impact of a particular change? How much effort (time and resources) does it take to make a particular change? When should one restructure the software to make future changes easier? Understanding the feedback loop: how does the external environment influence how the system evolves and vice versa?
Integrate evolution and maintenance in software development processes and tools Software development Current software development tools do not provide sufficient support for software evolution and maintenance Provide better languages, formal methods, and tools that embrace and provide more explicit support for incremental change Design for change: increase awareness (of developers, managers, end-users) of maintenance and evolution issues during initial development to create longer-lasting and enduring software systems Focus on quality and other non-functional attributes : need for integrated techniques to measure, control and improve these aspects of software
Software quality improvement and quality assurance Any Software is too often suffering from poor quality. Short-term vs long-term ROI: How to change managers mindframe? At a long-term, high quality software may pay off more than quick-and-dirty solutions that have a direct profit but are difficult to maintain in the long run How to develop integrated techniques and tools for measuring, controlling and improving quality and other non-functional attributes of software? Would certification of software quality lead to better industrial software?
Scaleability Systems of systems, distributed systems, ultra-large scale systems, Current solutions do not scale up to very large systems involving multiple languages, multiple levels of abstraction, different geographical locations, with hundreds or thousands of developers, a large (and diverse) user base, Provide techniques that support multi-language systems Cope with massive amounts of data (e.g. metadata, programs, models, languages, processes, tools, documentation, tests) Combine many different data sources (e.g. version repositories, file systems, databases, mailing lists, developer fora, bug tracking systems) Combine many different technologies Performance: how to achieve it, and keep it when the system evolves Tools: how to debug and maintain such systems?
The developer mismatch (1) Software evolution is often carried out by the wrong people: maintenance is more difficult than development from scratch, but too often carried out by unsupervised novices without proper tools; Software maintenance and evolution are often outsourced to external companies/countries that may not have the best developers or may not be willing to commit their best developers (2) Different development activities require different levels of expertise e.g., sw product line engineering, sw product development, sw product customisation, sw product configuration (3) The majority of software creators are not software professionals (Keynote M. Shaw, ESEC/FSE 2009) Raise awareness (in academia and industry) of the evolution problem Assign the right job to the right people Train people (in academia and industry) to achieve the right level of expertise Create and provide the right set of tools, depending on the required level of expertise
Model-driven evolution and maintenance MDE,MDA,MDD Any where high-level models or -specific visual languages are/can be used How to support evolution, reengineering and maintenance of software at the level of models (all kinds of software artefacts at a higher abstraction level than source code) Examples of models: business process models, analysis and design models, architectures,... How to support traceability between software artefacts? How to cope with co-evolution (of models and code, of different types of models, of programs and data, )?
Empirical research in software evolution Telecommunication systems, distributed systems, finance, internet applications, Empirical research in software evolution is hard due to: lack of subjects, lack of industrial data, threats to validity How to access industrial data of how software evolves in the field and the ability to perform replicable empirical studies based on this data? How to involve a sufficient number of subjects (e.g. experienced developers) in an experiment in order to obtain statistically significant results? How to set up an experiment in such a way that it is replicable by other researchers (access to data, tools, and other resources)? How to identify the main problems maintainers face?
A common framework and theory for joint software evolution research How can we improve European research in the field and avoid waste of geographically dispersed (human) resources? How can we better understand and explain the underlying principles governing software evolution? Develop a common research platform for doing joint research. Example: MOOSE reengineering platform (http://moose.unibe.ch/) Develop a theoretical model to explain how and why software evolves. Use this model to better understand, control and support software evolution