Life Cycle (Phasen)

Software Life-Cycle / Phasen / Lebenszyklus

Ablauf eines Software-Entwicklungs-Projektes kann gesamten Lebenszyklus umfassen.

Vier grobe Phasen

  1. Software Spezifikation Projektdefinition, Planung
  1. Design und Implementierung Detailplanung
  1. Software Validierung Überprüfung in Bezug auf Kundenwünsche
  1. Software Evoluion Weiterentwicklung

Überblick über phasen

  1. Requirements (Anforderungen) - (user/customer view)

    Ewartungen von Kunde an Softwareprodukt

    Anforderungen müssen testbar sein und getestet werden!

  1. Specification - (engineering view)

    Beschreibung für Implementierung

  1. Planning (project management)

    Projektplan, berücksichtigt Zeit, Dauer, Kosten

  1. Entwurf / Design

    Komponentenarchitektur (Komponenten, Packages, Datenbankdesign)

  1. Implementierung (Erzeugung des Softwareprodukts) und Testen
  1. Integration und Testen

    Zusammenfügen und testen (integration test) Test der einzelnen Komponenten (unit tests) auf Architektur- und Systemebene.

  1. Operation and Maintenance (Einsatzphase)

    Unterstützung, Erweiterungen während laufenden Betriebes.

  1. Retirement (Ende des Produktlebenszyklus)

    Softwareprodukt wird aus Betrieb genommen

Begleitet von:

Projektmanagement PM

Planung, Kontrolle, Steuerung, Organisation

Technische, finanzielle, planerische Aspekte

Qualitätsmanagement QM

Überprüfung der Qualität (Qualitätssicherung QS) mit Verifikation / Validierung

  • Test-Techniken
    • Unit Test

      Komponenten - Umsetzung technischer Spezifikation

    • Integrationstest

      Interfaces und Verbindungen zwischen Komponenten innerhalb des (Sub)Systems

    • Systemtest

      Gesamtsystem

    • Regressionstest

      Testen von geänderten Komponenten → Fehler, die durch Änderungen / Fehlerkorrektur, entstanden sind

    • Akzeptanztest

      ob Kunde akzeptiert

    • Installationstest

      während Installation

Anforderung & Spezifikation

Stakeholder

Erstellen die Anforderungen

  1. Kunden (bezahlen software-produkt)

    Anforderung: z.B. schnelle und kostengünstige Lieferung

  1. Anwender (benutzen)

    Anforderung: z.B.: Usability, Einfachheit, Stabilität, usw.

  1. Entwickler (erstellen)

Warum sind Anforderungen wichtig?

Gemeinsames Verständnis zwischen Stakeholders (Kunde/Anwender, Entwickler, usw.) und Entwickler.

Entweder beschrieben oder grafisch dargestellt (UML Diagramm).

Müssen testbar sein (tools: requirements management mit z.B. Doors, Rational Requisite Pro)

Anforderungen (Requirements)

Anforderungs-Phase (Requirements-Definition)

Text, Story-board, Feature-lists, UML Use cases (Anwendungsfalldiagramme)

Anforderungs-Analyse und Spezifikation

Berücksichtigung möglichst aller beteiligten Personen (Stakeholder)

– Hauptanforderungen (must-be Kritieren). – Gewünschte Anforderungen (expected, nicht entscheidend aber wichtig). – Optionale Anforderungen (nice-to-have Kriterien).

Müssen konsistent und testbar sein

In der Praxis ändern sich Anforderungen häufig → Agiler Ansatz

Anforderungs-Arten

Funktional Systemverhalten, Datenformate

Nicht-Funktional Qualitätsmerkmale, zB Leistungsfähigkeit, UI, Sicherheit

Design-Bedingung techn. Rahmenbed., Software Architektur, IDE, verteilte Entwicklung

Prozess-Bedingung Rahmenbedingungen für Vorgehen (Vorgehensmodelle)

Anforderungsprozess

Vorgehensmodell für Erhebung von Anforderungen.

Vollständige Erhebung von allen Rollen / Stakeholdern, Prioritisierung, Überprüfung

Phasen:

  1. Anforderungserhebung Sammeln, klassifizieren, prioritisieren
  1. Analysephase Analyse mit UML
  1. Spezifikation Planung für technische Entwicklung
  1. Validierung Verifikation, Validierung

Projektplanung & Steuerung

Aufgabe des Projektmanagements

