, Université de Mons
, École Polytechnique de Montréal
, The Open University, UK
Pages: pp. 2-5
Modern society depends heavily on software systems. Software can enable or even accelerate human, social, economic, and technological changes. Software systems must often reflect these changes to adequately fulfill their roles and remain relevant to stakeholders, but the number of new requirements and maintenance requests often grows faster than software owners' abilities to implement them. Evolving and maintaining these systems is therefore critical and, consequently, most developers work on maintaining, incrementally enhancing, and adapting existing systems.
After two decades of growing interest in software evolution and related topics (see the sidebar "Software Evolution Concepts and Terminology"), many research groups are now working in this area and producing a growing body of knowledge (see the sidebar "Related References and Further Reading"). In May 2010, Google Scholar reported that for 2009, 70 publications had "software evolution" in the title, and more than 900 had "software evolution" somewhere in the text. Google Scholar data also shows, for these evolution-related publications, an increase of almost one order of magnitude between the yearly publication rates in the 1990s and those of the last decade.
This special issue brings this important topic further into the spotlight by providing a sample of recent research results with tools, lessons, and patterns that are applicable to real-world cases. We hope that this will stimulate further consideration, awareness, and research into software evolution.
Practitioners involved in software evolution are likely to face, knowingly or not, some of the constraints implied by the laws of software evolution Meir M. Lehman introduced in the 1970s. These laws or, rather, empirical hypotheses, suggest that any actively used software system must continually change to satisfy its stakeholders. On the basis of such changes, the system gradually degrades over time because such changes are likely to increase its complexity. If the complexity isn't controlled (for example, via refactoring in object-oriented systems or restructuring), then evolution costs can escalate, leading to even more complex changes—a vicious circle—until the software owners must make a radical decision, such as reengineering, migration, redevelopment, or replacement. But even replacement by an off-the-shelf system doesn't avoid the need for evolution: the software's owner, whether it's a vendor or the open source community, must still implement the changes.
Software evolution spans a wide range of topics within software engineering. This special issue opens with two invited and complementary perspectives on software evolution by two well-known authors in software engineering, Kent Beck and Barry Boehm. Boehm argues that the time of "one software evolution process fits all" is over and provides guidelines to select the most appropriate evolution-friendly process under various circumstances. Beck acknowledges the inevitability and difficulty of evolving a software design. He reminds us of the various factors that software developers and managers must consider when evolving systems (such as cost, time, and risk), including the need to keep a system operational during its actual evolution, which is particularly relevant to some critical applications.
This special issue also includes five peer-reviewed articles that provide samples of industrially relevant research results aimed at facilitating various aspects of software evolution. They cover model-driven software evolution, architecture-driven modernization, reengineering legacy systems, program refactoring, reverse engineering, and software quality assessment and improvement during evolution.
Joris Van Geet and Serge Demeyer highlight the difficulties of applying mature techniques for software evolution in practice. They indirectly justify the need for increased technological transfer between research and practice. For example, although researchers have studied feature identification and other techniques for years, industry's acceptance of such techniques is low, mostly because of the lack of out-of-the-box implementations.
By highlighting the need for a more practical approach to software evolution, Javier Luis Cánovas Izquierdo and Jesús García Molina illustrate how the architecture-driven modernization initiative by the OMG (Object Management Group) can concretely help in evolving legacy PL/SQL (Procedural Language/Structured Query Language) code to Java code.
Eric Bouwers and Arie van Deursen discuss when to perform evolution, while introducing a lightweight approach to monitor a system's architecture. How to perform evolution has been the subject of much research work, and Gustavo Soares, Rohit Gheyi, Dalton Serey, and Tiago Massoni present a tool that evaluates whether an applied refactoring appears to be harmless by automatically generating relevant test cases, which can then be executed to check that the system's behavior is preserved and, consequently, added to the system's overall test suite. These approaches give developers confidence that they're performing the right kind of evolution at the right moment. They can also help convince managers that the time is right to perform evolution tasks.
However, managers could still consider that evolution tasks, technically sound, are a waste of time. Hongyu Zhang and Sunghun Kim address this dilemma by showing how to visualize defect trends and study patterns that might appear. They do so through the simple means of C-charts, which are commonly used in statistical quality control.
If you want to find out more, we provide a list of recommended articles and books in the sidebar "Related References and Further Reading." You could also attend one of the annual conferences or workshops covering this topic, such as the IEEE International Conference on Software Maintenance (ICSM), the IEEE European Conference on Software Maintenance and Reengineering (CSMR), or the International Workshop on Principles of Software Evolution (IWPSE).
We thank all the authors who contributed to this special issue as well as the anonymous reviewers and the administrative staff of IEEE Software. Our IEEE Software mentor, Martin Robillard, contributed his experience and insights into many aspects of this issue's preparation. We're also grateful to editor-in-chief Hakan Erdogmus, lead editor Dale Strok, content editor Brian Brannon, and administrator Mercy Frederickson for promptly and professionally answering the many emails and queries, and helping out when needed. Yann-Gaël Guéhéneuc is supported by the Fonds Québécois de la Recherche sur la Nature et les Technologies (FQRNT), the Natural Sciences and Engineering Research Council, and the Canada Research Chair Tier II in Software Patterns and Patterns of Software. Part of Juan Fernandez-Ramil's work related to this special issue was funded by the Belgian Fonds de la Recherche Scientifique (FRS—FNRS) through postdoctoral grant number 2.4519.05. Tom Mens is supported by Action de Recherche Concertée AUWB-08/12-UMH19 "Model-Driven Software Evolution" funded by the Ministère de la Communauté française—Direction genérale de l'Enseignement non obligatoire et de la Recherche scienti?que (Belgium), and by the project Technologies d'Information et de Télécommunication (TIC) co-funded by the European Regional Development Fund and the Walloon Region (Belgium).