

\chapter{Softwarebibliotheken} \label{SoftBibs}
%\vspace*{20mm}
Mit wachsendem Umfang von Softwareprodukten wird es zunehmend schwieriger,
Software monolithisch in einer geschlossenen Struktur zu entwickeln. Bei einer
monolithischen Architektur eines Softwaresystems ist f"ur jedwede "Anderung ein
"Uberblick "uber das gesamte System notwendig. Hinzu kommt, da"s bei der
anschlie"senden "Ubersetzung des Systems dieses in vollem Umfang neu "ubersetzt
werden mu"s, was zu langen Laufzeiten des "Ubersetzers f"uhrt.

Weiterhin entf"allt ein gro"ser Teil der durch ein Programm verursachten Kosten
nicht auf die reinen Entwicklungskosten, sondern auf Weiterentwicklung und
Wartung \cite{Gla82}. Mit der Gr"o"se des Programms und der Wartung steigen
aber nicht nur die Kosten, sondern auch die Gefahr von Softwarefehlern.

Die Notwendigkeit von Softwarever"anderungen nach dem Entdecken eines Fehlers
liegt auf der Hand. Parallel mit dem Vordringen in st"andig neue
Anwendungsbereiche werden Softwaresysteme jedoch auch mit neuen Anforderungen
in Form von zus"atzlich geforderter Funktionalit"at oder m"achtigeren 
Datenstrukturen konfrontiert.  Diese "Anderungen der Aufgabenstellung f"uhren
regelm"a"sig zu "Anderungen von Software. 

Der Grund f"ur die Anpassung alter Software an neue Anforderungen sind die
Kosten der Neuentwicklung gr"o"serer Anwendungen. Die immensen Kosten
einer Neuentwicklung erzwingen in der Regel eine Anpassung von bestehender
Software an neue Bedingungen. \cite{Lie79} geben an, da"s 41,8\% der
Wartungskosten durch "Anderungen der Benutzeranforderungen entstehen. 

Bei der Untersuchung von Systemen zeigt sich, da"s zus"atzliche Anforderungen
zu zwei grund\-s"atz\-lich verschiedenen Reaktionen des Anbieters des
Softwareprodukts f"uhren k"onnen. Eine M"oglichkeit, zus"atzliche
Funktionalit"at anzubieten, besteht darin, diese in das System zu integrieren
({\it Built-in}-Ansatz). Ein typischer Vertreter f"ur diese Vorgehensweise ist
z.B. die an diesem Arbeitsbereich entwickelte relationale
Datanbankprogrammiersprache DBPL\footnote{{\bf D}ata{\bf b}ase {\bf
P}rogramming {\bf L}anguage} \cite{SEM88}.

In der Sprache DBPL sind das Datenmodell, die Strukturen zur Verwaltung der
Massendaten und die Funktionalit"at zur Unterst"utzung datenintensiver
Anwendungen fest in das Datenbanksystem eingebaut ({\it built-in})
\cite{Nie92}.

\section{Bedeutung von Softwarebibliotheken}
Bereits Ende der 60er Jahre \cite{Sch81} richtete sich das Interesse auf
die Entwicklung von Verfahren, mit denen sich der Proze"s der
Softwareentwicklung verbessern l"a"st, so da"s der Arbeitsaufwand bei der 
Erstellung sinkt und zugleich die Entwicklung qualitativ hochwertiger
Software unterst"utzt wird.

Dieses Kapitel erl"autert zun"achst die wachsende Bedeutung von
Softwarebibliotheken. Als Alternative wird der Verwendung von Bibliotheken ein
monolithischer Ansatz gegen"uber gestellt, bei dem die gesamte Funktionalit"at
in das System direkt eingebaut ist ({\it Built-in}-Ansatz). Die Vorteile,
Funktionalit"at durch die Verwendung einer Bibliothek bei Bedarf einem System
hinzuf"ugen zu k"onnen ({\it Add-on}-Ansatz), spielen dabei eine besondere
Rolle.

Die gesamte Funktionalit"at in das System fest einzubauen
f"uhrt zu Problemen. Eine dynamische Anpassung und systematische Erweiterung
des Systems als Reaktion auf neue Anforderungen ist in der Regel nicht mehr
oder nur unter gro"sen Schwierigkeiten m"oglich. 

