In diesem Kapitel wird zunächst auf einige Probleme in der Implementierung eingegangen und anschließend die Code Qualität betrachtet.
In diesem Kapitel wird zunächst auf einige Probleme bei der Implementierung eingegangen und anschließend die Code Qualität betrachtet.
\section{Probleme}
\subsection{Maven und nicht Maven Bibliotheken}
Alle Dependencies in den bestehenden Projekten werden durch Maven (\cite{MVN}) aufgelöst.
Maven ist ein Build-Management Tool das auch die Dependency Verwaltung übernimmt.
Maven ist ein Build-Management Tool, das auch die Dependency Verwaltung übernimmt.
Die isaac.lib und der nisf-creator standen zum Beginn des Projektes nicht in einem Maven Repository zur Verfügung.
Damit weiterhin keine lokalen Bibliotheken eingebunden werden müssen wurden beide Bibliotheken und deren Abhängigkeiten in das Repository eingefügt.
Dazu musste zunächst manuell die Abhängigkeiten der einzelnen Bibliotheken aufgelöst werden bevor diese in das Project Object Model (POM) der einzelnen Bibliotheken eingetragen werden kann.
Damit weiterhin keine lokalen Bibliotheken eingebunden werden müssen, wurden beide Bibliotheken und deren Abhängigkeiten in das Repository eingefügt.
Dazu mussten zunächst die Abhängigkeiten der einzelnen Bibliotheken manuell aufgelöst werden, bevor diese in das Project Object Model (POM) der einzelnen Bibliotheken eingetragen werden können.
\subsection{CSD upload}
In der Implementierung sind beim hochladen des Bildes einige Probleme aufgetreten.
Genauer gesagt wird der CSD mitgeteilt wo das Bild herunterzuladen ist und das kann zu Problemen führen.\todo{Bild}
Ein Problem das hierbei auftreten kann, das der Port freigegeben sein muss.
Um einen Port freizugeben braucht man Administratorrechte, die nicht jeder Nutzer hat.
In der Implementierung sind beim Hochladen des Bildes einige Probleme aufgetreten.
Genauer gesagt wird der CSD mitgeteilt, wo das Bild herunterzuladen ist und das kann zu Problemen führen.\todo{Bild}
Ein Problem, das hierbei auftreten kann, ist, dass der benötigte Netzwerk-Port nicht freigegeben ist.
Um einen Port freizugeben, braucht man Administratorrechte, die nicht jeder Nutzer hat.
Außerdem ist darauf zu achten, dass die Infrastruktur erlaubt, dass der Server eine Rückverbindung zum Client aufbaut.
Steht der Server in einem andern Netz als der Client kann diese Funktionalität durch eine Firewall blockiert werden, und das Bild lässt sich nicht übertragen.
Steht der Server in einem anderen Netz als der Client, kann diese Funktionalität durch eine Firewall blockiert werden, und das Bild lässt sich nicht übertragen.
Die Isaac.lib überträgt nicht die IP-Adresse des Clients als Download-URL, sondern denn Domain Namen des Clients.
Kann der Server den Namen nicht auflösen, kann der Server das Bild ebenfalls nicht herunterladen.
% Interessant wäre, wie man solche Probleme löst. Falls das nicht möglich ist, kannst du Vorschläge im Ausblick machen.
\section{Code Qualität}
\subsection{Testing}
Es wurden keine Testcases geschrieben.
Um die Anbindung an die CSD zu testen wären umfangreiche Integrationstest nötig.
Diese gestalten sich als schwierig da keine CSD Server nur zum Testen zur Verfügung steht.
Um die Anbindung an die CSD zu testen, wären umfangreiche Integrationstest nötig.
Diese gestalten sich schwierig, da keine CSD Server als exklusive Testinstanzen zur Verfügung stehen.
Alle Komponenten wurden manuell testet um die Funktionalität zu überprüfen.
Das bedeutet beim Parsen der XML Dokumetne im Result Handler der CSDCommons Bibliothek wurde für jedes ausgelesen Feld die Korrektheit des Ergebnisses überprüft.
Es wurde daruf geachtet das einige Felder optional sind und das das Fehlend dieser Komponenten nicht zu Programmabstürzen führt.
Alle Komponenten wurden manuell getestet, um die Funktionalität zu überprüfen.
Das bedeutet, beim Parsen der XML Dokumente im Result Handler der CSDCommons Bibliothek wurde für jedes ausgelesen Feld die Korrektheit des Ergebnisses überprüft.
Es wurde darauf geachtet, dass einige Felder optional sind und dass das Fehlen dieser Informationen nicht zu Programmabstürzen führt.
Das Parsen der XML Dokumente im ResultHandler der CSDCommons Bibliothek ist besonders intensiv überprüft worden.
Viele Felder sind optional und werden versucht im CSDAdapter und im SBA ausgelesen.
Es muss also immer darauf geachtet werden,das Informationen vorhanden sind und auch verwendet werden können.
%VORHER Viele Felder sind optional und werden versucht im CSDAdapter und im SBA ausgelesen.
% NACHHER (bitte prüfen):
Viele Felder sind optional. Sowohl CSDAdapter als auch SBA versuchen aber dieser auszulesen.
Es muss also immer darauf geachtet werden, dass Informationen vorhanden sind und auch verwendet werden können. % Ist mir für OPTIONALE Felder nicht klar.
Bei der Nutzereingabe zum Schreiben in die CSD wird die Richtigkeit und Notwendigkeit der einzelnen Felder direkt bei der Eingabe überprüft.
Übergibt man ein unvollständiges XML Dokument an die Isaac.lib, so wirft diese Fehler.
Um das zu vermeiden, kann der Nutzer die Anfrage nicht absenden, bevor alle Eingaben korrekt erfolgt sind.
Auch hier wurde für jedes Feld überprüft ob die Eingabe den Richtlinien der CSD entspricht.
Auch hier wurde für jedes Feld überprüft, ob die Eingabe den Richtlinien der CSD entspricht.
\subsection{Find Bugs}
Um in der Benutzung keine Programmabstürze durch Programmierfehler zu erhalten, wurde der Code mit Findbugs \cite{FB} überprüft.
Findbugs untersucht den Java bytecode nach Bug Patterns.
Vermutliche Fehler z.B. Nullpointer oder auch schlechter Stil wie == Operator anstelle der equals Methode wird von der Bibliothek erkannt und dem Nutzer zur Verbesserung vorgeschlagen.
Vermutliche Fehler z.B. Nullpointer oder auch schlechter Stil wie == Operator anstelle der equals Methode werden von der Bibliothek erkannt und dem Nutzer zur Verbesserung vorgeschlagen.
In der Implementierung wurden alle Anmerkungen von Findbugs behoben.
Lediglich die Fehler in der JHotDraw GUI Bibliothek, auf dem der SBA aufbaut, wurden nicht behoben.
Es ist ein exaktes Verständnis des gesamten JHotDraw Frameworks notwendig, um z.B. die gefundenen Bitmaskenfehler zu beheben.