Softwareevolution Flashcards
Definition: Softeareevolution
Alle Aktivitäten in der Erstentwicklung (Primärentwicklung) und
Weiterentwicklung eines Softwaresystems im Rahmen der Wartung und Pflege über lange Zeiträume.
Transition in die Einsatzumgebung
Auf die Integration (Fertigstellung) eines Softwaresystems folgt seine
Auslieferung (Übergabe aller relevanten Teile)
- Beginn der Abnahmephase
- Anschließend: Wartungs-,Plege und Weiterentwicklungsphasen
Projektabnahme (Acceptance)
formale Akzeptanz der Projektergebnisse durch den
Auftraggeber (Kunden).
Projektabschluss (Closure)
Durchführung eventuell notwendiger Nach- bzw.
Aufräumarbeiten, ggf. Nachkalkulation/Abrechnung des Projekts, formale Erklärung des Projektendes.
Abnahmeverfahren
- In der Regel Vereinbarung eines Abnahmeverfahrens bei Vertragsabschluss
- Beinhaltet Festlegungen zu:
Bereitstellung der Ergebnisse zur Abnahme durch den Auftragnehmer
Abnahmeprozedur des Auftraggebers
Kernaufgaben bei der Abnahme
- Prüfung auf Vollständigkeit (gemäß Vereinbarung)
- Verifikation der Projektergebnisse
(Software richtig entwickelt, gemäß Spezifikation?) - Prüfung auf Erfüllung der Anforderungen
(die richtige Software entwickelt?)
Übergang in die Wartung
- Erstentwicklung
Neu entwickeltes System
Abgeschlossen mit Auslieferung, Abnahme, Inbetriebnahme - Anschließend: Weiterentwicklung
Softwarewartung und -pflege
Erfordert alle relevanten Entwicklungsunterlagen
Softwarealterung
- David L. Parnas (1994): „Programs, like people, get old“
Sinkende Performanz
Geringere Zuverlässigkeit - Externe Gründe:
Geänderte Plattform
Geänderte Rechensysteme
Geänderte Rahmenbedingungen
Geänderte Anforderungen - Präventive Maßnahmen (Verzögerung des Alterungsprozesses):
Hohe Qualität
Flexibles und erweiterteres Design
Umfassende Dokumentation
Stetige Überarbeitung
Softwaresysteme unterliegen stetiger Überarbeitung!
Gründe:
* Fehler (funktional, qualitativ)
* Sich ändernde Anforderungen
Fachliche Ursachen
(z.B. Änderungen in Gesetzen, Vorschriften oder Prozessen, neue Erkenntnisse, gesteigerte Erwartungen)
Technische Ursachen
(z.B. neue oder geänderte technische Umgebungen)
Methodische Ursachen
(z.B. Einführung von Coding Standards, Refactorings)
Softwarewartung
alle Arbeiten an Programmen inklusive deren Dokumentation, die
deren Pflege und Weiterentwicklung nach der ersten Auslieferung dienen.
Die Softwarewartung dient somit vorrangig der Wahrung eines konstanten
betriebsfähigen Zustandes eines Softwaresystems.
Herausforderungen in der Wartung
Herausforderungen:
- Verstehen (“Program Comprehension”)
- Startbedingungen (oft suboptimal, z.B. fehlende Dokumentation, veraltete
Technologien, …)
- Betrieb (Systeme müssen im produktiven Einsatz bleiben)
- Zeit (oft hoher Zeitdruck, z.B. bei sicherheitskritischen Situationen)
Hauptprobleme in der Softwarewartung
- Bedarf an Erweiterungen und
Verbesserungen - Einhaltung geplanter Termine
- Verfügbarkeit und Fähigkeiten der
Wartungs-Programmierer - Personalfluktuation
- Qualität der Dokumentation
Kosten der Wartung
- Beobachtung: Hoher Wartungsaufwand in frühen Phasen reduziert
Wartungsaufwand in späteren Phasen - Über gesamten Lebenszyklus einer (langlebigen) Software können 70% und mehr des Aufwands auf Wartung entfallen.
Kategorisierung der Wartungsaufgaben
Perfektionierende Wartung:
Anpassungen an geänderte Anforderungen, Implementierung neuer Anforderungen
Adaptive Wartung:
Anpassungen aufgrund von Änderungen in der Technologie/Umgebung
Korrektive Wartung:
Fehlerbehebung
Präventive Wartung:
Vorsorgliche Maßnahmen, insbesondere zur Qualitätsverbesserung
Änderungsanträge (Change Requests)
Wesentliche Punkte dabei:
- Begründung für die (Notwendigkeit der) Änderung
- Analyse der potenziellen Folgen der Änderung
- Aufwandsschätzung und -zuordnung
- Entscheidung und Dokumentation
Architekturmanagement
- Erstellung und Überwachung von Architekturelementen und zur Sicherstellung einer effizienten Implementierung und Evolution von Architekturen in einem Unternehmen.
- Definition klarer Verantwortlichkeiten (Identifikation der relevanten internen und externen Stakeholder)
Program Comprehension
- Solides Verständnis der Software grundlegend für alle Wartungsaktivitäten
- “Program Comprehension” trägt Informationen zusammen über Struktur
(Architektur), Funktionalität, Verhalten und Intention des Systems - Typischerweise erfasst in statischen und dynamischen Modellen
- Herausfordernde Aufgabe, macht ca. 30% der Wartungszeit aus
Reengineering
- Anpassung eines Softwaresystems mit dem primären Ziel der Qualitätsverbesserung
- Insbesondere Beseitigung von Qualitätsmängeln, die einer Weiterentwicklung im Weg stehen
Zwei wesentliche Anwendungsfälle:
1. Sanierung (Fokus Qualitätssteigerung)
2. Ablösung (Fokus Neu-/Weiterentwicklung)
Reverse Engineering
- Analyse eines gegebenen Systems, um dessen Struktur und Verhalten zu
ermitteln - Vorgehen ähnelt teilweise dem Black-Box-Testen
Wenn kein Quellcode verfügbar, ggf. Einsatz von Disassemblern oder
Decompilern -> Viele lizenzen verbieten das!
Refactoring
- Restrukturierung von Programmcode
- Verbesserung der Lesbarkeit, Verständlichkeit, Wartbarkeit und Erweiterbarkeit, ohne jedoch das beobachtbare Verhalten zu ändern
- Notwendigkeit des Refactorings oft durch sogenannte “Code Smells” motiviert
Clone Detection
- Kopierter Code (“Code Clones”): kritischer Aspekt in der Wartung und für
die Korrektheit von Software - Entsteht schnell (und unsystematisch) durch Copy&Paste
- (Oft durch einfache Refactorings vermeidbar…)