Jörg Liebig

dblp:15/7442 · DBLP profile ↗
← Back
12ranked-venue papers
3as first author
0since 2021 · last 2018
—ORCID · none

Domains — the database's venue-derived domains; a paper can count in several

Software engineering, systems software and programming languages · 12 · 3 first-author

Expertise — from the expertise taxonomy: the topics of the expert's papers under the CCF categories. A weight counts papers with recency: 1 for a paper about the topic, 0.3 when the topic is its context, halved every five years.

Software engineering, system software, and programming languages
6 papers
Program analysis · 32% Software maintenance and evolution · 27% Requirements engineering and software design · 21%

Topics — the 13 heaviest of 13, each with the papers that count most for it

TopicWeightPapersLastEvidence papers
Requirements engineering and software design
software product lines
0.732018
Variability-Aware Static Analysis at Scale: An Empirical Study · ACM Trans. Softw. Eng. Methodol. 2018
Morpheus: Variability-Aware Refactoring in the Wild · ICSE (1) 2015
An analysis of the variability in forty preprocessor-based software product lines · ICSE (1) 2010
Program analysis
static analysis
0.522018
Variability-Aware Static Analysis at Scale: An Empirical Study · ACM Trans. Softw. Eng. Methodol. 2018
Scalable analysis of variable software · ESEC/SIGSOFT FSE 2013
Program analysis › static analysis
variability-aware analysis
0.522018
Variability-Aware Static Analysis at Scale: An Empirical Study · ACM Trans. Softw. Eng. Methodol. 2018
Scalable analysis of variable software · ESEC/SIGSOFT FSE 2013
Software maintenance and evolution › software variability
configurable software systems
0.212015
Morpheus: Variability-Aware Refactoring in the Wild · ICSE (1) 2015
Software maintenance and evolution
refactoring
0.212015
Morpheus: Variability-Aware Refactoring in the Wild · ICSE (1) 2015
Software testing
software product line testing
0.212013
Scalable analysis of variable software · ESEC/SIGSOFT FSE 2013
Empirical software engineering
mining software repositories
0.122011
An analysis of the variability in forty preprocessor-based software product lines · ICSE (1) 2010
Semistructured merge: rethinking merge in revision control systems · SIGSOFT FSE 2011
Empirical software engineering
developer studies
0.112012
Toward measuring program comprehension with functional magnetic resonance imaging · SIGSOFT FSE 2012
Software maintenance and evolution
program comprehension
0.112012
Toward measuring program comprehension with functional magnetic resonance imaging · SIGSOFT FSE 2012
Software maintenance and evolution › software merging
merge conflict resolution
0.112011
Semistructured merge: rethinking merge in revision control systems · SIGSOFT FSE 2011
Software maintenance and evolution › software configuration management
version control
0.112011
Semistructured merge: rethinking merge in revision control systems · SIGSOFT FSE 2011
Empirical software engineering › software engineering research methodology
empirical study
0.112018
Variability-Aware Static Analysis at Scale: An Empirical Study · ACM Trans. Softw. Eng. Methodol. 2018
Empirical software engineering › developer studies
cognitive processes
0.012012
Toward measuring program comprehension with functional magnetic resonance imaging · SIGSOFT FSE 2012

Methods — techniques the papers use, named apart from their topics

