# Inferenzbaum

Ein Inferenzbaum (inferenz von lat. Infero = ‚hineintragen‘, ‚folgern‘, ‚schließen‘) bezeichnet in der Informatik, im Speziellen im Bereich der Softwareentwicklung, einen Graphen zur Darstellung von Entscheidungen und Folgerungen.
Dabei ähnelt der Inferenzbaum in seiner Abbildung dem Binärbaum, indem die Ergebnisse einer Schlussfolgerung durch die beiden Kinder eines Knotens repräsentiert werden. Der Inferenzbaum dient somit der Visualisierungen von Entscheidungsprozessen und deren Ergebnissen, die durch das Schlussfolgern bzw. Auswerten von Datenbeständen oder Systemzuständen mit Hilfe anhand eines entsprechenden Regelwerkes zustande kommen. Eine so genannte Inferenzmaschine wendet das Regelwerk bei der automatisierten Analyse und Auswertung an.

## Anwendung in der Softwareentwicklung

Inferenzbäume werden in der Softwareentwicklung eingesetzt, um im Rahmen des Qualitätsmanagements die Phasen und Methoden eines Entwicklungs- und Testprozesses gem. ihrer Güte und Zuverlässigkeit auf Grundlage von Fehlerdaten beurteilen zu können. Neben dem Bestandteil der Analyse und Bewertungen von Test- und Entwicklungsverfahren, liefern Inferenzbäume zusätzlich Vorschläge und Anleitungen, wie die Bewertung eines Prozesses einzuschätzen ist und welche Optimierungsmaßnahmen ergriffen werden können. Letzteres Merkmal des Inferenzbaumes unterscheidet ihn von einer reinen Binärbaum-Darstellung, die lediglich eine IST-Analyse verkörpert.
Die Qualität und Aussagekraft eines Inferenzbaumes hängen im Wesentlichen von der Vollständigkeit und Korrektheit des zugrunde liegenden Regelwerkes ab.

## Inferenzbäume bei der ODC

Die Software-Metrik Orthogonal Defect Classification (ODC) sieht unter anderem den Einsatz von Inferenzbäumen vor. So werden die im ODC-Format vorliegenden Fehlerdaten, die im Rahmen eines Softwareprojektes festgestellt werden, dazu verwendet, um mit Hilfe von Inferenzbäumen den Reifegrad und die Qualität des entsprechenden Entwicklungsprozesses bewerten und optimieren zu können. Wird eine entsprechende Logik (Regelwerk) verwendet, lassen sich die beteiligten Entwicklungs- und Testprozesse analysieren, bewerten und daraus konkrete Verbesserungsmöglichkeiten für diese Phasen schlussfolgern.

## Inferenzbaum-Analyse

Die Inferenzbaum-Analyse ist ein bestehendes Verfahren, das für Softwarefehlerdaten im ODC-Format eine Bewertung des Entwicklungsprozesses auf Basis eines geeigneten Regelwerkes zulässt. Darüber hinaus zeigt eine Inferenzbaum-Analyse konkrete Handlungsoptionen auf, wie die beteiligten Phasen eines Softwareentwicklungsprozesses optimiert werden können. Die Inferenzbaum-Analyse berücksichtigt bei den Schlussfolgerungen, inwiefern einzelne Entwicklungs- und Testphasen das Verursachen bzw. Aufdecken verschiedener Fehlerarten begünstigen. Dabei nutzt die Inferenzbaum-Analyse die Kategorisierung von Softwarefehlern als wesentliches Merkmal des ODC-Konzepts.

## Nutzen der Inferenzbaum-Analyse

Das Ergebnis einer Inferenzbaum-Analyse ist zum einen ein Binärbaum, der die IST-Situation des Softwareentwicklungsprozesses hinsichtlich Aufdeckung von Fehlern abbildet. Der so genannte Defekt-Pfad (siehe hellblau gefärbte Markierung in der Abbildung) dient der Visualisierung des IST-Zustandes. Weiterhin vergibt die Inferenzbaum-Analyse für jede Entwicklungs- und Testphase eine Bewertung hinsichtlich Fehlerfreiheit (Entwicklungsphase) und Zuverlässigkeit bei der Entdeckung von speziellen Fehlerarten (Testphase).
Die daraus gewonnenen Erkenntnisse können direkt in ein Redesign des Entwicklungsprozesses einfließen. Handlungsfelder können dann genauer lokalisiert und bearbeitet werden.
Die folgende Tabelle zeigt die möglichen Ergebnisse einer Inferenzbaum-Analyse für einen Entwicklungsprozess. Die in den Zellen dargestellten Bewertungen gem. dem Regelwerk (Exposed, Fixed, Revamp und Good) werden den beteiligten Entwicklungs- und Testphasen zugeordnet:
| Phase | Hohes Fehlertypaufkommen (H) | Niedriges Fehlertypaufkommen (L) |
| Entwicklung | Exposed (fehleranfällige Phase, auch nach Durchlaufen der Tests kann Korrektheit des Produkts nicht sichergestellt werden) | Fixed (hier verursachte Fehler wurden im Laufe der Tests nahezu vollständig behoben) |
| Test | Revamp (Testphase nicht zuverlässig in der Aufdeckung dafür typischer Fehlerarten) | Good (Testphase wird als zuverlässig zur Aufdeckung eines Fehlertyps angesehen) |