Softwaretechnik Prof. Dr. Bernhard Schiefer schiefer@informatik.fh-kl.de http://www.informatik.fh-kl.de/~schiefer Prof. Dr. Bernhard Schiefer 1-1 Wesentliche Inhalte der Vorlesung Phasen der Software-Entwicklung Einführung: Programmieren mit C++ (i.w. beschränkt auf ANSI C) Software-Entwicklungswerkzeuge Software-Entwicklungsumgebungen Prof. Dr. Bernhard Schiefer 1-2
Inhalt von Softwaretechnik II Objektorientierte Software-Entwicklung Analyse und Entwurf Implementierung mit C++ Typtheorie Entwurfsmuster 2. objektorientierte Sprache: Java Prof. Dr. Bernhard Schiefer 1-3 Literatur P. Prinz, U. Kirch-Prinz: Objektorientiert programmieren mit ANSI C++, Prentice Hall, 1999. I. Pohl: Object-Oriented Programming Using C++, Addison-Wesley, 1997. H. Balzert: Lehrbuch der Software-Technik : Software- Entwicklung, Spektrum Akad. Verl., 1996. S. Harbison, G. Steele: C - A Reference Manual, Prentice Hall, 1995.... Prof. Dr. Bernhard Schiefer 1-4
Übungen Praktische Übungen am PC begleitend zur Vorlesung. elementar wichtig für das Verständnis des Stoffes. und damit auch für das Bestehen der Klausur! Organisatorisches Einteilung in Gruppen. Listen liegen aus. Prof. Dr. Bernhard Schiefer 1-5 Softwaretechnik Motivation Prof. Dr. Bernhard Schiefer 1-6
Begriffe Software Programmieren / Implementieren Software Engineering Informatik Softwaretechnik Prof. Dr. Bernhard Schiefer 1-7 Ziel des Software Engineering Produktion von Qualitätssoftware Probleme: Programme tun nicht das was sie sollen. Programme kommen bei großen Datenmengen zu keinem Ende. Die Programme können nicht mit ungewöhnlichen Situationen umgehen. Programme sind schwer änderbar. Die Entwicklung muß häufig immer wieder bei Null anfangen. Programme können nicht gut miteinander arbeiten. Prof. Dr. Bernhard Schiefer 1-8
Qualitätsfaktoren (1) Effizienz ökonomische Nutzung von Ressourcen Portabilität Übertragbarkeit auf verschiedene Hard- und Software- Umgebungen Integrität Schutz gegen unberechtigte Veränderungen Benutzerfreundlichkeit Leichtigkeit der Bedienung Prof. Dr. Bernhard Schiefer 1-9 Qualitätsfaktoren (2) Korrektheit Die Fähigkeit von Softwareprodukten ihre Aufgaben exakt so zu erfüllen, wie sie durch Anforderung und Spezifikation definiert sind. Primäre Qualität! Robustheit Die Fähigkeit von Softwaresystemen auch unter außergewöhnlichen Bedingungen zu funktionieren. Verhalten für Fälle, die in der Spezifikation nicht ausführlich beschrieben sind. Prof. Dr. Bernhard Schiefer 1-10
Qualitätsfaktoren (3) Erweiterbarkeit Die Leichtigkeit mit der Softwareprodukte an Änderungen in der Spezifikation angepaßt werden können. Strategien: Einfachheit des Entwurfs Dezentralisierung: Architektur autonomer SW-Moduln Prof. Dr. Bernhard Schiefer 1-11 Qualitätsfaktoren (4) Wiederverwendbarkeit Die Eigenschaft ganz oder teilweise für neue Anwendungen wiederverwendet werden zu können. Beeinflußt alle anderen Qualitäten mit! Kompatibilität Das Maß der Leichtigkeit, mit der Softwareprodukte mit anderen verbunden werden können. Ansätze: Standardisierte Formate, Schnittstellen, Formate, Protokolle. Prof. Dr. Bernhard Schiefer 1-12
Was beeinflußt die Qualitätsfaktoren? Fähigkeiten des Programmierers Analyse Kommunikation Strukturierung Umsetzung Teamfähigkeit Dokumentation Zur Verfügung stehende Zeit Projektplanung Programmiersprache Prof. Dr. Bernhard Schiefer 1-13 Phasenmodell Produktspezifikation Design der Architektur Projektplanung Detaildesign Implementierung Fehlersuche Test- und Abnahme Wartung- und Pflege Prof. Dr. Bernhard Schiefer 1-14
Produktspezifikation Was tut das Produkt - und wer wird es benutzen? Wie sieht die Hard- und Software-Umgebung aus? Schnittstellen zu anderen Produkten? Welche speziellen Operationen werden realisiert? Wie sehen die Antwortzeiten dafür aus? Anforderung bezüglich der Sicherheit? Geplante Erweiterungen? Prof. Dr. Bernhard Schiefer 1-15 Design Einsatz von Methoden aus der Systemanalyse SA/SD OOA/OOD Ziele: Bildung von handhabbaren Modulen. Formale Beschreibung von diesen. Prof. Dr. Bernhard Schiefer 1-16
Projektplanung Optimaler Einsatz der vorhandenen Ressourcen Ermittlung der benötigten Ressourcen Brooks's Law: Adding more people to a late software project makes it later. Auswahl von Werkzeugen (CASE-Tools) Prof. Dr. Bernhard Schiefer 1-17 Implementierungsphase Umsetzen des Entwurfes in eine Programmiersprache. Probleme hier führen nicht selten zu Rückwirkungen bis zur Designphase! Prof. Dr. Bernhard Schiefer 1-18
Testphase Funktionale Tests positiv / negativ Test alpha / beta Test Performance Analysen Versionskontrolle erforderlich Prof. Dr. Bernhard Schiefer 1-19 Softwarewartung Anteil der Wartung an Gesamtkosten: > 70% Aufteilung der Kosten der SW-Wartung: 42% Änderungen der Anforderungen 17% Änderungen in Dateiformaten 12% Notfallrettungsaktionen 9% "normale" Fehlerbehebung 6% Hardware-Änderungen 6% Korrektur der Dokumentation 4% Effizienzverbesserung 4% Sonstiges Prof. Dr. Bernhard Schiefer 1-20
Softwaretechnik Programmiersprachen Prof. Dr. Bernhard Schiefer 1-21 Klassifikation von Programmiersprachen Programmierparadigmen Generationen Ursprüngen Prof. Dr. Bernhard Schiefer 1-22
Klassifikation nach Generationen X GL = X Generation Language Deutsch: Sprache der X ten Generation. Sehr grobe Einteilung der Programmiersprachen. Kennzeichnet i.w. die Entwicklung der letzten Jahrzehnte. Prof. Dr. Bernhard Schiefer 1-23 1GL: Sprachen der ersten Generation Maschinensprache Direkt von einem Computer abarbeitbar Binäre Darstellung der Anweisungen praktisch von Menschen nicht lesbar Heute nur noch zu finden in: Mikroprozessorsteuerungen ROM-BIOS Bootblock Prof. Dr. Bernhard Schiefer 1-24
2GL: Sprachen der zweiten Generation Assemblersprachen. Entsprechen von der Struktur her den Maschinenbefehlen. Jedoch werden Bezeichnernamen für Variablen und Befehle verwendet. Lesbar! Einsatz nur noch in sehr systemnahen Bereichen. Prof. Dr. Bernhard Schiefer 1-25 3GL: Sprachen der dritten Generation Prozedurale (problemorientierte) Sprachen. Abstraktion von der Realisierung auf der Maschine. Konzentration auf möglichst direkte Umsetzung von Algorithmen. Beispiele: FORTRAN, COBOL, ALGOL PL/1, PASCAL, C, ADA, C++, OBERON Prof. Dr. Bernhard Schiefer 1-26
4GL: Sprachen der vierten Generation Integration von Datenbankzugriffen Datenbankabfragesprachen Programmiersprache mit integriertem Datenbanktypkonzept Merkmale: Einheitliche Sprache zur Bearbeitung von Daten im Programm und in der Datenbank. Mengenorientierte Verarbeitung möglich. IdR Tabellen als Programmiersprachentyp. Oft: Integrierte Möglichkeiten zur grafischen Darstellung. Prof. Dr. Bernhard Schiefer 1-27 4 GL Sprachen / Systeme Natural (Software AG) ABAP/4 (SAP AG) Gupta SQL PowerBuilder... Prof. Dr. Bernhard Schiefer 1-28
5GL: Sprachen der fünften Generation Deklarative Sprachen logische und funktionale Programmierung Konzentration auf Beschreibung des gesuchten Ergebnisses Keine (direkte) Beschreibung des Algorithmus Beispiele: Prolog, LISP, ML, Miranda,... Prof. Dr. Bernhard Schiefer 1-29 Klassifikation nach dem Programmierparadigma Funktionale Programmierung Logische (prädikative) Programmierung Strukturierte Programmierung objektorientierte Programmierung Prof. Dr. Bernhard Schiefer 1-30
Funktionale Programmierung Kennzeichen: nur Funktionen als Anweisungen Programmiersprachen: LISP LOGO ML Miranda... Prof. Dr. Bernhard Schiefer 1-31 Logische Programmierung Kennzeichen: keine Beschreibung von Abläufen Beschreibung von Aussagen Programmiersprachen: PROLOG Prof. Dr. Bernhard Schiefer 1-32
Strukturierte Programmierung Kennzeichen: Konzepte für Unterroutinen Steueranweisungen (Schleifen, Bedingungen,...) Programmiersprachen: ALGOL PL/1 MODULA PASCAL C... Prof. Dr. Bernhard Schiefer 1-33 Objektorientierte Programmierung Kennzeichen: Objekte und Klassen Kapselung Vererbung Programmiersprachen: SMALLTALK EIFFEL C++ JAVA OBERON... Prof. Dr. Bernhard Schiefer 1-34
Ursprünge - Stammbaum ALGOL 1957 FORTRAN 1954 COBOL 1957 PL/1 1960 BASIC 1963 PASCAL 1968 C 1972 SIMULA 1967 LISP 1962 ML MODULA 1975/82 ADA 1975/95 C++ 1980 EIFFEL SMALLTALK 1988 1983 PROLOG 197? LOOPS OBERON 1988 JAVA 1995 Prof. Dr. Bernhard Schiefer 1-35