Einen h"oheren Grad an Flexibilit"at in Bezug auf die Erweiterbarkeit von
Systemen bieten Softwarebibliotheken, deren Dienste bei Bedarf in das System
eingef"ugt werden k"onnen ({\it Add-On}-Ansatz), anstatt sie fest
einzubauen \cite{MatSch91}. Softwarebibliotheken sind Sammlungen von
Softwarekomponenten, die ihre Funktionalit"at dem Benutzer zur
Wiederverwendung in seinen Projekten anbieten. Die vorliegende Arbeit
beschr"ankt sich dabei auf die  Untersuchung von Bibliotheken, die Strukturen
zur Verwaltung von Massendatentypen ({\it bulk data types}) anbieten.


Die Verwendung von Bibliotheken stellt damit eine M"oglichkeit zur Senkung der
durch Software verursachten Kosten dar, da durch die erneute und mehrfache
Verwendung bereits erstellter Softwarekomponenten aus der Bibliothek in
Projekten der Anwender Entwicklungsarbeit eingespart werden kann.

Softwarebibliotheken bieten eine Verbesserung der Erweiterbarkeit,
Flexibilit"at und Skalierbarkeit von Systemen \cite{Nie92}. Die Verwendung von
Bibliotheken erlaubt eine flexible Reaktion im Falle neuer Anforderungen. Die
Funktionalit"at des Systems kann durch die zus"atzliche Verwendung von
Funktionalit"at aus der Bibliothek erh"oht werden, wobei immer nur der gerade
ben"otigte Teil der Bibliothek in das System geladen werden mu"s. Ein hohes
Ma"s an Kombinierbarkeit der Dienste der Bibliothek ist hierf"ur Voraussetzung.

Die M"oglichkeit, Dienste einer Softwarebibliothek in ein Programm "ubernehmen
zu k"onnen, bedeutet auch f"ur die Phase des Entwurfs und Designs eines Systems
eine erhebliche Vereinfachung. Bei dem Teil der Funktionalit"at, der aus der
Bibliothek in das System "ubernommen wird, kann der Entwerfende von den
Einzelheiten abstrahieren. Somit erleichtert die Bibliothek die Konzentration
auf die besonderen Aufgaben des zu entwerfenden Systems, da von der
konkreten Realisierung der Standardfunktionalit"at aus der Bibliothek
abstrahiert werden kann. 

Bei der Verwaltung von Massendaten ist in der Regel eine Optimierung n"otig, um
die Effizienz des Systems zu gew"ahrleisten. Die Konzentration der
Funktionalit"at zur Verwaltung der Massendaten in einer Bibliothek bedeutet,
da"s bei der Entwicklung von Systemen auf bereits optimierte Funktionalit"at
zur"uckgegriffen werden kann. Der Anwender spart somit nicht nur den Aufwand
der Erstellung von Funktionalit"at, sondern auch die Optimierung derselben.
Dies ist dadurch besonders kosteneffizient, da"s die Bibliothek nur einmal
erstellt, aber mehrfach verwendet wird. Gegen"uber dem {\it Built-in}-Ansatz
werden also vielfache Entwicklungs- und Optimierungskosten eingespart.

Ein weiterer Vorteil der Verwendung von Bibliotheken liegt in der Erh"ohung der
Sicherheit. Da Bibliotheken in zahlreichen Projekten zum Einsatz kommen, steigt
mit der Wiederverwendung auch die Wahrscheinlichkeit der Entdeckung von
Fehlern. Von der in einer Bibliothek angebotenen Software ist daher ein
h"oheres Ma"s an Korrektheit zu erwarten. Tabelle \ref{versusTabelle} fa"st die
Gegen"uberstellung beider Ans"atze zusammen. 


\begin{table} [thb]
 \begin{center}
   \begin{tabular}{|l|l|l|}
    \hline
      & {\bf Built-In}  & {\rule[-4mm]{0mm}{10mm}{\bf Add-On}} \\
  \hline
 \hline
   Funktionalit"at      &  fest eingebaut    & erweiterbar \\
                        &                    & \\
 \hline
   Erweiterbarkeit      & schwierig          & durch Verwendung zus"atz- \\
                        &                    & licher Dienste der Bibliothek\\
 \hline
   Wiederverwendbarkeit & sehr gering        & hoch \\ 
   von Komponenten      &                    &      \\
 \hline
  Optimierung           & beim Systementwurf  & bei der Implementierung  \\
                        &                     & der Bibliothek\\
 \hline
  Sicherheit            & gering           & hoch durch Verwendung \\
                        &                    & erprobter Komponenten \\
 \hline
