Grundlagen der Programm- und Systementwicklung
Transcription
Grundlagen der Programm- und Systementwicklung
Technische Universität München Grundlagen der Programm- und Systementwicklung Technische Universität München Institut für Informatik Software & Systems Engineering Prof. Dr. Dr. h.c. Manfred Broy Unter Mitarbeit von Dr. Alexander Malkis, Diego Marmsoler, Veronika Bauer Broy WS 13/14 Grundlagen der Programm- und Systementwicklung – Einführung 1 Technische Universität München Vorlesungsplanung (siehe Webseite) Einführung Grundbegriffe und Definitionen, Bedeutung und Stellenwert Kernaufgaben, Aktueller Stand der Forschung und Praxis Themen Daten und Rechenstrukturen Konzepte Spezifikation Verifikation von Eigenschaften Funktionale Programme Konzepte Spezifikation Verifikation von Eigenschaften Anweisungs- und objektorientierte Programme Spezifikation Verifikation von Eigenschaften Referenzen und Zeiger Broy WS 13/14 Grundlagen der Programm- und Systementwicklung – Einführung 2 Technische Universität München Grundlegende Begriffe Broy WS 13/14 Grundlagen der Programm- und Systementwicklung – Einführung 3 Technische Universität München Ein C Programm aus dem Web Fragen: • Spezifikation: Wie genau beschreiben, was das Programm leistet • Analyse und Verifikation: Wie analysieren, was ein Programm leistet? Wie eindeutig zeigen, dass das das Programm leistet? Terminiert das Programm? Wie zeigt man das? • Konzepte: Welche Konzepte nutzt das Programm: • Datenstrukturen • Ablaufstrukturen Broy WS 13/14 Grundlagen der Programm- und Systementwicklung – Einführung 4 Technische Universität München Wissenschaftliche Grundlagen Konzepte, Modelle, Strukturen von Software Beschreibungsmittel Notationen, Formalismen Tabellen, Diagramme Spezifikationssprachen und algorithmische formale Sprachen (Programmiersprachen) Theorien Regeln Kalküle, Logiken, Methoden Entwicklungsprozesse für Datenstrukturen, Programme und Systeme ... Broy WS 13/14 Grundlagen der Programm- und Systementwicklung – Einführung 5 Technische Universität München Programmierung vs. Programmentwicklung Programme Beschreibungen von Daten und Algorithmen (+ Interaktion mit der Umgebung ) formale Syntax (Sprache) Programmierung Prozess der Erstellung von Programmen Programmentwicklung Prozess der Erstellung von Programmen (= Programmierung) Dazu anfallenden Tätigkeiten (die über die reine Erstellung des Programmtextes hinausgehen) Broy WS 13/14 Grundlagen der Programm- und Systementwicklung – Einführung 6 Technische Universität München Software Softwaresystem besteht aus der Gesamtheit von Programmen und Daten, die eine ausführbare Einheit auf einem Rechensystem zur Lösung einer Aufgabe bilden. Datenmodellierung: Beschreibung von Daten und Operationen darauf Rechenstrukturen Modellierung von Rechenvorschriften und Algorithmen: Funktionale Programmstrukturen Prozedurale Programmstrukturen Objektorientierte Programmstrukturen Broy WS 13/14 Grundlagen der Programm- und Systementwicklung – Einführung 7 Technische Universität München IT-Systeme IT-Systeme Rechnerhardware + Software weitere elektronische oder elektromechanische Bestandteile (Übertragungseinheiten, Sensoren, Aktuatoren) Peripherie Nutzerschnittstelle / umgebende organisatorische Prozesse Broy WS 13/14 Grundlagen der Programm- und Systementwicklung – Einführung 8 Technische Universität München Theoretische/Methodische Aspekte Syntax und Semantik von Datenstrukturen Berechenbarkeit, Komplexität, effiziente Algorithmen Theoretische Themen formale Spezifikation von Daten- und Rechenstrukturen logische Verifikation ... Programmiernotationen und -sprachen Datenstrukturen und ihre logischen Eigenschaften Schnittstellenbildung, Schnittstellenbeschreibung, Modularität, Modellbildung in der Programmentwicklung Methodische Themen Verbergen von Implementierungsinformation (Information Hiding) Abstraktionsebenen Schrittweise Verfeinerung, Top-Down-Entwicklung ... Broy WS 13/14 Grundlagen der Programm- und Systementwicklung – Einführung 9 Technische Universität München Themen- und Aufgabenkomplexe Aufbau von kleineren Softwarebausteinen Datenstrukturen, Module und Komponenten Entwicklung der Algorithmen Implementierungen für Datenstrukturen Entwickeln und Programmieren im Kleinen Im Vordergrund : Ablauf- und Kontrollstrukturen Struktur der Daten und der charakteristischen Funktionen Erfassung aller Anforderungen (Requirements Engineering) Aufbau großer Softwaresysteme (Softwarearchitektur) Fragen der Vereinheitlichung der Struktur und der Modularisierung (Datenmodellierung, Schnittstellen), Entwickeln und Programmieren im Großen Qualitätssicherung (Validierung, Verifikation, Test), Wiederverwendung (Produktlinie) ... Broy WS 13/14 Grundlagen der Programm- und Systementwicklung – Einführung 10 Technische Universität München Praxis und Theorie Spezifikation: Beschreibung der Effekte von Datenstrukturen und den Operationen darauf sowie von Programmen Theorie: Formeln Praxis: Verbale Beschreibung Korrektheitsnachweis: Nachweis, dass Programm die Spezifikation erfüllt Theorie: Formaler Nachweis durch logisches Ableitungssystem Praxis: Test, Manuelle Inspektion Broy WS 13/14 Grundlagen der Programm- und Systementwicklung – Einführung 11 Technische Universität München Praxis - Anforderungsspezifikation? Es geht nicht nur darum, die Anforderungen präzise unmissverständlich zu formulieren – es geht insbesondere darum die validen Anforderungen zu finden Stichwort: Validierung! Formalisierung kann hier helfen „Konzeptualisierung“ – Erarbeitung Modelle der Informatik (formaler Modelle) für die betrachteten Zusammenhänge Beispiel: Operationen auf einem Konto Auffinden von Unvollständigkeiten oder Widersprüchen in den Anforderungen Validierung ist aber keine formale Aufgabe Siehe Vorlesung Requirements Engineering Broy WS 13/14 Grundlagen der Programm- und Systementwicklung – Einführung 12 Technische Universität München Praxis? – Missverständnisse zwischen den Stakeholdern! Broy WS 13/14 Grundlagen der Programm- und Systementwicklung – Einführung 13 Technische Universität München Software Engineering Software Engineering bezeichnet das ingenieurmäßige Vorgehen bei der Entwicklung von Softwaresystemen Zentrale Themen – Entwickeln im Großen Vorgehensmodell (Prozess, Artefakte, Organisation) Projektorganisation und –management Anforderungen (fachlich, technisch) Architektur Implementierung Integration und Verifikation Evolution und Wartung Broy WS 13/14 Grundlagen der Programm- und Systementwicklung – Einführung 14 Technische Universität München Praxis: V-Modell Broy WS 13/14 Grundlagen der Programm- und Systementwicklung – Einführung 15 Technische Universität München Qualitätssicherung Validierung: Sicherstellung und Überprüfung der Angemessenheit der formalen Modellierung und Anforderungsspezifikation in Bezug auf die informelle Problemstellung Verifikation: Nachweis, dass das Ergebnis eines Programmentwicklungsschritts der vorgegebenen formalen Spezifikation entspricht Dies betrifft gleichermaßen funktionale und nicht-funktionale Anforderungen Die Vorlesung beschränkt sich auf funktionale Eigenschaften von Programmen, Daten- und Rechenstrukturen Broy WS 13/14 Grundlagen der Programm- und Systementwicklung – Einführung 16 Technische Universität München Vorgehensmodell Methodischer Rahmen für die systematische Entwicklung von Programmen Entwicklungsregeln zur Durchführung von Entwicklungsschritten Konzept, das die Schritte im Programmentwicklungsprozess in eine sinnvolle Reihenfolge bringt Top-Down Anfang: Umfassende, abstrakte Problemstellung Zwei Vorgehensweisen: Prozess: Zerlegung der Aufgabe in Teilaufgaben Ende: Einzelaufgaben, die für sich gelöst werden können. Bottom-Up Top Down Anfang: Vorgegebene oder erarbeitete Lösungen für kleine Einzelaufgaben Bottom Up Prozess: Schrittweise Zusammensetzung Ende: Lösung für die Gesamtaufgabe. Broy WS 13/14 Grundlagen der Programm- und Systementwicklung – Einführung 17 Technische Universität München Top-Down Qualitätssicherungsschritte Broy WS 13/14 Grundlagen der Programm- und Systementwicklung – Einführung 18 Technische Universität München Im Zentrum der Vorlesung: Fundierte Methodik Modellierung Formal Spezifikation Verfeinerung Eigenschaften Formal Daten- und Rechenstrukturen Programme Funktional Prozedural Objektorientiert Verifikation Korrektheit Terminierung Broy WS 13/14 Grundlagen der Programm- und Systementwicklung – Einführung 19 Technische Universität München Grundprinzipien der Software- und Systementwicklung Die wesentlichen Grundprinzipien der Software- und Systementwicklung umfassen folgende Konzepte und Prinzipien: systematisches Vorgehen strukturiert durch Meilensteine, Trennung von Problem und Lösung, von Spezifikation und Realisierung (Abstraktion und Schnittstellenbildung), Dekomposition von Problemen in Teilprobleme (Divide-and-Conquer), Verstecken von Realisierungsdetails (Information Hiding), Schrittweise Verfeinerung (Stepwise Refinement), Strukturiertes Programmieren (Structured Programming), Qualitätssicherung durch Verifikation des Entwicklungsergebnisses (Formal Verification). Broy WS 13/14 Grundlagen der Programm- und Systementwicklung – Einführung 20 Technische Universität München Strukturierung und Abstraktion Strukturierung Gliederung der Aufgabenstellung und der Erarbeitung der Lösung Strukturierung der Vorgehensweise (dem Vorgehensmodell) Strukturierung der Ergebnisse / Modelle / Beschreibungen / Programme Abstraktion Elimination unwesentlicher Details Konzentration auf die Kerneigenschaften Beispiel: Buch: Gliederung Abstraktionsebenen Ebenen unterschiedlichen Detaillierungsgrads Verfeinerung Broy WS 13/14 Grundlagen der Programm- und Systementwicklung – Einführung 21 Technische Universität München Black/White Box View Schnittstellensicht (Nutzungssicht, Zugriffssicht, funktionale Sicht, engl. Black Box View) zeigt das Programm oder System als eine funktionale Einheit (ohne Berücksichtigung seines strukturellen Aufbaus) in seiner Wirkung nach außen Implementierungssicht (Realisierungssicht, engl. Glass Box View, White Box View), berücksichtigt die innere Gliederung und den Aufbau eines Programms oder Systems (etwa seine Gliederung in Anweisungen oder seine Unterteilung in Komponenten und die Vernetzung der Komponenten) Abstraktion Broy WS 13/14 Grundlagen der Programm- und Systementwicklung – Einführung Information Hiding 22 Technische Universität München Schnittstelle (nach DIN 44300) Eine Schnittstelle ist der gedachte oder tatsächliche Übergang an der Grenze zwischen zwei Funktionseinheiten mit den vereinbarten Regeln für die Übergabe von Daten oder Signalen. Syntaktische Schnittstelle syntaktisch fehlerfreie Benutzung der Einheit Semantische Schnittstelle (Verhaltensschnittstelle, Nutzungsschnittstelle) Verhalten der Einheit (für den sinnvollen und korrekten Gebrauch) Schnittstellenabstraktion Kapselung/Verbergen der für die Nutzung nicht relevanten Information Broy WS 13/14 Grundlagen der Programm- und Systementwicklung – Einführung 23 Technische Universität München Modellbildung Modell: Vereinfachtes Abbild eines Ausschnitts der realen oder gedachten Welt Domänenmodell Abbild eines Ausschnitts der realen oder gedachten Welt des Anwendungsgebiets als Grundlage für die Problemspezifikation oder die Problemlösung Systemmodell (Programmiermodell, Datenmodell) Modellierung des Softwaresystems, seiner Struktur und seines Verhaltens als Grundlage für die Strukturierung und Formulierung der Lösung einer Entwicklungsaufgabe in Form eines Softwaresystems oder dessen Analyse Broy WS 13/14 Grundlagen der Programm- und Systementwicklung – Einführung 24 Technische Universität München Zu Modellen Beschreibung des Modells Syntax (Text, Graphik, Formeln) Modellierungskonzept Formalisierungsgrad Durch das Modell beschriebene Eigenschaften Validität Gibt das Modell die Eigenschaften des modellierten Gegenstands korrekt wieder Komponierbarkeit Lassen sich Modelle/Modellteile zu größeren zusammensetzen Handhabbarkeit Verständlichkeit Aufwand bei der Erstellung Änderbarkeit Automatisierbarkeit Broy WS 13/14 Grundlagen der Programm- und Systementwicklung – Einführung 25 Technische Universität München Modellbildung: Wofür? Modellbildung als Teil der Problemlösung: Beispiel Quizsendung: 3 gegebene Tore (A, B, C) Gewinn: ein Auto Der Kandidat kann ein Auto gewinnen, wenn er von drei gegeben verschlossenen Toren A, B und C dasjenige Tor errät, hinter welchem sich das Auto befindet. Um den Ablauf spannender zu machen, läuft diese Auswahl wie folgt ab: Zuerst darf sich der Kandidat für eines der drei Tore entscheiden. Der Quizmaster öffnet darauf von den verbleibenden zwei Toren eines, hinter dem sich das Auto nicht befindet. Es verbleiben also noch zwei verschlossene Tore, hinter einem von denen das Auto steht. Nun erhält der Kandidat erneut die Möglichkeit, unter den verbleibenden zwei Toren zu wählen. Broy WS 13/14 Grundlagen der Programm- und Systementwicklung – Einführung 26 Technische Universität München Modellbildung: Wofür? Mögliche Strategien 1. Spieler wählt eingangs ein Tor und revidiert diese Wahl später nicht. 2. Spieler wählt eingangs ein Tor und wählt dann frei unter den verbleibenden Toren. 3. Spieler wählt eingangs ein Tor und revidiert später seine Wahl und wählt somit das andere verbleibende Tor. Broy WS 13/14 Grundlagen der Programm- und Systementwicklung – Einführung 27 Technische Universität München Modellbildung: Wofür? Strategie 1 A B C 1/3 B C 1/2 Strategie 2 A Strategie 3 A B C Broy WS 13/14 Grundlagen der Programm- und Systementwicklung – Einführung 2/3 28 Technische Universität München Abschließende Bemerkungen Historie Denotationelle Semantik – mathematische Modelle zur Repräsentation von Semantik Zusicherungslogik – Anreicherung von Programmen um logische Formeln Strukturierte Programmierung Abstrakte Datentypen Funktionale Programmiersprachen Modellierungssprachen Broy WS 13/14 Grundlagen der Programm- und Systementwicklung – Einführung 29