\chapter{Einleitung}
\label{cha_einleitung}

Diese Arbeit besch"aftigt sich mit Unterst"utzungssystemen f"ur die Entwicklung
gro"ser Softwaresysteme.  Es wird besonders die Klasse der persistenten
Softwaresysteme betrachtet, in deren Zentrum traditionell h"aufig Datenbanken
und Anwendungstransaktionen stehen und f"ur die Datenbankprogrammiersprachen
({\itshape persistent programming languages}) zunehmend an Bedeutung gewinnen
(Pascal/R, DBPL, Tycoon, Napier88, P-Java).  Diese gro"sen Systeme zeichnen
sich besonders dadurch aus, da"s sie eine sehr gro"se Anzahl von Codezeilen
umfassen, die von vielen Entwicklern geschrieben und gewartet werden.  Ein
weiteres Charakteristikum ist die Lebensdauer, die in einem Zeitraum von
mehreren Jahrzehnten angesiedelt werden kann.

Der Proze"s der Softwareentwicklung, auch als Lebenszyklus bezeichnet, reicht
von Problem\-analyse "uber Entwurf und Implementierung bis hin zu Installation
und Wartung und umfa"st eine Menge an Methoden, Aktivit"aten und
(Zwischen-)Ergebnissen.  Stellvertretend f"ur die Vielzahl an Modellen wird
hier das weitverbreitete Wasserfallmodell aus \cite{royce} herangezogen (s.\
Abbildung \ref{abb_wasserfall}), aber auch andere Modelle wie das Spiralmodell 
\cite{boehm} sowie zahlreiche Varianten \cite{comer} weisen die hier zu
betrachtende Charakteristik auf.  Aus der Anordnung der Phasen im
Wasserfallmodell ist zu erkennen, da"s die Implementierung wie andere Phasen
des Modells auch direkte Auswirkungen auf die nachfolgenden Phasen hat.  Dies
ist an dem in Abbildung \ref{abb_wasserfall} dargestellten Modell anhand der
Abfolge der Phasen, der Verzahnung und des wiederholten Eintritts in die Phasen
zu sehen und findet sich in "ahnlicher Form in anderen Modellen wieder.  Beim
"Ubergang von einer Phase zur n"achsten sollten die dabei entstehenden
Reibungsverluste bei der Transformation des Ergebnisses einer Phase in die
darauf folgende -- z.B.\ durch Umsetzen der Entwurfseinheiten in konkrete
Konstrukte der Programmiersprache -- m"oglichst gering gehalten werden, um die
Komplexit"at des gesamten Entwicklungsprozesses nicht weiter zu erh"ohen; das
gilt umso mehr, wenn die Phasen mehrfach in wiederholten Iterationsschritten
durchlaufen werden.  Vielmehr k"onnen die Kosten niedrig gehalten werden, die
in den nachfolgenden Phasen, insbesondere der Wartung anfallen, wenn die
Entwurfseinheiten eine ad"aquate Entsprechung in der Implementierung haben.
Auch die durch "Anderungen entstehenden Kosten, die durchschnittlich 60\%\ der
Gesamtkosten eines Softwaresystems ausmachen
\cite{sommerville}, k"onnen auf diese Weise gesenkt werden.

%\afterpage{\clearpage
\begin{figure}[htb]
\centering\mbox{\epsfig{file=../Zeichnung/wasserfall.eps}}
\caption{Wasserfallmodell (angelehnt an \protect \cite{royce}).}
\label{abb_wasserfall}
\end{figure}
%}

Softwaresystemen, insbesondere gro"sen, ist eine durch viele Faktoren
beeinflu"ste Komplexit"at inh"arent \cite{booch,brooks,earl}.  Zu
diesen Faktoren z"ahlen z.B.\ die gro"se Menge geschriebenen und zu
schreibenden Codes, dessen interne Abh"angigkeiten und dessen
Verst"andlichkeit, die durch fehlende, unzureichende oder nicht auf
dem neuesten Stand befindliche Dokumentation weiter erschwert wird.
Die folgenden Punkte versch"arfen das Problem der Softwareentwicklung
weiter \cite{earl}:

