Oberstes Ziel der industriellen Software-Entwicklung ist es, ein Software-Produkt zu erstellen, das den Qualitätszielen gerecht wird. Dazu werden innerhalb des Qualitätsmanagement Maßnahmen zur Qualitätssicherung geplant und durchgeführt.
Balzert [ Bal98] schlägt eine Untergliederung der Maßnahmen des Qualitätsmanagements wie in der Abbildung 1 vor.
Abbildung 1: Maßnahmen des Qualitätsmanagements
Die Abgrenzung ist wie folgt:
Konstruktive Maßnahmen zielen darauf ab, dass durch den Einsatz bewährter Werkzeuge und Prinzipien a priori das entstehende Produkt bestimmte Eigenschaften erfüllt.
Analytische Maßnahmen bewirken nicht allein die Eigenschaft „Qualität“, sondern messen das Qualitätsniveau eines Artefaktes und lokalisieren Defekte. Erst in der Folge weiterer Tätigkeiten kann die geforderte Qualität dann erreicht werden. Die analytischen Maßnahmen zerfallen in folgende Teilbereiche:
Testende Verfahren führen das Programm mit Eingabedaten aus.
Analysierende Verfahren sammeln Informationen über den Prüfling, ohne ihn auszuführen. Letztere Verfahren können manuell (z.B. Reviews, Inspektionen, Walkthroughs) oder automatisch (z.B. statische Analyse) durchgeführt werden.
Bei dieser Definition gemäß Balzert schließt der Begriff "Analyse" ein, dass die Datenerhebung statisch erfolgt. Generell können Analysen jedoch auch dynamisch durchgeführt werden (siehe auch: Klassifikation von Analysen).
Die Tätigkeiten Qualitätssicherung und Reverse Engineering bedingen sich gegenseitig und überschneiden sich (Abbildung 2). Statische Analysen als Teil des Reverse Engineering liefern Informationen über die Dinge, deren Qualität gesichert werden soll. Andererseits findet Reverse Engineering meist im Rahmen der Wartung eines bestehenden Software-Systems statt, bei der sich den Phasen Parsen, Komponentenanalyse und Entwurfswiedergewinnung ein normales Forward-Engineering zur Umsetzung neuer Anforderungen anschließt (insgesamt: Reengieneering). Dort begleitet Qualitätssicherung wie üblich den Entstehungsprozess von Software. Allgemein werden Artefakte mit unterschiedlichem Abs-traktionsniveau gegen gesetzte externe Vorgaben (z.B. Entwurfsheuristiken oder Codierrichtlinien) geprüft oder es wird die ebenenübergreifende Konsistenz der Artefakte geprüft. Ob diese Artefakte dabei einem initialen Entwicklungsprozessdurchlauf entstammen oder aus einem bestehenden System wie-dergewonnen wurden, spielt aus Sicht der Durchführbarkeit der Qualitätssicherung keine Rolle.
Abbildung 2: Zusammenhang zwischen Forward-Engineering, Reverse-Engineering und Qualitätssicherung