Of software and change. Issue 9 (1st August 2017) - Ghezzi, C.
Abstract: Change has been recognized as the distinguishing feature that makes software different from any other human‐produced artifacts. Initial reflections on the urgent and unavoidable need to master change date back to the 1970s. However, despite the continuous progress that characterized software technology since, in practice, software change is still often handled as an afterthought, in an ad hoc and unprincipled manner. Agile development methods have been proposed and are now widely adopted to accommodate change during development. Recent extensions to also include operation—known as DevOps—are increasingly and successfully adopted by industry. Still, principled and rigorous foundations that can be taught, practiced, and replicated systematically are lacking. This paper argues that change has to become a first‐class concept and that the development tools used by engineers and the runtime environment supporting software execution should be structured in a way that naturally accommodates change. It also provides a perspective along which several research approaches that were investigated by the community in the past decade might be integrated and extended to make this vision become true. Two main change categories are identified—evolution and adaptation—along with the forces that drive them. The paper discusses when and how the developed software can be designed in a way that it can self‐adapt. It also discusses how the software itself can cooperate with humans in‐the‐loop to help them in their design and development efforts. Finally, it outlines a roadmap of future work needed to progress in the direction of supporting and automating software change that would lead to dependable adaptation and evolution.