Softwarekonstruktion und -qualität
Softwarekonstruktion und -qualität befassen sich mit der disziplinierten Erstellung von funktionierendem Code und den Techniken – Testen, Verifikation, Überprüfung und Messung –, die sicherstellen, dass Software ihre Anforderungen und Qualitätsziele erfüllt.
Definition
Softwarekonstruktion ist die detaillierte Erstellung funktionierender Software durch Codierung, Verifikation, Unit-Tests und Debugging, und Softwarequalität ist der Grad, in dem Software ihre expliziten und impliziten Anforderungen erfüllt, sichergestellt durch Verifikation, Validierung und Qualitätsmanagementaktivitäten.
Scope
Dieser Bereich umfasst Praktiken der Softwarekonstruktion, einschließlich Codierungsstandards, defensiver Programmierung und Unit-Tests; Ebenen und Techniken des Softwaretests; Verifikation und Validierung; statische und dynamische Analyse; Code-Reviews und Refactoring; Software-Qualitätsattribute und -metriken; sowie formale Methoden zum Nachweis der Korrektheit. Er vereinigt die Aktivitäten, die zuverlässige Software produzieren und sicherstellen.
Sub-topics
Core questions
- Welche Praktiken führen zu Code, der korrekt, lesbar und wartbar ist?
- Wie werden Defekte durch Testen, Überprüfung und Analyse entdeckt?
- Wie wird Softwarequalität definiert, gemessen und sichergestellt?
- Wann kann Korrektheit durch formalen Beweis statt nur durch Testen festgestellt werden?
Key theories
- Testen deckt das Vorhandensein, nicht die Abwesenheit von Defekten auf
- Testen kann zeigen, dass Defekte existieren, kann aber deren Abwesenheit nicht beweisen; effektives Testen zielt daher darauf ab, die Wahrscheinlichkeit, Fehler zu finden, durch systematische Fallauswahl statt durch erschöpfende Ausführung zu maximieren.
- Verifikation und Validierung
- Verifikation prüft, ob die Software gemäß ihrer Spezifikation korrekt erstellt wurde, während Validierung prüft, ob die richtige Software erstellt wurde, um die Benutzeranforderungen zu erfüllen; zusammen umfassen sie Überprüfungen, Analysen und Tests über den gesamten Lebenszyklus hinweg.
- Qualität wird eingebaut, nicht eingetestet
- Qualität resultiert aus Konstruktionspraktiken, Design und Prozessdisziplin und nicht aus der Inspektion am Ende; Fehlervermeidung und frühzeitige Erkennung sind weitaus kostengünstiger als späte Korrektur.
Clinical relevance
Konstruktions- und Qualitätsaktivitäten bestimmen die Zuverlässigkeit, Sicherheit und Wartbarkeit eines Systems und dominieren die Kosten von Defekten; eine frühzeitige und systematische Verifikation reduziert Feldausfälle und Nacharbeit, was für die Bereitstellung zuverlässiger Software von zentraler Bedeutung ist.
Evidence & guidelines
ISO/IEC 25010 definiert ein Qualitätsmodell für Softwareprodukte, und die SWEBOK-Wissensgebiete zu Softwarekonstruktion, -test und -qualität bieten konsensbasierte Referenzleitlinien.
History
Systematisches Testen wurde in den 1970er Jahren von Myers artikuliert, strukturierte Programmierung und Verifikation von Dijkstra und Hoare in derselben Ära, und Konstruktionshandwerk von McConnell in den 1990er Jahren; Qualitätsmodelle und -standards wie ISO/IEC 25010 konsolidierten Qualitätsattribute und -messung.
Debates
- Testen versus formale Verifikation
- Es wird diskutiert, ob das Vertrauen in die Korrektheit auf umfangreichen Tests oder auf formalen Beweisen beruhen sollte; Testen skaliert auf große Systeme, kann aber die Korrektheit nicht garantieren, während formale Methoden starke Garantien zu höheren Kosten bieten und für kritische Komponenten reserviert sind.
Key figures
- Glenford Myers
- Steve McConnell
- C. A. R. Hoare
- Edsger Dijkstra
Related topics
Seminal works
- myers2011
- mcconnell2004
- swebok2014
Frequently asked questions
- Kann Testen beweisen, dass ein Programm korrekt ist?
- Nein. Testen verwendet eine endliche Menge von Eingaben und kann Defekte aufdecken, aber deren Abwesenheit nicht beweisen; der Nachweis der Korrektheit für alle Eingaben erfordert eine formale Verifikation, die nur für eingeschränkte oder kritische Teile eines Systems praktikabel ist.
- Ist Qualität dasselbe wie die Abwesenheit von Fehlern?
- Nein. Softwarequalität ist multidimensional und umfasst funktionale Korrektheit sowie Attribute wie Zuverlässigkeit, Leistung, Sicherheit, Benutzerfreundlichkeit und Wartbarkeit; ein Programm mit wenigen Fehlern kann immer noch von schlechter Qualität sein, wenn es nicht wartbar oder unsicher ist.