This repository has been archived on 2020-04-03. You can view files and clone it, but cannot push or open issues or pull requests.
thesis/projekthandbuch/projekthandbuch.org

23 KiB

Projekthandbuch

Über dieses Dokument

Im nachfolgenden Abschnitt finden Sie allgemeine Informationen zu diesem Dokument.

Beschreibung

Diese Arbeit hat zum Ziel die Planung und Erstellung einer grafischen Oberfläche zum einfachen Bedienen der Software gls:bb footcite:borgbackup sowie deren Konfiguration, durchzuführen.

Zweck und Inhalt

Zweck dieses Dokumentes ist die vollständige und nachvollziehbare Dokumentation zur Diplomarbeit von Andreas Zweili.

Aufbau

Alle Inhalte sind chronologisch sortiert, vom ältesten zum jüngsten Ereignis, und nach Kapiteln getrennt.

Lizenz

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. Dadurch darf die Arbeit unter beibehalten der Lizenz kopiert und weiterverarbeitet werden. Zusätzlich muss der Urheber gennant werden.

TODO Projektanalyse und Planung

Vision

Die Software soll gls:bb für den durschnittlichen Computer User zugänglich machen. Die Backups sollen dabei schnell und unkompliziert erstellt werden können. 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.

Ausgangslage

gls:bb ist deshalb interessant weil es wärend einem Backup relativ wenig Ressource im Vergleich zu anderen Systemen benötigt und schon relativ lange aktiv entwickelt wird. Dadurch ist es im Altag geprüft worden. Desweiteren bietet gls:bb die Funktion für Verschlüsselung was es einem User ermöglicht die Daten auf einem unsicheren Cloud Speicher abzulegen.

Desweiteren speichert gls:bb die Daten mit blockbasierter gls:dedup ab. Dies hat den riesigen Vorteil das bei einem Backup nur die Änderungen auf Block-Ebene gespeichert werden und nicht jedes Mal die ganze Datei kopiert werden muss.

Damit ermöglicht die Software auch Backups von sehr grossen Dateien, wie Videos oder Disk Images von virtuellen Maschinen, in mehreren Version. Ohne dabei jedoch signifikant mehr an Speicher zu benötigen. Zusätzlich werden die Backups dadurch rasend schnell ausgeführt. Gerade dieses Feature macht gls:bb in den Augen des Authors besonders interessant da sich der durschnittliche User möglichst wenig mit Dingen wie Backups ausseinander setzen möchte. Umsobesser also wenn sie schnell gehen und so wenig Speicherplatz wie möglich verbrauchen.

gls:bb bietet Entwicklern eine gls:json, gls:api, mit welcher sie, von gls:bb ausgegebenen Dateinen einfach weiterverarbeiten können.

gls:bb steht unter einer gls:bsd footcite:bsd Lizenz zur Verfügung und ist somit gls:libre.

Das Projekt muss dabei vom Studenten in Eigenarbeit und einer Zeit von 250 Stunden bis zum 18. März 2019 erarbeitet werden.

Projektziele

Das Hauptziel der Arbeit soll es sein eine einfach nutzbare grafische Oberfläche für gls:bb zu entwickeln. Da gls:bb selber freie Software ist und der Author mit gls:libre viel gute Erfahrungen gemacht hat soll das Projekt selber auch wieder gls:libre sein. Zum einen um der Community etwas zurückzugeben des weiteren um anderen Entwicklern die Möglichkeit zu geben die Software zu verbessern und weiterzu entwickeln.

Als nebenläufiges Ziel soll mit dieser Arbeit auch die Verbreitung von freier Software gefördert werden. Dies wird insbesondere dadurch erreicht, dass die Software selbst unter der gls:gpl Version 3 footcite:gplv3 veröffentlicht wird. Wenn möglich sollen während der Entwicklung auch hauptsächlich freie Software verwendet werden. Die gesamte Arbeit wird zudem zu jedem Zeitpunkt öffentlich einsehbar sein. Der Quelltext der Dokumentation ist unter diesem Link erreichbar: 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 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.

Ziele inklusive Gewichtung