Es sind in dieser Phase Anforderung und Spezifikation gegeben

  1. Projektplanung (Planungsphase)

    Weitere Schritte des Projektes planen, Abhängigkeiten finden:

    Prozessabhängigkeitdefiniert durch Vorgehensmodell

    Produktabhängigkeitdefiniert durch Reihenfolge

  1. Projekt-Monitoring und Controlling

    Steuerung nach jeder Iteration

Artefakte (Dokumente) dieser Phase

\cdot Netzpläne / Pert-Diagramme → stellt Abhängigkeiten dar

\cdot Work-Breakdown-Structure WBS / Projektstrukturplan → Aufteilung in Organisationseinheiten

\cdot GANTT → Zeitliche Abfolge und Daue

\cdot Milestone-Trend-Analysis MTA → setzt Meilensteine und Termine

Entwurf und Design

Erstellung aller Artefakte die für die konkrete Implementierung nötig sind.

Entwurf grobe Planung, grobe Architektur, zB Datenbankmodell skizzieren

Design Grobentwürfe werden im Detail ausgearbeitet

"Designspezifikationen" enthalten

\cdot Definition von Architektur, Komponenten, Interfaces, usw → Architecture Tradeoff Analysis Method ATAM um zwischen den Architekturen zu wählen.

\cdot Test und Dokumentations-Anforderungen

4+1 Model View

Sicht (view) beschreibt Teil der Architektur mit UML diagramm

Design Prinzipien

  1. Abstraktion
  1. Kapselung
  1. Trennung von Schnittstelle und Implementierung
  1. Dekomposition, Modularisierung
  1. Balance zwischen Kopplung (äußere Abhängigkeit) und Kohäsion (innerer Zusammenhalt)

    Coupling (Kopplung) vs Cohesion (Bindung)

    \uparrow Coupling = \uparrow Abhängigkeit zwischen Komponenten

    Coheison = innerer Zusammenhalt in einer Komponente. Unabhängigkeit.

    Ziel: Balance

    UML: Sequence- und Collaboration Diagramms

  1. Zentrale vs. verteilte Kontrolle

    fork = zentral

    Anpassung nur an wenigen Objekten nötig - leichtere Wartbarkeit

    Hohe Abhängigkeit Systems von diesem Objekt

    Wiederverwendung von Datenobjekten leichter

    stair = verteilt / dezentral

    Schrittweise Ausführung von Funktionen, dadurch wechselt die Kontrolle - schwierigere Wartung

    Bessere Wiederverwendbarkeit der Methoden z.B. durch Vererbung

    Ausfall eines Teiles nicht so schlimm

    Hohe Fehleranfälligkeit

Artefakte (Dokumente) dieser Phase

  • Komponenten Diagramm

    Komponente = logischer Teil / Implementierung der Schnittstelle

  • Klassen Diagramm
  • Zustands Diagramm / Aktivitätsdiagramm
  • Datenbankmodell → Extended Entity Relationship Diagramm EER
  • GUI Design
  • Tests auf System und Integrations Ebene

Implementierung und Integration

Es stehen Entwurfs und Designdokumente zur verfügung.

Entwickler programmiert alles was in den Dokumenten.

Standardisierung

Gemeinsame Normen, Regelungen

  • Nationale & Internationale Standards
  • Unternehmensweite Standards
  • Projektspezifische Standards

Vorgaben für

  • Dokumentationen
  • Namenskonventionen
  • Formatierungsrichtlinien
  • Versionierungen

    Überblick aller (Teil-)Produkte innerhalb eines Projektes und die Verwendung der letztgültigen Versionen

  • Headerblocks in Komponenten (code headers)
  • Kommunikationsprotokolle (Nachricht Format und Inhalt)
  • Programmiersprachen (Syntax, Semantik)
  • Werkzeuge (Notation wie UML)

Dokumentation

Namenskonventionen

Formatierung

Dokumentations / Formatierungsrichtlinien

Kommentare und Headerblocks

Sinnvolle commit-Nachrichten

Traceability

Rückverfolgbarkeit durch gesamten Entwicklungszyklus - Änderungsverfolgung

Informationen aus dem Headerblock → automatisiertes Requirements Tracing z.B. in IDEs

  1. Zeitlich

    Unterschiedliche releases, versionen

  1. Vertikal

    Beziehungen eines Artefakttyps: z.B. System – Subsystem – Komponente.

  1. Horizontal

    Beziehungen von Entwicklungsartefakten: z.B. Anforderungen – Implementierung – Testfälle

Integration

Zusammenbauen der Komponenten zu einem größeren Teilsystem / System

Integrationstest auf Architekturebene

Integrationsstrategien

