5.7 KiB
Bewertung Text Editor
🥇 13 Punkte von 15
👫 brandleo@students.zhaw.ch; fassband@students.zhaw.ch; schrom01@students.zhaw.ch; zieglmic@students.zhaw.ch; amadoste@students.zhaw.ch
Allgemeine Anforderungen (all-or-nothing)
Voraussetzung für Punkterteilung: Die Applikation ist lauffähig.
Entwicklung
👨🏫 9.5 Punkte von 11
Funktionalität: 3.5 Punkte von 4
Vorführung oder Test durch Betreuer
- (ADD, DEL, REPLACE) Einfügen und Löschen ganzer Absätze; Globales Suchen und Ersetzen von Text innerhalb > eines Absatzes.
- (FORMAT RAW, PRINT) Unformatierte, absatzweise Ausgabe des Textes mit Angabe der Absatznummer
- (INDEX) Ausgabe eines Indexes (Wortverzeichnisses) aller Worte, die öfter als zweimal auftreten mit Angabe des Absatzes
- (FORMAT FIX, PRINT) Formatierte Ausgabe von Text mit einer einstellbaren maximalen Spaltenbreite Zeichen, Zeilenumbruch jeweils auf dem letzten Lehrzeichen
- Sonderzeichen werden gefiltert
- Fehlermeldungen auf
System.err
FORMAT RAW
sollte das Standardverhalten sein.FORMAT FIX
:- Wenn ein Wort länger ist als die Breite sollte es im Wort umgebrochen werden.
- Es bricht um wenn der Text
>= columnWidth
ist. Die Idee ist es nach der Spaltenbreite umgebrochen wird (Leerzeichen zählt nicht dazu)
CleanCode und Konstrukte: 1.5 Punkte von 2
Sie halten die Vorgaben hinsichtlich einsetzbarer Konstrukte und Clean Code ein, und Ihr Code ist sauber dokumentiert. (Kriterium: Codeanalyse durch Betreuer, ggf. Erläuterung)
- Der
TextLogic
Konstruktor macht viel zu viel- Ein Konstruktor sollte nur das Objekt einrichten/vorbereiten
- Besser:
TextLogic textLogic = new TextLogic(); textLogic.run();
- Zudem ist er zu lange. Es würde sich lohnen mehrere Funktionen daraus zu machen (z.B. jeder Befehl seine eigene Funktion)
Text.createWordList
sollte nicht eine leere Map als Parameter übernehmen, sondern die Map selbst erstellen und zurückgeben.Text.add
undTextOutput.formatRaw
geben immertrue
zurück. Rückgabewert kann weggelassen werden.- Tipp: Beachten Sie die Meldungen von IntelliJ. Sie können auch das ganze Projekt überprüfen lassen (Code -> Inspect Code)
Klassendesign: 2.5 Punkte von 3
Sie haben eine sinnvolle Aufteilung in Klassen und Klassendefinitionen gefunden. (Dokumentation der Klassenhierarchie ist mit hochzuladen. Kriterium: Analyse durch Betreuer, ggf. Erläuterung)
- Gute Aufteilung der Klassen und deren Aufgabenbereiche
- Die Pfeile zeigen in die falsche Richtung. Ein Assoziationspfeil (
A -> B
) bedeutet:A
verwendetB
- Hinweis:
- Es macht es etwas übersichtlicher, wenn unterschiedliche Pfeile sich nicht überschneiden
Test: 2 Punkte von 2
Sie haben sinnvolle Test Cases für die Funktion Index definiert, diese in JUnit umgesetzt und erfolgreich ausgeführt.
- Sehr gute Auswahl von Tests
- Hinweise
- Ein
BeforeEach
ist nicht immer nötig- Nachteil von
BeforeEach
: Es macht die Tests unübersichtlicher; es genügt nicht die Test-Funktion anzusehen - Nützlich wenn das Erstellen des Anfangszustandes komplex ist, nicht aber wenn es nur ganz einfache Konstruktoren sind; Besonders auch wenn es nicht in allen Test-Funktionen verwendet wird (
stringListe
)
- Nachteil von
- Nur bestimmte Werte einer Liste zu prüfen ist nicht zuverlässig. Es könnte z.B. zu viele Einträge haben. Beispiel:
- Ein
Assertions.assertEquals("Word 1, 2", stringListe.get(0));
Assertions.assertEquals("Test 1, 2, 3", stringListe.get(1));
// more precise:
Assertions.assertEquals(List.of("Word 1, 2", "Test 1, 2, 3"), stringListe);
- Tests können verschachtelt/gruppiert werden:
class TextTest {
@BeforeEach
void makeTestLists() {
// ...
}
@Nested
class IndexTest {
@Test
void emptyTest() {
// ...
}
}
}
- Gedanken-Experiment: Wie würden Sie jetzt wo Sie Vererbung kennen die Konsolen-Ausgabe testen?
Vorgehen und Dokumentation
👨🏫 3.5 Punkte von 4
Dokumentation: 2.5 Punkte von 3
- Ihr Code ist in Javadoc (mindestens für Klassen und Public Methods und zusätzlich für Konstruktoren, jedoch generell ohne Getter/Setter) und wo sinnvoll in Zeilenkommentaren zur Funktionalität dokumentiert.
- Klassendiagramm ist auf GitHub abgelegt.
- Relevante Informationen finden sich im README.
@Class
und@Constructor
Tags gibt es nicht. Dies verwirrt Generatoren von Dokumentationen. Z.B. IntelliJ zeigt diese auch nicht an.- Verwenden Sie Tags für z.B. Autoren:
@author
- Dies ermöglicht bessere Anzeige
- Hinweis
- Das Datum würde ich nicht in die Dokumentation schreiben
- Das sind redundante Informationen, welche bereits in git vorhanden sind
- Es ist schnell passiert, dass es vergessen wird anzupassen und schlechter als keine Dokumentation ist eine falsche Dokumentation
- Das Datum würde ich nicht in die Dokumentation schreiben
Beitrag: 1 Punkt von 1
Alle Gruppenmitglieder haben gleichermassen Code beigetragen und auf GitHub eingechecked. (Eine einfache Variante wäre, dass jedes Gruppenmitglied für bestimmte Klassen verantwortlich ist, andere Aufteilungen sind aber denkbar. Kriterium: Check durch GitHub Log, Dokumentation im Code.)
- Alle haben gleichmässig beigetragen
Zusätzliche Hinweise (nicht bewertet)
- Guard-Clauses können auch in Loops verwendet werden (Beispiel
Text.createWordList
):
// without
for (String word : words) {
if (word.length() > 0) {
// complex implementation
}
}
// with guard-clauses
for (String word : words) {
if (word.length() == 0) {
continue;
}
// complex implementation
}
- Es sollte nicht im Default-Namespace gearbeitet werden
- Dies erschwert die Verwendung aus einem anderen Program
- Der Code ist nicht klar verpackt
- Gängig: wie eine umgekehrte Domain. Z.B.
ch.zhaw.text_editor