sampling heuristics · 0.3data flow analysis · 0.3control flow analysis · 0.3variability-aware analysis · 0.2satisfiability solvers · 0.2type checking · 0.2liveness analysis · 0.2functional magnetic resonance imaging · 0.1empirical study · 0.1annotated grammars · 0.1
YearPublicationVenuePosition
2018 Variability-Aware Static Analysis at Scale: An Empirical Study
abstract
The advent of variability management and generator technology enables users to derive individual system variants from a configurable code base by selecting desired configuration options. This approach gives rise to the generation of possibly billions of variants, which, however, cannot be efficiently analyzed for bugs and other properties with classic analysis techniques. To address this issue, researchers and practitioners have developed sampling heuristics and, recently, variability-aware analysis techniques. While sampling reduces the analysis effort significantly, the information obtained is necessarily incomplete, and it is unknown whether state-of-the-art sampling techniques scale to billions of variants. Variability-aware analysis techniques process the configurable code base directly, exploiting similarities among individual variants with the goal of reducing analysis effort. However, while being promising, so far, variability-aware analysis techniques have been applied mostly only to small academic examples. To learn about the mutual strengths and weaknesses of variability-aware and sample-based static-analysis techniques, we compared the two by means of seven concrete control-flow and data-flow analyses, applied to five real-world subject systems: B usybox , O pen SSL, SQL ite , the x86 L inux kernel, and u C libc . In particular, we compare the efficiency (analysis execution time) of the static analyses and their effectiveness (potential bugs found). Overall, we found that variability-aware analysis outperforms most sample-based static-analysis techniques with respect to efficiency and effectiveness. For example, checking all variants of O pen SSL with a variability-aware static analysis is faster than checking even only two variants with an analysis that does not exploit similarities among variants.
Alexander von Rhein, Jörg Liebig, Andreas Janker, Christian Kästner, Sven Apel
ACM Trans. Softw. Eng. Methodol.2
2015 Morpheus: Variability-Aware Refactoring in the Wild
abstract
Today, many software systems are configurable with conditional compilation. Just like any software system, configurable systems need to be refactored in their evolution, but their inherent variability induces an additional dimension of complexity that is not addressed well by current academic and industrial refactoring engines. To improve the state of the art, we propose a variability-aware refactoring approach that relies on a canonical variability representation and recent work on variability-aware analysis. The goal is to preserve the behavior of all variants of a configurable system, without compromising general applicability and scalability. To demonstrate practicality, we developed Morpheus, a sound, variability-aware refactoring engine for C code with preprocessor directives. We applied Morpheus to three substantial real-world systems (Busybox, OpenSSL, and SQLite) showing that it scales reasonably well, despite of its heavy reliance on satisfiability solvers. By extending a standard approach of testing refactoring engines with support for variability, we provide evidence for the correctness of the refactorings implemented.
Jörg Liebig, Andreas Janker, Florian Garbe, Sven Apel, Christian Lengauer
ICSE (1)1
2014 Measuring and modeling programming experience
Janet Siegmund, Christian Kästner, Jörg Liebig, Sven Apel, Stefan Hanenberg
Empir. Softw. Eng.3
2013 Does the discipline of preprocessor annotations matter?: a controlled experiment
abstract
The C preprocessor (CPP) is a simple and language-independent tool, widely used to implement variable software systems using conditional compilation (i.e., by including or excluding annotated code). Although CPP provides powerful means to express variability, it has been criticized for allowing arbitrary annotations that break the underlying structure of the source code. We distinguish between disciplined annotations, which align with the structure of the source code, and undisciplined annotations, which do not. Several studies suggest that especially the latter type of annotations makes it hard to (automatically) analyze the code. However, little is known about whether the type of annotations has an effect on program comprehension. We address this issue by means of a controlled experiment with human subjects. We designed similar tasks for both, disciplined and undisciplined annotations, to measure program comprehension. Then, we measured the performance of the subjects regarding correctness and response time for solving the tasks. Our results suggest that there are no differences between disciplined and undisciplined annotations from a program-comprehension perspective. Nevertheless, we observed that finding and correcting errors is a time-consuming and tedious task in the presence of preprocessor annotations.
Sandro Schulze, Jörg Liebig, Janet Siegmund, Sven Apel
GPCE2
2013 Scalable analysis of variable software
abstract
The advent of variability management and generator technology enables users to derive individual variants from a variable code base based on a selection of desired configuration options. This approach gives rise to the generation of possibly billions of variants that, however, cannot be efficiently analyzed for errors with classic analysis techniques. To address this issue, researchers and practitioners usually apply sampling heuristics. While sampling reduces the analysis effort significantly, the information obtained is necessarily incomplete and it is unknown whether sampling heuristics scale to billions of variants. Recently, researchers have begun to develop variability-aware analyses that analyze the variable code base directly exploiting the similarities among individual variants to reduce analysis effort. However, while being promising, so far, variability-aware analyses have been applied mostly only to small academic systems. To learn about the mutual strengths and weaknesses of variability-aware and sampling-based analyses of software systems, we compared the two strategies by means of two concrete analysis implementations (type checking and liveness analysis), applied them to three subject systems: Busybox, the x86 Linux kernel, and OpenSSL. Our key finding is that variability-aware analysis outperforms most sampling heuristics with respect to analysis time while preserving completeness.
Jörg Liebig, Alexander von Rhein, Christian Kästner, Sven Apel, Jens Dörre, Christian Lengauer
ESEC/SIGSOFT FSE1
2013 Do background colors improve program comprehension in the #ifdef hell?
Janet Siegmund, Christian Kästner, Sven Apel, Jörg Liebig, Michael Schulze, Raimund Dachselt, Maria Papendieck, Thomas Leich, Gunter Saake
Empir. Softw. Eng.4
2012 Measuring programming experience
abstract
Programming experience is an important confounding parameter in controlled experiments regarding program comprehension. In literature, ways to measure or control programming experience vary. Often, researchers neglect it or do not specify how they controlled it. We set out to find a well-defined understanding of programming experience and a way to measure it. From published comprehension experiments, we extracted questions that assess programming experience. In a controlled experiment, we compare the answers of 128 students to these questions with their performance in solving program-comprehension tasks. We found that self estimation seems to be a reliable way to measure programming experience. Furthermore, we applied exploratory factor analysis to extract a model of programming experience. With our analysis, we initiate a path toward measuring programming experience with a valid and reliable tool, so that we can control its influence on program comprehension.
Janet Siegmund, Christian Kästner, Jörg Liebig, Sven Apel, Stefan Hanenberg
ICPC3
2012 Toward measuring program comprehension with functional magnetic resonance imaging
abstract
Program comprehension is an often evaluated, internal cognitive process. In neuroscience, functional magnetic resonance imaging (fMRI) is used to visualize such internal cognitive processes. We propose an experimental design to measure program comprehension based on fMRI. In the long run, we hope to answer questions like What distinguishes good programmers from bad programmers? or What makes a good programmer?
Janet Siegmund, André Brechmann, Sven Apel, Christian Kästner, Jörg Liebig, Thomas Leich, Gunter Saake
SIGSOFT FSE5
2012 Access control in feature-oriented programming
Sven Apel, Sergiy S. Kolesnikov, Jörg Liebig, Christian Kästner, Martin Kuhlemann, Thomas Leich
Sci. Comput. Program.3
2011 Exploring Software Measures to Assess Program Comprehension
abstract
Software measures are often used to assess program comprehension, although their applicability is discussed controversially. Often, their application is based on plausibility arguments, which, however, is not sufficient to decide whether software measures are good predictors for program comprehension. Our goal is to evaluate whether and how software measures and program comprehension correlate. To this end, we carefully designed an experiment. We used four different measures that are often used to judge the quality of source code: complexity, lines of code, concern attributes, and concern operations. We measured how subjects understood two comparable software systems that differ in their implementation, such that one implementation promised considerable benefits in terms of better software measures. We did not observe a difference in program comprehension of our subjects as the software measures suggested it. To explore how software measures and program comprehension could correlate, we used several variants of computing the software measures. This brought them closer to our observed result, however, not as close as to confirm a relationship between software measures and program comprehension. Having failed to establish a relationship, we present our findings as an open issue to the community and initiate a discussion on the role of software measures as comprehensibility predictors.
Janet Siegmund, Sven Apel, Jörg Liebig, Christian Kästner
ESEM3
2011 Semistructured merge: rethinking merge in revision control systems
abstract
An ongoing problem in revision control systems is how to resolve conflicts in a merge of independently developed revisions. Unstructured revision control systems are purely text-based and solve conflicts based on textual similarity. Structured revision control systems are tailored to specific languages and use language-specific knowledge for conflict resolution. We propose semistructured revision control systems that inherit the strengths of both: the generality of unstructured systems and the expressiveness of structured systems. The idea is to provide structural information of the underlying software artifacts --- declaratively, in the form of annotated grammars. This way, a wide variety of languages can be supported and the information provided can assist in the automatic resolution of two classes of conflicts: ordering conflicts and semantic conflicts. The former can be resolved independently of the language and the latter using specific conflict handlers. We have been developing a tool that supports semistructured merge and conducted an empirical study on 24 software projects developed in Java, C#, and Python comprising 180 merge scenarios. We found that semistructured merge reduces the number of conflicts in 60% of the sample merge scenarios by, on average, 34%, compared to unstructured merge. We found also that renaming is challenging in that it can increase the number of conflicts during semistructured merge, and that a combination of unstructured and semistructured merge is a pragmatic way to go.
Sven Apel, Jörg Liebig, Benjamin Brandl, Christian Lengauer, Christian Kästner
SIGSOFT FSE2
2010 An analysis of the variability in forty preprocessor-based software product lines
abstract
Over 30 years ago, the preprocessor cpp was developed to extend the programming language C by lightweight metaprogramming capabilities. Despite its error-proneness and low abstraction level, the preprocessor is still widely used in present-day software projects to implement variable software. However, not much is known about how cpp is employed to implement variability. To address this issue, we have analyzed forty open-source software projects written in C. Specifically, we answer the following questions: How does program size influence variability? How complex are extensions made via cpp's variability mechanisms? At which level of granularity are extensions applied? Which types of extension occur? These questions revive earlier discussions on program comprehension and refactoring in the context of the preprocessor. To provide answers, we introduce several metrics measuring the variability, complexity, granularity, and types of extension applied by preprocessor directives. Based on the collected data, we suggest alternative implementation techniques. Our data set is a rich source for rethinking language design and tool support.
Jörg Liebig, Sven Apel, Christian Lengauer, Christian Kästner, Michael Schulze
ICSE (1)1