\end{tabular}
 \end{center}
  \caption{{\it Add-On} versus {\it Built-In}}
  \label{versusTabelle}
\end{table}


\section{Qualit"atsmerkmale von Softwarebibliotheken}
Der Begriff der Qualit"at wird in der Literatur folgenderma"sen definiert:
\begin{it}
Qualit"at ist "Ubereinstimmung mit Anforderungen
\end{it} \cite{Cro79}. 
Dieser Begriff ist damit subjektiv bzw. kontextabh"angig \cite{Cav78}. Was f"ur
eine Person eine Steigerung der Qualit"at bedeuten mag, kann f"ur die n"achste
eine Verschlechterung bedeuten \cite{Wei92a}, abh"angig davon, welche
Anforderungen Personen an Software stellen.

Um Qualit"at trotz
Personenabh"angigkeit me"sbar zu machen, wurden zahlreiche Verfahren
entwickelt. Eine Zusammenfassung findet sich in \cite[S. 3]{HIST84}. Dar"uber
hinausgehend schl"agt \cite{MMSM81} vor, die Messung der Softwarequalit"at zu
automatisieren.

Durch den Einsatz in zahlreichen Projekten ist die Qualit"at von
Softwarebibliotheken von besonders gro"ser Bedeutung. Gleichzeitig fordert
die geplante Verwendung der Bibliothek durch fremde, nicht an der Entwicklung
der Bibliothek beteiligte Personen, die Erf"ullung besonderer
Qualit"atsmerkmale durch die Bibliothek. Bibliotheken und die Art ihrer
Gestaltung sind daher von gro"ser Bedeutung f"ur die Unterst"utzung der
Entwicklung qualitativ hochwertiger Software.

Durch eine Verbesserung der Softwarequalit"at k"onnen die
Gesamtkosten von Softwareprojekten gesenkt werden. Laut \cite{Cho80} machen bei
herk"ommlichen Verfahren der Softwareerstellung die Aufwendungen f"ur das
Testen und die Integration der Software in das Gesamtsystem etwa die H"alfte
der Gesamtkosten eines Projekts aus. Eine Studie \cite{Cho80} zeigt, da"s durch
h"ohere Aufwendungen zu Gunsten der Qualit"at in der Phase der Analyse und des
Designs eines Systems erhebliche Kosten in den Bereichen Test und Anpassung
eingespart werden k"onnen.

In der Literatur finden sich zahlreiche verschiedene Einteilungen der
Qualit"atsfaktoren. In \cite{Cho80} werden die Faktoren beispielsweise danach
unterschieden, ob sie f"ur einzelne Softwareprodukte oder f"ur ganze
Softwaresysteme wichtig sind. Erst f"ur ganze Systeme verlangt \cite{Cho80}
Qualit"atsmerkmale wie Strukturiertheit, Robustheit und Verst"andlichkeit,
obwohl sich diese Begriffe auch auf einzelne Softwareprodukte anwenden lie"sen.

\cite{Mey88} hingegen teilt die Qualit"atsmerkmale in innere und
"au"sere Faktoren ein. Als "au"sere Qualit"atsfaktoren werden diejenigen
Faktoren zusammengefa"st, die f"ur einen Betrachter von au"sen, also ohne
Betrachtung des Programmtextes, erkennbar sind. Zu diesen Qualit"atsmerkmalen
geh"oren sowohl der Grad der Korrektheit der Software als auch die
M"oglichkeiten der Anpassung an neue und unvorhergesehene Umweltbedingungen.
Bei der Anpassung an neue Umweltbedingungen wird der Fall einer unvorhergesehen
Situation im laufenden Betrieb von einer neuen Benutzeranforderung
unterschieden. Innere Qualit"atsfaktoren sind hingegen Faktoren, die nur unter
Betrachtung des Quelltextes der Software festzustellen sind. \cite{Mey88} nennt
Modularit"at, Lesbarkeit und Verst"andlichkeit als innere Qualit"atsfaktoren.  

Diese Einteilung scheint jedoch angreifbar zu sein, da \cite{Mey88} die
Qualit"atsfaktoren Wiederverwendbarkeit und Erweiterbarkeit den "au"seren
Faktoren zuordnet. Ein Blick in den Quelltext eines Programms wird sich aber
kaum vermeiden lassen, wenn festgestellt werden soll, ob das Produkt
wiederverwendbar ist. Weiterhin pa"st ein Teil der von \cite{Mey88} genannten
Qualit"atsfaktoren nicht zur Einteilung in innere und "au"sere Faktoren. Diese
Faktoren werden deshalb weitere Faktoren genannt.

Die Qualit"atsfaktoren f"ur Software sind nicht unabh"angig voneinander. Sie
bauen vielmehr aufeinander auf und lassen sich in einer Hierarchie darstellen.
Abbildung \ref{SoftwareQualitaetsHierarchie} zeigt die von \cite{BBKLM78}
vorgeschlagene Hierarchie. Die in der Hierarchie weiter oben stehenden
Qualit"atsfaktoren implizieren die darunter eingezeichneten. So bedeutet
beispielsweise eine hohe Wartbarkeit notwendigerweise auch eine hohe
Testbarkeit und Verst"andlichkeit. Testbarkeit und Verst"andlichkeit sind somit
die Grundlage f"ur Wartbarkeit. \cite{BBKLM78} w"ahlt f"ur die Darstellung der
Beziehungen der einzelnen Qualit"atsfaktoren einen zyklischen Graphen. Dadurch
wird betont, da"s viele der Qualit"atsfaktoren mehrere Ziele gleichzeitig
unterst"utzen. So erh"oht beispielsweise die Strukturiertheit von Software
gleichzeitig deren Testbarkeit, Verst"andlichkeit und Anpassbarkeit. Diese drei
durch die Strukturiertheit unterst"utzten Eigenschaften werden anschlie"send
unter dem Begriff der Wartbarkeit zusammengefa"st.

\renewcommand{\epsfsize}[2]{0.85#1} 
\begin{figure}[hbt]
\begin{center} 
\leavevmode
\epsfxsize=14cm
\epsffile{../Bilder/thorsten/Postscript/Software-Qualitaet-Hierarchie.ps}
\end{center}
\caption{Hierarchie der die Qualit"at bestimmenden Eigenschaften (nach [Boehm et al. 78])}
\label{SoftwareQualitaetsHierarchie} 
\end{figure}

Einen "ahnlichen Ansatz, allerdings unter Verwendung eines azyklischen
Graphen, verfolgt \cite{Dun93}. Er nennt Zuverl"assigkeit, Benutzbarkeit,
Wartbarkeit und Anpassbarkeit als grund\-s"atz\-liche Qualit"atsmerkmale. Diese
Merkmale werden dann in Untermerkmale zerlegt. Den Begriff der Anpassbarkeit
zerlegt er beispielsweise in die Qualit"atsaspekte Ver"anderbarkeit,
Erweiterbarkeit und Portabilit"at.

Das zweifellos wichtigste Qualit"atsmerkmal f"ur Software ist die Korrektheit.
Korrektheit ist die F"ahigkeit von Softwareprodukten, ihre Aufgaben exakt zu
erf"ullen, wie sie durch Anforderungen und Spezifikationen definiert sind
\cite{Mey88}. Doch obwohl diese Qualit"at alle anderen Anforderungen an
Software dominiert, ist die Korrektheit nicht ohne Schwierigkeiten zu
bestimmen. Die Feststellung der Korrektheit setzt den Vergleich des
tats"achlichen Verhaltens mit den aufgestellten Anforderungen voraus. Das
Verhalten von Software mit formalen Mitteln eindeutig zu spezifizieren ist
jedoch nur mit gro"sem Aufwand m"oglich. 

Nat"urlich stellt ein Benutzer auch an eine Bibliothek die Anforderungen, die
an einzelne Softwarekomponenten gestellt werden. Hierzu geh"oren neben der
Korrektheit insbesondere die auf der folgenden Seite genannten Merkmale
\cite{Mey88}. 
\begin{description}
\item [Robustheit] ist die F"ahigkeit von Softwaresystemen, auch unter
au"sergew"ohnlichen Bedingungen zu funktionieren. Robustheit
bezeichnet damit den Grad der Angemessenheit, in der ein Softwaresystem in
einer au"serhalb der Spezifikation liegenden Situation im laufenden Betrieb
reagiert. 
Obwohl die Spezifikation f"ur das Verhalten in der ma"sgebenden Situation
keinerlei Forderungen aufstellt, ist dieses nicht v"ollig beliebig. Qualitativ
hochwertige Software zeichnet sich dadurch aus, da"s sie auch in nicht von der
Spezifikation erfa"sten besonderen Situationen ein angemessenes und
konstruktives Verhalten zeigt. Das Auftreten einer nicht vorhergesehenen
Situation darf also bei einem Softwaresystem nicht zu unangemessenen,
destruktiven Aktionen f"uhren.
\item [Effizienz] ist ein Ma"s f"ur den Aufwand zum Erreichen des Ziels.
Bezogen auf Bibliotheken versteht man unter Effizienz den Speicher- und
Platzbedarf der Algorithmen. 
\item [Portabilit"at] bezeichnet die Leichtigkeit, mit der sich Software in
eine andere Rechnerumgebung "ubertragen l"a"st. 
\item [Wartbarkeit] meint das Ma"s der Leichtigkeit, mit der sich Software
korrigieren oder anpassen l"a"st. 
\item [Verifizierbarkeit] bezeichnet das Ma"s der Leichtigkeit, mit dem sich
die "Ubereinstimmung von Spezifikation und tats"achlichem Verhalten von
Software testen l"a"st. 
\item [Integrit"at] bezeichnet den Schutz der Software vor unberechtigten
Zugriffen oder Ver"anderungen.
\item [Kompatibilit"at (Vertr"aglichkeit)] ist das Ma"s der Leichtigkeit, mit
der Softwareprodukte mit anderen verbunden werden k"onnen.
\item [Benutzerfreundlichkeit]ist, obwohl hier (wieder mal) an letzter Stelle
aufgez"ahlt, von gro"ser Wichtigkeit f"ur die bei der Schulung der Endanwender
anfallenden Kosten.  
\end{description}

Da eine Bibliothek jedoch eine Sammlung von Funktionalit"at ist, m"ussen f"ur
die Qualit"at einer Bibliothek weitere Anforderungen der Benutzer beachtet
werden, die "uber jene an die einzelnen Bestandteile der Bibliothek
hinausgehen.  

Die Anforderungen an Bibliotheken steigen auch dadurch, da"s bei ihnen in
der Regel die Entwickler der Bibliothek nicht mit der Personengruppe
"ubereinstimmt, die das Projekt bearbeitet, bei dem die Bibliothek eingesetzt
wird. Anforderungen wie "Ubersichtlichkeit und Verst"andlichkeit r"ucken damit
gegen"uber den Anforderungen anderer Software besonders in den Vordergrund, um
die Einsetzbarkeit der Bibliothek in Projekten dritter Personen zu
gew"ahrleisten. 


\subsection{Wiederverwendbarkeit}
Wiederverwendbarkeit ist die Eigenschaft von Software, ganz oder teilweise in
neuen Softwareprodukten erneut verwendet werden zu k"onnen \cite{Mey88}.
Softwarebibliotheken stellen somit Investitionen in zuk"unftige Projekte dar.
Wiederverwendung von Software ist unter zwei Gesichtspunkten interessant:
\begin{itemize}
\item Wiederverwendung kann die Kosten von Softwareprodukten senken, wenn f"ur
neue Anwendungen Teile einer alten Anwendung erneut verwendet werden.
\item Wiederverwendung kann die Korrektheit von Softwareprodukten erh"ohen, da
bei einer Wiederverwendung die Lebensdauer der erneut verwendeten Teile der
Software steigt und somit die Wahrscheinlichkeit w"achst, darin eventuell
enthaltene M"angel zu entdecken \cite{Car86}.  
\end{itemize}
Wiederverwendbarkeit von Software ist damit f"ur die Qualit"at von sehr hoher
Bedeutung. Hilfsmittel k"onnen die Auswahl und das Auffinden von
Softwarebausteinen erleichtern. Im Rahmen dieser Arbeit entstand deshalb der in
Abschnitt \ref{Klssnbrwsr} beschriebene TooL-Browser, der es dem Benutzer
erlaubt, mit Hilfe von HTML-Seiten\footnote{{\bf H}yper {\bf T}ext {\bf M}arkup
{\bf L}anguage} \cite{Koch96} durch die Bibliothek zu navigieren. 

\subsection{Verst"andlichkeit}
Der Wert einer Softwarebibliothek h"angt entscheidend davon ab, da"s ihre
Verwendung ohne l"angere Einarbeitungszeit m"oglich ist. Die Bibliothek mu"s
ihre Funktionalit"at daher verst"andlich anbieten. \cite{Jun95} beschreibt, wie
eine Dokumentation zweckm"a"sig durchzuf"uhren ist. Zur Dokumentation eines
Softwarebausteins k"onnen beispielsweise Zustandsgraphen verwendet werden. Auch
Vor-- und Nachbedingungen der Dienste der Bibliothek sind von Bedeutung. 

Die Dokumentation einer Softwarekomponente richtet sich sowohl an den
Benutzer wie auch an den Softwareentwickler, der "Anderungen an der
Komponente vornimmt. Insbesondere Informationen "uber die hinter der
Funktionalit"at stehenden Konzepte und Abh"angigkeiten von anderen Komponenten
erleichtern das f"ur "Anderungen notwendige Verst"andnis. Auch Konventionen bei
Benennungen erleichtern das f"ur "Anderungen n"otige Verst"andnis. Die 
Verst"andlichkeit von Bibliotheken steigt auch durch m"oglichst geringe
Abh"angigkeiten zwischen ihren einzelnen Komponenten.

Weiterhin ist darauf zu achten, da"s ein Verst"andnis der Bibliothek
ohne die Kenntnis aller Details und Verfahren m"oglich bleibt.
Abstraktionsmechanismen sind bei der Verwendung von Bibliotheken n"utzlich. 
Sie k"onnen helfen, die gro"se Menge angebotener Funktionalit"at zu
organisieren und auf diese Weise verst"andlich anzubieten.
Abstraktionsmechanismen erm"oglichen es, zun"achst von (unwichtigen) Details 
abzusehen und sich auf die Grobstruktur der Information zu konzentrieren.
Ein "ublicher Abstraktionsmechanismus ist beispielsweise Klassifizierung. 

Auch die Anwendung des Geheimnisprinzips bei der Gestaltung der Schnittstellen
der Bibliothek ist eine M"oglichkeit zur Steigerung der Verst"andlichkeit.
Das Geheimnisprinzip besagt, da"s Benutzer die Art und Weise, in der eine
Funktionalit"at erbracht wird, nicht zu kennen brauchen, sondern nur deren
Schnittstelle betrachten. Auch eine Trennung von Definition
und Implementierung kann helfen, die Verst"andlichkeit zu erh"ohen. 

\subsection{"Ubersichtlichkeit}
Eine wesentliche Voraussetzung f"ur eine wirtschaftliche Wiederverwendbarkeit
ist die "Ubersichtlichkeit von Bibliotheken. Nur wenn der Benutzer der
Bibliothek schnell feststellen kann, wo sich welche Art von Funktionalit"at in
der Bibliothek befindet, kann er die Bibliothek f"ur seine Arbeit sinnvoll
einsetzen. Zur Steigerung der "Ubersichtlichkeit einer Bibliothek gibt es
mehrere M"oglichkeiten:
\begin{itemize}
\item Dokumentation: "Ubersichtliche Dokumentation der Bibliothek, ihrer
Struktur und der hinter der Bibliothek stehenden Konzepte. 
\item Konventionen: Einheitliche Benennungen von Funktionen, Prozeduren oder
Methoden. 
\item Vererbung: Objektorientierte Sprachen verf"ugen mit dem Mechanismus der
Vererbung auch gleichzeitig "uber eine M"oglichkeit, eine Bibliothek zu
strukturieren und f"ur den Benutzer "ubersichtlich zu gestalten. 
\end{itemize}
Vererbung unterst"utzt Wiederverwendung auch innerhalb der Bibliothek.
Speziell durch diese Form der Wiederverwendung kann die "Ubersichtlichkeit der
Bibliothek f"ur den Benutzer erheblich gesteigert werden. Voraussetzung ist
jedoch, da"s die Wiederverwendung sich auf die in der Bibliothek enthaltenen
Konzepte bezieht. Bei geschickter Anwendung kann Wiederverwendung durch ihre
klassifizierende Wirkung innerhalb der Bibliothek auf diese Weise das Auffinden
von in der Bibliothek enthaltenen Konzepten erleichtern.
Abschnitt \ref{VererbungsFormen} untersucht die unterschiedlichen Formen der
Vererbung n"aher auf ihre Tauglichkeit zur Erh"ohung der "Ubersichtlichkeit. 


\subsection{Erweiterbarkeit}
Erweiterbarkeit bezeichnet die Leichtigkeit, mit der Softwareprodukte an
Spezifikations"anderungen angepa"st werden k"onnen \cite{Mey88}. Software kann
nur dann dauerhaft eingesetzt werden, wenn sie sich den ver"andernden
Bed"urfnissen der Benutzer anpassen l"a"st. Bei kleineren Programmen bereitet
eine "Anderung der Spezifikation in der Regel kaum Schwierigkeiten. Doch bei
der "`Programmierung im Gro"sen"' \cite{Der76} f"uhren Ver"anderungen des
Systems leicht zu erheblichen Problemen. Gro"se Softwaresysteme neigen dazu,
eine derart gro"se Zahl von wechselseitigen Abh"angigkeiten zwischen ihren
Komponenten zu enthalten, da"s eine "Anderung in ihnen kaum mehr m"oglich ist.

Um die Erweiterbarkeit von Software zu erh"ohen sollte daher der Entwurf des
Systems m"oglichst einfach und dezentral gehalten und Abh"angigkeiten zwischen
Komponenten minimiert werden.

Erweiterbarkeit verlangt von der Software also eine "Offnung gegen"uber
"Anderungen. Die Forderung nach Offenheit steht in einem scheinbaren
Widerspruch zur Forderung nach Wiederverwendbarkeit. \cite{Mey88} beschreibt
dies unter dem Begriff des "`Offen-geschlossen-Prinzips"' von Modulen. Module
m"ussen nach \cite{Mey88} sowohl offen als auch geschlossen sein k"onnen. Ein
Modul wird als offen bezeichnet, wenn Erweiterungen an ihm vorgenommen werden
k"onnen. Die Geschlossenheit von Modulen kennzeichnet den Zustand, in dem sich
ein Benutzer des Moduls auf die Konstanz der Eigenschaften des Moduls verlassen
kann. 

Um Software erfolgreich wiederzuverwenden, ist die Anpassbarkeit an neue
Aufgaben unbedingte Voraussetzung. Wiederverwendung und Erweiterbarkeit stehen
also nur in einem scheinbaren Widerspruch zu einander. Tats"achlich ist die
Erweiterbarkeit ein Unterst"utzung f"ur die Wiederverwendbarkeit.

In sp"ateren Abschnitten der Arbeit wird Vererbung als M"oglichkeit der
Kombination von Wiederverwendung und Erweiterbarkeit eine zentrale Rolle
spielen.  

\vspace{3mm}
\noindent {\bf Zusammenfassung}
\vspace{3mm}

\noindent Die vorherigen Abschnitte zeigen, da"s an die Qualit"at einer
Softwarebibliothek f"ur Massendaten besondere Anforderungen gestellt werden,
die "uber jene an "`normale"' Software hinausgeht. Da das Ziel einer
Bibliothek die Wiederverwendung ihrer Dienste ist, besitzt die
Wiederverwendbarkeit einer Bibliothek einen hohen Stellenwert.
Der Anbieter einer Bibliothek sollte versuchen, Benutzer bei der Verwendung der
Bibliothek zu unterst"utzen. Hierbei zeigt sich, da"s das Ziel der
Wiederverwendbarkeit mit den Zielen Verst"andlichkeit und "Ubersichtlichkeit
eng zusammenh"angt.

Zur Steigerung der Qualit"at von Bibliotheken bieten sich zun"achst die von der
jeweils verwendeten Programmiersprache angebotenen Hilfsmittel an. Insbesondere
das Geheimnisprinzip und die Trennung von Definition und Implementierung
sind hilfreich. Auch Konventionen "uber Benennung im Programmtext
erleichtern das Verst"andnis der Bibliothek. Ein gro"ser Teil der Dokumentation
einer Bibliothek sollte auf diese Weise und in Form von Kommentaren bereits im
Quelltext enthalten sein, da separate Dokumentation oft nicht aktuell ist.

In der Regel ist es erforderlich, zus"atzlich Mechanismen
au"serhalb des Quelltextes der Bibliothek anzuwenden. Dokumentation ist eine
M"oglichkeit, dem Benutzer Bibliotheken zug"anglich zu machen. Wegen der F"ulle
der in Bibliotheken angebotenen Diensten kommen oft auch Browser zum Einsatz.

