1. Grundbegriffe Software Engineering 1 1. Grundbegriffe des Software-Engineering Was ist Software-Engineering? (deutsch: Software-Technik) Teilgebiet der Informatik, das sich mit Methoden und Werkzeugen für das ingenieurmäßige Entwerfen, Herstellen und Implementieren von Software befasst. Das Software Engineering entstand Ende das 1960-er Jahre als Antwort auf die Software-Krise; es sollte einen Umdenkprozess in der Software-Produktion einleiten, Bewertungskriterien stärker berücksichtigen und zu qualitativ hochwertigen Software-Produkten führen. Als deren Qualitätskriterien gelten insbesondere: Benutzerfreundlichkeit, Zuverlässigkeit, Wartbarkeit, Anpassbarkeit an Änderungen der Aufgabenstellung, Portabilität, Effizienz, Ergonomie. Die Vorgehensmodelle der Software-Technik umfassen alle Phasen von der Problemstellung bis zur endgültigen Ausmusterung eines Programms oder Programmsystems (Software-Lebenszyklus). Ein weiteres wichtiges Prinzip der Software-Technik ist die ausführliche und lückenlose Dokumentation von Verlauf und Ergebnissen aller Phasen. [Pomberger, Pree: Software Engineering, nach Brockhaus] Anforderungsprofil für Softwareprodukte Zuverlässigkeit n Korrektheit der Ergebnisse, n Robustheit gegen ungültige Eingaben sowie innere und äußere Störungen Ausfallsicherheit n Hohe Verfügbarkeit, n Daten- und Programmsicherheit, n Wiederanlauf Effektivität n Realisierung aller Benutzeranforderungen Effizienz n Erfüllung der minimalen Zeit- und Speicheranforderungen (RAM, Platte) Flexibilität/Anpassbarkeit/Wartbarkeit n Anpassung an neue Erfordernisse und Veränderungen, n Parametrierung, n Modularisierung
1. Grundbegriffe Software Engineering 2 Portabilität n Geringer Aufwand bei Umstellung auf andere bzw. neue Hardware- und Software-Systeme, n Plattformunabhängigkeit Benutzerfreundlichkeit/Ergonomie Ergonomische Anforderungen für Bürotätigkeit mit Bildschirmgeräten (Teil 10: Grundsätze der Dialoggestaltung: ISO 9241-10:1996) Aufgabenangemessenheit Selbstbeschreibungsfähigkeit Steuerbarkeit Erwartungskonformität Fehlertoleranz Individualisierbarkeit Lernförderlichkeit Entwicklung der Softwarekosten Mit der Bedeutung von Software sind in den letzten Jahrzehnten die Kosten der Erstellung ständig gestiegen. Dazu hat auch die zunehmende Komplexität der Softwaresysteme beigetragen. Ein hoher Prozentsatz von Softwareprojekten scheitert und verursacht Kosten, ohne je einen Gewinn abzuwerfen. Ein ebenfalls hoher Prozentsatz von Softwareentwicklungsprojekten überzieht seinen Zeit- und Budgetrahmen und verursacht so erheblich höhere Kosten als ursprünglich geplant. Es gibt zahlreiche Beispiele für mehr oder weniger gescheiterte Softwareprojekte. Begriff der Software-Krise Die Programmiertechnik ist nicht mit den steigenden Anforderungen bzgl. Komplexität, Größe und Funktionalität mitgewachsen. Die Entwicklung großer Programmsysteme lässt sich prinzipiell nicht mit der Erstellung kleinerer Programme vergleichen. Veränderungen im Software-Bereich in den letzten Jahren n Zunehmende wirtschaftliche Bedeutung n Wachsende Komplexität der Aufgaben n Zunehmende Qualitätsanforderungen n Einsatz von Standardsoftwarepaketen
1. Grundbegriffe Software Engineering 3 n Altlasten n Dienstleistungen von Software-Häusern Software-Entwicklung als Ingenieurdisziplin Kreative Elemente Künstlerische Elemente Individuelle Programmierung Standardisierungselemente Industrieproduktion Team-Arbeit im Projekt
1. Grundbegriffe Software Engineering 4 Lebenszyklus von Software-Produkten 0.) Problemstellung Grundidee des Projektes, Vage Vorstellung der Realisierung 1.) Problemanalyse und Anforderungsdefinition Ermittelung der Benutzeranforderungen und Wünsche, Analyse der Informationen, Beschreibung des Ist-Zustandes, Definition des Hardware-Systems, Erstellung eines Pflichtenheftes/Lastenheftes, Spezifikation des Systemmodells 2.) Entwurf Zerlegung des Projekts in Komponenten, Modellierung der Datenstrukturen, Festlegung der Benutzerschnittstellen, Definition von Modulen und Subsystemen mit Schnittstellenspezifikation der Funktionen, Festlegung globaler und externer Referenzen, Bereitstellung der Algorithmen 3.) Implementierung 4.) Test Programmierung der Funktionen, Module und Subsysteme mit begleitender Dokumentation Einzelfunktionstest, Modultest und Integrationstest anhand eines ausgewählten Testdatenvolumens, Automatischer Testverfolgung und Testdokumentation 5.) Installation Abnahme durch den Benutzer, Einweisung und Schulung der Bediener 6.) Betrieb und Wartung Einsatz in der Praxis, Behebung von Fehlern, Anpassung an Änderungen der Hardware- und Software-Umgebung, Definition neuer Anforderungen führt zur Überarbeitung des Projektes oder Neubeginn mit Punkt 0.)
1. Grundbegriffe Software Engineering 5 Softwaretechnik Zielorientierte Bereitstellung und systematische Verwendung von Prinzipien, Methoden, Konzepten, Notationen und Werkzeugen für die arbeitsteilige, ingenieurmäßige Entwicklung und Anwendung von umfangreichen Software-Systemen. Zielorientiert bedeutet die Berücksichtigung von z.b. Kosten, Zeit, Qualität. Prinzipien der Softwaretechnik Abstraktion Hierarchisierung Zerlegung eines Problems in Teilprobleme, sodass eine baumförmige Hierarchie entsteht. Modularisierung Zerlegung des Problems in überschaubare und in sich geschlossene Teilaufgaben, die separat entwickelt werden können, auch verteilt in Teams. Entwicklung von Produkten und Teilprodukten, die nur über eine definierte Schnittstelle mit der Umwelt kommunizieren können und sonst kontextunabhängig sind. Strukturierung/Strukturierte Programmierung Entwurf von Programmsystemen, die als Strukturelemente nur eine begrenzte Anzahl von Kontrollstrukturen wie Sequenz, Auswahl, Wiederholung, Unterprogramme etc. zulassen und damit den Programmfluss kontrollieren. Methoden, Verfahren, Werkzeuge Objektorientierte Softwareentwicklung Bei der objektorientierten Softwareentwicklung werden Ergebnisse der Phasen Analyse, Entwurf und Implementierung objektorientiert erstellt. Es werden objektorientierte Programmiersprachen verwendet.