Einführung in Software Testen Flashcards

1
Q

Qualitätsmetriken

A

Quantifizieren verschiedene Aspekte der Qualität.
Werden von Tools berechnet.
Beispiele: Lines of Code, Number of Statements, Coverage

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
2
Q

Statische Analysen

A

Werden von Tools unterstützt.
Zum finden von Fehlermustern, Analyse der Systemarchitektur, Überprüfung von Sourcecode Konventionen & Testabdeckung.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
3
Q

Fehlermuster: Beispiele und Vorteile wenn man diese Ausfindig macht

A

Beispiele: Variablen mit undefiniertem Wert, Toter Code, Potenzielle Endlosschleifen, Komplexe Konstrukte, Security Schwachstelle, etc.
Vorteile: Verbesserung der Code Qualität (Wartbarkeit), Fehler finden, Vermeidung/Reduktion zukünftiger Fehler.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
4
Q

Coding Conventions

A

Definieren Guidelines für eine spezifische Programmiersprache.
Sorgt für einheitlichen Stil innerhalb eines Projekts- erhöht Lesbarkeit und Verständlichkeit.
Einhaltung überpruft mittels Checkstyle.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
5
Q

Checkstyle

Was wird überprüft? Wie wird es eingesetzt?

A

Checkstyle Regeln können je nach Projekt angepasst werden.
Üblicherweise beinhaltet Checkstyle:
JavaDoc (Existenz, Struktur)
Naming Conventions (Länge, Zeichen, Format)
Block Checks (Klammernsetzung)
Imports
Size (Anzahl Zeilen, Länge Zeilen, Anzahl Parameter)
Überprüft mittels Maven in den build prozess integriert, oder mittels Plugins in IDE

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
6
Q

Commit Conventions

Warum? Was macht eine gute Commit Message aus?

A

Drei wichtige Gründe: Beschleunigt Review Prozess, Erhöht Wartbarkeit, Unterstützen Erstellung von Release Notes.

Eine gute Commit Message besagt was geändert wurde, warum diese änderung gemacht wurde. Soll immer nur eine Änderung pro Commit sein. Idempotent (in sich geschlossen).

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
7
Q

JUnit Best Practices

4 Punkte

A
  • Testfälle isoliert. Jeder Test testet nur einen Aspekt/Zustand. Keine Abhängigkeiten zwischen Tests. Jeder Tests bereitet seine Daten vor und räumt sie danach wieder auf.
  • Klare Fehlermeldungen bei Assertions.
  • Testklassen im selben Package wie Klassen.
  • Coding Conventions einhalten.
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
8
Q

JUnit Bad Practices

5 Punkte

A
  • Test testet nicht gewünschtes Verhalten.
  • Test testet mehrere Zustände gleichzeitig.
  • Testdaten zufällig oder hardcoded im Test.
  • Überprüfung der Vorbedingungen (weil unnötig).
  • Logik in Tests.
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
9
Q

Test Driven Development (TDD)

3 Phasen

A
  1. Red: Implementierung und Ausführung der Testfälle. Tests müssen Fehlschlagen.
  2. Green: Implementierung der Funktionalität. Testfälle erfolgreich.
  3. Refactor: Optimierung der Implementierung. Keine Änderungen am Verhalten, tests sollten weiterhin erfolgreich sein.
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
10
Q

Test Doubles

Was sind sie, warum verwenden wir sie und was für Typen gibt es?

A

Austausch einer Komponente für eine simplifizierte Implementierung für Testzwecke.
+ Isolation
+ Effizienz
+ Flexibilität

Typen: Dummy Objekt, Fake Object, Spy, Stub, Mock

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
11
Q

Testdoubles

Dummy Objekt

A

Leerer Platzhalter ohne funktionalität.
Wird in die Komponente gereicht, aber nicht zur Verwendung intentioniert.
Bsp. new DummyCustomer() <- DummyCustomer eine eigene Klasse dafür.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
12
Q

Testdoubles

Fake Objekt

A

Ausführbare Implementierung, dient aber nicht zur Steuerung/Überprüfung des Testobjekts.
Verwendet wenn reale Implementierung zu langsam oder in Testumgebung nicht verfügbar (bsp. Datenbank).

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
13
Q

Testdoubles

Spy

A

Kein Ersetzen sondern Erweiterung einer Komponente um Überwachungsfunktionen.
Zwischen Testobjekt und abhängiger Komponente.
Überwacht aufrufe und leitet sie aber weiter.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
14
Q

Testdoubles

Stub

A

Ausführbare Implementierung.
Liefert vordefinierte Werte.
Ermöglicht indirekt Steuerung der zu testenden Komponenten.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
15
Q

Testdoubles

Mock

A

Ausführbare Implementierung.
Liefert vordefinierte Werte.
Im gegensatz zu Stubs sind Mocks aber selbst Teil des Tests- überwacht Interaktionen, übergebene Parameter und überprüft Erwartungen an das Testobjekt.
Erkennt wenn unerwartete Werte eingehen.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
16
Q

Mocking Frameworks

Mockito

A

Mocks können mithilfe von Mocking Frameworks implementiert werden.

when(T methodCall).thenReturn(T value);
when(T methodCall).thenThrow(Throwable t);

Mockito Argument Matcher zur Überprüfung der eingehenden Parameter.
Überprüfung der Aufrufe des Mocks mit Mockito.verify()

17
Q

Definition Continuous Integration (CI)

A

Entwicklungsansatz, bei dem Code Änderungen laufend integriert, getestet und gebaut werden.
Jede Integration wird duch einen automatisierten Buildprozess begleitet.
Standard in agilen Projekten.

18
Q

Grundprinzipien von CI

3

A

Häufige commits (“Commit daily - commit often”)
Häufige builds (“Build early - build often”)
Stabile builds (“Keep it green”)

19
Q

Vorteile von CI

4 Punkte

A
  • Schnelles und häufiges Feedback
  • Frühzeitige Identifikation von Fehlern
  • Vermeidung einer späten „Integrationshölle“
    und „works on my maschine“ Problematik
  • Reduktion manueller Tätigkeiten
20
Q

CI/CDE/CD

A

Continuous Integration (build, test, check)

21
Q

Refactoring

Was ist es und was zählt als Refactoring? Motivation?

A

Systematischer Ansatz zur Verbesserung der Code Qualität.
Keine Änderungen des sichtlichen Verhaltens.
Nur Verbesserungen an der Struktur des Codes (z.B. keine Performanceverbesserungen).

Motivation: Verbesserter Design, Erhöhung der Verständlichkeit, Auffinden von Fehlern.

22
Q

Technische Schuld

A

Schlechte Code Qualität = sich in Technische Schuld begeben.
Schulden müssen zurück gezahlt werden (durch Refactoring).
Anhäufung von schlechtem Code führt zu Verlust an Produktivität & Wartbarkeit, mehr Fehlern und höhere Fehlerkosten.

23
Q

Refaktoring Vorgehensweise

3 Schritte

A
  1. Identifikation
  2. Testabdeckung
  3. Ausführung
24
Q

Bad Smells

5 wichtige Gruppen

A

Bloaters (Code der über die Zeit gewachsen ist)
Object-Orientation Abusers
Couplers (Zu viel Abhängigkeit zwischen Klassen)
Change Preventers (Änderungen haben Auswirkungen auf viele andere Stellen)
Dispensables (Überflüssiger Code)

25
Refactoring Patterns | 6 Gruppen
Composing Methods Moving Features between Objects Organising Data Simplifying Conditional Expressions Simplifying Method Calls Dealing with Generalisation