Im Projektantrag wurden vorgängig vollgende Ziele definiert und entsprechend gewichtet. Die Gewichtung wurde dabei so vorgenommen, dass Ziele mit einer Muss-Gewichtung den Minimalanforderungen der Software entsprechen. Die weiteren Ziele wurden dann mit Ziffern von 5 - 1 gewichtet. Eine 5 bedeutet dabei dass, das Ziel in naher Zukunft sehr nützlich/wichtig für die Software wär ist. Eine tiefe Zahl sollte dabei wenn möglich auch einmal in die Software integriert werden und ist nicht unwichtig.

Ziel-Nr.\cellcolor[HTML]{C0C0C0} Zielsetzung\cellcolor[HTML]{C0C0C0} Muss\cellcolor[HTML]{C0C0C0} Wunsch≠wline (1-5, 5=sehr wichtig)\cellcolor[HTML]{C0C0C0}
1. Die Anwendung setzt auf Cross-Plattform (Linux, Windows, OSX) fähige Technologien. x
2. Die Anwendung steht unter der gls:gpl v3 der Öffentlichkeit zur Verfügung. x
3. Der User kann mit weniger als 3 Klicks ein Backup ausführen. x
4. Der User kann ein Archiv mit 3 Klicks löschen. x
5. Der User kann unter Linux ein Archiv mit zwei Klicks "read-only" als Laufwerk mounten. x
6. Der User kann ein Archiv wieder herstellen. x
7. Der User kann den zu sichernden Pfad manuell in der Anwendung definieren. x
8. Die Applikation holt ihre Konfiguration aus einer Plain-Text Datei. x
9. Der User kann sein Repository auf einer Harddisk ablegen. x
10. Die Anwendung exkludiert für einen Linux Computer sinnvolle Pfade bereits zu Beginn. x
11. Die Archivliste wird nach einer Aktion automatisch aktualisiert. x
12. Der User kann sein Repository auf einem über SSH erreichbaren Server ablegen. 5
13. Der User kann den Namen eines Archives selbst bestimmen. 5
14. Die Anwendung meldet transparent, wenn das Repository nicht erreichbar ist. 5
15. Die Anwendung meldet dem User, wenn noch ein Hypervisor am Laufen ist. 5
16. Die Anwendung leitet Meldungen von gls:bb transparent weiter. 5
17. Die Anwendung zeigt transparent an das gls:bb im Hintergrund bereits läuft. 5
18. Das Repository wird nach jedem Backup bereinigt. 4
19. Der User kann automatische Hintergrundbackups in der Anwendung konfigurieren. 4
20. Die Anwendung gibt dem User die Möglichkeit ein passendes Repository zu erstellen, wenn keines gefunden wird, die Anwendung jedoch bereits konfiguriert ist. 4
21. Die Applikation verwendet, wann immer möglich allgemeingültige Umgebungsvariablen. 4
22. Die Anwendung cached/speichert (evtl. zusätzliche) Informationen in einer Datenbank. 3
23. Die Anwendung zeigt beim ersten Starten einen Setup Wizard. 3
24. Der User kann sich mit 3 Klicks das Log eines Archives anschauen. Nur möglich mit einer zusätzlichen DB. 3
25. Die Anwendung kann Systembenachrichtigungen auslösen. 3
26. Der User kann die Anwendung grafisch konfigurieren. 3
27. Der User kann entscheiden ob, ein gemountetes Archiv nach dem Schliessen der Applikation noch weiter verfügbar ist. 2
28. Der User kann das Repository wechseln. 2
29. Der User kann ein Archiv nach einer Datei oder einem Ordner durchsuchen. 2
30. Der User kann die "Retention Policy" konfigurieren. 2
31. Die Anwendung kann mit allen Features von BargBackup umgehen. 2
32. Die Applikation prüft, ob sie sich im richtigen Netzwerk befindet bevor sie eine Verbindung zum Server aufbaut. 2

#+LATEX:≠wpage

Projektabgrenzung

Die Anwendung beschränkt sich darauf Funktionen von gls:bb grafisch darzustellen oder nützlich zu erweitern soweit dies über die gls:api möglich ist. Eine Erweiterung von gls:bb ist nicht vorgesehen. Backup und Verschlüsselung sind heikle Themen und sollten umbedingt nur von Experten angegangen werden. Das Potential für Fehler und die Auswirkungen deren sind einfach schlicht zu gross.

Bugs von gls:bb welche während der Dauer der Diplomarbeit vom Studenten entdeckt werden, wird dieser dem Projekt melden jedoch nicht selber beheben.