Bei manchen Strategien „Hilfsmittel“ notwendig, um nicht vorhandene Funktionalität zu simulieren.

  1. Big Bang

    Alles auf einmal, viele Seiteneffekte, ungeeignet

    Kein Zusatzaufwand

    Fehler sind schwer zu finden, viele Seiteneffekte gleichzeitig, riskant → eher bei kleinen Projekten

  1. Continuous Integration

    Best-practice, täglich integrieren (daily build mit build management tools)

  1. Schrittweise Integration

    Wenn Simulation der Komponenten nicht möglich ist

    1. Top down

      Ausführbares Gesamtsystem ist früher verfügbar

      Geschäftsfälle / Business Cases → Hardwarenahe Komponenten

      Auftraggeber bekommt schnell Prototypen

      Hoher Aufwand für Test stubs (um die fehlende Funktion zu simulieren) - man kann manche Fehler zu spät finden

    1. Bottom up

      Umgekehrt

      Stabiles System (durch Hardware Interfaces)

      Zusätzlicher Aufwand für Prototypen und Test Drivers .

      Stabiles Fundament, sehr spät Prototyp vefügbar

    1. Build Inegration (Phasen orientiert)

      Mischung aus Top down und Bottom up.

      Prioritisierte Business Cases durch alle Ebenen des Systems.

      Nur bestimmte, eingeschränkte Funktionalität

      Benötigt Regressions-Tests

Artefakte (Dokumente) dieser Phase

Testberichte (auch Regressionstests = Tests nach Korrekturen)

Betrieb und Wartung (Evolution)

Integration ist abgeschlossen.

Produkt wird in den operativen Betrieb übergeführt.

  1. Standard Software breiter Markt, viele Beta-Tests
  1. Individual Software formeller Abnahmetest durch Auftraggeber

Abnahme und Einführungsphase

Akzeptanztest durch Auftraggeber

Komplette Übergabe aller Dokumentationen

Betrieb (Operation)

Wartung (Maintainance)

Process-View

Änderung des Software-Produkts nach Auslieferung (Delivery) und Inbetriebnahme (Deployment bzw. Product Launch).

Activity-View

Wartungs-Aufgabe

Phase-Oriented-View

Wartungsphase endet mit “Stilllegung” des Softwareproduktes.

Wartungskategorien

korrektive Wartung (Correction) → Fehlerbeseitigung

Erweiterungen (Enhancement)

Reaktiv → durch Anwender / Kunde angestoßen, Änderungswunsch

Proaktiv → bevor angestoßen wurde

  • Detailierter
    1. Reaktive Wartung
      1. Korrektiv (Corrective): Bug- und Fehlerkorrektur (patches, workarounds, updates).
      1. Adaptiv (Adaptive): Anpassung an neuen Anforderungen (Hardware, Softwareänderungen).
    1. Pro-Aktive Wartung
      1. Verbesserung (Perfective): Erweiterungen, Verbesserung der Effizienz.
      1. Vorbeugend (Preventive): Verbesserung für zukünftige Wartung (z.B. Ergänzung der Dokumentation).

Wartungsaufwand

Mehr als 80 % der Wartungsarbeiten für nichtkorrektive Tätigkeiten benutzt.

Techniken zur Wartung

  1. Herstellen des Produktverständnisses – Gute Dokumentation
  1. Reengineering – Überarbeitung (teuer)
  1. Reverse Engineering – Komponente und Zusammenhänge analysieren, modellieren (UML-Modelle aus C# Code)

Artefakte (Dokumente) dieser Phase

Change requests vom Kunden

Daten aus Issue tracking System

Retirement

Außerbetriebnahme, Stilllegung (Retirement phase)

Ende der Betriebsphase (Betrieb + Wartung): Stilllegung des Softwareproduktes.

Kontrolliertes Außer-Betrieb-Setzen - Übergang zu Nachfolgeprodukt

Gründe:

\cdot Nachfolgeprodukt

\cdot Komplettes Redesign

\cdot Nicht mehr benötigt, Hardware Änderungen

Life-Cycle → Vorgehensmodell

Vorgehensmodelle decken eher technische Entwicklung aus den Lebenszyklus-Phasen ab.

Definition der Anforderungen → Inbetriebnahme bei Kunden

Software-Prozesse / Vorgehensverfahren

Wann sollte welche Software bis zu welchem Freistellungsgrad verfügbar sein?

Ablaufplan, Notwendig bei größeren Projekten

  1. Konstruktive Methoden

    Software Produkte machen für: z.B. Spezifikation, Code, Testfälle, Protokolle

  1. Analytische Methoden

    Qualitätsüberprüfung: z.B. Reviews, Inspektionen, Tests