24.02.13 - 01.03.13, Seminar 13091

Analysis, Test and Verification in The Presence of Variability

The following text appeared on our web pages prior to the seminar, and was included as part of the invitation.


Variability management is a set of practices that enable the development of software products together as a single product family by organizing] the common and variant parts of source code, and other related assets. Software developers adopt variability management in order to increase the flexibility of software, or to be able to produce variations of software economically, reducing cost through increased reuse.

Variability in software is a fact. It is supported by a number of strong economic trends: a personalization trend (catering to the needs of diverse users), an adaptability trend (the need to make software more flexible), and by business incentives – to make software less expensive to produce through systematic reuse.

The development processes around designing such software, and tools for deriving variants (generative programming) are now well established. Technologies exist that support programming and compilation of software with variability: preprocessors, polymorphism, object-oriented frameworks, component and extension frameworks, code generation and model driven development (domain specific languages.

Only recently have researchers begun working with core technologies that support the correctness of product families, turning their attention towards supporting (and leveraging) variability. Automatic analyses of software with variability is difficult, because it requires reasoning about all (or a number of) the variants simultaneously. Custom analysis techniques, for software with variability, however, allows for early detection of errors, because many (or all) variations of the software can be analyzed simultaneously, and there may be overlap between parts of the system.

While it is simple to derive a variant of a C program by applying a preprocessor to it for instance, reasoning about all variations that the preprocessor code allows, is complex. New tools and techniques have started to appear that are able to tell whether all variants of a C program with preprocessor conditional directives adhere to the C grammar, but this is still in its infancy. Standard tools are ineffective, since they require compiling all of the variants of such a program, which is clearly infeasible since systems grow combinatorially, and there may be thousands of options governing the compilation process for a single product family. Similar problems affect all elements of the software development tool-chain: type systems, program analyses, model checkers, model based testing tools, etc.

Our goal is to consolidate and stimulate research on analyses of software models with variability, enabling the design of variability-aware tool chains. We bring together key researchers working on quality assurance challenges that arise from introducing variability, and some who do not work with variability, but that are experts in their respective areas of broader software analysis research.

The seminar will include:

1. Sessions on challenges of analysis of variability, including models and software analysis, given by experts in variability research.

2. Presentation of state of the art research on software analysis that is not developed with variability in mind, but that can be applied to tackling the variability challenge.

3. Dynamically planned sessions on how to address these challenges, how to transfer knowledge, tools, and benchmarks between research areas.

The methods in focus will be program analysis, model checking, type checking, and testing. We believe that the seminar will fruitfully mix computer science and software engineering researchers, allowing the former to derive interesting basic research problems stemming from practical needs, and inspiring the latter to use the latest research advances in software analysis technology to advance variability management tools.