TODO Umweltanalyse

PLACEHOLDER

TODO Varianten

Da Borg eine JSON API zur Verfügung stellt bieten sich 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 weitere Möglichkeiten für das Projekt.

Backend

Fürs Backend bieten sich folgende Sprachen an.

  • C#
  • C++
  • Python

C#

C# ist eine von Microsoft entwickelte Programmiersprache sowie mit .NET auch ein Framework. Zudem ist es die Programmierspache welche an der IBZ hauptsächlich gelehrt wird. Dadurch sind die Kenntnisse der Sprache und ihrer Anwendung bereits relativ gross. Insbesondere Aufgrund der grossen kommerziellen Nutzung in Windows hat C# eine relative grosse Verbreitung.

C# ist eine stark typisierte Sprache, heisst man muss bei Objekten den Datentyp bereits beim erstellen definieren. Desweiteren ist C# eine kompilierte Sprache und setzt stark auf objekt-orientierte Programmierung.

C# wird dabei hauptsächlich mit der gls:ide Microsoft Visual Studio. Eine sehr umfangreiche und komlexe Software. Visual Studio ist dabei nur für Windows und OS X erhältlich. Es ist auch möglich C# Projekte ausserhalb von Visual Studio zu erstellen ist jedoch nicht sehr einfach.

C# ist zu Teilen freie Software. Die Common Language Runtime welche für das Ausführen von Software zuständig ist, ist unter der MIT Lizenz lizenziert footcite:csharp der aktuelle Compiler Roslyn ist unter der Apache Lizenz verfügbar footcite:roslyn.

C++

C++ ist eine stark typisierte und kompilierte Programmiersprache. Sie ist seit 1998 Teil des ISO Standards footcite:cpp98. ISO/IEC 14882:2017 footcite:cpp17 ist zur Zeit die aktuellste Variante. Die Sprache existiert seit ca. 33 Jahren und hat eine weitreichende Verbreitung gefunden. C++ ist auf allen Betriebssystemen gut unterstützt.

C++ kompiliert direkt zu Maschinensprache und ist dadurch sehr performant. C++ ist im Vergleich zu modernen Sprachen jedoch relativ komplex und bietet diverse Stolpersteine für Programmierer.

Da C++ auch heute noch zu den meistgenutzten Sprachen gehört gibt es entsprechend viele Ressourcen dazu und Beispiel Projekte von denen man ableiten kann. Auch hilfreiche Libraries gibts es sehr viele welche den Programmierer unterstützen können.

Python

Python ist eine dynamisch typisierte und interpretierte Sprache. Dies bedeutet das man bei Variabeln nicht explizit den Typ angeben muss und die Programme zur Laufzeit für den Computer übersetzt werden. Interpretierte Sprachen haben den Vorteil das man mit ihnen in der Regel sehr schnell und unkompliziert entwickeln kann, dies jedoch auf Kosten der Performance.

Python unterstützt mehrere Programmierungsparadigmen wie etwa objekt-orientiert, funktionale oder Prozedurale Paradigmen. 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 Python vor installiert.

Bei der Entwicklung von Python wurde sehr grossen Wert auf die Lesbarkeit der Sprache gelegt. Dies mit dem Hintergedanken das eine Programmierspache viel häufiger gelesen als effektiv geschrieben wird.

Python ist freie Software unter der Python Software Foundation License footcite:python und wird durch die Python Software Foundation in einem Community basierten Modell entwickelt.

FrontEnd

Fürs Frontend sind folgende Projekte interessant:

  • Qt
  • Gtk
  • Electron

TODO Bewertung

Die Bewertungspunkte setzen sich einerseits aus den Projektzielen anderseits aus für das Projekt sinnvollen Punkten zusammen. Dadurch ergeben sich dann die Punkte welche in der nachfolgenden Tabelle aufgenommen wurden. Die möglichen Varianten wurden dann bewertet und die Variante mit der höchsten Bewertung wurde für das Projekt ausgewählt.

TODO Vorkenntnisse

Die benötigten Vorkenntnisse wurden in den vorangegangenen Semestern erarbeitet und sind in der Basis gefestigt. Erfahrungen im Bereich der Entwicklung von Desktop Applikationen sind zum Teil vorhanden. Jedoch hauptsächlich für Windows Systemenen.

