Software Engineering: A Roadmap

Abstract:

This paper provides a roadmap for software engineering. It identifies the principal research challenges being faced by the discipline and brings together the threads derived from the key research specialisations within software engineering. The paper draws heavily on the roadmaps covering specific areas of software engineering research collected in this volume.

Introduction:

This paper attempts to construct a roadmap for software engineering research. It seeks to identify the principal research challenges being faced by the discipline and to bring together the threads derived from the key research specialisations within software engineering. In doing so it draws heavily on the roadmaps covering specific areas of software engineering research collected in this volume.

Definitions are notoriously difficult but for working purposes and those of this volume - software engineering is the branch of systems engineering concerned with the development of large and complex software intensive systems. It focuses on: the real-world goals for, services provided by, and constraints on such systems; the precise specification of system structure and behaviour, and the implementation of these specifications; the activities required in order to develop an assurance that the specifications and real-world goals have been met; the evolution of such systems over time and across system families. It is also concerned with the processes, methods and tools for the development of software intensive systems in an economic and timely manner.

We do not aim to provide a summary of the overall stateof- the-art in software engineering. The reader interested in a general introduction should refer to the many excellent textbooks that are available. Best known, and a good starting point, are [5], [3] and [2], all of which are reasonably up to date. [1] affords a good start to the broader literature. The research literature on software engineering is readily available.

IEEE Transactions on Software Engineering (IEEE-TSE) and ACM Transactions on Software Engineering and Methodology (ACM-TOSEM) are the principal archival journals. There are a large number of specialised journals including for example Automated Software Engineering (ASE), Requirements Engineering Journal (REJ), Software Process Journal (SPJ). IEEE Software plays an important role in bridging between the ÔpureÕ research literature and practitioner-oriented articles. The International Conference on Software Engineering (ICSE) is the flagship conference of the software engineering community; papers in this conference are generally of a high standard and the proceedings reflect a broad view of research across software engineering. The European Software Engineering Conferences (ESEC) and the Foundations of Software Engineering Conferences (FSE), which are held jointly in alternate years, are similar to ICSE though have tended historically to have a slightly more ÔtheoreticalÕ orientation.

There are a large number of specialised conferences and workshops ranging from established meetings such as the International Workshop on Software Specification and Design, International Software Architecture Workshop, International Symposium on Software Testing and Analysis to the Ôhot-topicÕ workshops held in conjunction with ICSE. There are excellent resources on the web (links are provided on the web site associated with this volume). General software engineering announcements are distributed through the community wide ÒseworldÓ mailing list.

The structure of the paper is approximately as follows. In sections 2 and 3 we discuss the changing context of software system development and the changing orientation of software engineering research. In section 4 we make some broad observations about the evolution of the discipline. Then, in section 5, we analyse the key research challenges and show how these challenges are reflected in the specialised roadmaps that comprise the volume. We finish by drawing some broad and necessarily speculative and personal conclusions about the future of software engineering.

Research Challenges:

A wholly mature discipline is one that is able to identify Òdead problemsÓ. Dead problems are those to which effort need no longer be devoted because they have been solved. Computer science is slowly building up a list of such dead problems reinforcing its claim as a mature discipline. By contrast software engineering is still struggling to identify its own dead problems. Any list we constructed of such problems would almost certainly be more controversial than the attempt, which follows, to pick out key research challenges across software engineering. These overall software engineering research challenges are not comprehensive and the determined reader can infer our view of dead problems from it. The questions associated with each challenge are exemplars and individual researchers may derive much more specific research questions. Clearly these challenges are not orthogonal and there are complex relationships binding them together. Many of the most interesting research programmes look at these relationships.

    • Compositionality - When we compose components what effect does this have on the properties of those components? Can we reason about, and engineer for, the emergent properties of systems composed from components whose behaviour we understand?
    • Change - How can we cope with requirements change? How can we build systems that are more resilient or adaptive under change? How can we predict the effects of such changes?
    • Non-functional Properties - How can we model nonfunctional properties of systems and reason about them, particularly in the early stages of system development? How can these models be integrated with other models used in system development?
    • Service-view - How can we shift from a traditional product-oriented view of software system development towards a service view? What effects do new modes of software service delivery have on software development?
    • Perspectives - How can we devise and support new structuring schemes and methods for separating concerns?
    • Non-classical life cycles - How can we adapt conventional software engineering methods and techniques to work in evolutionary, rapid, extreme and other non-classical styles of software development?
    • Architecture - How can we represent, reason about and manage the evolution of software architectures? How can we relate software architecture to other parts of the software development process?
    • Configurability - How can we allow users, in the broadest sense, to use components in order to configure, customize and evolve systems?
    • Domain specificity - How can we exploit the properties of particular domains (telecommunications, transport) to make any of these challenges easier to address?

The detailed tables that follow look at these challenges set against the detailed challenges or pointers identified by the authors of the individual roadmaps. The tables also serve as a useful quick reference to the volume. A grayed box indicates a clear and straightforwardly identifiable relationship between a ÔbigÕ challenge and a more finegrained one. Also included in the tables are links or cross references from one set of fine-grain challenges to another.

While the challenges that we have been identified do not subsume all of the issues raised by the roadmaps they appear to subtly impact many of them. Very large proportions of the fine-grained challenges relate to the big challenges. Most of those which do not, relate different areas of research activity as indicated by links. A small proportion of the fine-grained challenges relates to neither big challenges nor other parts of the research agenda. These are, for the most part, technical problems blocking advances in particular areas.

Conclusion:

This paper takes a positive view of current progress and future challenges in software engineering. We believe the discipline has delivered and is well set to continue to deliver both practical support to software developers and the theoretical frameworks which will allow that practical support to be adopted, used and extended with confidence. It is well known that software engineering innovations take a surprisingly long time to percolate through to every day use [4]. Despite this lag current software engineering practice is being radically reshaped by object-oriented design methods, CASE tools with powerful code generation, testing and analysis environments, development patterns, incremental delivery based life-cycles, component models and document management environments. All of these have been formed through software engineering research.

A vision of the future of software engineering suggests a setting in which developers are able to wire together distributed components and services (heterogeneous and sourced over the net) having established at an early stage, through rigorous (yet easy-to-use) formal analysis that the particular configuration will meet the requirements (both functional and non-functional). The overall process in which this takes place will have seamless tool support that extends through to change over the system or service life. Each facet of the resulting system or service will be traceable to (and from) the originating stakeholders who will be involved throughout the process.

This vision is in fact an old one! The difference is that making it a reality is now within our grasp. We know what we have to do. What makes our field even more exciting is that, in addition to the steady progress towards our vision, there are also the discontinuities, such as was introduced in the last ten years by the web. The impact of such major innovations cannot be predicted but they certainly offer wonderful new opportunities and challenges.