Main Infrastructure of KernelHaven
Switch branches/tags
Clone or download

README.md

KernelHaven

Build Status

KernelHaven offers a generic infrastructure for performing different analyses on product lines. This repository contains the main infrastructure, plugins are located in separate repositories.

Downloads

Core Infrastructure

These archives contain the core infrastructure only. Additional plugins are needed for a useful execution.

Bundled Releases

These archives contain the infrastructure as well as all public plugins. These bundles contain more than needed to run most experiments.

Plugins

The following table lists commonly used plugins for KernelHaven. They mostly focus on analysing the Linux Kernel.

Plugin Type License Download Status
KconfigReaderExtractor VariabilityModel-Extractor: Kconfig GPLv3 Build Status of KconfigReaderExtractor
UndertakerExtractor CodeModel-Extractor: *.c, *.h, *.S GPLv3 Build Status of UndertakerExtractor
TypeChefExtractor CodeModel-Extractor: *.c, *.h Apache License 2.0 Build Status of TypeChefExtractor
srcMLExtractor CodeModel-Extractor: *.c GPLv3 Build Status of srcMLExtractor
KbuildMinerExtractor BuildModel-Extractor: Kbuild*, Makefile* GPLv3 Build Status of KbuildMinerExtractor
CnfUtils Utilities: SAT-Solver, CNF-Converter, Formula simplifiers, ... Apache License 2.0 Build Status of CnfUtils
IOUtils Utilities: Excel-readers and writers for extractors and analysis plugins Apache License 2.0 Build Status of IOUtils
NonBooleanUtils Utilities: Utilities to handle models, which are not pure Boolean (Pseudo-SAT) Apache License 2.0 Build Status of NonBooleanUtils
UnDeadAnalyzer Analysis: Detection of dead code and unused variables of the variability model Apache License 2.0 Build Status of UnDeadAnalyzer
FeatureEffectAnalyzer Analysis: Detection of presence conditions and feature effects Apache License 2.0 Build Status of FeatureEffectAnalyzer
MetricHaven Analysis: Metric Infrastructure for SPL-Metrics Apache License 2.0 Build Status of MetricHaven
Configuration Mismatches Analysis: Detection of Configuration Mismatches Apache License 2.0 Build Status of Configuration Mismatches
Problem-Solution-Space Mapper Analysis: Identification of relations between problem and solution space artifacts Apache License 2.0 Build Status of Problem-Solution-Space Mapper

The following image visualizes the dependencies between the plugins (open image in a new browser tab to make plugin links clickable):

Plugin Dependencies

Setup

Although KernelHaven can be configured to use different paths, the usual setup looks like this:

kernel_haven/
├── cache/
│   └── ...
├── log/
│   └── ...
├── output/
│   └── ...
├── plugins/
│   ├── cnfutils.jar
│   ├── kbuildminerextractor.jar
│   ├── kconfigreaderextractor.jar
│   ├── undeadanalyzer.jar
│   └── undertakerextractor.jar
├── res/
│   └── ...
├── kernel_haven.jar
└── dead_code.properties

A configuration to execute a dead code analysis on Linux with this setup looks like this:

# Linux Source Tree
source_tree = /path/to/linux-4.4
arch = x86

# Analysis
analysis.class = net.ssehub.kernel_haven.undead_analyzer.DeadCodeAnalysis

# Code Extractor
code.provider.cache.read = true
code.provider.cache.write = true
code.extractor.class = net.ssehub.kernel_haven.undertaker.UndertakerExtractor
code.extractor.threads = 4

# Build Extractor
build.provider.cache.read = true
build.provider.cache.write = true
build.extractor.class = net.ssehub.kernel_haven.kbuildminer.KbuildMinerExtractor

# Variability Extractor
variability.provider.cache.read = true
variability.provider.cache.write = true
variability.extractor.class = net.ssehub.kernel_haven.kconfigreader.KconfigReaderExtractor

# Logging
log.console = true
log.file = true

# Directories
archive.dir = .
cache_dir = cache/
log.dir = log/
output_dir = output/
plugins_dir = plugins/
resource_dir = res/

See config_template.properties for a full list of available configuration options for the infrastructure and common plugins.

Further Documentation

Further documentation can be found in the wiki on GitHub. A pdf version can be downloaded from here.

Video Tutorials

Introduction and Experiments

KernelHaven - Introduction and Experiments

ICSE 2018 Demonstration

KernelHaven - ICSE 2018 Demonstration Video

License

The main infrastructure (this project) is licensed under the Apache License 2.0. Plugins may have different licenses.

Acknowledgments

This work is partially supported by the ITEA3 project REVaMP2, funded by the BMBF (German Ministry of Research and Education) under grant 01IS16042H.

We would like to thank the following persons, who contributed to the initial version of KernelHaven: Moritz Flöter, Adam Krafczyk, Alice Schwarz, Kevin Stahr, Johannes Ude, Manuel Nedde, Malek Boukhari, and Marvin Forstreuter.