\begin{itemize}
\item Es besteht die Schwierigkeit, Anforderungen zu benennen und stabil zu 
  halten.
\item Die (oft negativen) Auswirkungen von "Anderungen auf das
  Gesamtsystem k"onnen schwer abgesch"atzt werden.
\item Die komplexen und mehrdimensionalen Strukturen von
  Programmen lassen sich schwer visualisieren.
\item Es existiert keine Dom"ane von Theorien, aus denen der Programmierer
  ausw"ahlen k"onnte, vielmehr wird der Softwareproze"s von der st"andigen
  Entwicklung neuer Theorien begleitet.
\end{itemize}

Diese schon in der Entwurfsphase auftretende Problematik der Komplexit"at
setzt sich in der Implementierung und in den weiteren Phasen des
Entwicklungsprozesses fort.  Entwickler m"ussen daher entsprechende
Unterst"utzung auch in der Implementationsphase erfahren, um dieser
Komplexit"at zu begegnen.  Allgemeine Prinzipien daf"ur sind \cite{balzert}:

\begin{description}

\item [Abstraktion:] Hierunter versteht man das Absehen vom Konkreten.  Sie
  erm"oglicht das Erkennen allgemeiner Charakteristika.  Mit Abstraktion wird
  das Wesentliche vom Unwesentlichen getrennt, und es lassen sich Objekte
  ordnen, klassifizieren und gewichten.

\item [Strukturierung:] Die Struktur eines Systems gibt dessen
  Charakter wieder.  Sie vernachl"assigt Details und enth"alt nur
  wesentliche Merkmale.  Die Struktur eines Entwurfs oder Programms
  tr"agt zur Verst"andlichkeit bei und erleichtert es, sowohl den
  Entwicklern selbst als auch anderen, sich einzuarbeiten.  Dar"uber
  hinaus erh"oht eine gute Struktur die "Anderungs\-freundlichkeit und
  die Wartbarkeit, hat also direkten Einflu"s auf Phasen, die sich an
  die Implementierung anschlie"sen.

\item [Hierarchisierung:] Eine Hierarchie ordnet Elemente eines
  Systems bestimmten Stufen oder R"angen zu. Das Prinzip der
  Hierarchisierung h"angt stark mit dem Prinzip der Strukturierung
  zusammen, da Hierarchien auch zur Strukturbildung beitragen.  Daher
  erh"oht es ebenfalls die Ver\-st"andlichkeit und Wartbarkeit, wobei
  Hierarchien in unterschiedlichen Formen, etwa netz-, baum- oder
  schichtenorientiert, auftreten k"onnen.

\item [Modularisierung:] Die Zerlegung eines Systems in kleine, "uberschaubare,
  voneinander weitgehend unabh"angige Teile nennt man Modularisierung.  Auch
  sie steht in engem Zusammenhang mit der Strukturierung, da diese Zerlegung
  in Einheiten schon zu einer Struktur f"uhrt.  Neben den dort genannten
  Gesichtspunkten hat Modularisierung insbesondere den Vorteil der
  "Anderungsfreundlichkeit und durch die Lokalisierung von Daten und
  Algorithmen auch den Vorteil der besseren "Uberpr"ufbarkeit.