TODO Risikomanagement

TODO Risikobeschreibung

PLACEHOLDER

TODO Risikobewertung

PLACEHOLDER

TODO SWOT-Analyse

PLACEHOLDER

TODO Methoden

PLACEHOLDER

TODO Organigramm

PLACEHOLDER

TODO Zeitplanung

PLACEHOLDER

TODO Umsetzung

TODO Werkzeuge

PLACEHOLDER

Versionskontrolle

Eine Versionskontrollsoftware ist in der Software Entwicklung heutzutage praktisch nicht mehr wegzudenken. So wurde auch bei diesem Projekt eine eingesetzt.

Als Software für die Versionskontrolle wurde Git footcite:git aus folgenden Gründen ausgewählt:

  • Ist der de facto Standard bei Versionskontrollsoftware
  • Läuft auf allen gängigen Betriebssystemen
  • Es gäbe gratis Services die man nutzen könnte (Github, Gitlab)
  • Man kann offline arbeiten und Commits erstellen
  • Der Author hat bereits einen eigenen Git Server zur Verfügung
  • Der Author ist bereits mit Git aus vorhergehenden Projekten vertraut, dadurch muss man keine Ressourcen aufwenden eine neue Software zu lernen. Zusätzlich hat sich Git in den vorhergehenden Projekten als robuste und schnelle Software erwiesen.
  • Git ist gls:libre unter der gls:gpl v2.

Editor

Sowohl bei der Dokumentation wie auch bei der Programmierung wurde hauptsächlich der Editor GNU Emacs footcite:emacs verwendet. GNU Emacs ist mit 32 Jahren (obwohl seine Wurzeln bis ins Jahre 1976 zurückgehen) wohl eines der ältesten noch aktiven Software Projekte. Emacs ist gls:libre unter der gls:gpl v3. Emacs wurde gewählt da es ein schneller, schlanker und sehr flexibler Texteditior ist. Von normaler Textmanipulation über Taskmanagement und Emails schreiben ist alles möglich.

Dokumentation

Diese Dokumentation wurde in Org-mode footcite:orgmode, einer Erweiterung für den Text Editor Emacs, geschrieben. Die Syntax erinnert an Markdown und Org-mode bietet einem eine vielzahl an Hilfen dafür inklusive dem erstellen von Tabellen und Spreadsheet Funktionen. Für finalle Version des Dokuments kann Org-mode die ursprünglich Textdatei über LaTeX in ein PDF exportieren.

LaTeX footcite:latex ist eine Software, welche einem die Benutzung des Textsatzsystems TeXs vereinfacht. LaTeX wurde gegenüber einem "What You See Is What You Get" (z.Bsp. MS. Word), Editor gewählt weil es einem mit seiner Markup Sprache erlaubt das Dokument in Text Dateien zu erstellen, gerade für Programmiere ist dies eine sehr interessante Lösung. Dadurch, dass LaTeX auch nur aus reinen Textdateien besteht, kann man die Dokumente auch ohne weiteres in die Versionskontrollsoftware einchecken und die Entwicklung im Log zurückverfolgen. LaTeX ist gls:libre unter der LaTeX Project Public License.

Die Grafiken in diesem Dokument wurden hauptsächlich mit dem Vektor Grafik Editor Inkscape footcite:inkscape erstellt. Inkscape ist gls:libre unter der GNU Public License v3.

Die Diagramme wurden mit Draw.io footcite:draw erstellt. Draw.io ist gls:libre unter Apache Lizenz Version 2.0 footcite:apache und kann sowohl als Desktop Applikation wie auch als Webanwendung genutzt werden.

TODO User Stories

PLACEHOLDER

TODO Use Cases

PLACEHOLDER

TODO Anwendungsfalldiagramm

PLACEHOLDER

TODO Use Cases Detailbeschreibung

PLACEHOLDER

TODO Benutzerinterface

TODO Inspiration

PLACEHOLDER

TODO Frontend Umsetzung

PLACEHOLDER

TODO Backend Umsetzung

PLACEHOLDER

TODO Testing

PLACEHOLDER

TODO Testfälle

PLACEHOLDER

TODO Fazit

TODO Projektmanagement

PLACEHOLDER

TODO Umsetzung

PLACEHOLDER

Gelerntes

PLACEHOLDER