diff --git a/projektdokumentation/projektdokumentation.tex b/projektdokumentation/projektdokumentation.tex index 4de3967..cd61575 100644 --- a/projektdokumentation/projektdokumentation.tex +++ b/projektdokumentation/projektdokumentation.tex @@ -1,31 +1,32 @@ \section{Über dieses Dokument} -\label{sec:org3e817e2} +\label{sec:org502edb3} Im nachfolgenden Abschnitt finden Sie allgemeine Informationen zu diesem Dokument. \subsection{Beschreibung} -\label{sec:org4722874} +\label{sec:org19761cf} Diese Arbeit hat zum Ziel, die Planung und Erstellung einer grafischen Oberfläche zum einfachen Bedienen der Software \gls{borg} \footcite{borgbackup} , durchzuführen sowie zu dokumentieren. \subsection{Zweck und Inhalt} -\label{sec:org68956a6} +\label{sec:org1f0870e} Zweck dieses Dokumentes ist die vollständige und nachvollziehbare Dokumentation zur Diplomarbeit von Andreas Zweili. \subsection{Aufbau} -\label{sec:org0d37fdc} +\label{sec:org5e29840} -Alle Inhalte sind chronologisch sortiert, vom ältesten zum jüngsten -Ereignis, und nach Kapiteln getrennt. +Alle Inhalte sind in der Regel chronologisch sortiert, vom ältesten zum jüngsten +Ereignis, und nach Kapiteln getrennt. An gewissen Stellen kann die +chronologische Reihenfolge allenfalls nicht gewährleistet werden. \subsection{Lizenz} -\label{sec:orgd1bc1a7} +\label{sec:org6aaf06a} Dieses Dokument wurde von Andreas Zweili im Rahmen der Diplomarbeit an der IBZ Schule erstellt und steht unter der \gls{cc} BY-SA 4.0 \footcite{cc} Lizenz. @@ -33,9 +34,9 @@ Dadurch darf die Arbeit unter Beibehalten der Lizenz kopiert und weiterverarbeitet werden. Zusätzlich muss der Urheber genannt werden. \section{Initialisierung} -\label{sec:org7d5dba1} +\label{sec:org4bffdd1} \subsection{Vision} -\label{sec:org9ec13ed} +\label{sec:org2a2aa21} Die Software soll \gls{borg} für den durchschnittlichen Computer User zugänglich machen. Backups sollen dabei schnell und unkompliziert erstellt werden können. @@ -43,11 +44,11 @@ Auch die Möglichkeit automatischer im Hintergrund laufender Backups soll dem User gegeben sein, damit die Hürde für Backups so tief wie möglich gehalten wird. -Die besten Backups sind solche bei denen man gar nicht mehr weiss das man sie -hat bis man sie braucht. +Die besten Backups sind solche, bei denen man gar nicht mehr weiss das man sie +hat, bis man sie braucht. \subsection{Ausgangslage} -\label{sec:org7711a96} +\label{sec:org6dd617e} \gls{borg} ist deshalb interessant, weil es während einem Backup relativ wenig Ressource im Vergleich zu anderen Systemen benötigt und schon relativ @@ -82,7 +83,7 @@ Das Projekt muss dabei vom Studenten in Eigenarbeit und einer Zeit von 250 Stunden bis zum 18. März 2019 erarbeitet werden. \subsection{Projektziele} -\label{sec:orge51f115} +\label{sec:orgbc17b07} Das Hauptziel der Arbeit soll es sein eine einfach nutzbare grafische Oberfläche für \gls{borg} zu entwickeln. Da \gls{borg} selber freie Software ist und @@ -100,14 +101,14 @@ jedem Zeitpunkt öffentlich einsehbar sein. Der Quelltext der Dokumentation ist unter diesem Link erreichbar: \url{https://git.2li.ch/Nebucatnetzer/thesis} Die Entwicklung wird hauptsächlich auf einem Linux System stattfinden. Da -BorgBackup einerseits hauptsächlich auf Unix Systeme ausgelegt ist und +\gls{borg} einerseits hauptsächlich auf Unix Systeme ausgelegt ist und anderseits die Hauptzielgruppe des Projektes auch auf Linux Usern liegt. Trotzdem sollen im Projekt cross-plattform fähige Technologien eingesetzt werden damit es in der Zukunft möglich ist das Projekt auf andere Plattformen auszuweiten. \subsubsection{Ziele inklusive Gewichtung} -\label{sec:org008e35c} +\label{sec:orgfaaeb2b} Im Projektantrag wurden vor gängig folgende Ziele definiert und entsprechend gewichtet. Die Gewichtung wurde dabei so vorgenommen, dass Ziele mit einer @@ -141,7 +142,7 @@ integriert werden und ist nicht unwichtig. \hline 4. & Der User kann ein Archiv mit 3 Klicks löschen. & x & \\ \hline -5. & Der User kann unter Linux ein Archiv mit zwei Klicks "`read-only"' als Laufwerk mounten. & x & \\ +5. & Der User kann unter Linux ein Archiv mit zwei Klicks "`red-only"' als Laufwerk mounten. & x & \\ \hline 6. & Der User kann ein Archiv wieder herstellen. & x & \\ \hline @@ -193,22 +194,22 @@ integriert werden und ist nicht unwichtig. \hline 30. & Der User kann die "`Retention Policy"' konfigurieren. & & 2\\ \hline -31. & Die Anwendung kann mit allen Features von BorgBackup umgehen. & & 2\\ +31. & Die Anwendung kann mit allen Features von \gls{borg} umgehen. & & 2\\ \hline 32. & Die Applikation prüft, ob sie sich im richtigen Netzwerk befindet bevor sie eine Verbindung zum Server aufbaut. & & 2\\ \hline -\caption{\label{tab:org4d44292} +\caption{\label{tab:org47ae745} Projektziele} \\ \end{longtable} \newpage \subsection{Projektabgrenzung} -\label{sec:org8b97319} +\label{sec:org6efbb72} Die Anwendung beschränkt sich darauf Funktionen von \gls{borg} grafisch darzustellen oder nützlich zu erweitern soweit dies über die \gls{api} möglich -ist. Wie in Abbildung:(\ref{fig:org9f2696c}) zu sehen ist, werden die Aktionen effektiv +ist. Wie in Abbildung:(\ref{fig:orgfa0d0f8}) zu sehen ist, werden die Aktionen effektiv immer vom Borg Binary ausgeführt und nicht von der grafischen Oberfläche. Eine Erweiterung von \gls{borg} ist nicht vorgesehen. Backup und Verschlüsselung sind heikle Themen und sollten unbedingt nur von Experten angegangen werden. Das @@ -224,12 +225,12 @@ entdeckt werden, wird dieser dem Projekt melden jedoch nicht selber beheben. \begin{figure}[htbp] \centering \includegraphics[width=.9\linewidth]{pictures/kontextdiagramm.pdf} -\caption{\label{fig:org9f2696c} +\caption{\label{fig:orgfa0d0f8} Kontextdiagramm des Borg GUI} \end{figure} \subsection{Projektmethode} -\label{sec:orga79d291} +\label{sec:orgb853aca} Für das Projekt wurde die Wasserfall-Methode gewählt. Da nur eine einzige Person am Projekt arbeitet, kann nur ein Task nach dem anderen @@ -238,16 +239,16 @@ Somit macht das iterative Vorgehen der Wasserfall-Methode für dieses Projekt am meisten Sinn. \subsection{Konfigurationsmanagement} -\label{sec:org9479973} +\label{sec:orgbbfcc86} In der nachfolgenden Sektion wird definiert wie die Software und Dokumentation versioniert wird und welche allgemeinen Werkzeuge eingesetzt werden. \subsubsection{Versionskontrolle} -\label{sec:orge6b8a04} +\label{sec:org6fa8ac3} Die komplette Dokumentation, der Quellcode der Applikation sowie jegliche -zusätzliche Dokumente wie etwa die Zeitplanung werden mittels der Software Git +zusätzlichen Dokumente wie etwa die Zeitplanung werden mittels der Software Git versioniert. Thematisch zusammengehörende Änderungen werden in einem Commit zusammengefasst. Somit ist jederzeit nachvollziehbar was wann geändert hat. Ein Commit sollte dabei gemäss dem Artikel von Chris Beams "`How to write a Git @@ -287,7 +288,7 @@ und schnelle Software erwiesen. \end{itemize} \subsubsection{Editor} -\label{sec:orge9cf706} +\label{sec:orga862976} Sowohl bei der Dokumentation wie auch bei der Programmierung wurde hauptsächlich der Editor GNU Emacs \footcite{emacs} verwendet. GNU Emacs ist mit @@ -298,7 +299,7 @@ flexibler Texteditor ist. Von normaler Textmanipulation über Taskmanagement und Emails schreiben ist alles möglich. \subsubsection{Dokumentation} -\label{sec:org84f7d80} +\label{sec:orgba2d6cf} Diese Dokumentation wurde in Org-mode \footcite{orgmode}, einer Erweiterung für den Text Editor Emacs, geschrieben. Die Syntax erinnert an Markdown und @@ -324,32 +325,32 @@ Die Diagramme wurden mit Draw.io \footcite{draw} erstellt. Draw.io ist \gls{libr unter Apache Lizenz Version 2.0 \footcite{apache} und kann sowohl als Desktop Applikation wie auch als Webanwendung genutzt werden. -Beim Design der Arbeit wurden soweit als möglich die typografischen Regeln aus +Beim Design der Arbeit wurden soweit als möglich die typographischen Regeln aus dem Buch "`Practical Typography"' von Matthew Butterick \footcite{typo} angewandt. Bei den Diagrammen wurden ausschliesslich Farben aus der von Google entwickelten Design Sprache "`Material"' \footcite{material} eingesetzt. \subsection{Zeitplanung} -\label{sec:org67dae7c} +\label{sec:org013b6ac} Die detaillierte Zeitplanung ist dem Ganttchart in der Datei \href{Zeitplanung\_Andreas\_Zweili.html}{Zeitplanung\_Andreas\_Zweili.html} zu entnehmen. Bei der Zeitplanung wurde darauf geachtet das die Arbeit soweit, als möglich nicht mit dem Berufsleben -kollidiert An einem normalen Arbeitstag wurde dabei damit gerechnet das ca. 2 +kollidiert. An einem normalen Arbeitstag wurde dabei damit gerechnet das ca. 2 Stunden Arbeit am Abend möglich sein sollten. An einem arbeitsfreien Tag wurde mit 6 Stunden Arbeit gerechnet. Über die Festtage wurden diverse Tage von der -Planung ausgenommen, da es nicht realistisch schien das an diesen Tagen die -Arbeit signifikant vorwärtsgehen würde. Auch Schultage wurde nicht, als +Planung ausgenommen, da es nicht realistisch schien, dass an diesen Tagen die +Arbeit signifikant vorwärts gehen würde. Auch Schultage wurde nicht, als Arbeitstage gerechnet da man meist nicht mehr für weitere Tätigkeiten gross motiviert ist. Als zusätzliche Massnahme um die Arbeitslast zu verteilen wurde vom 14. Januar bis zum 11. März jeder Montag auf der Arbeitsstelle als frei eingegeben. -Dadurch steht wägend des Projektes etwas mehr Zeit zur Verfügung als sonst mit +Dadurch steht, während des Projektes etwas mehr Zeit zur Verfügung als sonst mit einer 100 Prozent Arbeitsstelle möglich wäre. \subsection{Controlling} -\label{sec:org943b282} +\label{sec:orge0e7ff0} Das Controlling wird verwendet, um zu kontrollieren, dass die eigentliche Planung mit dem effektiv geleisteten Aufwand respektive den effektiv @@ -358,8 +359,8 @@ Lehren gezogen werden. \newpage \begin{landscape} -\subsubsection{Zeit} -\label{sec:orgf7535b8} +\subsubsection{Zeitaufwand} +\label{sec:org94d76ba} \begin{longtable}{|p{3cm}|p{5cm}|p{3cm}|p{7cm}|} \hline @@ -380,17 +381,17 @@ Lehren gezogen werden. \hline & \textbf{Gesamter Aufwand} & & \\ \hline -\caption{\label{tab:orgce7c191} +\caption{\label{tab:orgc31fd34} Zeitcontrolling} \\ \end{longtable} +\end{landscape} -\newpage \subsubsection{Ressourcen} -\label{sec:orgc87dca1} +\label{sec:org6914ce3} Folgende Ressourcen werden während der Arbeit benötigt: -\begin{longtable}{|p{5cm}|p{3cm}|p{3cm}|p{7cm}|} +\begin{longtable}{|p{4cm}|p{2cm}|p{2cm}|p{4cm}|} \hline \textbf{Ressource}\cellcolor[HTML]{C0C0C0} & \textbf{geschätzte Stück}\cellcolor[HTML]{C0C0C0} & \textbf{effekt. Stück}\cellcolor[HTML]{C0C0C0} & \textbf{Begründung}\cellcolor[HTML]{C0C0C0}\\ \hline @@ -406,30 +407,29 @@ Folgende Ressourcen werden während der Arbeit benötigt: \endfoot \endlastfoot \hline -Projektleiter/Mitarbeiter & 1 & 1 & \\ -Diplombetreuer & 1 & 1 & \\ -Testuser & 5 & & \\ -Korrekturleser & 3 & & \\ -iPad & 1 & 1 & \\ -Notebook & 1 & 1 & \\ +Projektleiter/Mitarbeiter & 1 & 1 & keine Abweichung\\ +Diplombetreuer & 1 & 1 & keine Abweichung\\ +Testuser & 5 & 5 & keine Abweichung\\ +Korrekturleser & 3 & 3 & keine Abweichung\\ +iPad & 1 & 1 & keine Abweichung\\ +Notebook & 1 & 1 & keine Abweichung\\ \hline -\caption{\label{tab:orgea23da7} +\caption{\label{tab:orge797eb6} Ressourcen} \\ \end{longtable} -\end{landscape} \subsubsection{Kosten} -\label{sec:org3e4bd81} +\label{sec:orgb1ea25c} Werden die internen Lohnkosten des Projektleiters auf ca. 60 CHF pro Stunde -geschätzt ergeben sich aus der Zeitplanung somit theoretische Kosten von 19'200 -CHF für die Umsetzung dieser Arbeit. Da dieses Projekt finanziell jedoch in -keinster Weise wirtschaftliche relevant ist, sind die Kosten nur ein rein -theoretischer Faktor. +geschätzt, ergeben sich gemäss der Berechnung in der Tabelle:(\ref{tab:org1f6d821}), +theoretische Kosten von 19'200 CHF für die Umsetzung dieser Arbeit. Die Kosten +für die Entwicklung werden im Projekt jedoch nicht berücksichtigt, somit sind +die Kosten nur ein rein theoretischer Faktor. \begin{table}[htbp] \centering -\begin{tabular}{lrr} +\begin{tabular}{|l|c|c|r|} \hline \textbf{Name}\cellcolor[HTML]{C0C0C0} & \textbf{Aufwand in h}\cellcolor[HTML]{C0C0C0} & \textbf{Kosten in CHF}\cellcolor[HTML]{C0C0C0}\\ \hline @@ -446,26 +446,24 @@ Meeting \#3 & 5 & 300\\ \textbf{Total} & 320 & 19200\\ \hline \end{tabular} -\caption{\label{tab:org60421fb} +\caption{\label{tab:org1f6d821} Kostenrechnung} \end{table} \subsection{Projektrisiken} -\label{sec:orge73eaac} +\label{sec:orgfb728f9} Das Risikomanagement dient dazu Risiken im Projekt zu erkennen und Massnahmen zur Vermeidung der Risiken zu definieren. Dadurch steht man ihnen nicht unvorbereitet gegenüber, sollten sie eintreffen. \subsubsection{Risikobeschreibung} -\label{sec:org5560dc3} +\label{sec:org6b04b96} -In der Tabelle: (\ref{tab:org2ee8009}), sind die Risiken des Projektes -gemeinsam mit ihren Gegenmassnahmen aufgelistet. Jedes Risiko wurde -entsprechend der Tabelle: (\ref{tab:org1415985}) nach der Wahrscheinlichkeit -des Eintreffens bewertet und entsprechend der Tabelle: (\ref{tab:org6aad5da}) nach -seiner Auswirkung bewertet. +In der Tabelle: (\ref{tab:org5188bca}), sind die Risiken des Projektes +gemeinsam mit ihren Gegenmassnahmen aufgelistet. Somit können gewisse Risiken +bereits vorher abgefangen werden. \begin{longtable}{|p{0.45\textwidth}|p{0.45\textwidth}|} \hline @@ -497,15 +495,15 @@ User haben keine Zeit für Utility Tests. & Vor gängig einen Termin abmachen.\\ \hline \gls{borg} ändert fundamental seine \gls{api}. & Gegen eine fixe Version von \gls{borg} entwickeln.\\ \hline -\caption{\label{tab:orge9ee080} +\caption{\label{tab:org64a04ff} Projektrisiken} \\ \end{longtable} \section{Analyse} -\label{sec:org7504602} +\label{sec:orgf74dfd4} \subsection{Umweltanalyse} -\label{sec:org4b546fd} +\label{sec:orgdc9b7e0} Die Projektumwelt-Analyse ist eine Methode, die Beziehungen, Erwartungshaltungen und Einflüsse auf das Projekt durch interne und @@ -513,10 +511,10 @@ externe soziale Umwelt zu betrachten und zu bewerten. Auf Grundlage der Analyseergebnisse werden erforderliche Massnahmen zur Gestaltung der Umweltbeziehungen abgeleitet. Die Gestaltung der Projektumweltbeziehungen ist eine Projektmanagementaufgabe. In der -Tabelle:(\ref{tab:orgb24f1e2}) wurden die Anforderungen und Wünsche +Tabelle:(\ref{tab:orgf6b1b5b}) wurden die Anforderungen und Wünsche mit Einschätzung der Wahrscheinlichkeit und der Einflussnahme aufgenommen. Zusätzlich ist die Beziehung der Stakeholder zum Projekt noch in der -Abbildung:(\ref{fig:org5970836}) grafisch dargestellt. +Abbildung:(\ref{fig:org0f40a2a}) grafisch dargestellt. Da das Projekt so ausgelegt ist das der Projektleiter es in Eigenarbeit verwirklichen kann ist der Einfluss der Stakeholder während der Umsetzung sehr @@ -530,7 +528,7 @@ Verfügung gestellt. \begin{figure}[htbp] \centering \includegraphics[width=.9\textwidth]{pictures/stakeholder_diagramm.pdf} -\caption{\label{fig:org5970836} +\caption{\label{fig:org0f40a2a} Stakeholder Diagramm} \end{figure} @@ -542,7 +540,7 @@ Stakeholder Diagramm} \hline \textbf{Nr}.\cellcolor[HTML]{C0C0C0} & \textbf{Stakeholder}\cellcolor[HTML]{C0C0C0} & \textbf{Einfluss}\cellcolor[HTML]{C0C0C0} & \textbf{Anforderung/Wünsche}\cellcolor[HTML]{C0C0C0} & \textbf{Wahrscheinlichkeit}\cellcolor[HTML]{C0C0C0}\\ \hline -1. & BorgBackup Community & gering & - Eine Applikation die den Umfang von BorgBackup abdeckt & mittel\\ +1. & \gls{borg} Community & gering & - Eine Applikation die den Umfang von \gls{borg} abdeckt & mittel\\ & & & - Open-Source & hoch\\ & & & - Mitsprachrecht bei der Entwicklung & niedrig\\ \hline @@ -554,17 +552,17 @@ Stakeholder Diagramm} \hline 4. & Projektleiter & hoch & - Stabile Anwendung erstellen & mittel\\ & & & - Ein nachhaltiges Projekt starten & mittel\\ - & & & - Anerkennung im fachlichen Umfeld & hoch\\ + & & & - Anerkennung im fachlichen Umfeld & niedrig\\ \hline \end{tabular} -\caption{\label{tab:orgb24f1e2} -Umwelt-Analyse} +\caption{\label{tab:orgf6b1b5b} +Umweltanalyse} \end{table} \end{landscape} \subsection{Risiko-Analyse} -\label{sec:orgb87b606} +\label{sec:org892f94d} Bei der Risiko-Analyse wird von einem durchschnittlichen Benutzer ausgegangen, der zur Zeit noch keine Backups macht und beginnen möchte \gls{borg} zu nutzen, um @@ -572,15 +570,15 @@ auf einer externen Harddisk seine Backups zu speichern. Es wird dabei eine Ist/Soll Analyse gemacht, um die Lösung gegenüber der bestehenden Möglichkeiten zu vergleichen. Jedes Risiko wurde entsprechend der -Tabelle: (\ref{tab:org1415985}) nach der Wahrscheinlichkeit des Eintreffens -bewertet und entsprechend der Tabelle: (\ref{tab:org6aad5da}) nach seiner Auswirkung +Tabelle: (\ref{tab:orge1c188d}) nach der Wahrscheinlichkeit des Eintreffens +bewertet und entsprechend der Tabelle: (\ref{tab:org6b71d1b}) nach seiner Auswirkung im Bezug auf die Nützlichkeit der gemachten Backups. -In der Tabelle: (\ref{tab:org2ee8009}) sind dabei die Risiken für das -Szenario aufgelistet und nummeriert. In der Abbildung:(\ref{fig:orge722da1}), ist die +In der Tabelle: (\ref{tab:org5188bca}) sind dabei die Risiken für das +Szenario aufgelistet und nummeriert. In der Abbildung:(\ref{fig:orgba8df6b}), ist die Bewertung des Ist-Risikos grafisch dargestellt und in der -Abbildung:(\ref{fig:org8df460b}), ist das Soll-Risiko welches mit dieser Arbeit -angestrebt wird ebenfalls grafisch dargestellt. +Abbildung:(\ref{fig:org214fefa}), ist das Soll-Risiko, welches mit dieser Arbeit +angestrebt wird, ebenfalls grafisch dargestellt. Es sollte im Rahmen der Arbeit möglich sein die meisten Risiken zu verringern. Da automatische Hintergrundbackups jedoch nur ein Kann-Ziel sind wir in dieser @@ -596,7 +594,7 @@ Arbeit reduzieren kann. 2 = mittel & Mässig wahrscheinlich, 20-50\%\\ 3 = hoch & Hohe Wahrscheinlichkeit > 50\%\\ \end{tabular} -\caption{\label{tab:org1415985} +\caption{\label{tab:orge1c188d} Risikobewertung Wahrscheinlichkeit} \end{table} @@ -610,7 +608,7 @@ Risikobewertung Wahrscheinlichkeit} 2 = mittel & Mittlere Auswirkung auf die Nützlichkeit\\ 3 = hoch & Hohe Auswirkung auf die Nützlichkeit\\ \end{tabular} -\caption{\label{tab:org6aad5da} +\caption{\label{tab:org6b71d1b} Risikobewertung Auswirkung} \end{table} @@ -632,7 +630,7 @@ Risikobewertung Auswirkung} 5. & Der Anwender vergisst die Backups zu machen.\\ \hline \end{tabular} -\caption{\label{tab:org2ee8009} +\caption{\label{tab:org5188bca} Risikobeschreibung} \end{table} @@ -640,43 +638,45 @@ Risikobeschreibung} \begin{figure}[H] \centering \includegraphics[width=9cm]{pictures/istrisiko.pdf} -\caption{\label{fig:orge722da1} +\caption{\label{fig:orgba8df6b} Grafische Darstellung der Ist-Risikoanalyse} \end{figure} \begin{figure}[H] \centering \includegraphics[width=9cm]{pictures/sollrisiko.pdf} -\caption{\label{fig:org8df460b} +\caption{\label{fig:org214fefa} Grafische Darstellung der Soll-Risikoanalyse} \end{figure} \newpage \subsection{SWOT-Analyse} -\label{sec:orgcbb6fed} +\label{sec:orgcd65a92} Die SWOT-Analyse ist eine Methode, die Stärken, Schwächen, Chancen und Gefahren zu erkennen, indem eine 4-Felder-Matrix ausgefüllt wird. Wichtig vor dem Ausfüllen der SWOT-Analyse ist es, ein klares Ziel zu haben. Die ausgefüllte SWOT-Analyse für dieses Projekt ist in der -Abbildung:(\ref{fig:org6a4313c}) zu sehen. +Abbildung:(\ref{fig:orgca071e6}) zu sehen. \begin{figure}[htbp] \centering \includegraphics[width=.9\linewidth]{pictures/swot_analyse.pdf} -\caption{\label{fig:org6a4313c} +\caption{\label{fig:orgca071e6} SWOT Analyse des Projektes} \end{figure} \subsection{Anforderungskatalog} -\label{sec:org52c8a33} +\label{sec:orgc1b2ce7} Der Anforderungskatalog entspricht 1 zu 1 den Zielen, welche in der Tabelle -\ref{tab:org4d44292} definiert wurden. +\ref{tab:org47ae745} definiert wurden. Im Zeitplan wurde der Fokus hauptsächlich +auf die Muss-Ziele gelegt. Ein paar der Kann-Ziele sind im Konzept jedoch auch +abgebildet. \subsection{Use Cases} -\label{sec:org0b3462a} +\label{sec:org4fc4fe3} Ein Use Case sammelt alle möglichen Szenarien, die eintreten können, wenn ein Akteur versucht, mithilfe des betrachteten Systems ein @@ -687,7 +687,7 @@ Login). Dabei wird die technische Lösung nicht konkret beschrieben. Die Detailstufe kann dabei sehr unterschiedlich sein.\footcite{usecase} \subsubsection{Anwendungsfalldiagramm} -\label{sec:org1e310b4} +\label{sec:orgd6378d1} "`Ein Anwendungsfalldiagramm \ldots{} ist eine der 14 Diagrammarten der Unified Modelling Language (UML), einer Sprache für die Modellierung @@ -696,39 +696,39 @@ Es stellt Anwendungsfälle und Akteure mit ihren jeweiligen Abhängigkeiten und Beziehungen dar."'\footcite{usecasediagramm} Das Anwendungsfalldiagramm für das \gls{borg} \gls{gui} ist in der Abbildung: -(\ref{fig:orgac72df5}) zu sehen. +(\ref{fig:org2b532cd}) zu sehen. \newpage \begin{landscape} \begin{figure}[htbp] \centering \includegraphics[width=.9\linewidth]{pictures/use_case.pdf} -\caption{\label{fig:orgac72df5} +\caption{\label{fig:org2b532cd} Anwendungsfalldiagramm} \end{figure} \end{landscape} \newpage \subsubsection{Use Cases Detailbeschreibung} -\label{sec:orgf807122} +\label{sec:org8d11acf} Use Cases werden in der Regel mithilfe einer sogenannten Use Case Schablone im Detail beschrieben, damit klar ist, wie der Ablauf jeweils genau aussieht. Die in diesem Projekt verwendete Schablone wurde von Alistair Cockburn definiert. -Die nachfolgend aufgeführten Use Cases, Tabellen:(\ref{tab:orgeb722bc}, \ref{tab:org81c3985}, -\ref{tab:org2b70273}, \ref{tab:org99a07b6}, \ref{tab:orgdd135a9}, \ref{tab:org6ee4133}, \ref{tab:org9a825e9}) -wurden dem Anwendungsfalldiagramm, Abbildung:(\ref{fig:orgac72df5}), entnommen und +Die nachfolgend aufgeführten Use Cases, Tabellen:(\ref{tab:org8002dbd}, \ref{tab:orgbacc4ee}, +\ref{tab:org64ae04d}, \ref{tab:orgcd2fced}, \ref{tab:orgee72b48}, \ref{tab:org78c0355}, \ref{tab:org570704b}) +wurden dem Anwendungsfalldiagramm, Abbildung:(\ref{fig:org2b532cd}), entnommen und zusätzlich noch um jeweils ein Aktivitätsdiagramm, Abbildungen: -(\ref{fig:org572104a}, \ref{fig:org5eea2c8}, \ref{fig:org79bf08f}, -\ref{fig:org9809f26}, \ref{fig:orgd0571c5}, \ref{fig:orge9f0020}), erweitert +(\ref{fig:org352c0b4}, \ref{fig:org425e69a}, \ref{fig:org5105e54}, +\ref{fig:org64825a2}, \ref{fig:org0683d41}, \ref{fig:org46a3d37}), erweitert um den Ablauf verständlicher zu machen. Ein Aktivitätsdiagramm ist dabei ein hilfreiches UML Diagramm zum Erweitern von Use Cases und zeigt einem gut die Zuständigkeiten der Aktoren auf. \paragraph{Use Case 1.0 Backup erstellen} -\label{sec:org2b8ffdd} +\label{sec:org2fc1bbc} {\footnotesize \begin{longtable}{|>{\columncolor[HTML]{EFEFEF}}p{.235\textwidth}|p{.7\textwidth}|} @@ -777,7 +777,7 @@ Use Cases und zeigt einem gut die Zuständigkeiten der Aktoren auf. \hline \textbf{Date} & 30.12.2018\\ \hline -\caption{\label{tab:orgeb722bc} +\caption{\label{tab:org8002dbd} Use Case 1.0 Backup erstellen} \\ \end{longtable} @@ -785,12 +785,12 @@ Use Case 1.0 Backup erstellen} \begin{figure}[htbp] \centering \includegraphics[width=.9\linewidth]{pictures/activity_backup.pdf} -\caption{\label{fig:org572104a} +\caption{\label{fig:org352c0b4} Aktivitätsdiagramm zum Erstellen eines Backups} \end{figure} \newpage \paragraph{Use Case 2.0 Backup löschen} -\label{sec:orgcad52e3} +\label{sec:org3bcf37a} {\footnotesize \begin{longtable}{|>{\columncolor[HTML]{EFEFEF}}p{.235\textwidth}|p{.7\textwidth}|} @@ -841,7 +841,7 @@ Aktivitätsdiagramm zum Erstellen eines Backups} \hline \textbf{Date} & 30.12.2018\\ \hline -\caption{\label{tab:org81c3985} +\caption{\label{tab:orgbacc4ee} Use Case 2.0 Backup löschen} \\ \end{longtable} @@ -849,12 +849,12 @@ Use Case 2.0 Backup löschen} \begin{figure}[htbp] \centering \includegraphics[width=.9\linewidth]{pictures/activity_delete.pdf} -\caption{\label{fig:org5eea2c8} +\caption{\label{fig:org425e69a} Aktivitätsdiagramm zum Löschen eines Backups} \end{figure} \newpage \paragraph{Use Case 3.0 Backup wiederherstellen} -\label{sec:org3a5e2e3} +\label{sec:org5b0073b} {\footnotesize \begin{longtable}{|>{\columncolor[HTML]{EFEFEF}}p{.235\textwidth}|p{.7\textwidth}|} @@ -906,7 +906,7 @@ Aktivitätsdiagramm zum Löschen eines Backups} \hline \textbf{Date} & 30.12.2018\\ \hline -\caption{\label{tab:org2b70273} +\caption{\label{tab:org64ae04d} Use Case 3.0 Backup wiederherstellen} \\ \end{longtable} @@ -915,12 +915,12 @@ Use Case 3.0 Backup wiederherstellen} \begin{figure}[htbp] \centering \includegraphics[width=.9\linewidth]{pictures/activity_restore.pdf} -\caption{\label{fig:org79bf08f} +\caption{\label{fig:org5105e54} Aktivitätsdiagramm zum Wiederherstellen eines Backups} \end{figure} \newpage \paragraph{Use Case 4.0 Einzelne Datei wiederherstellen} -\label{sec:org21855b6} +\label{sec:orge029c6d} {\footnotesize \begin{longtable}{|>{\columncolor[HTML]{EFEFEF}}p{.235\textwidth}|p{.7\textwidth}|} @@ -969,7 +969,7 @@ Aktivitätsdiagramm zum Wiederherstellen eines Backups} \hline \textbf{Date} & 30.12.2018\\ \hline -\caption{\label{tab:org99a07b6} +\caption{\label{tab:orgcd2fced} Use Case 4.0 Einzelne Datei wiederherstellen} \\ \end{longtable} @@ -978,12 +978,12 @@ Use Case 4.0 Einzelne Datei wiederherstellen} \begin{figure}[htbp] \centering \includegraphics[width=.9\linewidth]{pictures/activity_mount.pdf} -\caption{\label{fig:org9809f26} +\caption{\label{fig:org64825a2} Aktivitätsdiagramm für das spezifische Wiederherstellen einer Datei} \end{figure} \newpage \paragraph{Use Case 4.1 Backup mounten} -\label{sec:orgf91ab2d} +\label{sec:orgb7e9d21} {\footnotesize \begin{longtable}{|>{\columncolor[HTML]{EFEFEF}}p{.235\textwidth}|p{.7\textwidth}|} @@ -1034,7 +1034,7 @@ Aktivitätsdiagramm für das spezifische Wiederherstellen einer Datei} \hline \textbf{Date} & 30.12.2018\\ \hline -\caption{\label{tab:orgdd135a9} +\caption{\label{tab:orgee72b48} Use Case 4.1 Backup mounten} \\ \end{longtable} @@ -1042,7 +1042,7 @@ Use Case 4.1 Backup mounten} \newpage \paragraph{Use Case 5.0 Konfiguration ändern} -\label{sec:org284bcc3} +\label{sec:org202b2c5} {\footnotesize \begin{longtable}{|>{\columncolor[HTML]{EFEFEF}}p{.235\textwidth}|p{.7\textwidth}|} @@ -1095,7 +1095,7 @@ Use Case 4.1 Backup mounten} \hline \textbf{Date} & 30.12.2018\\ \hline -\caption{\label{tab:org6ee4133} +\caption{\label{tab:org78c0355} Use Case 5.0 Konfiguration ändern} \\ \end{longtable} @@ -1104,12 +1104,12 @@ Use Case 5.0 Konfiguration ändern} \begin{figure}[htbp] \centering \includegraphics[width=.9\linewidth]{pictures/activity_settings.pdf} -\caption{\label{fig:orgd0571c5} +\caption{\label{fig:org0683d41} Aktivitätsdiagramm zum Ändern von Einstellungen} \end{figure} \newpage \paragraph{Use Case 6.0 automatische Backups aktivieren} -\label{sec:orge629d92} +\label{sec:org76066d8} {\footnotesize \begin{longtable}{|>{\columncolor[HTML]{EFEFEF}}p{.235\textwidth}|p{.7\textwidth}|} @@ -1159,7 +1159,7 @@ Aktivitätsdiagramm zum Ändern von Einstellungen} \hline \textbf{Date} & 30.12.2018\\ \hline -\caption{\label{tab:org9a825e9} +\caption{\label{tab:org570704b} Use Case 6.0 automatische Backups aktivieren} \\ \end{longtable} @@ -1168,33 +1168,34 @@ Use Case 6.0 automatische Backups aktivieren} \begin{figure}[htbp] \centering \includegraphics[width=.9\linewidth]{pictures/activity_automatic.pdf} -\caption{\label{fig:orge9f0020} +\caption{\label{fig:org46a3d37} Aktivitätsdiagramm zum Aktivieren von automatischen Backups} \end{figure} \newpage \section{Konzept} -\label{sec:orge7882d5} +\label{sec:org5d9b432} \subsection{Varianten} -\label{sec:orgfa272c2} +\label{sec:orgf462e72} -Da Borg eine JSON API zur Verfügung stellt bieten sich diverse Möglichkeiten, um +Da Borg eine \gls{json} API zur Verfügung stellt gibt es diverse Möglichkeiten, um das Programm anzubinden. Da das Ziel ist, das Programm normalen Nutzern zugänglicher zu machen, bietet sich ein normales Desktop Programm am ehesten an. Desktop Programme werden von allen Computer Usern täglich genutzt und sind -somit etwas was sie kennen. - -Daraus ergeben sich die in diesem Kapitel aufgeführten Möglichkeiten für das -Projekt. +somit etwas was sie kennen. Zudem ist es für die User auch viel einfacher zu +verstehen als sie vor der Nutzung einen lokalen Webserver starten müssten und +diesen im Anschluss zur Nutzung wieder beenden müssten. \subsubsection{Bewertung} -\label{sec:org68dad6e} +\label{sec:org5bc7aa3} -Die Bewertungspunkte setzen sich einerseits aus den Projektzielen anderseits -aus für das Projekt sinnvollen Punkten zusammen. Dadurch ergeben sich dann die -Bewertungen, welche in der nachfolgenden Tabelle aufgenommen wurden. Die -möglichen Varianten wurden danach bewertet. Die effektive Berechnung des -Resultats wird nach folgender Formel durchgeführt. +Mit der Idee aus der Einleitung zu den Varianten wurde dann eine Tabelle, mit +Anforderungen an die Technologien, erstellt. Die Bewertungspunkte setzen sich +einerseits aus Projektzielen anderseits aus für das Projekt sinnvollen Punkten +zusammen. Dadurch ergeben sich dann die Bewertungen, welche in der +Tabelle:(\ref{tab:orgb2f6278}) aufgenommen wurden. Die möglichen Varianten wurden danach +bewertet. Die effektive Berechnung des Resultats wird nach folgender Formel +durchgeführt. \begin{equation} G * EP = KE @@ -1207,7 +1208,7 @@ Projekt ausgewählt. Mussziele erhalten dabei eine Gewichtung von 10 und Wunschziele eine Gewichtung entsprechend der Bewertung in -der Tabelle Projektziele (\ref{tab:org4d44292}). +der Tabelle Projektziele (\ref{tab:org47ae745}). \begin{table}[htbp] \centering @@ -1223,26 +1224,26 @@ der Tabelle Projektziele (\ref{tab:org4d44292}). 6. Lesbarkeit des Codes & 5 & 5 & 5 & 25\\ 7. Einfachheit des Setups & 5 & 5 & 5 & 25\\ 8. Lernfaktor & 5 & 5 & 5 & 25\\ -9. Verbreitung bei der BorgBackup Community & 5 & 5 & 5 & 25\\ +9. Verbreitung bei der \gls{borg} Community & 5 & 5 & 5 & 25\\ 10. Geschwindigkeit der Entwicklung & 3 & 5 & 5 & 15\\ \hline \textbf{Total} & & & & 415\\ \hline \end{tabular} -\caption{\label{tab:orgca2479c} +\caption{\label{tab:orgb2f6278} Muster Bewertungstabelle} \end{table} \subsubsection{Backend} -\label{sec:org992057e} +\label{sec:orgb5cc8f9} -Fürs Backend bieten sich die folgende drei Sprachen an: \hyperref[sec:orgf14b096]{C\#}, \hyperref[sec:org5dffd72]{C++}, \hyperref[sec:org24cf9d5]{Python}. +Fürs Backend bieten sich die folgende drei Sprachen an: \hyperref[sec:orgb5bf065]{C\#}, \hyperref[sec:orged93496]{C++}, \hyperref[sec:org7f7b6f4]{Python}. Dies vor allem, weil alle Allrounder Sprachen sind und sich gut für Desktop Applikationen eignen. \paragraph{C\#} -\label{sec:orgf14b096} +\label{sec:orgb5bf065} C\# ist eine von Microsoft entwickelte Programmiersprache welche viele Frameworks zur Verfügung hat. Insbesondere aufgrund der grossen kommerziellen @@ -1310,19 +1311,19 @@ Jedoch aufgrund des moderneren Unterbaus sicher schneller als C++. 6. Lesbarkeit des Codes & 5 & 5 & 4 & 20\\ 7. Einfachheit des Setups & 5 & 5 & 2 & 10\\ 8. Lernfaktor & 5 & 5 & 3 & 15\\ -9. Verbreitung bei der BorgBackup Community & 5 & 5 & 1 & 5\\ +9. Verbreitung bei der \gls{borg} Community & 5 & 5 & 1 & 5\\ 10. Geschwindigkeit der Entwicklung & 3 & 5 & 3 & 9\\ \hline \textbf{Total} & & & & 279\\ \hline \end{tabular} -\caption{\label{tab:orga12f405} +\caption{\label{tab:orga52a741} C\# Bewertungstabelle} \end{table} \paragraph{C++} -\label{sec:org5dffd72} +\label{sec:orged93496} C++ ist eine stark typisierte und kompilierte Programmiersprache. Sie ist seit 1998 Teil des ISO Standards \footcite{cpp98}. ISO/IEC 14882:2017 \footcite{cpp17} @@ -1354,7 +1355,7 @@ Grössten. Da C++ eine alte Sprache ist geniesst sie auch eine dementsprechende Verbreitung. Daher ist anzunehmen das sicher mindestens ein grössere Teil der -älteren BorgBackup Entwickler C++ oder C gelernt haben. +älteren \gls{borg} Entwickler C++ oder C gelernt haben. Da C++ auch heute noch zu den meistgenutzten Sprachen gehört gibt es entsprechend viele Ressourcen dazu und Beispiel Projekte, von denen man ableiten @@ -1378,19 +1379,20 @@ ungeeignet. 6. Lesbarkeit des Codes & 5 & 5 & 2 & 10\\ 7. Einfachheit des Setups & 5 & 5 & 3 & 15\\ 8. Lernfaktor & 5 & 5 & 5 & 25\\ -9. Verbreitung bei der BorgBackup Community & 5 & 5 & 3 & 15\\ +9. Verbreitung bei der \gls{borg} Community & 5 & 5 & 3 & 15\\ 10. Geschwindigkeit der Entwicklung & 3 & 5 & 2 & 6\\ \hline \textbf{Total} & & & & 271\\ \hline \end{tabular} -\caption{\label{tab:org254d62e} +\caption{\label{tab:orga701895} C++ Bewertungstabelle} \end{table} +\newpage \paragraph{Python} -\label{sec:org24cf9d5} +\label{sec:org7f7b6f4} Der Python Interpreter ist für eine Vielzahl an Betriebssystemen erhältlich, inklusive Windows, OS X und Linux. Nahezu jedes Desktop Linux System kommt mit @@ -1422,9 +1424,9 @@ effektiv geschrieben wird \footcite{pep8}. Um ein Python Programm zu starten braucht es eigentlich kein grosses Setup. Solange die Abhängigkeiten vorhanden sind, kann man ein Skript mit einem -einfachen Befehl, Code Snippet (\ref{org4ae1134}) starten. +einfachen Befehl, Code Snippet (\ref{org3aa94ac}) starten. -\lstset{language=bash,label=org4ae1134,caption={Minimal Python Setup},captionpos=b,numbers=none} +\lstset{language=bash,label=org3aa94ac,caption={Minimal Python Setup},captionpos=b,numbers=none} \begin{sexylisting}{Minimal Python Setup} python3 example.py \end{sexylisting} @@ -1457,21 +1459,21 @@ entwickeln kann, dies jedoch zulasten der Performance. 6. Lesbarkeit des Codes & 5 & 5 & 4 & 20\\ 7. Einfachheit des Setups & 5 & 5 & 4 & 20\\ 8. Lernfaktor & 5 & 5 & 3 & 15\\ -9. Verbreitung in der BorgBackup Community & 5 & 5 & 5 & 25\\ +9. Verbreitung in der \gls{borg} Community & 5 & 5 & 5 & 25\\ 10. Geschwindigkeit der Entwicklung & 3 & 5 & 4 & 12\\ \hline \textbf{Total} & & & & 322\\ \hline \end{tabular} -\caption{\label{tab:orgb91e860} +\caption{\label{tab:org31a2186} Python Bewertungstabelle} \end{table} \subsubsection{Frontend} -\label{sec:org9fc9cc4} +\label{sec:orgd9224eb} -Fürs Frontend sind folgende Projekte interessant: \hyperref[sec:orgf8894b8]{Qt}, \hyperref[sec:orgb489720]{Gtk} und \hyperref[sec:org14fe91f]{Electron}. Alle +Fürs Frontend sind folgende Projekte interessant: \hyperref[sec:org0651c7d]{Qt}, \hyperref[sec:orgc0a90e2]{Gtk} und \hyperref[sec:orgd0e93db]{Electron}. Alle drei sind cross-plattform fähige \gls{gui} Frameworks und nicht von einer spezifischen Sprache abhängig. Da nahezu keine Erfahrung mit den aufgeführten Frameworks vorhanden ist, werden bei den Frontend Frameworks die Punkte der @@ -1479,7 +1481,7 @@ Verbreitung in der Community und Geschwindigkeit der Entwicklung ausgeschlossen. In beiden Fällen wäre nicht mal eine ungenaue Schätzung wirklich möglich. \paragraph{Qt} -\label{sec:orgf8894b8} +\label{sec:org0651c7d} Qt \footcite{qt}, "`cute"' ausgesprochen, ist ein Framework zum Entwickeln von grafischen Oberflächen, welche auf verschiedenen System ohne grosse Änderungen @@ -1529,13 +1531,13 @@ gross. \textbf{Total} & & & & 295\\ \hline \end{tabular} -\caption{\label{tab:org72ac2ae} +\caption{\label{tab:org7a858c9} Qt Bewertungstabelle} \end{table} \paragraph{Gtk} -\label{sec:orgb489720} +\label{sec:orgc0a90e2} Gtk ist sowohl für Linux wie auch für Windows und OS X erhältlich. Gtk hat als Projekt der Gnome Foundation seine Wurzeln jedoch ganz klar in der Linux Welt. @@ -1549,12 +1551,12 @@ nur intensiv als User verwendet. Gtk integriert sich nur unter Linux wirklich gut ins System. Unter Windows und OS X können die Applikationen schnell etwas fremd wirken. Dies ist gut bei der Applikation Meld \footcite{meld} zu sehen, wenn man eine Datei auswählen möchte, -Abbildung (\ref{fig:org0603414}). +Abbildung (\ref{fig:orgf6cbe37}). \begin{figure}[htbp] \centering \includegraphics[width=.9\linewidth]{pictures/meld.png} -\caption{\label{fig:org0603414} +\caption{\label{fig:orgf6cbe37} Screenshot der Applikation Meld unter Windows 10} \end{figure} Die Gtk Dokumentation empfiehlt \footcite{gtk_setup}, dass man unter Windows das @@ -1592,13 +1594,13 @@ Da die Kenntnisse gleich null sind, ist der Lernfaktor auf dem Maximum. \textbf{Total} & & & & 275\\ \hline \end{tabular} -\caption{\label{tab:org55a53be} +\caption{\label{tab:orgbb0c6fa} Gtk Bewertungstabelle} \end{table} \paragraph{Electron} -\label{sec:org14fe91f} +\label{sec:orgd0e93db} Electron ist ein cross-plattform Framework zum Entwickeln von \glspl{gui} welches dabei jedoch auf Technologien aus der Webentwicklung benutzt. Entwickelt wird @@ -1652,15 +1654,15 @@ Lernfaktor bei Electron wohl nicht so gross wie etwa bei Qt oder Gtk. \textbf{Total} & & & & 275\\ \hline \end{tabular} -\caption{\label{tab:orgf2c29a8} +\caption{\label{tab:orga5779bd} Electron Bewertungstabelle} \end{table} \subsubsection{Ergebnis} -\label{sec:org21fc8cb} +\label{sec:org5625467} -Aufgrund der erreichten Punktzahl, Tabelle:(\ref{tab:orgf54ee61}), bei den vorhergehenden +Aufgrund der erreichten Punktzahl, Tabelle:(\ref{tab:org631b7f9}), bei den vorhergehenden Variantenbewertungen, wurde entschieden für das Backend der Applikation auf Python zu setzen und fürs Frontend Qt zu benutzen. \begin{table}[H] @@ -1679,13 +1681,13 @@ Gtk & 275\\ Electron & 275\\ \hline \end{tabular} -\caption{\label{tab:orgf54ee61} +\caption{\label{tab:org631b7f9} Variantenbewertung Ergebnis} \end{table} \subsection{Applikationsname} -\label{sec:org525ca03} +\label{sec:orga32fda6} Da die einzusetzende Technologie nun feststeht lässt sich auch gut ein Name für die Applikation ableiten. Oftmals werden die grafischen Applikationen gleich @@ -1694,41 +1696,42 @@ Frameworks als Suffix. Somit wird das zu erstellende \gls{gui} für \gls{borg} i weiteren Verlauf der Arbeit nun Borg-Qt genannt \subsection{Testing} -\label{sec:org8458d46} +\label{sec:org85f16b0} Die Anwendung wird während der Realisierung soweit als möglich mit automatischen Unittests und Funktionstests überprüft. Dies hauptsächlich um die Erfahrung in diesem Bereich zu erweitern und um ein gutes Fundament für die Zukunft des Projektes zu bauen. -Aufgrund der Unerfahrenheit in diesem Bereich werden die Testfälle, -Tabelle:(\ref{tab:org69257f5}), final jedoch von Hand überprüft. Somit kann vermieden -werden das nicht funktionierende automatische Tests den Abschluss des Projektes -verhindern. Da die Testfälle sich hauptsächlich an den Use Cases orientieren -gibt es ein paar Ziele die dadurch nicht getestet werden können. Zudem sind zur -Zeit nur ca. 20. der Ziele durch die Use Cases abgedeckt. Die weiteren Ziele -lassen sich erst sinnvoll integrieren wenn die Basis für das Programm -geschaffen wurde. +Aufgrund der Unerfahrenheit im Bereich des automatisierten Testings wurden noch +die Testfälle in der Tabelle:(\ref{tab:orgd13fe87}), erstellt. Diese werden final von +Hand überprüft. Somit kann vermieden werden das nicht funktionierende +automatische Tests den Abschluss des Projektes verhindern. Da die Testfälle +sich hauptsächlich an den Use Cases orientieren gibt, es ein paar Ziele die, +dadurch nicht getestet werden können. Zudem sind zurzeit nur ca. 20. der Ziele +durch die Use Cases abgedeckt. Die weiteren Ziele lassen sich erst sinnvoll +integrieren, wenn die Basis für das Programm geschaffen wurde. Somit werden +diese Ziele erst im Anschluss zur Diplomarbeit umgesetzt. -Die Ziele die nicht durch die Testfälle getestet werden können sind Ziel Nr. 1 -und Nr. 2. Für Ziel Nr. 1 wird in der Sektion \ref{sec:orgcbae1a5} ein Proof of Concept +Die Ziele, die nicht durch die Testfälle getestet werden können sind Ziel Nr. 1 +und Nr. 2. Für Ziel Nr. 1 wird in der Sektion \ref{sec:orgc160c63} ein Proof of Concept erstellt um die cross-plattform Fähigkeit zu beweisen. Ziel Nr. 2 ist mit folgendem Link erfüllt. \url{https://github.com/borg-qt/borg-qt/blob/master/LICENSE}. Dabei handelt es sich um die Lizenz des Borg-Qt Repository. Getestet wird die Applikation jeweils auf dem Computer des Projektleiters. Auf diesem läuft die aktuelle Langzeitsupport Version (18.04) von Ubuntu -\footcite{ubuntu} Linux, mit der GNOME Desktop Umgebung \footcite{gnome}, als +\footcite{ubuntu} Linux mit der GNOME Desktop Umgebung \footcite{gnome}, als Betriebssystem. Die Tests werden jeweils gegen eine von PyInstaller generierte Binärdatei ausgeführt. Der genaue Vorgang der Erstellung dieser Datei wird in -der Sektion: \hyperref[sec:org8ba8c5e]{Releases} beschrieben. Somit werden die Tests immer gegen eine +der Sektion: \hyperref[sec:orgf056008]{Releases} beschrieben. Somit werden die Tests immer gegen eine veröffentlichbare Version gemacht. Als Testdateien wird jeweils das Code Repository von Borg-Qt selber verwendet. Der Pfad des \gls{borg} Repository für lokale Backups soll \texttt{/tmp/test-borgqt} sein, in den Testfällen "`Lokales Repository"', genannt und das Passwort \texttt{foo}. Im Makefile des Repository wird dieses Setup definiert. Somit kann man als -Entwickler nur \texttt{make repo} ausführen und hat eine funktionsfähige Testumgebung. +Entwickler nur \texttt{make init} ausführen und hat eine funktionsfähige Testumgebung. Um Backups über SSH testen zu können wird eine virtuelle Maschine mit Ubuntu 18.04 verwendet. Die Konfiguration der virtuellen Maschine sieht dabei wie @@ -1744,100 +1747,44 @@ den Testfällen "`Server Repository"' genannt ermöglicht Passwort freie Logins. \end{itemize} -\newpage -\begin{landscape} -\subsection{Testfälle} -\label{sec:org1c1016b} -{\footnotesize -\begin{longtable}{|>{\columncolor[HTML]{EFEFEF}}l|p{2cm}|p{2cm}|p{3.5cm}|p{2cm}|p{3cm}|p{3.5cm}|p{2.5cm}|} -\hline -\textbf{ID}\cellcolor[HTML]{C0C0C0} & \textbf{Objective}\cellcolor[HTML]{C0C0C0} & \textbf{Precondition}\cellcolor[HTML]{C0C0C0} & \textbf{Steps}\cellcolor[HTML]{C0C0C0} & \textbf{Testdata}\cellcolor[HTML]{C0C0C0} & \textbf{Expected Result}\cellcolor[HTML]{C0C0C0} & \textbf{Postcondition}\cellcolor[HTML]{C0C0C0} & \textbf{Result}\cellcolor[HTML]{C0C0C0}\\ -\hline -\endfirsthead -\multicolumn{8}{l}{Fortsetzung von vorheriger Seite} \\ -\hline +Die Testfälle werden während der Entwicklung kontinuierlich durchgeführt. Am +Ende der Diplomarbeit wird das finale Ergebnis des jeweiligen Testfalles +erfasst. Allfällige Besonderheiten werden im Kapitel \hyperref[sec:orgc160c63]{Realisierung} +beschrieben. -\textbf{ID}\cellcolor[HTML]{C0C0C0} & \textbf{Objective}\cellcolor[HTML]{C0C0C0} & \textbf{Precondition}\cellcolor[HTML]{C0C0C0} & \textbf{Steps}\cellcolor[HTML]{C0C0C0} & \textbf{Testdata}\cellcolor[HTML]{C0C0C0} & \textbf{Expected Result}\cellcolor[HTML]{C0C0C0} & \textbf{Postcondition}\cellcolor[HTML]{C0C0C0} & \textbf{Result}\cellcolor[HTML]{C0C0C0} \\ +\subsection{Klassendiagramm} +\label{sec:org12faf59} -\hline -\endhead -\hline\multicolumn{8}{r}{Fortsetzung nächste Seite} \\ -\endfoot -\endlastfoot -\hline -\textbf{TC-01} & Anwendung starten & Lokales Repository initialisiert.\newline Lokale Konfigurationsdatei erstellt. & 1. Anwendung starten. & - & Die Anwendung startet ohne Fehlermeldung und zeigt eine leere Backup Liste an. & Die Anwendung wird angezeigt. & \\ -\hline -\textbf{TC-02} & Anwendung starten & Lokale Konfigurationsdatei erstellt. & 1. Anwendung starten. & - & Die Anwendung wirft eine Fehlermeldung das sie das lokale Repository nicht finden kann. & Die geöffnete Fehlermeldung blockiert die Applikation. & \\ -\hline -\textbf{TC-03} & Anwendung starten & - & 1. Anwendung starten. & - & Die wirft eine Fehlermeldung das sie die Konfigurationsdatei nicht finden kann. & Die geöffnete Fehlermeldung blockiert die Applikation. & \\ -\hline -\textbf{TC-04} & Lokales Backup erstellen & TC-01 ausgeführt. & 1. In der Ordnerübersicht das Code Repository auswählen.\newline 2. Den Button “Backup” betätigen. & Testdateien & Die Anwendung zeigt einen Fortschrittsbalken der nach erfolgtem Backup verschwindet. & Die Backup Liste wird aktualisiert und zeigt ein Backup an. & \\ -\hline -\textbf{TC-05} & Lokales Backup erstellen & TC-01 ausgeführt.\newline BorgBackup macht bereits ein Backup. & 1. In der Ordnerübersicht das Code Repository auswählen.\newline 2. Den Button “Backup” betätigen. & Testdateien & Die Anwendung wirft eine Fehlermeldung das BorgBackup bereits ausgeführt wird. & Die geöffnete Fehlermeldung blockiert die Applikation. & \\ -\hline -\textbf{TC-06} & Lokales Backup erstellen & TC-01 ausgeführt. & 1. Das Lokale Repository an einen beliebigen Ort verschieben.\newline 2. In der Ordnerübersicht das Code Repository auswählen.\newline 3. Den Button “Backup” betätigen. & Testdateien & Die Anwendung wirft eine Fehlermeldung das sie das lokale Repository nicht finden kann. & Die geöffnete Fehlermeldung blockiert die Applikation. & \\ -\hline -\textbf{TC-07} & Lokales Backup erstellen & TC-01 ausgeführt. & 1. Den Button “Backup” betätigen. & - & Die Anwendung wirft eine Fehlermeldung das der User einen Pfad angeben soll. & Die geöffnete Fehlermeldung blockiert die Applikation. & \\ -\hline -\textbf{TC-08} & Lokales Backup löschen & TC-04 ausgeführt. & 1. In der Backup Liste das Backup auswählen.\newline 2. Den Button “Delete” betätigen. & - & Die Anwendung zeigt einen Fortschrittsbalken der nach erfolgtem Löschen verschwindet. & Die Backup Liste wird aktualisiert und ist nun leer. & \\ -\hline -\textbf{TC-09} & Lokales Backup löschen & TC-04 ausgeführt. & 1. Das Lokale Repository an einen beliebigen Ort verschieben.\newline 2. In der Backup Liste das Backup auswählen.\newline 3. Den Button “Delete” betätigen. & - & Die Anwendung wirft eine Fehlermeldung das sie das lokale Repository nicht finden kann. & Die geöffnete Fehlermeldung blockiert die Applikation. & \\ -\hline -\textbf{TC-10} & Lokales Backup löschen & TC-04 ausgeführt. & 1. Den Button “Delete” betätigen. & - & Die Anwendung wirft eine Fehlermeldung das der User ein Backup auswählen soll. & Die geöffnete Fehlermeldung blockiert die Applikation. & \\ -\hline -\textbf{TC-11} & Lokales Backup wiederherstellen & TC-04 ausgeführt. & 1. In der Backup Liste das Backup auswählen.\newline 2. Den Button “Restore” betätigen.\newline 3. Im geöffneten Dateidialog den Pfad "`/home/andreas/Downloads"' auswählen.\newline 4. Den Button “Open” anklicken. & - & Nach erfolgtem Wiederherstellen öffnet ein Dateiexplorer den Ziel Pfad. & Die Anwendung und ein Dateiexplorer wird angezeigt. & \\ -\hline -\textbf{TC-12} & Lokales Backup wiederherstellen & TC-01 ausgeführt. & 1. Den Button “Backup” betätigen. & - & Die Anwendung wirft eine Fehlermeldung das der User ein Backup auswählen soll. & Die geöffnete Fehlermeldung blockiert die Applikation. & \\ -\hline -\textbf{TC-13} & Lokales Backup wiederherstellen & TC-01 ausgeführt. & 1. Das Lokale Repository an einen beliebigen Ort verschieben.\newline 2. In der Backup Liste das Backup auswählen.\newline 3. Den Button “Restore” betätigen. & - & Die Anwendung wirft eine Fehlermeldung das sie das lokale Repository nicht finden kann. & Die geöffnete Fehlermeldung blockiert die Applikation. & \\ -\hline -\textbf{TC-14} & Lokales Backup wiederherstellen & TC-01 ausgeführt. & 1. In der Backup Liste das Backup auswählen.\newline 2. Den Button “Restore” betätigen.\newline 3. Im geöffneten Dateidialog den Pfad "`/home/andreas/Downloads"' auswählen.\newline 4. Den Button “Cancel” anklicken. & - & Der Datei Dialog schliesst sich wieder. & Die Anwendung wird angezeigt. & \\ -\hline -\textbf{TC-15} & Home Directory sichern und wiederherstellen & TC-01 ausgeführt. & 1. Vom Pfad "`\emph{home/andreas}"' ein Backup erstellen.\newline 2. In der Backup Liste das gemachte Backup auswählen.\newline 3. Den Button “Restore” betätigen.\newline 4. Im geöffneten Dateidialog den Pfad "`/home/andreas/Downloads"' auswählen.\newline 5. Den Button “Open” anklicken. & "`\emph{home/andreas}"' & Nach erfolgtem Wiederherstellen öffnet ein Dateiexplorer den Ziel Pfad.\newline Darin fehlen jedoch temporäre Pfade wie “\textasciitilde{}/.cache” etc. & Die Anwendung und ein Dateiexplorer wird angezeigt. & \\ -\hline -\textbf{TC-16} & Einzelne Datei wiederherstellen & TC-04 ausgeführt. & 1. In der Backup Liste das Backup auswählen.\newline 2. Den Button “Mount” betätigen.\newline 3. Aus dem sich öffnenden Dateiexplorer die Datei README.org nach "`/home/andreas/Downloads"' kopieren. & - & Die wiederhergestellte Datei ist identisch mit der in TC-04 gesicherten. & Die Anwendung und ein Dateiexplorer wird angezeigt. & \\ -\hline -\textbf{TC-17} & Einzelne Datei wiederherstellen & TC-01 ausgeführt. & 1. Das Lokale Repository an einen beliebigen Ort verschieben.\newline 2. In der Backup Liste das Backup auswählen.\newline 3. Den Button “Mount” betätigen. & - & Die Anwendung wirft eine Fehlermeldung das sie das lokale Repository nicht finden kann. & Die geöffnete Fehlermeldung blockiert die Applikation. & \\ -\hline -\textbf{TC-18} & Pfad des lokalen Backup Repository anpassen & TC-04 ausgeführt.\newline Backup Repository nach "`/tmp/test-borgqt2"' verschoben & 1. Den Button "`Settings"' betätigen.\newline 2. Den Repository Pfad auf "`\emph{tmp/test-borgqt2}"' ändern.\newline 3. Den Button "`Apply"' betätigen. & - & Die Backup Liste wird aktualisiert und zeigt wieder das Backup von TC-04 an. & Die Anwendung wird angezeigt. Die Konfigurationsdatei zeigt auf den neuen Pfad. & \\ -\hline -\textbf{TC-19} & Backup Name ändern & TC-01 ausgeführt. & 1. Den Button "`Settings"' betätigen.\newline 2. Bei der Option "`Archive Prefix"' "`Muster"' eintragen.\newline 3. Den Button "`Apply"' betätigen.\newline 4. TC-04 durchführen. & Backupname: Muster & Die Anwendung zeigt einen Fortschrittsbalken der nach erfolgtem Backup verschwindet. & Die Backup Liste wird aktualisiert und zeigt ein Backup mit dem Präfix "`Muster"' an. Die Konfigurationsdatei beinhaltet die Option des Präfixes. & \\ -\hline -\textbf{TC-20} & Keine Einstellungen ändern & TC-01 ausgeführt. & 1. Den Button "`Settings"' betätigen.\newline 2. Eine beliebige Option ändern.\newline 3. Den Button "`Cancel"' betätigen. & - & Der Einstellungsdialog schliesst sich. & Die Anwendung wird angezeigt. Die Konfigurationsdatei ist noch im selben Zustand wie bei TC-01. & \\ -\hline -\textbf{TC-21} & Automatische Backups konfigurieren & TC-01 ausgeführt. & 1. Den Button "`Settings"' betätigen.\newline 2. Bei der Option "`Automatic Backups"' bei "`Backup Path"' die Testdateien angeben sowie "`Hourly"' auswählen und bei "`Time"' die nächste Stunde angeben.\newline 3. Den Button Apply betätigen. & Backup-zeit: 2 Minuten nach aktueller Zeit Testdateien & Der Datei Dialog schliesst sich wieder. & Die Anwendung wird angezeigt. Die Konfigurationsdatei wurde um die Option des automatischen Backups erweitert. Die Anwendung hat einen "`Service"' auf dem System erstellt. & \\ -\hline -\textbf{TC-22} & Automatische Backups durchführen & TC-16 ausgeführt. & 1. TC-21 durchführen.\newline 2. Auf Ablauf der Zeit warten.\newline 3. Die Anwendung öffnen. & - & In der Backup Liste wird ein Backup angezeigt. & Die Anwendung wird angezeigt. & \\ -\hline -\textbf{TC-23} & Server Backup erstellen & Server Repository bereit.\newline Server Konfigurationsdatei erstellt. & TC-04 durchführen. & Testdateien & Die Anwendung zeigt einen Fortschrittsbalken der nach erfolgtem Backup verschwindet. & Die Backup Liste wird aktualisiert und zeigt ein Backup an. & \\ -\hline -\textbf{TC-24} & Lokales Backup erstellen während dem eine VM läuft & TC-01 ausgeführt.\newline Virtualbox VM Starten. & 1. In der Ordnerübersicht das Code Repository auswählen.\newline 2. Den Button “Backup” betätigen. & Testdateien & Die Anwendung wirft eine Fehlermeldung aus das es zur Zeit aufgrund einer laufenden VM unsicher sei ein Backup durchzuführen. & Die geöffnete Fehlermeldung blockiert die Applikation. & \\ -\hline -\textbf{TC-25} & Abgebrochenes Backup bereinigen & TC-01 ausgeführt. & 1. In der Ordnerübersicht das Code Repository auswählen.\newline 2. Den Button “Backup” betätigen.\newline 3. Die Anwendung schliessen.\newline 4. Anwendung wieder öffnen.\newline 5. TC-04 Durchführen. & Testdateien & Bei Schritt 4. sollte ein Teilbackup zu sehen sein.\newline Bei Schritt 5 sollte einfach ein normales Backup zu sehen sein. & Die Anwendung wird angezeigt. & \\ -\hline -\caption{\label{tab:org69257f5} -Testfälle} -\\ -\end{longtable} -} -\end{landscape} -\newpage +Um die Abhängigkeiten zwischen den einzelnen Klassen der Anwendung aufzuzeigen +wurde ein Klassendiagramm, Abbildung:(\ref{fig:org4ac1491}), erstellt. Das +Klassendiagramm basiert auf dem UML Standard. Im Diagramm wurden nicht alle +"`Properties"' und Methoden alles Klassen aufgezeichnet, sondern nur solche die +auf eine andere Klasse verweisen. Dadurch bleibt das Diagramm übersichtlicher. +Die Klassennamen welche, in fetter Schrift gehalten sind, wurden dabei vom +Projektleiter erstellt. Die Klassennamen, welche kursiv sind, sind Klassen, welche +entweder von Python oder Qt bereitgestellt werden. \subsection{Benutzerfreundlichkeitsstudie} -\label{sec:org41a9343} +\label{sec:orgbeaa226} Um Borg-Qt auf seine Nutzerfreundlichkeit zu testen wird im Rahmen der Diplomarbeit noch eine kleine Benutzerfreundlichkeitsstudie gemacht. Bei einer -solchen Studie erhalten die Propanden, Tabelle:(\ref{tab:org79b1e7d}) ein paar -Aufgaben, abgebildet in der Sektion \ref{sec:org7336e25}, welche sie in einer begrenzten +solchen Studie erhalten die Probanden, Tabelle:(\ref{tab:org825e7b6}), ein paar +Aufgaben, Sektion \ref{sec:orga4d7cc3}, welche sie in einer begrenzten Zeit zu erledigen haben. Die Aufsichtsperson gibt ihnen dabei keinerlei -Hilfestellungen. Die Propanden sollen die Aufgaben alleine mit Hilfe der Tipps -und Hinweisen in der Anwendung lössen. Im Anschluss bewerten die Propanden dann +Hilfestellungen. Die Probanden sollen die Aufgaben alleine mithilfe der Tipps +und Hinweisen in der Anwendung lösen. Im Anschluss bewerten die Probanden dann die einzelnen Aufgaben nach ihrer Schwierigkeit, -Tabelle:(\ref{tab:org0009551}). Daraus lässt sich dann eine sogenannte Heatmap -erstellen. Aus der Heatmap kann man anschaulich herauslesen welche Bereiche für +Tabelle:(\ref{tab:org70a499b}). Daraus lässt sich dann eine sogenannte Heatmap +erstellen. Aus der Heatmap kann man anschaulich herauslesen, welche Bereiche für die User noch zu kompliziert sind und Nacharbeit benötigen. +Die Probanden wurden aus dem Umfeld des Projektleiters ausgewählt. Es wurde +dabei versucht ein einigermassen breites Spektrum an Computerkenntnissen +abzudecken. Da die Anwendung allen Erfahrungsstufen behilflich sein soll. Die +Angaben in der Tabelle:(\ref{tab:org825e7b6}) sind jedoch die Selbsteinschätzung der +Probanden und nicht die des Projektleiters. + \begin{table}[H] \centering \begin{tabular}{|>{\columncolor[HTML]{EFEFEF}}r|c|c|c|c|} @@ -1846,17 +1793,17 @@ die User noch zu kompliziert sind und Nacharbeit benötigen. \hline 1 & Männlich & 30 & Sehr gut & Sehr gut\\ \hline -2 & Männlich & 35 & Gut & Sehr gut\\ +2 & Männlich & 26 & Gut & Sehr gut\\ \hline -3 & Weiblich & 27 & Gut & Mittel\\ +3 & Männlich & 26 & Gut & Mittel\\ \hline -4 & Männlich & 30 & & \\ +4 & Männlich & 34 & Mässig & Mittel\\ \hline -5 & Weiblich & 26 & & \\ +5 & Weiblich & 26 & Gut & Mittel\\ \hline \end{tabular} -\caption{\label{tab:org79b1e7d} -Benutzerfreundlichkeitsstudie Propanden} +\caption{\label{tab:org825e7b6} +Benutzerfreundlichkeitsstudie Probanden} \end{table} @@ -1875,17 +1822,17 @@ Benutzerfreundlichkeitsstudie Propanden} \textbf{Schwarz}\cellcolor[HTML]{424242} & Die Aufgabe war unlösbar.\\ \hline \end{tabular} -\caption{\label{tab:org0009551} +\caption{\label{tab:org70a499b} Benutzerfreundlichkeitsstudie Bewertungsraster} \end{table} \subsubsection{Aufgaben} -\label{sec:org7336e25} +\label{sec:orga4d7cc3} \begin{enumerate} \item Du möchtest deine Dateien sichern. Erstelle dazu eine Datensicherung des Ordners \texttt{/home/testuser/Downloads}. -\item Du hast aus versehen die Datei \texttt{/home/testuser/Downloads/Example.pdf} +\item Du hast aus Versehen die Datei \texttt{/home/testuser/Downloads/Example.pdf} gelöscht. Stelle die Datei wieder her. Am Ende soll sie unter \texttt{/home/testuser/Documents/Example.pdf} zu finden sein. \item Stelle ein beliebiges Archiv wieder her. Der Zielpfad ist \texttt{/home/testuser/Documents/}. @@ -1894,18 +1841,19 @@ gelöscht. Stelle die Datei wieder her. Am Ende soll sie unter wird. Konfiguriere die Applikation entsprechend. \end{enumerate} +\newpage \subsubsection{Resultate} -\label{sec:org4179596} +\label{sec:orgc096477} \begin{longtable}{|>{\columncolor[HTML]{EFEFEF}}l|l|l|l|l|l|} \hline -\textbf{Test}\cellcolor[HTML]{C0C0C0} & \textbf{Propand 1}\cellcolor[HTML]{C0C0C0} & \textbf{Propand 2}\cellcolor[HTML]{C0C0C0} & \textbf{Propand 3}\cellcolor[HTML]{C0C0C0} & \textbf{Propand 4}\cellcolor[HTML]{C0C0C0} & \textbf{Propand 5}\cellcolor[HTML]{C0C0C0}\\ +\textbf{Test}\cellcolor[HTML]{C0C0C0} & \textbf{Proband 1}\cellcolor[HTML]{C0C0C0} & \textbf{Proband 2}\cellcolor[HTML]{C0C0C0} & \textbf{Proband 3}\cellcolor[HTML]{C0C0C0} & \textbf{Proband 4}\cellcolor[HTML]{C0C0C0} & \textbf{Probandin 5}\cellcolor[HTML]{C0C0C0}\\ \hline \endfirsthead \multicolumn{6}{l}{Fortsetzung von vorheriger Seite} \\ \hline -\textbf{Test}\cellcolor[HTML]{C0C0C0} & \textbf{Propand 1}\cellcolor[HTML]{C0C0C0} & \textbf{Propand 2}\cellcolor[HTML]{C0C0C0} & \textbf{Propand 3}\cellcolor[HTML]{C0C0C0} & \textbf{Propand 4}\cellcolor[HTML]{C0C0C0} & \textbf{Propand 5}\cellcolor[HTML]{C0C0C0} \\ +\textbf{Test}\cellcolor[HTML]{C0C0C0} & \textbf{Proband 1}\cellcolor[HTML]{C0C0C0} & \textbf{Proband 2}\cellcolor[HTML]{C0C0C0} & \textbf{Proband 3}\cellcolor[HTML]{C0C0C0} & \textbf{Proband 4}\cellcolor[HTML]{C0C0C0} & \textbf{Probandin 5}\cellcolor[HTML]{C0C0C0} \\ \hline \endhead @@ -1913,178 +1861,1061 @@ wird. Konfiguriere die Applikation entsprechend. \endfoot \endlastfoot \hline -1. & \cellcolor[HTML]{4CAF50} & \cellcolor[HTML]{FFEB3B} & \cellcolor[HTML]{FF9800} & \cellcolor[HTML]{f44336} & \cellcolor[HTML]{424242}\\ +1. & \cellcolor[HTML]{4CAF50} & \cellcolor[HTML]{4CAF50} & \cellcolor[HTML]{FFEB3B} & \cellcolor[HTML]{4CAF50} & \cellcolor[HTML]{4CAF50}\\ \hline -2. & & & & & \\ +2. & \cellcolor[HTML]{FFEB3B} & \cellcolor[HTML]{FFEB3B} & \cellcolor[HTML]{FF9800} & \cellcolor[HTML]{FF9800} & \cellcolor[HTML]{FF9800}\\ \hline -3. & & & & & \\ +3. & \cellcolor[HTML]{4CAF50} & \cellcolor[HTML]{FFEB3B} & \cellcolor[HTML]{4CAF50} & \cellcolor[HTML]{4CAF50} & \cellcolor[HTML]{4CAF50}\\ \hline -4. & & & & & \\ +4. & \cellcolor[HTML]{4CAF50} & \cellcolor[HTML]{4CAF50} & \cellcolor[HTML]{4CAF50} & \cellcolor[HTML]{4CAF50} & \cellcolor[HTML]{4CAF50}\\ \hline -5. & & & & & \\ +5. & \cellcolor[HTML]{4CAF50} & \cellcolor[HTML]{FFEB3B} & \cellcolor[HTML]{FF9800} & \cellcolor[HTML]{FFEB3B} & \cellcolor[HTML]{FFEB3B}\\ \hline -\caption{\label{tab:orgf2c44d9} +\caption{\label{tab:org223e647} Benutzerfreundlichkeitsstudie Resultate} \\ \end{longtable} +\paragraph{Proband 1} +\label{sec:org7a9d191} + +Der Proband fand die Aufgaben grundsätzlich einfach zu lösen. Das die "`Mount"' +Funktion zum Wiederherstellen einzelner Dateien gedacht war, hat er nicht +erkannt. + +\paragraph{Proband 2} +\label{sec:org2f57971} + +Der Proband kam mit den Aufgaben insgesamt gut klar. Bei der ersten Aufgabe +hätte er sich eine Meldung gewünscht, wenn das Backup erfolgreich durchgelaufen +ist. Wie Proband 1 hat auch er die "`Mount"' Funktion nicht genutzt zum +Wiederherstellen einer einzelnen Datei. Text Hinweise wurden nur bedingt +wahrgenommen. + +\paragraph{Proband 3} +\label{sec:org82f7ae7} + +Proband 3 kam mit der Anwendung an sich gut klar. Die Aufgabe zwei fand er über +alles gesehen auch am schwierigsten, da er mit der Materie nahezu nicht vertraut +ist. Als zusätzlichen Input gab er an, das ein Kontextmenü welches sich mit +Rechtsklick auf ein Element öffnet, etwas sei was er gerne hätte, da er andere +Anwendungen oft so steuert. Aufgabe 5 war auch etwas herausfordernder als 1,3 +und 4 insbesondere war unklar wie der Ordner zu der Liste hinzugefügt werden +sollte. + +Während des Tests ist in der Anwendung noch ein Bug aufgetaucht, welcher +Probleme beim Erstellen von Archiven machte. Die detaillierte Lösung dafür ist im +Kapitel \ref{sec:orgc160c63} beschrieben. + +\paragraph{Proband 4} +\label{sec:orgc2f0473} + +Bei Proband 4 war die grösste Hürde dass, das Interface nur in Englisch +verfügbar war. Bei Aufgabe zwei hat er sich nach eigenen Angaben etwas verloren +gefühlt und hätte sich auch ein Kontextmenü auf dem Rechtsklick gewünscht. +Mit etwas Hilfe bei der Übersetzung waren die restlichen Aufgaben jedoch gut zu +meistern. + +\paragraph{Probandin 5} +\label{sec:org2277dbc} + +Probandin 5 mit der Anwendung insgesamt sehr gut klar und hat auch als Einzige +die Tooltips auf den Buttons entdeckt und dann genutzt. Aufgabe 2 war jedoch +auch schwierig zu lösen, danach ging es jedoch ohne Probleme. Als Feedback wurde +genannt, dass 21:00 Uhr etwas spät für solche Tests sei. + +\subsubsection{Auswertung} +\label{sec:orgeea112d} + +Nach den 5 Tests liess sich feststellen, dass die Anwendung für die Anwender +insgesamt einfach zu bedienen ist, sobald sie einmal wissen, welche Buttons +welche Aktion auslösen und wie sich die Anwendung verhält. Um Hilfestellung zu +leisten, wird im Rahmen der Diplomarbeit noch ein Hilfefenster eingebaut, +welches den Benutzern beim ersten Starten der Anwendung angezeigt wird und kurz +die jeweiligen Elemente des Interfaces anzeigt. Somit sollte auch das Problem +bei der Aufgabe zwei etwas abgeschwächt werden. Eines der Hauptprobleme war +dort das die Probanden nicht herausgefunden haben der schnellste Weg eine +einzelne Datei wieder herzustellen über die "`Mount"' Funktion ginge. Die +Einarbeitung in die Thematik von Backups würde sich jedoch wohl nur sehr schwer +über das \gls{gui} realisieren lassen. Hier müsste auf jeden Fall eine +Dokumentation oder im Idealfall eine Schulung Abhilfe schaffen. + +Das Kontextmenü auf dem Rechtsklick, welches von zwei Usern gewünscht worden +ist, ist eine sehr gute Idee und sollte sich auch realisieren lassen. Dieses +Feature wird nicht im Rahmen der Diplomarbeit umgesetzt und für die zukünftige +Entwicklung aufgenommen. + +Ein Dialog, welcher ein erfolgreiches Erstellen eines Archivs bestätigt, wird +nicht eingebaut. Bei erfolgreicher Durchführung verschwindet der +Fortschrittsdialog und in der Archivlist erscheint ein weiterer Eintrag. Das +sind zwar nicht die offensichtlichsten Hinweise im Falle eines Fehlers +erscheint jedoch sofort ein Dialog, der darauf hinweist. Somit sollten die +beiden Vorgänge genügend unterschieden sein und es hat auch kein anderer Proband +das Bedürfnis nach einer Bestätigung. + +Für die Zukunft wird eine Deutsche Übersetzung geplant. Dies würde die +Anwendung dann vor allem Leuten mit weniger guten Englisch Kenntnissen +zugänglich machen. + +Im Rahmen der Diplomarbeit werden noch einige Texte angepasst. An gewissen +Stellen redet die Anwendung von "`Backups"' und an anderen von "`Archivs"'. Da +\gls{borg} sie selber "`Archives"' nennt, sollte Borg-Qt noch so angepasst werden +das überall von "`Archives"' die Rede ist. Zudem wird bei den "`Include"' und +"`Exclude"' Optionen, über der Liste noch ein Label hinzugefügt, um die Elemente +zu beschreiben. Des Weiteren werden die Buttons "`Add file"' und "`Add folder"' zu +"`Exclude file"' und "`Exclude folder"' sowie "`Include file"' und "`Include folder"' +umbenannt. Somit zeigen die Buttons dann auch direkt, dass sie Dateien +respektive Ordner ein-/ausschliessen Ein paar der Probanden hatten es zuerst +über den "`Remove"' Button versucht. + \section{Realisierung} -\label{sec:orgcbae1a5} +\label{sec:orgc160c63} \subsection{Cross-plattform Kompatibilität} -\label{sec:org445f656} +\label{sec:org5dddaa7} Um sicherzugehen das die gewählten Technologien auch den Anforderungen entsprechen wurde ein kleines "`Hello World"' Programm mit Python3 und Qt geschrieben. Dieses läuft ohne jegliche Probleme und Anpassung auf Windows, -Linux und OS X. Wie in den Screenshots in Abbildung:(\ref{fig:orgf39d17a}) zu sehen +Linux und OS X. Wie in den Screenshots in Abbildung:(\ref{fig:orgdb9cd11}) zu sehen ist. \begin{figure}[htbp] \centering \includegraphics[width=.9\linewidth]{pictures/hello_world.png} -\caption{\label{fig:orgf39d17a} +\caption{\label{fig:orgdb9cd11} Python und Qt Applikation unter Windows (links), Linux (rechts) und OS X (unten)} \end{figure} \subsection{Benutzerinterface} -\label{sec:orgebaec30} +\label{sec:org01da24f} \subsubsection{Inspiration} -\label{sec:orgda858d3} +\label{sec:orgbbdb338} Bevor \gls{borg} vom Projektleiter als Backup Software eingesetzt wurde, nutzte er die Software "`Back in Time"'\footcite{backintime}. Die Software setzt auf Rsync -zum kopieren der Dateien. Dies erlaubt auch schnelle Backups über SSH zu +zum Kopieren der Dateien. Dies erlaubt auch schnelle Backups über SSH zu machen. "`Back in Time"' hat allerdings das Problem, dass es keine \gls{dedup} beherrscht. -Das Userinterface, zu sehen in Abbildung:(\ref{fig:orgc56cec1}), ist jedoch sehr +Das Userinterface, zu sehen in Abbildung:(\ref{fig:org12a159d}), ist jedoch sehr gelungen und soll Borg-Qt als Vorlage dienen. Insbesondere die einfache und -direkte Art ein Backup eines spezifischen Pfades zu machen ist sehr spannend. +direkte Art ein Backup eines spezifischen Pfades zu machen ist sehr gelungen. Da sie es dem User so einfach wie möglich macht ein Backup zu erstellen. \begin{figure}[htbp] \centering \includegraphics[width=.9\linewidth]{pictures/bit_main.png} -\caption{\label{fig:orgc56cec1} +\caption{\label{fig:org12a159d} Screenshot des Hauptfensters der Software "`Back in Time"'} \end{figure} -\subsubsection{Umsetzung} -\label{sec:orgf72f50d} +\subsubsection{Erste Umsetzung} +\label{sec:org9949a8a} -Qt bietet einem mehrere Möglichkeiten zum erstellen der graphischen Oberfläche. +Qt bietet einem mehrere Möglichkeiten zum Erstellen der grafischen Oberfläche. Zum einen kann die ganze Oberfläche programmatisch erstellt werden. Dies gibt -dem ein grosses Mass an Kontrolle über das Erstellte ist allerdings nicht sehr +dem Entwickler ein grosses Mass an Kontrolle, ist allerdings nicht sehr intuitiv. -Die angenehmere Variante ist des den Qt Designer, Abbildung:(\ref{fig:org663b709}), -zu nutzen. Mit diesem lassen sich die Oberflächen in einer graphischen +Die angenehmere Variante ist es den Qt Designer, Abbildung:(\ref{fig:org5dd2144}), +zu nutzen. Mit diesem lassen sich die Oberflächen in einer grafischen Oberfläche designen und mit einem Befehl auch gleich starten damit man direkt sieht wie sich die Oberflächen auf dem System verhalten. \begin{figure}[htbp] \centering \includegraphics[width=.9\linewidth]{pictures/qt_designer.png} -\caption{\label{fig:org663b709} +\caption{\label{fig:org5dd2144} Ein Screenshot der Applikation Qt Designer} \end{figure} Auf Basis der Ziele und der Use Cases wurde eine erste Version des \glspl{gui} -erstellt. Im Hauptfenster, Abbildung:(\ref{fig:org2e387c6}), befinden sich wie -auch bei "`Back in Time"' in der einen Hälfte eine Liste der vorhandenen Backups -(bei Borg Archive genannt) und in der anderen Hälfte ein Dateimanagemer. Dieser -dient zur Auswahl des zu sichernden Pfades. Im oberen Bereich findet sich die -Toolbar mit den Aktionen die der User ausführen kann. Gemäss den Use Cases sind -dies "`Backup"', "`Restore"', "`Mount"', "`Delete"' und "`Settings"'. +erstellt. Im Hauptfenster, Abbildung:(\ref{fig:org575e47c}), befinden sich wie +auch bei "`Back in Time"' in der einen Hälfte eine Liste der vorhandenen Archive +und in der anderen Hälfte ein Dateimanager. Dieser dient zur Auswahl des zu +sichernden Pfades. Im oberen Bereich findet sich die Toolbar mit den Aktionen, +die der User ausführen kann. Gemäss den Use Cases sind dies "`Backup"', +"`Restore"', "`Mount"', "`Delete"' und "`Settings"'. + +Bei den Icons wurde zuerst versucht diese nach der "`Icon Naming +Specification"'\footcite{iconnamespec} auszuwählen. Diese Spezifikationen würden +es erlauben einfach den definierten Namen des Icons anzugeben. Qt würde dann +jeweils das passende Icon basierend auf dem System anzeigen. Somit wären die +Icons passend zum jeweiligen Betriebssystem. Allerdings gab es für die Aktionen +keine passenden Icons in der Spezifikation. Deshalb wurden schlussendlich das +"`Feather"' Icon Theme Set \footcite{feathericons} ausgewählt. Dabei handelt es +sich um ein freies Icon Theme unter der MIT Lizenz, welches die Icons als SVG +Dateien bereitstellt. Dadurch können die Icons frei skalieren und +funktionieren auch auf Geräten mit einer hohen Auflösung. \begin{figure}[H] \centering \includegraphics[width=.9\linewidth]{pictures/borgqt_main_v1.png} -\caption{\label{fig:org2e387c6} +\caption{\label{fig:org575e47c} Screenshot des Borg-Qt Hauptfensters Version 1} \end{figure} -Im Einstellungsfenster gibt es zwei Tabs zur Auswahl. Einmal den "`General"' Tab, -Abbildung:(\ref{fig:org588f6f1}), dieser zeigt allgemeine Optionen -an. Der zweite Tab "`Exlcude"', Abbildung:(\ref{fig:org89e6126}), gibt -dem User die Möglichkeit einzelne Ordner oder Dateien von den Backups -auszuschliessen. +Im Einstellungsfenster gibt es drei Tabs zur Auswahl. Einmal den "`General"' Tab, +Abbildung:(\ref{fig:orgd6559a6}), dieser zeigt allgemeine Optionen +an. Im zweiten Tab "`Include"', Abbildung:(\ref{fig:orgdbd9f1e}), kann +der User die Ordner und Dateien auswählen, die er sichern will. Der dritte Tab +"`Exclude"', Abbildung:(\ref{fig:org26f570c}), gibt dem User die +Möglichkeit einzelne Ordner oder Dateien von den Backups auszuschliessen. \begin{figure}[H] \centering \includegraphics[width=.7\textwidth]{pictures/borgqt_settings_general_v1.png} -\caption{\label{fig:org588f6f1} +\caption{\label{fig:orgd6559a6} Screenshot der Borg-Qt "`General"' Einstellungen Version 1} \end{figure} +\begin{figure}[H] +\centering +\includegraphics[width=.7\textwidth]{pictures/borgqt_settings_include_v1.png} +\caption{\label{fig:orgdbd9f1e} +Screenshot der Borg-Qt "`Include"' Einstellungen Version 1} +\end{figure} + \begin{figure}[H] \centering \includegraphics[width=.7\textwidth]{pictures/borgqt_settings_exclude_v1.png} -\caption{\label{fig:org89e6126} +\caption{\label{fig:org26f570c} Screenshot der Borg-Qt "`Exclude"' Einstellungen Version 1} \end{figure} -Das "`Progress"' Dialogfenster, Abbildung:(\ref{fig:orgcb30462}), zeigt dem -User einen Fortschrittsbalken und einen einen "`Cancel"' Button zum Abbrechen der -Aktion an. Das Fenster ist generisch gehalten damit es von verschiedenen Tasks +Das "`Progress"' Dialogfenster, Abbildung:(\ref{fig:org7281322}), zeigt dem +User einen Fortschrittsbalken und einen "`Cancel"' Button zum Abbrechen der +Aktion an. Das Fenster ist generisch gehalten, damit es von verschiedenen Tasks gleichermassen genutzt werden kann. \begin{figure}[H] \centering \includegraphics[width=.6\textwidth]{pictures/borgqt_progress_v1.png} -\caption{\label{fig:orgcb30462} +\caption{\label{fig:org7281322} Screenshot des Borg-Qt "`Progress"' Dialogfensters Version 1} \end{figure} -Im "`Archive"' Dialogfenster, Abbildung:(\ref{fig:org7511fd2}), werden -Detailinformationen eines Archives angezeigt. Diese sind etwa die Grösse des -Archives, wieviele Dateien es beinhaltet, wie lange das Erstellen dauerte, etc. +\subsection{Einstellungen} +\label{sec:orgc185ba1} + +Die Einstellungen werden von der Applikation benötigt, um die vom User +definierten Vorgaben auszuführen, das Backup Repository zu finden, etc. +Diese Einstellungen sollen in einer Klar-Text Datei gespeichert werden. Dies +hat zum einen den Vorteil, dass man die Einstellungen sehr einfach sichern kann. +Zum Anderen kann man die Einstellungen der Applikation auch anpassen, ohne das +man die Applikation selber starten muss. + +\subsubsection{Backend} +\label{sec:orgf80b7cd} + +Zum Erstellen und Auslesen der Konfigurationsdatei wurde das Python Standard +Modul \texttt{configparser} \footcite{configparser} verwendet. Dieses macht es einem +sehr einfach eine Datei im "`INI"' Stil zu erstellen und parsen. + +"`INI"' Stil bedeutet dabei das die Einstellungen in "`Key/Value"' Paaren +gespeichert werden. Somit kann man einfach auf den benötigten Wert zugreifen, in +dem man seinen Schlüssel angibt. Ein Beispiel ist im Code Snippet: +(\ref{orge48e086}) zu sehen. + +\lstset{language=bash,label=orge48e086,caption={Ein Beispiel einer INI Datei.},captionpos=b,numbers=none} +\begin{sexylisting}{Ein Beispiel einer INI Datei.} +# docs/borg_qt.conf.example +[borgqt] +includes = [ + "/home/username/", + "/home/otheruser/Downloads" + ] +repository_path = /tmp/test-borgqt +password = foo +prefix = muster +\end{sexylisting} + +Das Auslesen und schreiben der Konfigurationsdatei liess sicher relativ einfach +realisieren. Die grösste Herausforderung dabei war, das \texttt{Configparser} keinen +Support für eine Liste von Werten hat. Die wurde insbesondere für \texttt{include} und +\texttt{exclude} Pfade benötigt. Also für die Pfade, welche gesichert werden oder von +einem Backup ausgeschlossen werden sollen. + +Abhilfe schaffte hier ein Stackexchange Post \footcite{configlist}. Dieser schlug +vor, das man die Liste im \gls{json} Format speichern soll. Da \texttt{Configparser} alle +Werte im Format "`String"' zurückgibt können dann die \gls{json} Listen sehr +einfach von einem \gls{json} Parser umgewandelt werden. Im Projekt wurde dies +dann unter anderem als Methode der \texttt{Config} Klasse, Code +Snippet:(\ref{orgc9576fb}), implementiert. Somit muss man jeweils nur die +\texttt{\_return\_list\_option()} Methode mit der benötigten Option als Argument aufrufen +und bekommt als Resultat eine funktionierende Python Liste zurück. + +Beim Schreiben der Konfigurationsdatei macht man dann einfach das Umgekehrte. +Man konvertiert eine Python Liste in einen \gls{json} String. + +\lstset{language=Python,label=orgc9576fb,caption={Methode zum Parsen von \gls{json} Listen in Konfigurationsdateien.},captionpos=b,numbers=none} +\begin{sexylisting}{Methode zum Parsen von gls{json} +# borg_qt/config.py + +def _return_list_option(self, option): + """Reads the provided option from the configparser object and returns + it as a list.""" + if option in self.config['borgqt']: + return json.loads(self.config['borgqt'][option]) + else: + return [] +\end{sexylisting} + +Die Datei wird jeweils beim Start der Applikation gelesen und angewendet. Somit +weiss die Applikation bereits nach dem Start wo das Repository liegen sollte +und wie die Login Daten dafür sind. Dies geschieht mittels der Methode +\texttt{\_get\_path}, Codesnippet:(\ref{org2ce6f80}). Es gibt dabei zwei mögliche Pfade, +wo die Konfigurationsdatei liegen könnte. Befindet sich die Datei nicht am +vorgegeben Pfad \texttt{\textasciitilde{}/.config/borg\_qt/borg\_qt.conf} oder direkt "`neben"' dem +Binary, gibt die Applikation eine entsprechende Meldung, +Abbildung:(\ref{fig:orgcd4efa1}), aus. Der Hauptpfad unter +\texttt{\textasciitilde{}/.config/borg\_qt/borg\_qt.conf} wird dabei gemäss dem Ziel Nr. 21 über die +Umgebungsvariable \texttt{HOME} zusammengesetzt + +\lstset{language=Python,label=org2ce6f80,caption={Methode zum Suchen der Konfigurationsdatei},captionpos=b,numbers=none} +\begin{sexylisting}{Methode zum Suchen der Konfigurationsdatei} +# borg_qt/config.py + +def _get_path(self): + """searches for the configuration file and returns its full path.""" + home = os.environ['HOME'] + dir_path = os.path.dirname(os.path.realpath(__file__)) + + if os.path.exists(os.path.join(home, '.config/borg_qt/borg_qt.conf')): + return os.path.join(home, '.config/borg_qt/borg_qt.conf') + elif os.path.exists(os.path.join(dir_path, 'borg_qt.conf')): + return os.path.join(dir_path, 'borg_qt.conf') + else: + raise BorgException("Configuration file not found!") +\end{sexylisting} \begin{figure}[H] \centering -\includegraphics[width=.6\textwidth]{pictures/borgqt_archive_v1.png} -\caption{\label{fig:org7511fd2} -Screenshot des Borg-Qt Archivinformationsfenster Version 1} +\includegraphics[width=.3\textwidth]{pictures/borgqt_missing_config.png} +\caption{\label{fig:orgcd4efa1} +Screenshot der Borg-Qt Fehlermeldung bei fehlender Konfigurationsdatei.} \end{figure} -\subsection{Backend Umsetzung} -\label{sec:org61c609d} +\subsubsection{Frontend} +\label{sec:orga2421c7} -PLACEHOLDER +Um es für die User einfacher zu machen wurde beschlossen die Applikation, +um eine grafische Konfigurationsmöglichkeit zu erweitern. Diese stellt dabei +hauptsächlich die Werte aus der Konfigurationsdatei grafisch dar und übergibt +allenfalls geänderte Werte ans Backend welches die Konfiguration, dann wieder in +der Datei speichert. + +Das Meiste davon ist nicht besonders aufregender Code da hauptsächlich nur die +Werte aus der Konfigurationsdatei in die entsprechenden Textfelder und Listen +im grafischen Interface geschrieben werden auch beim Speichern der geänderten +Einzel-Werte funktioniert es in etwa gleich. Beim Speichern der geänderten +Listen jedoch trat eine weitere Herausforderung auf. + +Qt kennt keinen Mechanismus zum Auslesen aller Elemente aus einem sogenannten +\texttt{QListWidget}, einem \gls{gui} Element, welches Listen darstellt. Somit ist es +nötig das man die Elemente zuerst in einer Zwischenliste speichert bevor man +sie zurück in das \texttt{Configparser} Objekt schreiben kann. Im Code sieht dies dann +wie in Codesnippet:(\ref{org98b3049}) aus. Dabei wird jedes Element +einzeln aus dem \texttt{QListWidget} geholt und in die Zwischenliste geschoben. Im +zweiten Teil wird die Liste dann wieder zu einem \gls{json} String konvertiert +und im \texttt{Configparser} Objekt gespeichert. Die Option \texttt{indent=4} dient dabei der +Lesbarkeit damit nicht der ganze \gls{json} String auf ein Zeile in der +Konfigurationsdatei gespeichert wird, sondern jedes Listenelement seine eigene +Zeile erhält. + +\lstset{language=Python,label=org98b3049,caption={Workaround zum Auslesen aller Elemente in QListWidgets.},captionpos=b,numbers=none} +\begin{sexylisting}{Workaround zum Auslesen aller Elemente in QListWidgets.} +# borg_qt/config.py + +# Workaraound to get all items of a QListWidget as a list +includes = [] +for index in range(self.list_include.count()): + includes.append(self.list_include.item(index).text()) + +# Configparser doesn't know about list therefore we store them as json +# strings +self.config['borgqt']['includes'] = json.dumps(includes, + indent=4, + sort_keys=True) +\end{sexylisting} + +\subsection{Borg Interface} +\label{sec:orgd904704} + +Zuerst erschien es sinnvoll die Kommunikation zwischen \gls{borg} und Borg-Qt +über einfache Funktionen laufen zu lassen. Dieser Ansatz hatte allerdings zwei +Probleme. Zum einen wurde es relativ umständlich Informationen zu verarbeiten +und weiterzugeben zum anderen führte es zu dem unschönen Nebeneffekt dass, das +\gls{gui} eingefroren ist. Eine Recherche ergab, dass Threads hier Abhilfe +schaffen könnten. + +Python würde hierzu ein Modul, \texttt{threading.Thread} \footcite{threading}, +mitliefern. Allerdings war es nicht möglich den Fortschrittsdialog und den +Thread so zu verknüpfen das sich der Dialog schliesst, wenn das Backup +durchgelaufen ist und der Thread wieder entfernt wird. Aus diesem Grund wurde +dann ein erfolgreicher Test mit dem PyQt Modul \texttt{QThread} \footcite{qthread} +gemacht. Mit diesem war es ohne weiteres möglich den Dialog zu schliessen, +sobald das Backup fertig durchgelaufen war. Auch das Stoppen des Threads mit +einem Klick auf den "`Cancel"' Button funktioniert einwandfrei. + +Damit \gls{borg} aus der Anwendung angesteuert werden kann wird das Python Modul +\texttt{subprocess} \footcite{subprocess} verwendet. Dieses erlaubt einem neue Prozesse +zu erstellen, welche man oftmals benötigt um etwa, wie im Fall von Borg-Qt, +externe Applikationen zu starten, zu steuern und ihre Ausgabewerte auszulesen. +Das effektive Kommando wird dann aus dem Property \texttt{self.command} gelesen. + +Damit \gls{borg} die Ausgabe im \gls{json} Format ausgibt, muss man man noch die +Parameter \texttt{-{}-log-json} und \texttt{-{}-json} mitgeben. Der erste Parameter ändert +hauptsächlich das Format von Errormeldungen und der zweite formatiert dann die +finale Ausgabe. Die Ausgaben werden jeweils an Variablen weitergegeben +(\texttt{json\_output} und \texttt{json\_error}) welche im weiteren Code verarbeitet werden. + +Insbesondere \texttt{json\_error} ist für den weiteren Programmablauf von grosser +Wichtigkeit. Wenn Borg ein Problem feststellt, wird die Error Meldung von +\gls{borg} an \texttt{json\_error} weitergegeben. Mittels der Methode im +Codesnippet:(\ref{orgbe8048f}), wird die Variabel ausgewertet und im Falle eines +Fehlers wirft der Code eine Exception, welche im Hauptprogramm abgefangen wird. +Dabei wird eine Fehlermeldung in einem separaten Fenster ausgegeben. Die +Methode wurde dabei auf der Klasse \texttt{BorgQtThread} umgesetzt und steht somit +allen Funktionen zur Verfügung. Die Fehlermeldung bei einer fehlenden +Konfigurationsdatei, Abbildung:(\ref{fig:orgcd4efa1}), funktioniert nach +dem gleichen Prinzip und konnte somit zum grössten Teil wiederverwendet werden. +Der restliche \gls{json} Output kann dann einfach mit dem \texttt{json} Modul geparst +werden. Somit werden dem User, gemäss Ziel Nr. 14, direkt die Fehlermeldungen +von \gls{borg} angezeigt und es muss nur an gewissen Stellen noch +applikationsspezifisches Exception Handling betrieben werden. + +\lstset{language=Python,label=orgbe8048f,caption={Auswertung der json err Variabel.},captionpos=b,numbers=none} +\begin{sexylisting}{Auswertung der json err Variabel.} +# borg_qt/borg_interface.py + +def process_json_error(self, json_err): + if json_err: + error_list = json_err.split('\n') + if "borg.locking" in error_list[0]: + pass + else: + err = json.loads(error_list[0]) + raise BorgException(err['message']) +\end{sexylisting} + +Die ganze Funktionalität wurde dann in der Klasse \texttt{BorgQtThread} +zusammengefasst. Somit kann für jede Funktion von \gls{borg} eine einzelne Klasse +geschrieben werden, welche dann von \texttt{BorgQtThread} die Funktionen erbt. Die +Funktionsklassen müssen dann jeweils nur die Methode +\texttt{self.create\_command(self)} implementieren welche das Property \texttt{self.command} +erstellt und die einfachen Funktionen von \gls{borg} sollten direkt funktionieren + +\subsection{Backup} +\label{sec:org7ad98eb} + +Bei den Backups handelt es sich ohne Zweifel um die wichtigste Funktion von +Borg-Qt. Deshalb soll das Erstellen eines Backups so schnell und unkompliziert +wie möglich vonstattengehen. + +\subsubsection{Backend} +\label{sec:org1f2a8e9} + +Um Backups erstellen zu können wurde die Klasse \texttt{BackupThread} erstellt, welche +von \texttt{BorgQtThread} erbt. Die Klasse \texttt{BackupThread} nimmt beim instantiieren 3 +Argumente auf: \texttt{includes}, \texttt{excludes}, \texttt{prefix}. Wobei \texttt{excludes} und \texttt{prefix} +beide optional sind. Im Hauptcode werden diese Argumente aus der +Konfigurationsdatei ausgelesen und übergeben. Die Includes werden im Falle +eines Backups im Hintergrund aus der Konfigurationsdatei gelesen. Wenn es +der User manuell ausführt, wird der im Frontend ausgewählte Pfad mitgegeben. + +Die "`Excludes"' haben lange nicht funktioniert. Der Grund dafür waren zusätzliche +Anführungszeichen um die Exclude Pfade. Diese wurden aus Versehen hinzugefügt +da \gls{borg} normalerweise auf der Kommandozeile ausgeführt wird und die +Anführungszeichen dort notwendig sind um allfällige Leer- oder Sonderzeichen +abzufangen. Es wurde davon ausgegangen dass, da \texttt{subprocess} Modul ähnlich +funktioniert wie die Kommandozeile. Da man an das Modul direkt einen String +übergibt, sind die zusätzlichen Anführungszeichen nicht notwendig und führen +sogar dazu das die Pfade gar nicht funktionieren. Somit werden die "`Excludes"' +mittels der Methode \texttt{\_process\_excludes} mit dem entsprechenden Parameter +gepaart und als gesamte Liste an das finale Kommando angehängt. Die "`Includes"' +funktionieren auf die gleiche Weise, benötigen jedoch keine zusätzlichen +Parameter. Zu sehen ist dies im Codesnippet:(\ref{orgacbd2ca}). + +\lstset{language=Python,label=orgacbd2ca,caption={Erstellen des "`borg create"' Kommandos fürs erstellen von Backups.},captionpos=b,numbers=none} +\begin{sexylisting}{Erstellen des "`borg create"' Kommandos fürs erstellen von Backups.} +# borg_qt/borg_interface.py +# Funktion zum Verarbeiten der "Excludes" +def _process_excludes(self, excludes): + processed_items = [] + if excludes: + for item in excludes: + processed_items.extend(['-e', item]) + return processed_items + else: + return processed_items + +# Methode zum Erstellen des gls:borg Kommandos. +def create_command(self): + self.command = ['borg', 'create', '--log-json', '--json', + ('::' + + self.prefix + + '{now:%Y-%m-%d_%H:%M:%S}')] + self.command.extend(self.includes) + if self.excludes: + self.command.extend(self.excludes) +\end{sexylisting} + +\subsubsection{Frontend} +\label{sec:orgbd48c28} + +Damit die Backups im Frontend funktionieren musste zum einen der "`Backup"' Knopf +mit der Methode \texttt{create\_backup} verknüpft werden. Des Weiteren wurde ein Dateibaum, in +Abbildung:(\ref{fig:orgebca5ba}) grün umrahmt, eingefügt. Dieser gibt den Pfad +des angewählten Objektes and die \texttt{create\_backup} Methode weiter. + +\begin{figure}[htbp] +\centering +\includegraphics[width=.9\linewidth]{pictures/borgqt_file_tree.png} +\caption{\label{fig:orgebca5ba} +Screenshot des Dateibaumes.} +\end{figure} + +Während dem ein Archiv erstellt wird, wird ein kleiner Dialog mit Ladebalken +angezeigt, Abbildung:(\ref{fig:org973d4de}). Dieser dient hauptsächlich dazu +dem User das Gefühl zu geben, das die Applikation noch am Arbeiten ist. + +Der Dialog musste gegenüber der ersten Version in Sektion: \hyperref[sec:org9949a8a]{Erste Umsetzung} noch +etwas angepasst werden. \gls{borg} gibt, während dem Erstellen eines Archivs +keine Informationen zurück, welche es einem erlauben würden einen +Fortschrittsbalken zu generieren, welcher den effektiven Fortschritt anzeigt. +\gls{borg} gibt einzig die Anzahl der verarbeiteten Dateien in regelmässigen +Abständen zurück. Da \gls{borg} jedoch zu Beginn nicht meldet wie viele Dateien +gesichert werden lässt sich damit keine Prozentzahl erstellen. Ein paar +Experimente, bei denen die zu sichernden Dateien zuerst von Borg-Qt gezählt +werden sollten, wurden verworfen. Einerseits weil keine Methode gefunden werden +konnte, welche die gleiche Anzahl Dateien zurückgab wie \gls{borg}. Anderseits, +weil es den Backup Vorgang unnötig in die Länge zieht. Dies ist insbesondere +der Fall, wenn sich sehr viele Dateien im Quellverzeichnis befinden. Es kann +sogar soweit kommen dass, das Zählen länger als das eigentliche Sichern dauert. +Aus diesem Grund wurde der Fortschrittsbalken mit Prozentanzeige durch einen +sich wiederholenden Ladebalken ersetzt. + +\begin{figure}[H] +\centering +\includegraphics[width=.4\paperwidth]{pictures/borgqt_progress_v2.png} +\caption{\label{fig:org973d4de} +Screenshot des "`Aktion in Ausführung"' Dialogs.} +\end{figure} + +Wurde das Archiv erfolgreich erstellt, wird die Liste mit den Archiven sowie +die Repository Statistik aktualisiert. Beide Elemente sind in der, +Abbildung:(\ref{fig:org5e3466a}), grün respektive rot umrahmt. Für die +beiden Funktionen wurde jeweils eine eigene Klasse, \texttt{ListThread} und +\texttt{InfoThread}, erstellt. Beide erben von \texttt{BorgQtThread}. In den Klassen wird wie +bei \texttt{BackupThread} \gls{borg} über einen \texttt{subprocess} aufgerufen, um die Archiv Liste +respektive Statistik zurückzuerhalten Die \gls{json} Strings werden wieder auf +die jeweilige Information geparst und die Archive in eine Python List, die +Repository Statistik in Zahlen umgewandelt. + +Da \gls{borg} die Repository Grössen in Bytes zurückgibt, sollten diese zur +Anzeige noch in eine Menschen lesbarses Format umgerechnet werden. In Borg-Qt +geschieht dies mit der Helferfunktion \texttt{convert\_size}. Die Funktion wurde von +Stackoverflow \footcite{sizeformat} übernommen. + +Beim Durchführen der Benutzerfreundlichkeitsstudie wurde noch ein Bug entdeckt. +Der Bug, der entdeckt wurde, tritt immer dann auf, wenn ein Archiv gemountet +ist während man ein Backup erstellen möchte. Dies ist jedoch offenbar eine +Funktion die von \gls{borg} nicht unterstützt wird \footcite{borgmount}. \gls{borg} +kann mehrere Archive gleichzeitig mounten. Der User müsste jedoch jedes der +Archive zuerst wieder unmounten bevor er eine neue Datensicherung erstellen +kann. Das Problem wurde dadurch gelöst das dem User ein Dialog angezeigt wird, +über welchen er vor einer Datensicherung zuerst die gemounteten Archive +aushängen kann. Anschliessend startet die Datensicherung wie, wenn kein +Archiv gemountet gewesen wäre. + +\begin{figure}[htbp] +\centering +\includegraphics[width=.9\linewidth]{pictures/borgqt_archive_list.png} +\caption{\label{fig:org5e3466a} +Screenshot der aktualisierten Archivliste und Repository Statistik.} +\end{figure} + +\subsection{Restore} +\label{sec:orgb888cf7} + +Der Code für das Wiederherstellen eines Backups ist sehr ähnlich wie der Code +für das Erstellen. Die Besonderheiten bei dieser Funktion sind vor allem, die +Kontrolle das ein Archiv angewählt wurde bevor man die Wiederherstellung +startet, das Erstellen des Zielpfades sowie das Aufräumen bei einem Fehler. + +Wird der "`Restore"' Knopf gedrückt ohne das ein Backup angewählt wurde, erscheint +folgende Fehlermeldung, Abbildung:(\ref{fig:org0cafd47}), um den Benutzer +darauf hinzuweisen, das er dies noch tun sollte. + +\begin{figure}[H] +\centering +\includegraphics[width=.2\paperwidth]{pictures/borgqt_no_archive_selected.png} +\caption{\label{fig:org0cafd47} +Screenshot der Fehlermeldung eines fehlenden Archivs während einem Restore.} +\end{figure} + +Das Wiederherstellen an sich läuft so ab das der Benutzer zuerst ein Archiv +auswählt und dann auf "`Restore"' klickt. Daraufhin öffnet sich ein Dialog, in +welchem der Benutzer den Zielort auswählen kann. Sobald er dies getan hat +erstellt Borg-Qt darin einen Order mit dem Namen des Archivs und beginnt mit +dem eigentlichen Wiederherstellen. Sollte der Zielort für die Applikation nicht +beschreibbar sein erscheint eine entsprechende Fehlermeldung, +Abbildung:(\ref{fig:org3dcb5db}), und der Vorgang wird abgebrochen. Nach einer +erfolgreichen Wiederherstellung öffnet die Applikation den Zielort in einem +Dateimanager, damit der User gleich mit den Dateien weiterarbeiten kann. + +\begin{figure}[H] +\centering +\includegraphics[width=.2\paperwidth]{pictures/borgqt_not_writeable.png} +\caption{\label{fig:org3dcb5db} +Screenshot der Fehlermeldung wenn der Zielort nicht beschreibbar ist.} +\end{figure} + +Gibt es, während dem Wiederherstellen einen Fehler gibt die Anwendung den +entsprechenden Fehler aus und löscht zusätzlich noch den zu Beginn erstellten +Archiv Ordner. Dies aus dem Grund da die Wiederherstellung ja nicht komplett +durchgelaufen ist, somit befindet sich das Archiv in einem unfertigen Zustand. +Es ist deshalb sinnvoller die wiederhergestellten Dateien wegzuräumen als unter +Umständen defekte Dateien zurückzulassen + +Wird das gleiche Archiv nochmal an den gleichen Zielort wiederhergestellt, ist +das für \gls{borg} kein Problem. Es überschreibt die Dateien einfach noch einmal + +\subsection{Mount} +\label{sec:org414f8a8} + +Die "`Mount"' Funktion ist sehr ähnlich wie die "`Restore"' Funktion. Sie prüft +auch zuerst ob der Benutzer überhaupt ein Archiv angewählt hat und gibt, falls +dies nicht der Fall ist eine entsprechende Fehlermeldung aus. Im Gegensatz zur +"`Restore"' Funktion zeigt die "`Mount"' Funktion jedoch keinen Dialog zum +Auswählen des Zielpfades. Die Funktion erstellt sich diesen selbst. Der +Zielpfad ist dabei kombiniert aus dem \texttt{/tmp} Verzeichnis und dem Namen des +Archivs + +\gls{borg} mountet jedes Archiv nur mit Leserechten. Es ist relativ +unwahrscheinlich, dass der Zielpfad in unbeschreibbarer Form bereits vor dem +Ausführen der \texttt{mount\_backup} Methode bereits vorhanden ist. Sollte dies jedoch +der Fall sein kann davon ausgegangen werden das der Benutzer das Archiv bereits +einmal gemountet hat. Genau dies wird in der Applikation auch so überprüft. +Falls der Zielort schreibbar ist, wird das ausgewählte Archiv auf diesem Pfad +gemountet. Anschliessend wird wie auch bei der Restore Funktion, der Pfad in +einem Dateimanager geöffnet damit der Benutzer direkt mit den Dateien +weiterarbeiten kann. Wurde erkannt dass, das Archiv bereits gemountet wurde, +also der Pfad nicht schreibbar ist, öffnet die Applikation direkt den +Dateimanager ohne zu versuchen das Archiv noch einmal zu mounten. + +Zusätzlich wird der Pfad jedes gemounteten Archivs in einer Liste gespeichert. +Beim Beenden der Applikation iteriert die Applikation über jeden Pfad in der +Liste unmountet das Archiv und löscht den Ordner. Somit befindet sich das +System wieder im gleichen Zustand wie vor dem Start der Applikation. + +\subsection{Delete} +\label{sec:org33428e5} + +Der Benutzer hat in der Applikation auch die Möglichkeit Archive wieder zu +löschen. Hierbei greift wie bei der "`Restore"' und "`Mount"' Funktion auch wieder +die Überprüfung ob der Benutzer ein Archiv ausgewählt hat. Ist dies gegeben, +zeigt die Applikation dem Benutzer einen Dialog, Abbildung:(\ref{fig:orgecbafd9}), zum +Sicherstellen, dass er das Archiv wirklich löschen möchte. Bestätigt er diesen +mit "`Yes"' wird der Vorgang fortgesetzt und das Archiv gelöscht. Anschliessend +werden die Archivliste und die Repository Statistik aktualisiert, um den neuen +Zustand wiederzugeben. Klickt der Benutzer stattdessen auf "`No"' schliesst sich +der Dialog wieder und nichts weiter passiert. + +\begin{figure}[H] +\centering +\includegraphics[width=.3\paperwidth]{pictures/borgqt_yes_no.png} +\caption{\label{fig:orgecbafd9} +Screenshot des Yes/No Dialogs in der "`Delete"' Funktion.} +\end{figure} + +\subsection{Automatische Backups} +\label{sec:orgff72e08} + +Damit der Benutzer die Backups von Hand machen muss, ist es sinnvoll eine +Funktion bereitzustellen, welche die Backups automatisch im Hintergrund +erledigt. Dadurch ist sichergestellt das die Backups im allgemeinen Trubel des +Lebens nicht vergessen gehen. + +Damit automatische Backups überhaupt möglich sind muss die Applikation zuerst +Backups im Hintergrund erstellen können, also ohne das die ganze grafische +Oberfläche angezeigt wird. Bei Borg-Qt wird dies über einen Kommandozeilen +Parameter realisiert. Hierfür wurde das Python Standard Paket \texttt{argparser} +verwendet. Konkret bedeutet dies, dass wenn man die Applikation auf +der Kommandozeile wie folgt ausführt: \texttt{borg\_qt -B}. Wird die grafische Oberfläche +nicht angezeigt und es wird direkt die Methode \texttt{background\_backup} der Klasse +\texttt{MainWindow} ausgeführt. Dabei werden alle Ordner, welche in den Einstellungen +unter "`Include"' sowie "`Exclude"' gespeichert wurden, im Archiv gesichert, +respektive davon ausgeschlossen. Damit sind die Voraussetzungen für +automatische Backups gegeben. + +Um die Backups in regelmässigen Intervallen auszuführen, gibt es zwei +Möglichkeiten, wie man dies implementieren könnte. Zum einen könnte man die +Applikation permanent im Hintergrund laufen lassen, etwa als Trayicon wie man +das von anderen Applikationen wie etwas Dropbox kennt zum anderen kann man es +über Werkzeuge des Betriebssystems bewerkstelligen. Die drei +Desktop Betriebsysteme, Windows, OS X und Linux, bringen alle drei Werkzeuge +mit, um periodisch ein Programm auszuführen. Unter Linux wurde dies früher mit +sogenannten Cron Jobs gemacht. Die moderne Lösung sind heutzutage jedoch +Systemd Timer. Für Borg-Qt wurde beschlossen es mit den Werkzeugen des +Betriebssystems zu machen. Also konkret Systemd. Dies aus dem Grund das Systemd +genau für das Managen von Applikationen programmiert wurde. Ein Grossteil der +Funktion ist bereits in Systemd enthalten, somit kann man Zeit sparen. Zudem +soll die Anwendung dem Benutzer auch soweit als möglich aus dem Weg gehen. Eine +Applikation, welche permanent in der Taskleiste lebt scheint hier nicht wirklich +das Kriterium zu erfüllen. + +Systemd ist ein init System, welches dazu dient dazu die Benutzerumgebung und +die dazugehörigen Prozesse zu starten und zu verwalten \footcite{systemd}. Die +Prozesse werden über sogenannte "`Services"' gestartet. Die Services werden dabei +einfach in Klartextdateien mit der Dateiendung \texttt{.service} definiert. Der Inhalt +orientiert sich dabei praktischerweise am "`INI"' Stil. In Borg-Qt wurde das INI +Format bereits bei den Konfigurationsdateien verwendet. Somit können dort +gesammelte Erfahrungen wiederverwendet werden. Soll ein Service in einem +gewissen Zeitintervall ausgeführt werden benötigt Systemd eine weitere Datei mit +dem gleichen Namen jedoch mit der Dateiendung \texttt{.timer} . Der Inhalt ist auch +wieder im INI Stil gehalten. Systemd versteht eine Vielzahl an Datumsformaten +\footcite{systemddate}. In Borg-Qt wurden zwei Varianten in den Einstellungen +umgesetzt. Eine, welche "`Predefined Schedule"' genannt wurde und eine mit dem +Namen "`Custom Schedule"', zu sehen in, Abbildung:(\ref{fig:org4597de1}). Die Predefined +Option wird dabei in die von Systemd unterstützten Formate "`hourly"', "`daily"', +"`weekly"' und "`monthly"' übersetzt. Wie der Name schon sagt, wird dann stündlich, +täglich, wöchentlich oder monatlich ein Archiv erstellt. Mit der Custom Option +kann der Benutzer sich den Zeitplan individueller gestalten. Etwa "`jeden +Mittwoch um 12:00 Uhr"' für Systemd übersetzt würde dieser Zeitplan dann so +aussehen: \texttt{Wednesday *-*-* 12:00:00}. Für spätere Versionen von Borg-Qt wäre es +allenfalls auch möglich die Auswahl von mehreren Wochentagen zu ermöglichen +damit der Benutzer etwa folgenden Zeitplan erstellen könnte "`Montag, Mittwoch, +Freitag stündliche Backups."' (\texttt{Monday, Wednesday, Friday *-*-* *:00:00}). + +\begin{figure}[H] +\centering +\includegraphics[width=.9\linewidth]{pictures/borgqt_settings_schedule.png} +\caption{\label{fig:org4597de1} +Screenshot der "`Schedule"' Einstellungen} +\end{figure} + +Das Erstellen der eigentlichen Systemd Konfiguration passiert in Borg-Qt in der +\texttt{Config} Klasse zum gleichen Zeitpunkt, wie die eigentliche Konfigurationsdatei +geschrieben wird. Zum Schreiben und he-/aktivieren des Systemd Services, +respektive Timers wurde eine Klasse \texttt{SystemdFile} erstellt. Somit könnte +die Funktion auch einfach in einem anderen Projekt verwendet werden. + +Systemd benötigt zum Starten der Anwendung den absoluten Pfad in der Service +Datei. Da davon ausgegangen werden kann das Borg-Qt im \texttt{PATH} des Systems +abgelegt wird, wurde das Unix Tool "`which"' verwendet um den exakten Speicherort +zu erhalten. Mittels des Befehls \texttt{which borg-qt} erhält man den absoluten +Speicherort der Datei. Zusammen mit den Daten aus den Einstellungen wird diese +Information in einem \texttt{Configparser} Objekt gespeichert, welches dann mithilfe +der \texttt{SystemdFile} Klasse in eine \texttt{borg\_qt.service}, +Codesnippet:(\ref{org15aed53}), respektive \texttt{borg\_qt.timer}, +Codesnippet:(\ref{orgcc10efb}), Datei, im Systemd Pfad +\texttt{/home/username/.config/systemd/user/} geschrieben und aktiviert wird. + +Eine Option in der Datei \texttt{borg\_qt.timer} die noch erwähnenswert ist, ist +\texttt{Persistent = true}. Ist \texttt{Persistent} auf \texttt{true} gesetzt, holt Systemd den +Tasks nach sollte er eine Ausführung verpasst haben. Dies ist insbesondere dann +hilfreich, wenn etwa der Zeitplan auf \texttt{daily} oder \texttt{weekly} gesetzt wurde. +Sollte also etwa jeden Mittwoch ein Backup gemacht werden aber der Computer +lief an diesem Tag nicht, startet Systemd Borg-Qt, sobald der Computer das +nächste Mal eingeschaltet wird kommt. + +Mit dem Abschluss des automatischen Backups wurde die für die Entwicklung +reservierte Zeit aufgebraucht und die Entwicklung neuer Funktionen für den +Zeitrahmen der Diplomarbeit gestoppt. + +\lstset{language=bash,label=org15aed53,caption={Systemd Service Datei für Borg-Qt},captionpos=b,numbers=none} +\begin{sexylisting}{Systemd Service Datei für Borg-Qt} +#~/.config/systemd/user/borg_qt.service +[Unit] +Description = Runs Borg-Qt once in the backround to take a backup according to the configuration. + +[Service] +Type = oneshot +ExecStart = /home/andreas/bin/borg_qt -B +\end{sexylisting} + +\lstset{language=bash,label=orgcc10efb,caption={Systemd Timer Datei für Borg-Qt},captionpos=b,numbers=none} +\begin{sexylisting}{Systemd Timer Datei für Borg-Qt} +#~/.config/systemd/user/borg_qt.timer +[Unit] +Description = Starts the borg_qt.service according to the configured schedule. + +[Timer] +OnCalendar = hourly +Persistent = true + +[Install] +WantedBy = timers.target +\end{sexylisting} + +\subsection{\gls{gui} Anpassungen nach Benutzerfreundlichkeitsstudie} +\label{sec:orgd36c09f} + +Im Rahmen der durchgeführten \hyperref[sec:orgbeaa226]{Benutzerfreundlichkeitsstudie} wurden einige Punkte +festgestellt, welche im Rahmen der Diplomarbeit angepasst werden konnten. Zum +einen wurden in den "`Include"' sowie "`Exclude"' Optionen einige Buttons neu +beschriftet und zwei Labels hinzugefügt, um klarer auf ihre Funktion +hinzuweisen. Zu sehen ist dies in den +Abbildungen:(\ref{fig:orgf92bace}) und +(\ref{fig:orgd3a5abe}). + +\begin{figure}[H] +\centering +\includegraphics[width=.9\linewidth]{pictures/borgqt_settings_include_v2.png} +\caption{\label{fig:orgf92bace} +Screenshot der Borg-Qt "`Include"' Einstellungen Version 2} +\end{figure} + +\begin{figure}[H] +\centering +\includegraphics[width=.9\linewidth]{pictures/borgqt_settings_exclude_v2.png} +\caption{\label{fig:orgd3a5abe} +Screenshot der Borg-Qt "`Exclude"' Einstellungen Version 2} +\end{figure} + +Zudem wurde ein Hilfe Fenster, Abbildung:(\ref{fig:orgc99d9b5}), eingebaut, welches +dem Benutzer beim Start der Applikation angezeigt wird. Dieses soll ihm einen +kurzen Überblick darüber geben, welcher Button welche Aktion auslöst und welche +Elemente, welche Information anzeigen. Optional kann der Benutzer noch +entscheiden, dass er das Fenster beim nächsten Start nicht mehr angezeigt +bekommen möchte. Über den Button "`Help"' kann das Fenster jederzeit unabhängig +der Einstellungen wieder angezeigt werden. + +\begin{figure}[H] +\centering +\includegraphics[width=.9\linewidth]{pictures/borgqt_help.png} +\caption{\label{fig:orgc99d9b5} +Screenshot des Borg-Qt Hilfe Fenster} +\end{figure} \subsection{Releases} -\label{sec:org8ba8c5e} +\label{sec:orgf056008} + +Für die finale Veröffentlichung wird Borg-Qt als ein sogenanntes ausführbares +"`Binary"' zur Verfügung gestellt. Man kennt diese auf Windows Systemen etwa als +die Dateien mit der Endung \texttt{.exe}. In diesem Fall handelt es sich beim Binary +um ein selbst entpackendes Dateiarchiv. Darin enthalten sind alle benötigten +Python Module und sonstige Dateien wie etwa die Icons oder \gls{gui} +Definitionsdateien. Beim Ausführen entpackt sich das Archiv in einen temporären +Ordner und liest dann von dort aus alle benötigten Dateien. + +Diese Art der Auslieferung hat dabei den Vorteil, das der User das Programm +nicht speziell installieren muss oder dafür irgendwelche zusätzlichen Dinge +installieren muss. Der Nachteil ist jedoch das so ein Binary nur auf dem +jeweiligen Betriebssystem erstellt und ausgeführt werden kann. Das heisst das +man unter Linux etwa keine Binaries für Mac erstellen kann oder umgekehrt. + +Erstellt werden die Dateien mit einem Programm namens +"`PyInstaller"'\footcite{pyinstaller}. Man führt das Programm dabei auf der +Kommandozeile gegen die Hauptdatei des Codes aus. Der Befehl dafür ist relativ +einfach, Codesnippet:(\ref{org688526f}). Wichtig dabei ist das man die Pfade +der zusätzlichen Dateien wie etwa Icons mit angibt da PyInstaller diese nicht +selber finden kann. Der gezeigte Code wurde dabei in ein Makefile +implementiert. Somit kann man in der obersten Ebene des Repository einfach den +Befehl \texttt{make} ausführen und das Binary wird im Ordner \texttt{dist} erstellt. + +\lstset{language=bash,label=org688526f,caption={Code zum Erstellen der finalen Binaries von Borg-Qt},captionpos=b,numbers=none} +\begin{sexylisting}{Code zum Erstellen der finalen Binaries von Borg-Qt} +pyinstaller --hidden-import=PyQt5.sip \ + --add-data=borg_qt/static/icons:static/icons \ + --add-data=borg_qt/static/UI:static/UI \ + -F borg_qt/borg_qt.py; \ +\end{sexylisting} + +Auf Github wird jeweils ein Release erstellt und dazu die passenden Binaries +hochgeladen. Github packt dabei den Source Code beim Erstellen des Releases in +ein Zip Archiv. Somit kann eine interessierte Person sich zum Binary auch +direkt den Source Code herunterladen. \section{Ausblick} -\label{sec:org86bdafa} -\subsection{Projektmanagement} -\label{sec:orgfeb0d16} +\label{sec:orge04eb5c} +\subsection{Erreichte Ziele} +\label{sec:org4cab61e} -PLACEHOLDER +\begin{center} +\begin{tabular}{lll} +Ziel Nr. & Erfüllt & Bemerkung\\ +\hline + & & \\ +\end{tabular} + +\end{center} + + +\subsubsection{Risikoanalyse der neuen Ist-Situation} +\label{sec:org17afb77} + +Das Risiko konnte massgeblich gesenkt. Mit den automatischen Backups gibt es nun +auch eine Möglichkeit das Vergessen zu minimieren. + +\begin{figure}[htbp] +\centering +\includegraphics[width=.9\linewidth]{pictures/ist_risiko_neu.pdf} +\caption{\label{fig:org9de82f4} +Risikoanalyse der neuen Ist-Situation} +\end{figure} + +\subsection{Projektmanagement} +\label{sec:orge9ec95b} + +Gantt Chart sehr hilfreich beim behalten des Überblickes für das Projekt. Gibt +einem einen durchgehenden roten Faden. + +Die konservativen Zeitschätzungen haben sich als korrekte Entscheidung +erwiesen. In Zukunft kann noch stärker versucht werden die Zeit welche für +ähnliche Code Teile verwendet wird kürzer zu schätzen. Copy/Paste erlaubt unter +Umständen enorme Zeitersparnise. + +Die regelmässigen Arbeitsessions haben sich als eine gute Variante des Arbeiten +erwiesen und haben die Last der Diplomarbeit gut verteilt. + +\subsection{Benutzerfreundlichkeitsstudie} +\label{sec:orgaf652d4} + +Die Studie war eine sehr interessante Erfahrung. Enduser sehen eine +Anwendung mit ganz anderen Augen als der Entwickler der Anwendung der von jedem +Element weiss wie der Code dazu aussieht. Er hat auch gezeigt das die Aufgaben +auch richtig gestellt werden müssen ansonsten wissen die Probanden schon gar +nicht erst was gefordert ist. Auch sollte wenn möglich darauf geachtet werden +das auf einem Betriebsystem getestet mit welchem die Probanden bereits etwas +Erfahrung haben. Zwei der Probanden waren ab dem Verhalten und Aussehen des +Dateimanagers von Ubuntu 18.04 etwas verwirrt da sie ihn zuvor noch nicht +gesehen und bentuzt hatten. Alternativ kann auch die Gruppe der Probanden so +gewählt werden das sie mit dem Betriebssystem bereits vertraut sind. +Auf jeden Fall etwas was man bei zukünftigen Projekten wieder machten sollte. \subsection{Umsetzung} -\label{sec:org207420a} +\label{sec:org6c2669d} -PLACEHOLDER +Aus zeitlichen Gründen konnte die Funktion zur Erkennung eines laufenden +Hypervisors nicht während der Diplomarbeit entwickelt werden. Dies ist ein +recht komplexes Features und braucht genügend Zeit damit es richtig umgesetzt +wird. + +Unittests sind der Shit brauchen allerdings Zeit und eine gewisse Erfahrung mit +der Sprache. Qt ist eine hilfreiches Framework wenn auch sehr umfangreich. Wenn +man gewillt ist sich mit dem C++ Code auseinanderzusetzen ist die Dokumentation +jedoch sehr detailiert. + +\subsection{Weiterverwendung von Borg-Qt} +\label{sec:org31bcde8} + +Wird bereits produktiv vom Projektleiter eingesetzt. \subsection{Gelerntes} -\label{sec:org4c37065} +\label{sec:orgf621d2e} PLACEHOLDER \newpage \begin{landscape} -\section{Arbeitsjournal} -\label{sec:org7205e48} + +\section{Anhang} +\label{sec:orgac7c4ec} + +\subsection{Testfälle} +\label{sec:orgba12376} +{\footnotesize +\begin{longtable}{|>{\columncolor[HTML]{EFEFEF}}l|p{2cm}|p{2cm}|p{3.5cm}|p{2cm}|p{3cm}|p{3.5cm}|p{2.5cm}|} +\hline +\textbf{ID}\cellcolor[HTML]{C0C0C0} & \textbf{Objective}\cellcolor[HTML]{C0C0C0} & \textbf{Precondition}\cellcolor[HTML]{C0C0C0} & \textbf{Steps}\cellcolor[HTML]{C0C0C0} & \textbf{Testdata}\cellcolor[HTML]{C0C0C0} & \textbf{Expected Result}\cellcolor[HTML]{C0C0C0} & \textbf{Postcondition}\cellcolor[HTML]{C0C0C0} & \textbf{Result}\cellcolor[HTML]{C0C0C0}\\ +\hline +\endfirsthead +\multicolumn{8}{l}{Fortsetzung von vorheriger Seite} \\ +\hline + +\textbf{ID}\cellcolor[HTML]{C0C0C0} & \textbf{Objective}\cellcolor[HTML]{C0C0C0} & \textbf{Precondition}\cellcolor[HTML]{C0C0C0} & \textbf{Steps}\cellcolor[HTML]{C0C0C0} & \textbf{Testdata}\cellcolor[HTML]{C0C0C0} & \textbf{Expected Result}\cellcolor[HTML]{C0C0C0} & \textbf{Postcondition}\cellcolor[HTML]{C0C0C0} & \textbf{Result}\cellcolor[HTML]{C0C0C0} \\ + +\hline +\endhead +\hline\multicolumn{8}{r}{Fortsetzung nächste Seite} \\ +\endfoot +\endlastfoot +\hline +\textbf{TC-01} & Anwendung starten & Lokales Repository initialisiert.\newline Lokale Konfigurationsdatei erstellt. & 1. Anwendung starten. & - & Die Anwendung startet ohne Fehlermeldung und zeigt eine leere Backup Liste an. & Die Anwendung wird angezeigt. & Erfolgreich durchgeführt 25.02.2019 A.Z.\\ +\hline +\textbf{TC-02} & Anwendung starten & Lokale Konfigurationsdatei erstellt. & 1. Anwendung starten. & - & Die Anwendung wirft eine Fehlermeldung das sie das lokale Repository nicht finden kann. & Die geöffnete Fehlermeldung blockiert die Applikation. & Erfolgreich durchgeführt 25.02.2019 A.Z.\\ +\hline +\textbf{TC-03} & Anwendung starten & - & 1. Anwendung starten. & - & Die wirft eine Fehlermeldung das sie die Konfigurationsdatei nicht finden kann. & Die geöffnete Fehlermeldung blockiert die Applikation. & Erfolgreich durchgeführt 25.02.2019 A.Z.\\ +\hline +\textbf{TC-04} & Lokales Backup erstellen & TC-01 ausgeführt. & 1. In der Ordnerübersicht das Code Repository auswählen.\newline 2. Den Button “Backup” betätigen. & Testdateien & Die Anwendung zeigt einen Fortschrittsbalken der nach erfolgreichem Backupen verschwindet. & Die Archiv Liste wird aktualisiert und zeigt ein Archiv an. & Erfolgreich durchgeführt 25.02.2019 A.Z.\\ +\hline +\textbf{TC-05} & Lokales Backup erstellen & TC-01 ausgeführt.\newline \gls{borg} erstellt bereits ein Archiv. & 1. In der Ordnerübersicht das Code Repository auswählen.\newline 2. Den Button “Backup” betätigen. & Testdateien & Die Anwendung wirft eine Fehlermeldung das \gls{borg} bereits ausgeführt wird. & Die geöffnete Fehlermeldung blockiert die Applikation. & Erfolgreich durchgeführt 25.02.2019 A.Z.\\ +\hline +\textbf{TC-06} & Lokales Backup erstellen & TC-01 ausgeführt. & 1. Das Lokale Repository an einen beliebigen Ort verschieben.\newline 2. In der Ordnerübersicht das Code Repository auswählen.\newline 3. Den Button “Backup” betätigen. & Testdateien & Die Anwendung wirft eine Fehlermeldung das sie das lokale Repository nicht finden kann. & Die geöffnete Fehlermeldung blockiert die Applikation. & Erfolgreich durchgeführt 25.02.2019 A.Z.\\ +\hline +\textbf{TC-07} & In lokales Repository sichern & TC-01 ausgeführt. & 1. Den Button “Backup” betätigen. & - & Die Anwendung wirft eine Fehlermeldung das der User einen Pfad angeben soll. & Die geöffnete Fehlermeldung blockiert die Applikation. & Erfolgreich durchgeführt 25.02.2019 A.Z.\\ +\hline +\textbf{TC-08} & Lokales Archiv löschen & TC-04 ausgeführt. & 1. In der Backup Liste das Backup auswählen.\newline 2. Den Button “Delete” betätigen. & - & Die Anwendung zeigt einen Fortschrittsbalken der nach erfolgtem Löschen verschwindet. & Die Archiv Liste wird aktualisiert und ist nun leer. & Erfolgreich durchgeführt 25.02.2019 A.Z.\\ +\hline +\textbf{TC-09} & Lokales Archiv löschen & TC-04 ausgeführt. & 1. Das Lokale Repository an einen beliebigen Ort verschieben.\newline 2. In der Archiv Liste das Archiv auswählen.\newline 3. Den Button “Delete” betätigen. & - & Die Anwendung wirft eine Fehlermeldung das sie das lokale Repository nicht finden kann. & Die geöffnete Fehlermeldung blockiert die Applikation. & Erfolgreich durchgeführt 25.02.2019 A.Z.\\ +\hline +\textbf{TC-10} & Lokales Archiv löschen & TC-04 ausgeführt. & 1. Den Button “Delete” betätigen. & - & Die Anwendung wirft eine Fehlermeldung das der User ein Archiv auswählen soll. & Die geöffnete Fehlermeldung blockiert die Applikation. & Erfolgreich durchgeführt 25.02.2019 A.Z.\\ +\hline +\textbf{TC-11} & Lokales Archiv wiederherstellen & TC-04 ausgeführt. & 1. In der Archiv Liste das Archiv auswählen.\newline 2. Den Button “Restore” betätigen.\newline 3. Im geöffneten Dateidialog den Pfad "`/home/andreas/Downloads"' auswählen.\newline 4. Den Button “Open” anklicken. & - & Nach erfolgtem Wiederherstellen öffnet ein Dateiexplorer den Ziel Pfad. & Die Anwendung und ein Dateiexplorer wird angezeigt. & Erfolgreich durchgeführt 25.02.2019 A.Z.\\ +\hline +\textbf{TC-12} & Lokales Archiv wiederherstellen & TC-01 ausgeführt. & 1. Den Button “Backup” betätigen. & - & Die Anwendung wirft eine Fehlermeldung das der User ein Archiv auswählen soll. & Die geöffnete Fehlermeldung blockiert die Applikation. & Erfolgreich durchgeführt 25.02.2019 A.Z.\\ +\hline +\textbf{TC-13} & Lokales Archiv wiederherstellen & TC-01 ausgeführt. & 1. Das Lokale Repository an einen beliebigen Ort verschieben.\newline 2. In der Archiv Liste das Archiv auswählen.\newline 3. Den Button “Restore” betätigen. & - & Die Anwendung wirft eine Fehlermeldung das sie das lokale Repository nicht finden kann. & Die geöffnete Fehlermeldung blockiert die Applikation. & Erfolgreich durchgeführt 25.02.2019 A.Z.\\ +\hline +\textbf{TC-14} & Lokales Archiv wiederherstellen & TC-01 ausgeführt. & 1. In der Archiv Liste das Archiv auswählen.\newline 2. Den Button “Restore” betätigen.\newline 3. Im geöffneten Dateidialog den Pfad "`/home/andreas/Downloads"' auswählen.\newline 4. Den Button “Cancel” anklicken. & - & Der Datei Dialog schliesst sich wieder. & Die Anwendung wird angezeigt. & Erfolgreich durchgeführt 25.02.2019 A.Z.\\ +\hline +\textbf{TC-15} & Home Directory sichern und wiederherstellen & TC-01 ausgeführt. & 1. Vom Pfad "`\emph{home/andreas}"' ein Archiv erstellen.\newline 2. In der Archiv Liste das gemachte Archiv auswählen.\newline 3. Den Button “Restore” betätigen.\newline 4. Im geöffneten Dateidialog den Pfad "`/home/andreas/Downloads"' auswählen.\newline 5. Den Button “Open” anklicken. & "`\emph{home/andreas}"' & Nach erfolgtem Wiederherstellen öffnet ein Dateiexplorer den Ziel Pfad.\newline Darin fehlen jedoch temporäre Pfade wie “\textasciitilde{}/.cache” etc. & Die Anwendung und ein Dateiexplorer wird angezeigt. & Erfolgreich durchgeführt 25.02.2019 A.Z.\\ +\hline +\textbf{TC-16} & Einzelne Datei wiederherstellen & TC-04 ausgeführt. & 1. In der Backup Liste das Backup auswählen.\newline 2. Den Button “Mount” betätigen.\newline 3. Aus dem sich öffnenden Dateiexplorer die Datei README.org nach "`/home/andreas/Downloads"' kopieren. & - & Die wiederhergestellte Datei ist identisch mit der in TC-04 gesicherten. & Die Anwendung und ein Dateiexplorer wird angezeigt. & Erfolgreich durchgeführt 25.02.2019 A.Z.\\ +\hline +\textbf{TC-17} & Einzelne Datei wiederherstellen & TC-01 ausgeführt. & 1. Das Lokale Repository an einen beliebigen Ort verschieben.\newline 2. In der Archiv Liste das Archiv auswählen.\newline 3. Den Button “Mount” betätigen. & - & Die Anwendung wirft eine Fehlermeldung das sie das lokale Repository nicht finden kann. & Die geöffnete Fehlermeldung blockiert die Applikation. & Erfolgreich durchgeführt 25.02.2019 A.Z.\\ +\hline +\textbf{TC-18} & Pfad des lokalen Backup Repository anpassen & TC-04 ausgeführt.\newline Backup Repository nach "`/tmp/test-borgqt2"' verschoben & 1. Den Button "`Settings"' betätigen.\newline 2. Den Repository Pfad auf "`\emph{tmp/test-borgqt2}"' ändern.\newline 3. Den Button "`Apply"' betätigen. & - & Die Archiv Liste wird aktualisiert und zeigt wieder das Archiv von TC-04 an. & Die Anwendung wird angezeigt. Die Konfigurationsdatei zeigt auf den neuen Pfad. & Nicht implementiert\\ +\hline +\textbf{TC-19} & Archiv Name ändern & TC-01 ausgeführt. & 1. Den Button "`Settings"' betätigen.\newline 2. Bei der Option "`Archive Prefix"' "`Muster"' eintragen.\newline 3. Den Button "`Apply"' betätigen.\newline 4. TC-04 durchführen. & Archiv Name: Muster & Die Anwendung zeigt einen Fortschrittsbalken der nach erfolgtem Backup verschwindet. & Die Archiv Liste wird aktualisiert und zeigt ein Archiv mit dem Präfix "`Muster"' an. Die Konfigurationsdatei beinhaltet die Option des Präfixes. & Erfolgreich durchgeführt 25.02.2019 A.Z.\\ +\hline +\textbf{TC-20} & Keine Einstellungen ändern & TC-01 ausgeführt. & 1. Den Button "`Settings"' betätigen.\newline 2. Eine beliebige Option ändern.\newline 3. Den Button "`Cancel"' betätigen. & - & Der Einstellungsdialog schliesst sich. & Die Anwendung wird angezeigt. Die Konfigurationsdatei ist noch im selben Zustand wie bei TC-01. & Erfolgreich durchgeführt 25.02.2019 A.Z.\\ +\hline +\textbf{TC-21} & Automatische Backups konfigurieren & TC-01 ausgeführt. & 1. Den Button "`Settings"' betätigen.\newline 2. Bei der Option "`Includes"' die Testdateien angeben sowie unter Schedule "`Custom"' auswählen und bei "`Time"' die nächste Stunde angeben.\newline 3. Den Button Apply betätigen. & Backup-zeit: 2 Minuten nach aktueller Zeit Testdateien & Der Datei Dialog schliesst sich wieder. & Die Anwendung wird angezeigt. Die Konfigurationsdatei wurde um die Option des automatischen Backups erweitert. Die Anwendung hat einen "`Service"' auf dem System erstellt. & Erfolgreich durchgeführt 25.02.2019 A.Z.\\ +\hline +\textbf{TC-22} & Automatische Backups durchführen & TC-16 ausgeführt. & 1. TC-21 durchführen.\newline 2. Auf Ablauf der Zeit warten.\newline 3. Die Anwendung öffnen. & - & In der Archiv Liste wird ein Archiv angezeigt. & Die Anwendung wird angezeigt. & Erfolgreich durchgeführt 25.02.2019 A.Z.\\ +\hline +\textbf{TC-23} & Server Archiv erstellen & Server Repository bereit.\newline Server Konfigurationsdatei erstellt. & TC-04 durchführen. & Testdateien & Die Anwendung zeigt einen Fortschrittsbalken der nach erfolgtem Backup verschwindet. & Die Archiv Liste wird aktualisiert und zeigt ein Archiv an. & Erfolgreich durchgeführt 25.02.2019 A.Z.\\ +\hline +\textbf{TC-24} & Lokales Archiv erstellen während dem eine VM läuft & TC-01 ausgeführt.\newline Virtualbox VM Starten. & 1. In der Ordnerübersicht das Code Repository auswählen.\newline 2. Den Button “Backup” betätigen. & Testdateien & Die Anwendung wirft eine Fehlermeldung aus das es zur Zeit aufgrund einer laufenden VM unsicher sei ein Backup durchzuführen. & Die geöffnete Fehlermeldung blockiert die Applikation. & Nicht implementiert\\ +\hline +\textbf{TC-25} & Abgebrochenes Backup bereinigen & TC-01 ausgeführt. & 1. In der Ordnerübersicht das Code Repository auswählen.\newline 2. Den Button “Backup” betätigen.\newline 3. Die Anwendung schliessen.\newline 4. Anwendung wieder öffnen.\newline 5. TC-04 Durchführen. & Testdateien & Bei Schritt 4. sollte ein Teilarchiv zu sehen sein.\newline Bei Schritt 5 sollte einfach ein normales Archiv zu sehen sein. & Die Anwendung wird angezeigt. & Erfolgreich durchgeführt 25.02.2019 A.Z.\\ +\hline +\caption{\label{tab:orgd13fe87} +Testfälle} +\\ +\end{longtable} +} +\end{landscape} + +\newpage +\begin{landscape} +\subsection{Klassendiagramm} +\label{sec:org213e886} +\begin{figure}[H] +\centering +\includegraphics[height=.7\textwidth]{pictures/class_diagramm.pdf} +\caption{\label{fig:org4ac1491} +Klassendiagramm der Borg-Qt Applikation} +\end{figure} +\end{landscape} + +\newpage +\begin{landscape} +\subsection{Arbeitsjournal} +\label{sec:orga5f85b1} \begin{longtable}{|p{2cm}|p{5cm}|p{5cm}|p{7cm}|} \hline -\textbf{Datum}\cellcolor[HTML]{C0C0C0} & \textbf{Geplante Arbeiten}\cellcolor[HTML]{C0C0C0} & \textbf{Erreichte Arbeiten}\cellcolor[HTML]{C0C0C0} & \textbf{Eindruck}\cellcolor[HTML]{C0C0C0}\\ +\textbf{Von/Bis}\cellcolor[HTML]{C0C0C0} & \textbf{Geplante Arbeiten}\cellcolor[HTML]{C0C0C0} & \textbf{Erreichte Arbeiten}\cellcolor[HTML]{C0C0C0} & \textbf{Eindruck}\cellcolor[HTML]{C0C0C0}\\ \hline \endfirsthead \multicolumn{4}{l}{Fortsetzung von vorheriger Seite} \\ \hline -\textbf{Datum}\cellcolor[HTML]{C0C0C0} & \textbf{Geplante Arbeiten}\cellcolor[HTML]{C0C0C0} & \textbf{Erreichte Arbeiten}\cellcolor[HTML]{C0C0C0} & \textbf{Eindruck}\cellcolor[HTML]{C0C0C0} \\ +\textbf{Von/Bis}\cellcolor[HTML]{C0C0C0} & \textbf{Geplante Arbeiten}\cellcolor[HTML]{C0C0C0} & \textbf{Erreichte Arbeiten}\cellcolor[HTML]{C0C0C0} & \textbf{Eindruck}\cellcolor[HTML]{C0C0C0} \\ \hline \endhead @@ -2092,17 +2923,31 @@ PLACEHOLDER \endfoot \endlastfoot \hline -16.12.2018 & Zeitplan erarbeiten, Ziele dokumentieren & keine Abweichung & -\\ +10.-16.12.2018 & Zeitplan erarbeiten, Ziele dokumentieren & keine Abweichung & -\\ \hline -23.12.2018 & Lösungsvarianten erfassen, Lösungsvarianten bewerten, Lösungsvariante bestimmen, SWOT Analyse erstellen, 1. Meeting & keine Abweichung & Marco Frei hat noch diverse Punkte eingebracht die, die Planung ziemlich durcheinander bringen. Bedeute viel zusätzliche Arbeit.\\ +17.-23.12.2018 & Lösungsvarianten erfassen, Lösungsvarianten bewerten, Lösungsvariante bestimmen, SWOT Analyse erstellen, 1. Meeting & keine Abweichung & Marco Frei hat noch diverse Punkte eingebracht die, die Planung ziemlich durcheinander bringen. Bedeute viel zusätzliche Arbeit.\\ \hline -30.12.2018 & Controlling erarbeiten, Ist- und Soll-Analyse, SWOT Analyse, Umweltanalyse, Massnahmen Katalog erarbeiten, User Stories erarbeiten, Use Case Diagramm erstellen, Use Cases ausarbeiten, Anforderungskatalog erstellen, UML Diagramme & keine Abweichung & UML Diagramme für eine Software zu erstellen die nicht existiert ist noch eine interessante Herausforderung.\\ +24.-30.12.2018 & Controlling erarbeiten, Ist- und Soll-Analyse, SWOT Analyse, Umweltanalyse, Massnahmen Katalog erarbeiten, User Stories erarbeiten, Use Case Diagramm erstellen, Use Cases ausarbeiten, Anforderungskatalog erstellen, UML Diagramme & keine Abweichung & UML Diagramme für eine Software zu erstellen die nicht existiert ist noch eine interessante Herausforderung.\\ \hline -06.01.2019 & Lösungsvarianten erarbeiten und entscheiden, Test Konzept beschreiben und Testfälle erstellen, Github Repository erstellen & Testfälle liessen sich noch nicht für alle Ziele erstellen. Gewisse Features hängen noch sehr davon ab wie die Basis der Applikation sich entwickelt. & Insgesamt gut gelaufen. Das Repository auf Github konnte ich unter einer eigenen Organisation erstellen dadurch wird das Zusammenarbeiten in der Zukunf einfacher.\\ +31.12-06.01.2019 & Lösungsvarianten erarbeiten und entscheiden, Test Konzept beschreiben und Testfälle erstellen, Github Repository erstellen & Testfälle liessen sich noch nicht für alle Ziele erstellen. Gewisse Features hängen noch sehr davon ab wie die Basis der Applikation sich entwickelt. & Insgesamt gut gelaufen. Das Repository auf Github konnte ich unter einer eigenen Organisation erstellen dadurch wird das Zusammenarbeiten in der Zukunf einfacher.\\ \hline -13.01.2019 & UI ausarbeiten, UI Test ausarbeiten, Backend "`Read Config"' Funktion schreiben, Frontend "`Read Config"' Funktion beginnen & & Das Erstellen der Benutzerfreundlichkeitsstudie ging schneller als erwartet.\\ +07.-13.01.2019 & UI ausarbeiten, UI Test ausarbeiten & keine Abweichung & Das das Projekt gut im Zeitplan ist soweit ein positiver Ausblick.\\ \hline -\caption{\label{tab:orgf1596d1} +14.-20.01.2019 & Backend "`Read Config"' Funktion schreiben, Frontend "`Read Config"' Funktion beginnen & "`Frontend Read Config"', "`Backend Write Config"', "`Frontend Write Config"', Funktion bereits abgeschlossen. & Soweit sehr gut im Zeitplan. Die Arbeitssessions mit den Kollegen helfen. Seltsam das Qt keine Methode list.items() kennt.\\ +\hline +21.-27.01.2019 & "`Backend Backup"' Funktion, "`Frontend Backup"' Funktion beginnen, Automatische Backups recherchieren & keine Abweichung & Erkältung drückt etwas auf die Performance. Unittest sind nocht nicht perfekt aber sind eine grosse Hilfe.\\ +\hline +28.-03.02.2019 & "`Frontend Backup"' Funktion fertigstellen, "`Backend und Frontend Restore"' Funktion & Geplantes erreicht sowie "`Mounting"' und "`Delete"' Funktion sowohl im Backend wie auch im Frontend bereits umgesetzt. & Da die Funktionen immer von \gls{borg} ausgeführt werden konnte sehr viel Code von den "`Backup"' und "`Restore"' Funktionen übernommen werden was die Entwicklung sehr beschleunigt hat.\\ +\hline +04.02.-10.02.2019 & Meeting Pendenzen nochmal durchgehen. Die Interface Funktionen bereinigen. Automatische Backups implementieren. & Meeting Pendenzen wurden aufgenommen und das Interface wurde bereinigt. Automatische Backups konnten noch nicht fertig gestellt werden. & Automatische Backups sind noch relativ komplex und benötigen Kenntnisse der Systemd Timer.\\ +\hline +11.02.-17.02.2019 & UI Tests mit den Usern durchführen, Resultate auswerten, Feedback in Applikation einarbeiten & keine Abweichung & Es ist sehr spannend zu sehen wie Benutzer mit der Anwendung interagieren und welche Featues sie vermissen.\\ +\hline +18.02.-24.02.2019 & Automatische Backups implementieren, 1. Release veröffentlichen, Readme updaten & keine Abweichung & Das Projekt ist soweit sehr gut im Zeitplan. Die Systemd Timer sind können mit vielen verschiedenen Zeitformaten umgehen und sind sehr flexibel.\\ +\hline +25.02.-03.03.2019 & Testfälle durchgehen, Dokumentation zur Realisierung abschliessen & & \\ +\hline +\caption{\label{tab:orgb33e26b} Arbeitsjournal} \\ \end{longtable}