\item [Lokalit"at:] 
Hierunter versteht man das Vorhandensein relevanter Informationen an einem
Ort.  Das Prinzip der Modularisierung f"uhrt bereits zu Lokalit"at.  Das
Vorhandensein relevanter Information an einem Platz kann jedoch auf vielen
weiteren Ebenen des Entwurfs und der Implementierung erreicht werden und f"uhrt
dann zu Verst"andlichkeit und Lesbarkeit.  Weiterhin erleichtert es die
Wartung.

\item [Wiederverwendbarkeit:] Die Verwendung bereits vorhandener
  Software-(Teil-)Produkte verspricht je nach Grad eine Verk"urzung der
  Entwicklungsdauer und damit eine Reduzierung der Kosten.  Die f"ur
  aufwendige Neuentwicklungen ben"otigt Zeit kann gespart oder f"ur die
  Verbesserung bestehender Software eingesetzt werden.
\end{description}

Aufgabe einer Entwicklungsumgebung und einer Programmiersprache, aber
auch einer Entwurfsmethodik mu"s es sein, diese Prinzipien zu
unterst"utzen und die Erf"ullung in h"ochstem Ma"se zu gew"ahrleisten.

Der Schwerpunkt dieser Arbeit liegt auf der Unterst"utzung der Implementierung
und des Entwurfs.  Die Aufgabe der Implementierung ist es, ein ablauff"ahiges
Programm zu erstellen, das der in den vorangegangenen Phasen erstellten
Spezifikation entspricht.  Besonderes Augenmerk sollte bei der Implementierung
darauf gelegt werden, die in der Entwurfsphase herausgebildeten Einheiten,
meist Module oder Klassen, m"oglichst direkt, nachvollziehbar und effizient
umzusetzen.  Daneben spielen bei der Implementierung weitere Aspekte eine
Rolle, wie z.B.\ Anfertigung ad"aquater Dokumentation, Verwendung bestimmter
Algorithmen usw., die in dieser Arbeit jedoch nicht betrachtet werden.  Der in
dieser Arbeit gew"ahlte Ansatz hat zum Ziel, unabh"angig von der gew"ahlten
Entwurfsmethodik, Unterst"utzung f"ur deren programmiersprachliche Umsetzung zu
bieten.

Hier wird daher der Ansatz verfolgt, eine Systemarchitektur
bereitzustellen, die die flexible Anbindung von Werkzeugen
erm"oglicht.  Das wird beispielhaft anhand der Realisierung eines
Werkzeugs zur Verwaltung von Softwareeinheiten vorgef"uhrt.  Weiterhin
wird mit {\tlmin} ({\itshape Tycoon Language minimal}) eine Sprache
vorgestellt, die durch ihre leistungsf"ahigen Mechanismen zur
Systemstrukturierung die Verwendung obiger Prinzipien f"ordert.

% Vorteile von Entwicklungsumgebungen (Forte Produktbeschreibung) aufzaehlen.

Wie Brooks in \cite{brooks} ausf"uhrt, existiert keine Methodik zur
Softwareentwicklung, die alle Probleme der Komplexit"at,
Beherrschbarkeit usw. l"ost.  Auch von den in dieser Arbeit
vorgestellten Konzepten wird das nicht behauptet.  Es besteht jedoch
die Hoffnung, zumindest zu einer Verbesserung der existierenden
(noch unzureichenden) Methoden beitragen zu k"onnen.

%Die Entwicklung und Wartung von Software nimmt in der Informatik aus
%vielen Gr"unden eine wichtige Stellung ein.  Softwaresysteme werden in
%zunehmendem Ma"se in sicherheitsrelevanten oder besonders sensiblen
%Bereichen wie Medizin, Kraftwerkssteuerung, Flug"uberwachung etc.\ 
%eingesetzt.  Um unerw"unschte Fehlfunktionen der Software in diesen
%Bereichen aber auch ganz allgemein zu vermeiden, ist es notwendig
%diese von vornherein in entsprechender Qualit"at bereitzustellen.

%Dar"uberhinaus stellt die Softwareentwicklung und -wartung einen
%Wirtschaftsfaktor dar, dessen steigende Bedeutung sich u.a.\ in
%wachsenden Investitionen und in einer zunehmenden Zahl von
%Besch"aftigten in diesem Bereich manifestiert\cite{earl}.

%Im Umkehrschlu"s bedeutet dies, da"s schlechte Software hohe Kosten
%verursacht und sogar Menschenleben gef"ahrden kann.

Neben den hier betrachteten Aspekten der Entwicklungsunterst"utzung lassen sich
weitere Faktoren nennen, wie z.B.\ die Motivation und G"ute der Ausbildung der
Entwickler oder die zur Verf"ugung stehende technische Ausr"ustung, die die
Softwareentwicklung unterst"utzen.  Sie werden an anderer Stelle entsprechend
gew"urdigt \cite{reifer,veer}.

%Forschung nach Entwicklungsunterst"utzung /Entwicklungsumgebung
%verst"arkt im milit"arischen Bereich, da hier ein gro"ser Bedarf nach
%qualitativ hochwertiger und korrekter sowie wartbarer Software besteht.


\section{Aufgabenstellung}
Die vorliegende Arbeit gliedert sich in zwei Bereiche, die den zwei
betrachteten Aspekten (Entwicklungsumgebung, Sprachmechanismen) der
Entwicklungsunterst"utzung entsprechen.  Der erste Teil behandelt das Thema
Entwicklungsumgebungen.  Es handelt sich hierbei um Werkzeuge, die nicht Teil
der Programmiersprache sind, sondern durch externe Programme, die meist
mit weiteren Programmen zu Entwicklungsumgebungen zusammengefa"st
sind, realisiert werden.  Es wird zun"achst ein allgemein akzeptiertes
Referenzmodell f"ur Entwicklungsumgebungen diskutiert \cite{earl,nist500-211},
um anschlie"send an zwei konkreten Beispielen in Form von kommerziell
verf"ugbaren Entwicklungsumgebungen Untersuchungen durchzuf"uhren.  Das
Hauptaugenmerk liegt dabei auf der Anbindung der Werkzeuge und der
Unterst"utzung der Systemstrukturierung.

Der zweite Bereich widmet sich den Strukturierungsmechanismen von
Programmiersprachen.  Nach der Betrachtung von praxisrelevanten
Sprachen werden die im {\tlmin} System realisierten
Strukturierungsmechanismen vorgestellt.  Es handelt sich dabei um
Strukturierungsprimitiven auf Sprach- und Werkzeugebene.  Grundlage
hierf"ur bildet das am Arbeitsbereich Datenbanken und
Informationssysteme der Universit"at Hamburg entwickelte Tycoon System
und hier speziell die Unterfamilie der {\tlmin} Systeme.  Auf dieser
Basis werden in dieser Arbeit ein wiederverwendbarer Modulmanager f"ur
Softwareeinheiten entwickelt und die im System notwendigen
Voraussetzungen geschaffen.  Hierbei handelt es sich in erster Linie
um eine Compilerschnittstelle.  Neu entwickelte Mechanismen
der Systemstrukturierung, die in die Sprache {\tlmin} bzw.\ den
"Ubersetzer eingebaut sind, unterst"utzen die Entwicklung auf
Sprach\-ebene.  Sie erlauben die explizite Kontrolle der Sichtbarkeit
von Bezeichnern und gestatten es, mit Umgebungen ({\itshape
  environments}) zu arbeiten.  Umgebungen k"onnen zusammen mit der
Compilerschnittstelle als Grundlage f"ur eine interaktive
Schnittstelle dienen, indem sie die "ubersetzten Bindungen aufnehmen.
Dar"uber hinaus lassen sich mit Umgebungen netzwerkartige Strukturen
aufbauen, die z.B.\ f"ur die Organisation mehrerer
Entwicklungsbereiche benutzt werden k"onnen.

Grundlage f"ur den {\tlmin} bezogenen Teil bilden andere Arbeiten zu
{\tlmin} und {\tl} Systemen.  In \cite{tycoon_tl}, \cite{tycoon_po}
und \cite{tycoon_intr} werden {\tl} ({\itshape Tycoon Language}) , der
Vorl"aufer von {\tlmin}, und die grundlegende Systemarchitektur
vorgestellt.  \cite{tycoon_lib} beschreibt verf"ugbare Bibliotheken,
die auch als Grundlage f"ur die im Rahmen dieser Arbeit angefertigte
Implementierung dienen.  Syntaxerweiterungen stellt \cite{schroeder}
vor, w"ahrend in \cite{basisdienste} reflektive Mechanismen
beispielhaft in die {\tl} Systeme eingef"uhrt werden.  In
\cite{bremer} werden Ans"atze und L"osungen f"ur die Typ"uberpr"ufung
gegeben.  Besonders wird auf die eingehenden Erfahrungen bei der
Untersuchung der Modulverwaltung der {\tl} Systeme in
\cite{studienarbeit} zur"uckgegriffen.

\section{Gliederung}
Die vorliegende Arbeit gliedert sich in die folgenden Kapitel:

\begin{itemize}
\item Im Anschlu"s an dieses Kapitel wird in Kapitel
  \ref{sec_entwicklungsumgebung} die begriffliche Grundlage in bezug auf
  Entwicklungsaufgaben gelegt, indem ein Referenzmodell f"ur
  Entwicklungsumgebungen in Teilen vorgestellt wird.  Daran schlie"st sich die
  Untersuchung zweier in der Praxis eingesetzter Umgebungen an.  Hier wird der
  Schwerpunkt auf die Integration der durch die Programmiersprache gegebenen
  Strukturierungskonzepte mit den durch die Entwicklungsumgebung
  bereitgestellten Werkzeugen gelegt.

\item Den Ausgangspunkt f"ur die Untersuchung von sprachlichen Mitteln zur
  Systemstrukturierung bildet die Vorstellung von Mechanismen, wie sie in
  g"angigen Programmiersprachen gefunden werden.  Zur Darstellung dieser
  Mechanismen dient eine Notation zur Beschreibung von Sichtbarkeitsbereichen,
  wie sie in Kapitel \ref{cha_strukturierung} eingef"uhrt wird.

\item Als Implementierungsplattform wird die {\tlmin} Architektur gew"ahlt.
  Kapitel \ref{cha_envtlmin} f"uhrt zu\-n"achst grundlegende Begriffe ein, um
  dann den "Ubersetzer des {\tlmin} Systems in seinen Grundz"ugen zu
  beschreiben.  An die Darstellung der reflektiven Compilerschnittstelle
  schlie"st sich die Diskussion des f"ur Werkzeuge der Entwicklungsumgebung
  verwendeten Ansatzes zur Anbindung an das System an, der in der Realisierung
  der Modulverwaltung konkretisiert wird.

\item Kapitel \ref{cha_strukturierung_tlmin} legt die Strukturierungsmittel des
  {\tlmin} Systems dar.  Gro"sen Raum nimmt dabei die Darstellung der
  Basismechanismen ein.  Aufbauend darauf verdeutlicht ein Modulkonzept die
  Verwendung dieser Basisprimitiven.  Ein weiteres "ubergeordnetes Konzept wird
  mit den Umgebungen vorgestellt.

\item Der Ausblick auf weiterf"uhrende Forschungsgebiete beschlie"st
  diese Arbeit.  Mit Hinweisen auf die kommerzielle Relevanz der
  untersuchten Konzepte und mit einem "Uberblick "uber die begleitend
  durchgef"uhrte Programmierarbeit endet Kapitel \ref{cha_ausblick}.

\item Die Anh"ange bilden f"ur den interessierten Leser einen Ausgangspunkt
  f"ur eine tiefergehende Studie insbesondere der Implementierungsarbeiten.
  Sie dienen au"serdem der Vervollst"andigung einiger Ausf"uhrungen des
  Haupttextes.
\end{itemize}


%\section{Einordnung}
%Beziehung zu \cite{bremer}
%In welchem Zusammenhang steht diese Arbeit mit COPOS?
%Welche Verbindungen gibt es?
%Welche andere Arbeiten existieren/ werden angefertigt?
