From b4d57801315becc062e99ddffa83d8f1c9ee7844 Mon Sep 17 00:00:00 2001 From: localhorst Date: Thu, 2 May 2019 13:14:20 +0200 Subject: [PATCH] updated pflichtenheft --- doc/pflichtenheft/pflichtenheft.fodt | 555 +++++++++---------- doc/pflichtenheft/pflichtenheft.pdf | Bin 276100 -> 276044 bytes doc/tests/mastertestplan/mastertestplan.fodt | 354 ++++++------ 3 files changed, 443 insertions(+), 466 deletions(-) diff --git a/doc/pflichtenheft/pflichtenheft.fodt b/doc/pflichtenheft/pflichtenheft.fodt index 0cf4c36..ee812ac 100644 --- a/doc/pflichtenheft/pflichtenheft.fodt +++ b/doc/pflichtenheft/pflichtenheft.fodt @@ -1,24 +1,24 @@ - 2019-03-26T16:04:36.670567469PT3H18M46S92LibreOffice/6.2.3.2$Linux_X86_64 LibreOffice_project/20$Build-2Pflichtenheft2019-05-02T12:54:29.9969677341.1.1 + 2019-03-26T16:04:36.670567469PT3H26M43S93LibreOffice/6.2.3.2$Linux_X86_64 LibreOffice_project/20$Build-2Pflichtenheft2019-05-02T13:12:23.5246843911.1.1 - 33020 + 0 0 49108 - 21645 + 22677 true false view2 - 16051 - 50874 + 32905 + 75895 0 - 33020 + 0 49107 - 54663 + 22675 0 1 false @@ -105,7 +105,7 @@ true false true - 4143733 + 4254429 true false false @@ -117904,281 +117904,258 @@ - + - + - + - + - + - + - + + + + - - - - - + + - + + + + - + - + - + - + - + - + - + - + + + + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - - - - - - - + - - - - - - - - - - - - - - - - - - - - - - - + + - - + + - + + + + - - + + - - + + - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + + + + - - - - - - - - - - - - - - - - - - - + - - - - + - + - + - + - + - - + + - + - + - + - + - + - - - - + - + + + + + + + - + - - - - - - - - - - - - - - - - - @@ -118422,7 +118399,7 @@ - TextureSync Pflichtenheft Version 1.1.1Seite 13/13 + TextureSync Pflichtenheft Version 1.1.1Seite 12/12 @@ -118439,8 +118416,8 @@ - - + + Pflichtenheft TextureSync @@ -118461,15 +118438,15 @@ - Version + Version - 1.1.1 + 1.1.1 - Datum + Datum 22.03.19 @@ -118477,25 +118454,25 @@ - Autor + Autor - Lukas Fürderer, Jannik Seiler + Lukas Fürderer, Jannik Seiler - Projektmitglieder + Projektmitglieder - Hendrik Schutter, - Lukas Fürderer, - Robin Willmann, - Jannik Seiler + Hendrik Schutter, + Lukas Fürderer, + Robin Willmann, + Jannik Seiler - + Inhaltsverzeichnis @@ -118582,276 +118559,276 @@ - Inhaltsverzeichnis + Inhaltsverzeichnis - 1 Einleitung3 - 1.1 Musskriterien3 - 1.2 Wunschkriterien5 - 1.3 Abgrenzungskriterien5 - 2 Produktumgebung6 - 2.1 Architektur6 - 2.2 Server6 - 2.3 Client6 - 3 Technologien6 - 3.1 Server6 - 3.2 Client7 - 4 Gegenmaßnahmen für Risiken8 - 4.1 Gegenmaßnahmen für Produktrisiken8 - 4.2 Gegenmaßnahmen für Produktrisiken8 - 5 Mockups9 - 5.1 Erster Start9 - 5.2 Hauptfenster10 - 5.3 Dialog11 - 5.4 Textur importieren12 - 6 Changelog13 + 1 Einleitung3 + 1.1 Musskriterien3 + 1.2 Wunschkriterien5 + 1.3 Abgrenzungskriterien5 + 2 Produktumgebung6 + 2.1 Architektur6 + 2.2 Server6 + 2.3 Client6 + 3 Technologien6 + 3.1 Server6 + 3.2 Client7 + 4 Gegenmaßnahmen für Risiken8 + 4.1 Gegenmaßnahmen für Produktrisiken8 + 4.2 Gegenmaßnahmen für Produktrisiken8 + 5 Mockups9 + 5.1 Erster Start9 + 5.2 Hauptfenster10 + 5.3 Dialog11 + 5.4 Textur importieren12 + 6 Changelog13 - - Einleitung + + Einleitung TextureSync ist eine Client-Server Applikation zur Verwaltung und Verteilung von 3D-Texturen in einem Unternehmensnetzwerk. Ein 3D-Designer soll hierbei so wenig Aufwand wie möglich mit der Organisation und Verteilung seiner Texturen haben. TextureSync übernimmt die zentrale Speicherung und macht erstellte Werke allen teilnehmenden Mitarbeitern des Unternehmens zugänglich. - Musskriterien - MK#1 Texturensammlung + Musskriterien + MK#1 Texturensammlung Der Server kann mindestens 1000 Texturen (Grafikdateien) speichern. Jeder verbundene Client kann Grafiken hinzufügen und die Sammlung durchsuchen. - MK#2 Bildformate + MK#2 Bildformate TextureSync kann mindestens die Bildformate JPEG und PNG korrekt verwalten und darstellen. - MK#3 Metadaten - Beim Importieren von Texturen erfasst TextureSync automatsich die Auflösung der Textur und das aktuelle Datum als Einpflegedatum. Der Nutzer kann den Texturen bei Bedarf Tags hinzufügen und den eindeutigen Namen editieren. - MK#4 Tags + MK#3 Metadaten + Beim Importieren von Texturen erfasst TextureSync automatsich die Auflösung der Textur und das aktuelle Datum als Einpflegedatum. Der Nutzer kann den Texturen bei Bedarf Tags hinzufügen und den eindeutigen Namen editieren. Wenn der Name nicht den geforderten Vorgaben entspricht wird eine Fehlermeldung mit den geforderten Vorgaben ausgegeben. + MK#4 Tags Tags sind Zeichenketten, mit denen Texturen in bestimmte Gruppen eingeteilt werden können. Als Tags sind maximal 32 Zeichen und mindestens 1 Zeichen aus Buchstaben, Zahlen, Bindestrichen, Unterstrichen und Umlauten erlaubt. Die Groß- und Kleinschreibung (auch der Umlaute) wird nicht berücksichtigt. Jeder Textur können beliebig viele Tags zugewiesen werden und umgekehrt kann ein Tag beliebig vielen Texturen zugewiesen werden. Die Zuordnung der gesammelten Texturen zu ihren Tags lässt sich jederzeit von beliebigen Nutzern wieder ändern durch Hinzufügen und Löschen von Tags bei den betreffenden Texturen. - - MK#5 Filter + + MK#5 Filter Der Nutzer kann die am Client angezeigten Texturen nach verschiedenen Kriterien filtern. Mögliche Kriterien sind: - + - Das Vorhandensein von Tags + Das Vorhandensein von Tags - Das nicht-Vorhandensein von Tags + Das nicht-Vorhandensein von Tags - Mindestauflösung + Mindestauflösung - Maximalauflösung + Maximalauflösung - Stichworte, die im Namen der Textur vorhanden sind - + Stichworte, die im Namen der Textur vorhanden sind + Beliebige Kombinationen dieser Kriterien sind möglich, um nur die Texturen anzuzeigen, die alle eingestellten Kriterien erfüllen. Als Auflösung wird die Breite bzw. Höhe der Textur in Pixeln gezählt. Sollte eine Textur nicht quadratisch sein, zählt das quadratische Mittel aus Breite und Höhe. Alle gefundenen Ergebnisse werden jeweils mit einer 2D-Vorschau aufgelistet. - MK#6 Synchronisation + MK#6 Synchronisation Hat ein Nutzer eine Textur erfolgreich zur Sammlung hinzugefügt oder Tags zu einer Textur hinzugefügt bzw. entfernt, ist diese geänderte Textur sowie deren Metadaten für alle anderen Nutzer sichtbar. - MK#7 Import - Jede gewünschte Textur lässt sich aus lokalen Dateisystem importieren und mit Metadaten der Sammlung hinzuzufügen. - MK#8 Export - Jede gewünschte Textur lässt sich aus der Sammlung exportieren und im lokalen Dateisystem des Clients an einem beliebigen Ort abspeichern. - MK#9 Atomarer Upload + MK#7 Import + Jede gewünschte Textur lässt sich aus lokalen Dateisystem importieren und mit Metadaten der Sammlung hinzuzufügen. + MK#8 Export + Jede gewünschte Textur lässt sich aus der Sammlung exportieren und im lokalen Dateisystem des Clients an einem beliebigen Ort abspeichern. + MK#9 Atomarer Upload Eine neue Textur wird erst dann in die Sammlung übernommen, wenn der Upload auf den Server vollständig und erfolgreich war. Sollte ein Upload durch einen Netzwerkausfall abbrechen, wird keine defekte Textur in die Sammlung aufgenommen. - MK#10 3D-Ansicht + MK#10 3D-Ansicht Der Nutzer könnte bei Auswahl einer Textur eine 3D-Vorschau angezeigt bekommen um eine räumliche Vorstellung davon zu erhalten. - Wunschkriterien - - WK#1 Einfache Installation + Wunschkriterien + + WK#1 Einfache Installation Wünschenswert wäre, sowohl Client als auch Server, jeweils über eine einzelnes Shell-Skript installieren zu können. Dieses würde auch die Inbetriebnahme des Server übernehmen. Alternativ könnte dies auch von einem debian Paket erledigt werden. - WK#2 Update durch die Paketverwaltung + WK#2 Update durch die Paketverwaltung TextureSync könnte als Paket in apt installiert werden, sodass es beim üblichen Systemupdate von Ubuntu ebenfalls aktualisiert wird. - WK#3 Backup + WK#3 Backup Von der Texturensammlung lässt sich im laufenden Betrieb ein konsistentes Backup erstellen, indem man ein bestimmtes, im Handbuch angegebenes Verzeichnis mit einem einfachen Kopierprogramm auf das Backuplaufwerk kopiert. Zur Wiederherstellung des Backups reicht es aus, den Server zu stoppen, das Verzeichnis aus dem Backup zurück zu spielen und den Server erneut zu starten. WK#4 Automatische Konfiguration des Clients Der Client findet automatisch den Server innerhalb von 30 Sekunden, ohne dass eine IP-Adresse von Hand eingeben werden muss. Änderungen der Server IP-Adresse werden automatisch erkannt. - WK#5 W3D Ansicht als Standard Ansicht + WK#5 W3D Ansicht als Standard Ansicht Der Nutzer könnte ohne Auswahl einer Textur alle gefunden Texturen als 3D-Vorschau angezeigt bekommen um eine räumliche Vorstellung davon zu erhalten.. - Abgrenzungskriterien - Texturen erstellen oder bearbeiten + Abgrenzungskriterien + Texturen erstellen oder bearbeiten TextureSync ist keine Bildbearbeitung. Um Texturen zu ändern, müssen diese exportiert, mit einem dafür vorgesehenen Programm bearbeitet und schließlich neu importiert werden. - Produktumgebung - Architektur + Produktumgebung + Architektur TextureSync ist eine Client-Server Applikation. Ein Client reicht zur Verwendung nicht aus. Um TextureSync lokal zu verwenden, muss ein lokaler Server installiert werden, auf den der Client anschließend zugreifen kann. - Server + Server Der Server lässt sich auf einem Ubuntu Server 18.04 mit Internetzugang installieren, sofern ein root-Zugriff vorhanden ist. - Client + Client Der Client lässt sich auf einem Ubuntu 18.04 System mit Internetzugang und root-Zugriff installieren. Technologien Server Die Server-Software wird in der Programmiersprache Rust entwickelt. Rust wurde von Mozilla Research erschaffen, um gängige Fehler der Softwareentwicklung bereits vor der Ausführung zu erkennen und zu verhindern. Rust's Typsystem bietet hervorragende Unterstützung für sicherere und fehlerfreie Nebenläufigkeit, wie es beim Handhaben von mehreren gleichzeitigen Verbindungen notwendig sein wird. Auch die effiziente Abarbeitung und das Ökosystem, welches viele wichtige Bibliotheken für den Servereinsatz bietet, sprechen für Rust. Hinzu kommt noch die einfache Portierung auf andere Betriebssysteme und die Tatsache, dass Rust, als native Sprache, keine nennenswerten Laufzeit-Abhängigkeiten hat und somit die Installation der TextureSync-Servers-Software vereinfacht wird. Um das Verarbeiten des Netzwerkprotokoll zu erleichtern wird serde_json (Version 1.0) für (De-)Serialisierung von JSON verwendet. - Für das serverseitige Erstellen von Preview-Bildern wird die Bibliothek image (Version 0.21) verwendet. + Für das serverseitige Erstellen von Preview-Bildern wird die Bibliothek image (Version 0.21) verwendet. Client - Die Client-Software wird mit der Programmiersprache Kotlin entwickelt. Grund hierfür ist, dass diese für die Java-Virtual-Machine übersetzt werden kann und so auf mehreren Plattformen lauffähig ist. Als Framework für das User Interface wird TornadoFx verwendet. Hiermit lassen sich viele moderne UI-Elemente realisieren. - - - - - - - - - - - - - - - - - - - - - + Die Client-Software wird mit der Programmiersprache Kotlin entwickelt. Grund hierfür ist, dass diese für die Java-Virtual-Machine übersetzt werden kann und so auf mehreren Plattformen lauffähig ist. Als Framework für das User Interface wird TornadoFx verwendet. Hiermit lassen sich viele moderne UI-Elemente realisieren. + + + + + + + + + + + + + + + + + + + + + Gegenmaßnahmen für Risiken Gegenmaßnahmen für Produktrisiken - + - PjR#1 + PjR#1 - Puffer einplanen, Worst-Case beachten. + Puffer einplanen, Worst-Case beachten. - PjR#2 + PjR#2 - Frühzeitig Prototyp bauen, testen. Anforderungen analysieren. + Frühzeitig Prototyp bauen, testen. Anforderungen analysieren. - PjR#3 + PjR#3 - Puffer einplanen. + Puffer einplanen. - PjR#4 + PjR#4 - Frühzeitig Proof-of-Concept/Prototypen erstellen. Alternativen: - + Frühzeitig Proof-of-Concept/Prototypen erstellen. Alternativen: + - Server erstellt Preview + Server erstellt Preview - Wechsel des UI-Frameworks. + Wechsel des UI-Frameworks. - Nur 2D-Preview + Nur 2D-Preview - PjR#5 + PjR#5 - Aktuelle Versionen verwenden, freie Frameworks und Tools + Aktuelle Versionen verwenden, freie Frameworks und Tools - PjR#6 + PjR#6 - Tests bei Planung definieren, während Implementieren testen + Tests bei Planung definieren, während Implementieren testen Gegenmaßnahmen für Produktrisiken - + - PdR#1 + PdR#1 - Möglichkeiten zum Backup schaffen; Server-Dateistruktur einfach halten. + Möglichkeiten zum Backup schaffen; Server-Dateistruktur einfach halten. - PdR#2 + PdR#2 - Server: Nach solchen Daten beim Start scannen. - Client: Cache leeren beim Start oder beim Beenden. + Server: Nach solchen Daten beim Start scannen. + Client: Cache leeren beim Start oder beim Beenden. - PdR#3 + PdR#3 - Edge-Cases testen. Server sendet Nachricht, um zu zeigen, dass die Transaktion erfolgreich war. + Edge-Cases testen. Server sendet Nachricht, um zu zeigen, dass die Transaktion erfolgreich war. - PdR#4 + PdR#4 - Schon ausgewählte Texturen könnten lokal gecached werden. + Schon ausgewählte Texturen könnten lokal gecached werden. - PdR#5 + PdR#5 - Auflösung verringern, Animationen deaktivieren, nur 2D Previews + Auflösung verringern, Animationen deaktivieren, nur 2D Previews - PdR#6 + PdR#6 - Bestätigung für löschen erforderlich. - Backup kann wieder eingespielt werden + Bestätigung für löschen erforderlich. + Backup kann wieder eingespielt werden - PdR#7 + PdR#7 - Atomarer Upload, Möglichkeit Metadaten zu ändern. + Atomarer Upload, Möglichkeit Metadaten zu ändern. - PdR#8 + PdR#8 - Bestätigungs-Nachricht nach Upload an Client, nach Erfolg. User Interface informiert Nutzer über den Erfolg. + Bestätigungs-Nachricht nach Upload an Client, nach Erfolg. User Interface informiert Nutzer über den Erfolg. - + Mockups Erster Start - + iVBORw0KGgoAAAANSUhEUgAAAvAAAAGQCAYAAADIulS9AAAgAElEQVR4nOzdd3gVddrG8ScF EiAkhNBbaFJDDTWACb2XSEB6pHdBLChFsBdUQBcRBEXW7gq4iIotCOKyiuKuuxZkRUXgVVFU VJB2v3/gnHCSk5CQkJno93NdzyVkZn7zzBwMN5OZ39jnn3+uihUrqlSpUipVqpSKFy/u+3VB @@ -119175,7 +119152,7 @@ Das Startfenster besteht aus einem Spinner, der während des Verbindens aktiv ist und einer Textbox, in welche sich manuell die Server-IP eingeben lässt. Hauptfenster - + iVBORw0KGgoAAAANSUhEUgAABIUAAAKbCAYAAABrQDp8AAAgAElEQVR4nOydeVgV973/xy3u gFtWG701zZ5oXJImJoUmN22TtjemSW/SX9qYNEvb3KQoiriDu4gIrqgRcd8jKGo0LiBqTNxw V3ZRcMfjviDw/v1hv5M5c2bOxpkzI+f9ep738wjIOQfkS2Ze+SzSsWPH8MADDyAkJAQhISFo @@ -120501,9 +120478,9 @@ Das Hauptfenster besteht aus einer Pane für die Anzeige der Texturen und einer Detailansicht. Die Detailansicht beinhaltet eine 3D-Preview, eine ChipView zur Darstellung der Tags, sowie die zur Textur gehörenden Metadaten. Über die ChipView lassen sich Tags bearbeiten und hinzufügen. Der Button rechts unten öffnet das Textur importieren Fenster. - - Dialog - + + Dialog + iVBORw0KGgoAAAANSUhEUgAABIUAAAKbCAYAAABrQDp8AAAgAElEQVR4nOzde5hbVb3w8bQF W6BQtOAj6gMeq+mFMpRepjBtpzLTmcxkppOZzDWZmWQmmQRBON4O6MHL6+ODHLxwUI9aL+hR vMtR9BzEI94QRUXwcMALgoigFkQUUBGOBfp7/6g7JJmdZO+dvbJWsr/reT7PA512kmlnlb2+ @@ -121560,11 +121537,11 @@ TkSuQmCC - Texturen lassen sich über einen Button löschen wenn diese ausgewählte ist. Über eine Doppelbestätigung wird verhindert das eine Textur versehentlich gelöscht wird. - - - Textur importieren - + Texturen lassen sich über einen Button löschen wenn diese ausgewählte ist. Über eine Doppelbestätigung wird verhindert das eine Textur versehentlich gelöscht wird. + + + Textur importieren + iVBORw0KGgoAAAANSUhEUgAAAvAAAAGQCAYAAADIulS9AAAgAElEQVR4nOzdeVhV1eI+8MWM zAioIII5oowKioAKkkqO4DwWlkNqGta362w4p+kNNUstNfNWzmCOqSkomrPmvV27qaU55oiG Cg7w/v7gt7fsMzMczlHfz/Os5wHO2vustfc+57zss/ba4sKFC/D29oabmxvc3Nzg4OAg/1zR @@ -122025,7 +122002,7 @@ Texturen lassen sich über eine eigenes Fenster hinzufügen. Diese besteht aus einer Textbox für den Pfad, welcher sich auch durch einen Filechooser festlegen lässt, einer Textbox für die Eingabe des Namens sowie einer ChipView für die Eingabe von Tags. - Changelog + Changelog @@ -122039,30 +122016,30 @@ - 1.0.1 + 1.0.1 - Typo + Typo - 1.1.0 + 1.1.0 - Nummerierung der Kriterien; MK#9 von Wunsch- nach Musskriterium + Nummerierung der Kriterien; MK#9 von Wunsch- nach Musskriterium - 1.1.1 + 1.1.1 - Import als Kriterium hinzuzufügen; Beschreibung Delete-View + Import als Kriterium hinzuzufügen; Beschreibung Delete-View - + \ No newline at end of file diff --git a/doc/pflichtenheft/pflichtenheft.pdf b/doc/pflichtenheft/pflichtenheft.pdf index f0271b662479f1fe9b56c17f883dcd9ab669df20..5bb6c1fd0f387e104395e21536130176dd7fc031 100644 GIT binary patch delta 35624 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 delta 35200 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ˈA%C&Jzt9bJq?FBz;6;@$yD9C;bB1=bZ^_>Vy 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 - 2019-03-22T18:11:56.7688408422019-04-26T19:53:40.837886949PT9H12M38S229LibreOffice/6.2.2.2$Linux_X86_64 LibreOffice_project/20$Build-2Mastertestplan1.0.6 + 2019-03-22T18:11:56.7688408422019-04-26T19:53:40.837886949PT9H12M38S229LibreOffice/6.2.3.2$Linux_X86_64 LibreOffice_project/20$Build-2Mastertestplan1.0.6 - 302260 + 161 0 - 50034 - 22571 + 65477 + 30235 true false view2 - 21172 - 311776 + 24238 + 5930 0 - 302260 - 50033 - 324829 + 161 + 65476 + 30394 0 1 false - 100 + 75 false false @@ -105,7 +105,7 @@ true false true - 4193988 + 4313446 true false false @@ -118683,144 +118683,144 @@ - - + + - + - + + + + - + - + - + - + - + - + - + - + - + - + - + - + + + + - + - + - + - + - + - + - + - + - + - + - + - + - + - - - - - - - + - + - - + + + + + - + - + - + - - - @@ -119032,9 +119032,9 @@ - - - Mastertestplan + + + Mastertestplan TextureSync @@ -119088,7 +119088,7 @@ - + Inhaltsverzeichnis @@ -119175,34 +119175,34 @@ - Inhaltsverzeichnis + Inhaltsverzeichnis - 1 Einleitung3 - 1.1 Ziel des Mastertestplans3 - 1.2 Durchführung der Test-Phasen3 - 2 Modultests4 - 2.1 Testumgebung4 - 2.2 Test Definitionen4 - 3 Integrationstests5 - 3.1 Testumgebung5 - 3.2 Test Definitionen5 - 4 Systemtests6 - 4.1 Testumgebung6 - 4.2 Test Definitionen6 - 5 Akzeptanztests8 - 5.1 Testumgebung8 - 5.2 Test Definitionen8 - 6 Changelog10 + 1 Einleitung3 + 1.1 Ziel des Mastertestplans3 + 1.2 Durchführung der Test-Phasen3 + 2 Modultests4 + 2.1 Testumgebung4 + 2.2 Test Definitionen4 + 3 Integrationstests5 + 3.1 Testumgebung5 + 3.2 Test Definitionen5 + 4 Systemtests6 + 4.1 Testumgebung6 + 4.2 Test Definitionen6 + 5 Akzeptanztests8 + 5.1 Testumgebung8 + 5.2 Test Definitionen8 + 6 Changelog10 - - Einleitung - Ziel des Mastertestplans + + Einleitung + Ziel des Mastertestplans Das Ziel des Mastertestplans ist es, die einzelnen Test-Phasen zu definieren und zu kontrollieren. In den Tests des Mastertestplans werden die Voraussetzungen und die Durchführung der Tests beschrieben. Die einzelnen Testpläne (Modultest, Integrationstest, Systemtest und Akzeptanztest) werden aus dem Mastertestplan abgeleitet. In den einzelnen Testplänen werden auch die Ergebnisse festgehalten. Im Mastertestplan nur die erwarteten Ergebnisse. - Durchführung der Test-Phasen + Durchführung der Test-Phasen Die Test-Phasen werden nacheinander durchgeführt. Bei einem fehlgeschlagenen Test und der Änderung im Code werden die zuvor durchgeführten Phasen bei relevanten Tests wiederholt. Bei kritischen Änderungen werden alle Tests wiederholt. Die Reihenfolge der Tests ist im V-Modell beschrieben. Bei erfolgreichem Abschluss aller Tests einer Test-Phase wird diese als komplett angesehen und die nächste Phase beginnt. @@ -119216,28 +119216,28 @@ - Modultests - Testumgebung + Modultests + Testumgebung Teile der Server- bzw. Client-Software werden nach dem Entwickeln einzeln getestet. Als Testwerkzeuge dienen eigens geschriebene Test-Anwendungen, welche die Module ansprechen und deren Ergebnisse darstellen. Da die Tests direkt am Source-Code in der IDE vorgenommen werden wird mittels White-Box Verfahren getestet. - Test Definitionen + Test Definitionen - Nummer + Nummer - Titel + Titel - Erklärung + Erklärung - MT#1 + MT#1 Client: Textur auswählen @@ -119248,7 +119248,7 @@ - MT#2 + MT#2 Client: Steuerelemente der Suche @@ -119259,7 +119259,7 @@ - MT#3 + MT#3 Client: Validierung Name @@ -119270,7 +119270,7 @@ - MT#4 + MT#4 Client: Textur importieren @@ -119281,7 +119281,7 @@ - MT#5 + MT#5 Client: Textur exportieren @@ -119292,7 +119292,7 @@ - MT#6 + MT#6 Client: Einfügedatum @@ -119303,7 +119303,7 @@ - MT#7 + MT#7 Client: Metadaten automatisch erkennen @@ -119314,7 +119314,7 @@ - MT#8 + MT#8 Server: Metadaten abspeichern @@ -119325,7 +119325,7 @@ - MT#9 + MT#9 Server: Metadaten lesen @@ -119336,7 +119336,7 @@ - MT#10 + MT#10 Server: Suchanfrage verarbeiten @@ -119347,7 +119347,7 @@ - MT#11 + MT#11 Server: Textur lokal abspeichern @@ -119358,35 +119358,35 @@ - MT#12 + MT#12 - Server: Daten übertragen + Server: Daten übertragen - Read-Back Test mit Dummy Daten. + Read-Back Test mit Dummy Daten. - MT#13 + MT#13 - Server: Hashing + Server: Hashing - Berechnete Hash-Werte sind korrekt. + Berechnete Hash-Werte sind korrekt. - + - Integrationstests - Testumgebung + Integrationstests + Testumgebung Mehrere komplette Arbeitsaufträge für die komplette Software werden getestet. Aus einem bestimmten Ausgangspunkt muss mit den gleichen Interaktionen das gleiche Ergebnis entstehen. Als Ausgangspunkt werden speziell präparierte Situationen gewählt, welche wiederholt werden können. Die fehlerfreie Kommunikation innerhalb der Client- und der Server-Software wie auch die Kommunikation des Servers und des Clients werden dadurch verifiziert. - Test Definitionen + Test Definitionen @@ -119394,18 +119394,18 @@ - Nummer + Nummer - Titel + Titel - Erklärung + Erklärung - IT#1 + IT#1 Verbindung aufbauen @@ -119416,7 +119416,7 @@ - IT#2 + IT#2 Alle Texturen anzeigen @@ -119427,7 +119427,7 @@ - IT#3 + IT#3 Einstelldatum @@ -119438,7 +119438,7 @@ - IT#4 + IT#4 Textur hinzufügen @@ -119449,7 +119449,7 @@ - IT#5 + IT#5 Textur löschen @@ -119460,7 +119460,7 @@ - IT#6 + IT#6 Metadaten aktualisieren @@ -119471,7 +119471,7 @@ - IT#7 + IT#7 Verbindung schließen @@ -119481,34 +119481,34 @@ - - - - - - - Systemtests - Testumgebung + + + + + + + Systemtests + Testumgebung Die Musskriterien wie auch die implementierten Wunschkriterien aus dem Pflichtenheft werden einzeln getestet. Dabei werden auf Randbedingungen wie auch auf Fehlerfälle besonders geachtet. Mittels Black-Box-Tests wird dabei der Output der kompletten Software verifiziert. - Test Definitionen + Test Definitionen - Nummer + Nummer - Titel + Titel - Erklärung + Erklärung - ST#1 + ST#1 Anzahl @@ -119519,7 +119519,7 @@ - ST#2 + ST#2 Bildformat @@ -119530,7 +119530,7 @@ - ST#3 + ST#3 Metadaten @@ -119541,7 +119541,7 @@ - ST#4 + ST#4 Tags @@ -119552,7 +119552,7 @@ - ST#5 + ST#5 Tags @@ -119563,7 +119563,7 @@ - ST#6 + ST#6 Tags @@ -119574,7 +119574,7 @@ - ST#7 + ST#7 Filter @@ -119585,7 +119585,7 @@ - ST#8 + ST#8 Filter @@ -119596,7 +119596,7 @@ - ST#9 + ST#9 Filter @@ -119608,7 +119608,7 @@ - ST#10 + ST#10 Filter @@ -119619,7 +119619,7 @@ - ST#11 + ST#11 Filter @@ -119630,7 +119630,7 @@ - ST#12 + ST#12 Synchronisation @@ -119641,7 +119641,7 @@ - ST#13 + ST#13 Synchronisation @@ -119652,7 +119652,7 @@ - ST#14 + ST#14 Synchronisation @@ -119663,7 +119663,7 @@ - ST#15 + ST#15 Synchronisation @@ -119674,7 +119674,7 @@ - ST#16 + ST#16 Export @@ -119685,7 +119685,7 @@ - ST#17 + ST#17 Atomarer Upload @@ -119696,7 +119696,7 @@ - ST#18 + ST#18 3D-Ansicht @@ -119707,7 +119707,7 @@ - ST#19 + ST#19 Installation @@ -119718,7 +119718,7 @@ - ST#20 + ST#20 Installation @@ -119729,7 +119729,7 @@ - ST#21 + ST#21 Update durch Paketverwaltung @@ -119740,7 +119740,7 @@ - ST#22 + ST#22 Backup @@ -119751,7 +119751,7 @@ - ST#23 + ST#23 Backup @@ -119762,7 +119762,7 @@ - ST#24 + ST#24 Automatische Konfiguration @@ -119772,10 +119772,10 @@ - Akzeptanztests - Testumgebung + Akzeptanztests + Testumgebung Als Testumgebung gilt hier wie im Lastenheft angegeben Ubuntu 18.04 (x64) für die Server- wie auch für die Client-Software. Die funktionalen wie auch nicht-funktionalen Anforderungen werden getrennt voneinander getestet. Die User-Stories werden von Endbenutzern durchgeführt. - Test Definitionen + Test Definitionen @@ -119783,18 +119783,18 @@ - Nummer + Nummer - Titel + Titel - Erklärung + Erklärung - AT#1 + AT#1 Texturen hinzufügen @@ -119806,7 +119806,7 @@ - AT#2 + AT#2 Tags verwalten @@ -119817,7 +119817,7 @@ - AT#3 + AT#3 Metadaten speichern @@ -119828,38 +119828,38 @@ - AT#4 + AT#4 Filter Die Sammlung aller Texturen lässt sich zur besseren Übersicht nach Metadaten filtern. Mögliche Filterkriterien sind: - + - das Vorhandensein von Tags + das Vorhandensein von Tags - das Nichtvorhandensein von Tags + das Nichtvorhandensein von Tags - Mindestauflösung + Mindestauflösung - Maximalauflösung + Maximalauflösung - Filtern nach Einstelldatum + Filtern nach Einstelldatum - Namen + Namen - AT#5 + AT#5 Synchronisation @@ -119870,7 +119870,7 @@ - AT#6 + AT#6 Texturen extrahieren @@ -119881,7 +119881,7 @@ - AT#7 + AT#7 Detailansicht @@ -120025,7 +120025,7 @@ - Changelog + Changelog @@ -120087,10 +120087,10 @@ - 1.0.6 + 1.0.6 - Server Unit Tests hinzugefügt + Server Unit Tests hinzugefügt