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