Thomas Thüm

Thomas Thüm
Ulm University | UULM · Institute of Software Engineering and Compiler Construction

Professor

About

142
Publications
12,117
Reads
How we measure 'reads'
A 'read' is counted each time someone views a publication summary (such as the title, abstract, and list of authors), clicks on a figure, or views or downloads the full-text. Learn more
3,203
Citations
Additional affiliations
February 2010 - March 2015
Otto-von-Guericke-Universität Magdeburg
Position
  • Lectures, Exercises, Seminars
February 2010 - March 2015
Otto-von-Guericke-Universität Magdeburg
Position
  • Research Assistant
Education
February 2010 - March 2015
Otto-von-Guericke-Universität Magdeburg
Field of study
  • Software Engineering
June 2008 - January 2010
Otto-von-Guericke-Universität Magdeburg
Field of study
  • Computer Science
September 2004 - June 2008
Otto-von-Guericke-Universität Magdeburg
Field of study
  • Computer Science

Publications

Publications (142)
Chapter
We demonstrate that traits are a natural way to support correctness-by-construction (CbC) in an existing programming language in the presence of traditional post-hoc verification (PhV). With Correctness-by-Construction, programs are constructed incrementally along with a specification that is inherently guaranteed to be satisfied. CbC is complex to...
Preprint
Full-text available
Sampling techniques, such as t-wise interaction sampling are used to enable efficient testing for configurable systems. This is achieved by generating a small yet representative sample of configurations for a system, which circumvents testing the entire solution space. However, by design, most recent approaches for t-wise interaction sampling only...
Preprint
We demonstrate that traits are a natural way to support correctness-by-construction (CbC) in an existing programming language in the presence of traditional post-hoc verification (PhV). With Correctness-by-Construction, programs are constructed incrementally along with a specification that is inherently guaranteed to be satisfied. CbC is complex to...
Article
Full-text available
A product line is an approach for systematically managing configuration options of customizable systems, usually by means of features. Products are generated for configurations consisting of selected features. Product-line evolution can lead to unintended changes to product behavior. We illustrate that updating configurations after product-line evo...
Conference Paper
Tracing requirements to their implementation is crucial to all stakeholders of a software development process. When managing software variability, requirements are typically expressed in terms of features, a feature being a user-visible characteristic of the software. While feature traces are fully documented in software product lines, ad-hoc branc...
Chapter
Correctness of software is an important concern in many safety-critical areas like aviation and the automotive industry. In order to have skilled developers, teaching formal methods is crucial. In our software quality course, we teach students two techniques for correct software development, post-hoc verification and correctness-by-construction. Du...
Chapter
Today, software systems are rarely developed monolithically, but may be composed of numerous individually developed features. Their modularization facilitates independent development and verification. While feature-based strategies to verify features in isolation have existed for years, they cannot address interactions between features. The problem...
Chapter
Correctness-by-construction (CbC) is a refinement-based methodology to incrementally create formally correct programs. Programs are constructed using refinement rules which guarantee that the resulting implementation is correct with respect to a pre-/postcondition specification. In contrast, with post-hoc verification (PhV) a specification and a pr...
Article
Recent research on quality assurance (QA) of configurable software systems (e.g., software product lines) proposes different analysis strategies to cope with the inherent complexity caused by the well-known combinatorial-explosion problem. Those strategies aim at improving efficiency of QA techniques like software testing as compared to brute-force...
Article
Software Product Lines (SPLs) are a common technique to capture families of software products in terms of commonalities and variabilities. On a conceptual level, functionality of an SPL is modeled in terms of features in Feature Models (FMs). As other software systems, SPLs and their FMs are subject to evolution that may lead to the introduction of...
Chapter
Full-text available
Cyber-physical systems are ubiquitous nowadays. However, as automation increases, modeling and verifying them becomes increasingly difficult due to the inherently complex physical environment. Skill graphs are a means to model complex cyber-physical systems (e.g., vehicle automation systems) by distributing complex behaviors among skills with inter...
Conference Paper
A software product line comprises a set of products that share a common code base, but vary in specific characteristics called features. Ideally, features of a product line are developed in isolation and composed subsequently. Product lines are increasingly used for safety-critical software, for which quality assurance becomes indispensable. While...
Conference Paper
Variation is central to today's software development. There are two fundamental dimensions to variation: Variation in time refers to the fact that software exists in numerous revisions that typically replace each other (i.e., a newer version supersedes an older one). Variation in space refers to differences among variants that are designed to coexi...
Conference Paper
Configuration is a key enabling technology for the engineering of systems and software as wells as physical goods. A selection of configuration options (aka. features) is often enough to automatically generate a product tailored to the needs of a customer. It is common that not all combinations of features are possible in a given domain. Feature mo...
Conference Paper
Quality assurance for product lines is often infeasible for each product separately. Instead, only a subset of all products (i.e., a sample) is considered during testing such that at least the coverage of certain feature interactions is guaranteed. While pair-wise interaction sampling only covers all interactions between two features, its generaliz...
Chapter
At universities, some fields of study offer multiple branches to graduate in. These branches are defined by mandatory and optional courses. Configuring a branch manually can be a difficult task, especially if some courses have already been attended. Hence, a tool providing guidance on choosing courses is desired. Feature models enable modelling suc...
Chapter
This chapter is devoted to the performance analysis of configurable and evolving software. Both configurability and evolution imply a high degree of software variation, that is a large space of software variants and versions, that challenges state-of-the-art analysis techniques for software. We give an overview on strategies to cope with software v...
Chapter
In this chapter, we discuss the diverse set of challenges, from different perspectives, that we face because of our aim to incorporate knowledge in software and processes tailored for software and systems evolution. Firstly, the discovery and externalization of knowledge about requirements, the recording and representation of design decisions, and...
Article
A software product line comprises a set of products that share a common code base, but vary in specific characteristics called features. Ideally, features of a product line are developed in isolation and composed subsequently. Product lines are increasingly used for safety–critical software, for which quality assurance becomes indispensable. While...
Chapter
Correctness-by-Construction (CbC) is an approach to incrementally create formally correct programs guided by pre- and postcondition specifications. A program is created using refinement rules that guarantee the resulting implementation is correct with respect to the specification. Although CbC is supposed to lead to code with a low defect rate, it...
Article
Full-text available
A software product line comprises a family of software products that share a common set of features. Testing an entire product-line product-by-product is infeasible due to the potentially exponential number of products in the number of features. Accordingly, several sampling approaches have been proposed to select a presumably minimal, yet sufficie...
Preprint
Full-text available
Deductive verification of software has not yet found its way into industry, as complexity and scalability issues require highly specialized experts. The long-term perspective is, however, to develop verification tools aiding industrial software developers to find bugs or bottlenecks in software systems faster and more easily. The KeY project consti...
Conference Paper
Recent research on quality assurance (QA) of configurable software systems (e.g., software product lines) proposes different analysis strategies to cope with the inherent complexity caused by the well-known combinatorial-explosion problem. Those strategies aim at improving efficiency of QA techniques like software testing as compared to brute-force...
Conference Paper
Software Product Lines (SPLs) are a common technique to capture families of software products in terms of commonalities and variabilities. On a conceptual level, functionality of an SPL is modeled in terms of features in Feature Models (FMs). As other software systems, SPLs and their FMs are subject to evolution that may lead to the introduction of...
Chapter
Today, software verification is vital for safety-critical and security-critical applications applied in industry. However, specifying large-scale software systems for efficient verification still demands high effort and expertise. In deductive verification, design by contract is a widespread software methodology to explicitly specify the behavior o...
Article
Testing is a crucial activity of product-line engineering. Due to shared commonality, testing each variant individually results in redundant testing processes. By adopting regression testing strategies, variants are tested incrementally by focusing on the variability between variants to reduce the overall testing effort. However, product lines evol...
Conference Paper
A Software Product Line (SPL) captures families of software products and its functionality is captured as features in a feature model. Similar to other software systems, SPLs and their feature models are subject to evolution. Temporal Feature Models (TFMs) are an extension to feature models that allow for engineers to model past feature-model evolu...
Conference Paper
Software-product-line engineering is an approach to systematically manage reusable software features and has been widely adopted in practice. Still, in most cases, organizations start with a single product that they clone and modify when new customer requirements arise (a.k.a. clone-and-own). With an increasing number of variants, maintenance can b...
Conference Paper
FeatureIDE is an open-source framework to model, develop, and analyze feature-oriented software product lines. It is mainly developed in a cooperation between TU Braunschweig, University of Magdeburg, and Metop GmbH. Nevertheless, many other institutions contributed to it in the past decade. Goal of this tutorial is to illustrate how FeatureIDE can...
Conference Paper
Full-text available
The analysis of software product lines is challenging due to the potentially large number of products, which grow exponentially in terms of the number of features. Product sampling is a technique used to avoid exhaustive testing, which is often infeasible. In this paper, we propose a classification for product sampling techniques and classify the e...
Chapter
As formal verification of software systems is a complex task comprising many algorithms and heuristics, modern theorem provers offer numerous parameters that are to be selected by a user to control how a piece of software is verified. Evidently, the number of parameters even increases with each new release. One challenge is that default parameters...
Conference Paper
Full-text available
Highly-configurable systems encompass thousands of interdependent configuration options, which require a non-trivial configuration process. Decision propagation enables a backtracking-free configuration process by computing values implied by user decisions. However, employing decision propagation for large-scale systems is a time-consuming task and...
Conference Paper
Full-text available
Mutation testing is a program-transformation technique that evaluates the quality of test cases by assessing their capability to detect injected artificial faults. The costs of using mutation testing are usually high, hindering its use in industry. Previous research has reported that roughly one-third of the mutants generated in single systems are...
Conference Paper
Software evolution is an inevitable process in the development of long-living software systems as, e.g., changes of requirements demand corresponding adaptations. For software product lines, the incorporation of evolution in the development process gets even more complex due to the vast number of potential variants and the set of reusable domain ar...
Conference Paper
The combination of agile methods and formal methods has been recognized as a promising field of research. However, many formal methods rely on a refinement-based development process which poses problems for their integration into agile processes. We consider redundancies within refinement hierarchies as a challenge for the practical application of...
Conference Paper
FeatureIDE is a popular open-source tool for modeling, implementing, configuring, and analyzing software product lines. However, FeatureIDE's initial design was lacking mechanisms that facilitate extension and reuse of core implementations. In current releases, we improve these traits by providing a modular concept for core data structures and func...
Chapter
Feature traceability is the ability to find features. When working with large feature models, it can be hard to identify certain features across the project, in the feature model, in configuration files, and source artifacts. In FeatureIDE, we provide several mechanisms that ease tracing features. In this chapter, we discuss how feature traceabilit...
Chapter
A common task during software development, in general, and feature-oriented software development, in particular, is to locate features in domain artifacts. We discuss how to trace features that are implemented using conditional compilation. Feature traceability is especially challenging for conditional compilation, as features used in preprocessor...
Chapter
Software product lines are typically instances of long-living software. One reason is that a product line must be maintained if any of its products needs maintenance. Another reason is that the goal of product lines is to foresee future evolution and plan for it in advance. Hence, product lines are typically maintained for years, and this maintenan...
Chapter
Product configuration is the process to select the features that should be contained in the final product. In Chap. 5, we showed how feature models define the domain. Feature models define the features and their relationships, meaning which features are required and how features need to be selected together. We showed how FeatureIDE helps to design...
Chapter
Conditional compilation is one of the most important and popular techniques to implement variable systems. Using preprocessors, code can be annotated with directives to include or exclude statements depending on feature selections. That way, products can be customized to the needs of a customer. Due to this mark and exclude principle, preprocessors...
Chapter
Variability of products is part of our daily life. We do not want to buy just a car—we want a car in our favorite color, with five doors, a cooling system, and a navigation system. Classical engineering copes well with this kind of variant-rich production. To ease the customization of software, this book presents a tool-driven approach for software...
Chapter
FeatureIDE implements a general support to implement feature-oriented software product lines. In this chapter, we give a general overview on the functionalities of FeatureIDE. To get a first impression of FeatureIDE, we use a small “Hello World” application. As FeatureIDE supports all phases of the feature-oriented software development process, we...
Chapter
FeatureIDE is an Eclipse plug-in that supports the development of feature-oriented software product lines. To use the tool, we first need to set up Eclipse and install all the plug-ins we need for the preceding of this book. In this chapter, we provide step-by-step instructions on how to set up the system to use FeatureIDE. First, we explain how to...
Chapter
Feature traceability refers to the ability to locate features in software artifacts. Traceability helps developers to identify relevant artifacts during development and maintenance. Feature-oriented programming already establishes a one-to-one mapping between features and artifacts, whereas conditional compilation comes with a many-to-many mapping....
Chapter
In feature-oriented software product lines, products can be generated completely automatic for each valid configuration. In this chapter, we give an overview on further implementation techniques that are supported within FeatureIDE. In this chapter, we focus on runtime variability resolving variability decisions at runtime, black-box frameworks ena...
Chapter
A feature model is the central part of a software product line. Feature models are used to describe how features can be combined to form the different products of a software product line. Thus, feature models are also the central part of projects in FeatureIDE. All parts of the development process with FeatureIDE depend on the feature model, from m...
Chapter
Feature modeling and product configuration are central parts of software product line development. They define the domain and which features are contained in the final products. Feature modeling and product configuration are manual and thus error-prone tasks. Thus, the design of a feature model comes with several pitfalls for validity. It is necess...
Chapter
In this chapter, we introduce the main support of FeatureIDE for conditional compilation. The chapter is designed that each part can be done hands-on. We explain the details of the functionalities using our running example of the elevator from Chap. 4 Using the initial example, we start with an elevator application without any variability. The elev...
Chapter
In this chapter, we illustrate how to implement software product lines with feature-oriented programming in FeatureIDE. The goal of this chapter is to illustrate and practice how feature-oriented programming works in detail and how the workflow of FeatureIDE implements the product line. We use our running example of the elevator product line and ex...
Chapter
The goal of this chapter is to give an overview on FeatureIDE’s functionality. While previous parts and chapters focused on aspects of the tool support only, we aim to present the big picture in the following. That is, we present the goal of views and editors as well as how they differ when using other implementation techniques as composers. In add...
Chapter
Preprocessors can help to implement better quality software as they prevent to copy and adapt an existing system multiple times. However, preprocessor annotated software also comes with problems for code comprehension and failure detection. Preprocessor annotations have a negative impact on code understanding, and it is often hard to reason about t...
Chapter
For the description of FeatureIDE’s functionality, we use the running example of an elevator. Elevator systems can appear in multiple variations, such as different scheduling algorithms, or security properties. In this chapter, we explain a simple elevator system with a specific scheduling algorithm. The system is used as a basis in the later chapt...
Chapter
Assuring good software quality is essential to effectively deploy reliable systems. Variability of the software to implement reuse also comes with problems, such as bugs due to feature interactions, difficulties for code comprehension, and the sheer number of products that can be derived. It is hard to detect variability bugs in the first place as...
Chapter
Feature-oriented programming is a specialized form of generative programming. A specialized composition mechanism generates program variants out of code fragments. In contrast to conditional compilation, this approach allows to realize separation of concerns, meaning that features are implemented in isolation, while features in preprocessor annotat...