1. Was sind die Ziele eines Lasttests?
a. Überprüfung der Software auf Sicherheitslücken
b. Überprüfung der Software auf Korrektheit und Fehlerfreiheit
c. Feststellung der maximalen Nutzlast, die ein System bewältigen kann, und Beobachtung des Verhaltens unter dieser Last
d. Testen der Benutzerfreundlichkeit der Software
2. Was ist ein Fehler?
a. Nichterfüllung einer Anforderung (EN ISO 9000:2005)
b. Konformität mit EN ISO 9000:2005
c. Erfüllung aller Anforderungen
d. Abweichung zwischen Ist- und Sollverhalten
d. Abweichung zwischen Ist- und Sollverhalten [right]
a. Nichterfüllung einer Anforderung (EN ISO 9000:2005) [right]
3. Welches Modell beschreibt einen sequenziellen und phasenbasierten Ansatz für die Softwareentwicklung?
a. Agiles Modell
b. Wasserfallmodell
c. Spiralmodell
d. RAD-Modell
4. Welcher Zyklus ist NICHT typisch für iterative Methoden im Softwareentwicklungsprozess?
a. Entwurf
b. Analyse
c. Aufgabe
d. Verifikation
alle richtig, also keine ankreuzen
5. Welches der folgenden Aussagen ist KEIN Testziel?
a. Verbesserung der Benutzerfreundlichkeit
b. Informationen bereitstellen, um das Vertrauen in die Software zu erhöhen.
c. Überprüfen, ob alle Anforderungen erfüllt sind.
d. Qualitative Bewertung von Arbeitsergebnissen
6. Was sind Komponententests in der Softwareentwicklung?
a. Tests, die nur von Endbenutzern durchgeführt werden.
b. Tests, die sicherstellen, dass die einzelnen Teile oder Komponenten einer Software ordnungsgemäß funktionieren.
c. Tests, um die Benutzeroberfläche der Software zu überprüfen.
d. Tests, bei denen die gesamte Softwareanwendung als Ganzes überprüft wird.
7. Welche Aussage ist bei der Verwendung von JUnit richtig?
a. Test Methoden haben int als Rückgabewert.
b. Die Überprüfung der Testergebnisse erfolgt durch die Klasse Verify.
c. Wenn Tests in einer Standardumgebung ausgeführt werden, wie einer IDE (IntelliJ), müssen zusätzliche Schritte durchgeführt werden. d. Methoden, die Unit Tests implementieren, werden mit der Annotation @Test versehen, und Test Methoden haben void als Rückgabewert.
d. Methoden, die Unit Tests implementieren, werden mit der Annotation @Test versehen, und Test Methoden haben void als Rückgabewert. [right]
8. Was sind die Hauptunterschiede zwischen statischen und dynamischen Tests?
a. Statische Tests sind auf die Analyse von Code und Dokumentation ausgerichtet, ohne die tatsächliche Ausführung der Software.
b. Dynamische Tests beinhalten das Überprüfen der Software auf Laufzeitfehler und funktionales Verhalten.
c. Dynamische Tests überprüfen den Quellcode auf Fehler und Probleme.
d. Statische Tests umfassen das Testen von Software, während sie ausgeführt wird.
a. Statische Tests sind auf die Analyse von Code und Dokumentation ausgerichtet, ohne die tatsächliche Ausführung der Software. [right] b. Dynamische Tests beinhalten das Überprüfen der Software auf Laufzeitfehler und funktionales Verhalten. [right]
9. Was ist das Hauptziel der Software-Qualitätssicherung?
a. Fokussierung ausschließlich auf die technischen Aspekte der Softwareentwicklung
b. Sicherstellen, dass die Softwareproduktion am günstigsten ist
c. Gewährleistung des schnellsten Softwareentwicklungsprozesses d. Sicherstellen, dass die Software die Kundenzufriedenheit erfüllt
c. Gewährleistung des schnellsten Softwareentwicklungsprozesses d. Sicherstellen, dass die Software die Kundenzufriedenheit erfüllt [right]
10. Welches der folgenden ist ein Prinzip des Softwaretests?
a. Testing sollte erst nach Abschluss der Entwicklung durchgeführt werden
b. Nur das finale Testing ist notwendig für die Qualitätssicherung
c. Testing zeigt das Vorhandensein von Defekten, nicht deren Abwesenheit
d. Testing ist weniger wichtig als die Softwareentwicklung
c. Testing zeigt das Vorhandensein von Defekten, nicht deren Abwesenheit [right]
11. Worauf bezieht sich der Begriff 'Statement Coverage' im Softwaretesting?
a. Der Prozess der Überprüfung des Benutzerhandbuchs der Software
b. Der Anteil der ausführbaren Anweisungen im Code, die getestet wurden
c. Die Abdeckung von Benutzeranforderungen in der Softwaredokumentation d. Der Prozentsatz der im Testing abgedeckten Kundenrückmeldungen
b. Der Anteil der ausführbaren Anweisungen im Code, die getestet wurden [right]
13. Welche Aussage trifft auf GIT zu?
a. GIT ist hauptsächlich für die Verwaltung von kleinen Projekten konzipiert
b. GIT verwendet hauptsächlich binäre Dateiformate für die Versionskontrolle c. GIT unterstützt keine nicht-lineare Entwicklung
d. GIT wurde 2005 von Linus Torvalds entwickelt und kann große Projekte wie den Linux-Kernel effektiv verwalten
d. GIT wurde 2005 von Linus Torvalds entwickelt und kann große Projekte wie den Linux-Kernel effektiv verwalten [right]
14. Welche der folgenden Aussagen beschreibt korrekt eine Phase im MAVEN-Lebenszyklus?
a. validate : Führt die endgültige Verteilung des Pakets auf dem Server durch
b. compile : Generiert Quellcodedokumentation
c. test : Führt Tests aus, die im Quellcode eingebettet sind, ohne dass der Code in das endgültige Paket eingeschlossen wird
d. deploy : Entfernt alle generierten Dateien aus dem vorherigen Build
c. test : Führt Tests aus, die im Quellcode eingebettet sind, ohne dass der Code in das endgültige Paket eingeschlossen wird [right]
15. Was ist ein "Commit" in Git?
a. Ein Befehl zum Erstellen eines neuen Branches
b. Eine Funktion, um verschiedene Branches zu fusionieren
c. Ein Snapshot von Dateien, gespeichert in einer baumartigen Struktur, inklusive Metainformationen wie Autor, Datum, Kommentare
d. Ein Befehl, um lokale Änderungen mit dem Server zu synchronisieren
c. Ein Snapshot von Dateien, gespeichert in einer baumartigen Struktur, inklusive Metainformationen wie Autor, Datum, Kommentare [right]
17. Was ist der Hauptzweck von Performancetests?
a. Sicherstellung, dass die Software frei von Fehlern ist
b. Überprüfung der Benutzerfreundlichkeit der Software
c. Testen der Software-Sicherheitsfeature
d. Ermittlung, wie gut die Software unter verschiedenen Belastungen funktioniert
c. Testen der Software-Sicherheitsfeature d. Ermittlung, wie gut die Software unter verschiedenen Belastungen funktioniert
18. Was beschreibt ein Smoke Test?
a. Ein Test zur Überprüfung der Skalierbarkeit der Software
b. Ein vorläufiger Test, der grundlegende Funktionalitäten wie das Einloggen überprüft
c. Ein Test zur Überprüfung der Software-Sicherheit
d. Ein detaillierter Test aller Funktionen der Software
b. Ein vorläufiger Test, der grundlegende Funktionalitäten wie das Einloggen überprüft [right]
19. Was ist eine Funktion von MAVEN?
a. MAVEN verwaltet den Build-Prozess, Abhängigkeiten und stellt Reporting-Tools bereit
b. MAVEN ist ein reines Dokumentationstool
c. MAVEN unterstützt keine Java-basierten Projekte
d. MAVEN ist ausschließlich ein Tool zur Versionskontrolle
a. MAVEN verwaltet den Build-Prozess, Abhängigkeiten und stellt Reporting-Tools bereit [right]
20. Was beinhaltet ein Komponentendiagramm?
a. Die Abläufe oder Prozesse in einem System
b. Die zeitliche Abfolge von Nachrichten in einem System
c. Die Struktur und die Schnittstellen von Komponenten in einem System
d. Die Verhaltensweisen und Zustände von Objekten in einem System
c. Die Struktur und die Schnittstellen von Komponenten in einem System [right]
12. Was beschreibt ein Aktivitätsdiagramm?
a. Einen Ablauf oder Prozess, einschließlich Aktivitäten und Aktionen
b. Die Beziehungen zwischen Software und Hardware c. Die Struktur und Schnittstellen von Komponenten
d. Den zeitlichen Ablauf von Nachrichten in einem Szenario
a. Einen Ablauf oder Prozess, einschließlich Aktivitäten und Aktionen [right]
16. Welche Aussage trifft auf MAVEN zu?
a. MAVEN ist nur für kleine Projekte geeignet
b. MAVEN unterstützt keine Java-basierten Projekte
c. MAVEN ist ein reines Dokumentationstool
d. MAVEN ist ein Software Management Tool, basiert auf einem Project Object Model (POM) und verwaltet u.a. den Build-Prozess und Abhängigkeiten
c. MAVEN ist ein reines Dokumentationstool d. MAVEN ist ein Software Management Tool, basiert auf einem Project Object Model (POM) und verwaltet u.a. den Build-Prozess und Abhängigkeiten
Was ist der Unterschied zwischen Continuous Integration und Continuous Deployment?
Continuous Deployment (CD) geht weiter wie Continuous Integrattion (CI) und enthält dieses. Während CI höchstens automatisiert auf einem Test-Server deployed, wird bei CD automatisiert in einer produktiven Umgebung deployed.
Welche Aufgaben hat ein CI Server?
Automatisiert builds ausführen, Automatisierte Test ausführen, Doumentation erstellen, Statische Analyse durchführen, Test Deployment durchführen
Welcher Vorraussetzungen müssen erfüllt sein, damit ein CI Server verwendet werden kann?
Versionkontrolle und automatisierte Build Scripts
In welcher Datei werden in Maven die Abhängigkeiten zu anderen Projekten verwaltet?
pom.xml
Was ist statische Analyse? Geben Sie ein Beispiel an!
Prüfung und Bewertung von Qualitätsmerkmalen eines Produkts mit rechnergestützten Werkzeugen,
ohne es auszuführen.
Bespiele: Metriken bestimmen,
Überdeckungen bestimmen,
Fehlermuster suchen
Um ein Softwareprojekt für eine Webapplikation umzusetzen wird ein neues Team gebildet, dem Sie als Entwickler zugeordnet werden. Der Leiter des Teams plant Aufgrund des Aufwandes den Entwicklern zu verbieten Unit Tests zu schreiben und plant stattdessen die Qualität gegen Ende der Entwicklung mit Selenium Tests abzusichern. Er fragt Sie als erfahrene Entwickler um Ihre Meinung. Was antworten Sie?
Selenium
-wartungsanfällig
-unzuverlässig
-erst spät anwndbar
Junit
-aufwand verschiebt sich nach vorne
Selenium Tests sind sehr wartungsanfällig und unzuverlässig, deshalb sollten Sie nicht als einzige Testmethode eingesetzt werden. Auch können Sie erst wenn die komplette Applikation entwicklet wurde erstellt werden, also eher spät im Prozess.
Unit Tests hingegen haben alle diese Nachteile nicht und sollten deswegen auf alle Fälle implementiert werden. Der Aufwand fürs testen fällt dabei nicht zusätzlich an, sondern verschiebt sich nach vorne, es ist also nicht mehr Aufwand sondern mittelfristig eher weniger, da Fehler früher gefunden werden und besser lokalisiert werden können. Ich empfehle ein Mischung aus Unit und Selenium tests, wobei der großteil der Tests durch Unit tests abgedeckt wird, un die wichtigsten Anwendungsfälle durch Selenium Test überprüft werden.
Test Driven Development (TDD):
Entwicklungsansatz, bei dem Tests vor der eigentlichen Implementierung geschrieben werden.
Zyklischer Prozess: Schreiben eines Tests, Implementieren des Codes, Überprüfen durch den Test.
Fördert die Entwicklung von sauberem Code und verbessert die Testabdeckung.
Systemtest:
Überprüfung des gesamten Systems, um sicherzustellen, dass alle Komponenten korrekt zusammenarbeiten.
Ziel ist die Validierung, ob das System die spezifizierten Anforderungen erfüllt.
Testet funktionale und nicht-funktionale Aspekte der Software.
Akzeptanztest:
Letzter Testschritt vor der Freigabe einer Software für den Endbenutzer.
Überprüft, ob das System die vom Kunden festgelegten Anforderungen erfüllt.
Ziel ist die Sicherstellung der Benutzerakzeptanz.
Äquivalenzklasse:
Gruppe von Eingabewerten, die ähnliches Verhalten in einer Software erwarten lassen.
Eine repräsentative Auswahl von Werten aus einer Äquivalenzklasse wird für Tests verwendet.
Hilft, die Testabdeckung zu optimieren, ohne jeden möglichen Wert zu testen.
Testanalyse:
Prozess der Untersuchung von Anforderungen, um Testfälle zu identifizieren und zu entwickeln.
Ermöglicht die Erstellung von effizienten und umfassenden Testplänen.
Berücksichtigt verschiedene Testarten und -stufen, um sicherzustellen, dass die Software robust und fehlerfrei ist.
Testdriven / test vor der eigentlichen Implementierung
Systemtest / ganzes Sytem wird getestet in Produktivumgebung
Akzeptanztest / letzter Schritt vor der Softwareauslieferung
Stresstest
Lasttest
statisch oder dynamisch?
Integrationstest d
Codierrichtlinien s
Fehlerwirkung d
Mocks s
Black-Box Testen d
Inspektion s
Integrationstest - D (dynamisch)
Codierrichtlinien - S (statisch)
Fehlerwirkung - D (dynamisch)
Mocks - S (statisch)
Black-Box Testen - D (dynamisch)
Inspektion - S (statisch)
Drei unterschiede zwischen Integrationstest und Systemtest?
Testumgebung:
Integrationstests überprüfen die Schnittstellen und Interaktionen zwischen einzelnen Komponenten.
Systemtests prüfen das gesamte System in einer Umgebung, die der Produktionsumgebung ähnelt.
Testfokus:
Integrationstests konzentrieren sich auf die Integration von Komponenten und deren korrekte Zusammenarbeit.
Systemtests prüfen das Gesamtsystem, um sicherzustellen, dass es die funktionalen und nicht-funktionalen Anforderungen erfüllt.
Testtiefe:
Integrationstests sind spezifischer und beziehen sich auf die Integration von Modulen oder Komponenten.
Systemtests sind umfassender und prüfen das gesamte System in Bezug auf seine Endanwenderfunktionalität.
Indirekter input ist Eingabe zum Testobjekt beim test, welche nicht direkt über Eingabeparameter oder beim Erzeugen des Testobjekts übergeben wird.
Indirekter output ist Ausgabe des Testobjekt, das kein Rückgabewert oder keinem anderen beobachtbaren Verhalten des Testobjects entspricht.
indirekter input ist die eingabe zum testobjekt
indirekter outout ist die ausgabe des testobjekts
Warum Entwickler selbst nicht Programme testen
Er ist biased dadurch, dass er sich selber keine schlechte Qualität attestieren will, ihm fehlt also der notwendige Abstand zum Testobjekt.
fIhm fehtl eventuell das nötige Training/Wissen
Der Entwickler oft andere Prioritäten (Entwickeln, nicht testen),
Nennen Sie vier Hauptmerkmale der Softwarequalität nach ISO 25010?
Sicherheit
Wartbarkeit
Übertragbarkeit
Bedienbarkeit
Docker
Containerisierung: Docker ermöglicht die Erstellung und Verwaltung von Containern, die eigenständige, isolierte Ausführungseinheiten für Anwendungen sind.
Portabilität: Container sind portabel und konsistent über verschiedene Umgebungen hinweg, da sie alle benötigten Ressourcen enthalten.
Bereitstellung: Docker erleichtert die Bereitstellung von Anwendungen durch die Verwendung von Container-Images, die Anwendungscode und -abhängigkeiten enthalten.
Pipeline
Automatisierte Abfolge: Eine Pipeline ist eine automatisierte Abfolge von Schritten in der Softwareentwicklung.
Bereitstellung, Integration, Tests: Die Pipeline automatisiert typischerweise Schritte wie das Kompilieren, Integrieren, Testen und Bereitstellen von Anwendungen.
Konsistenz und Effizienz: Bietet einen effizienten, reproduzierbaren und konsistenten Ablauf für Codeänderungen durch verschiedene Entwicklungs- und Testumgebungen.
Förderung von CI/CD: Unterstützt die Prinzipien der kontinuierlichen Integration (CI) und kontinuierlichen Bereitstellung (CD) in der Softwareentwicklung.
Was für Tests gibts?
JUnit:
Art von Test: JUnit ist ein Framework für das Einheitentesten.
Zweck: Es wird verwendet, um einzelne Einheiten (z. B. Methoden, Klassen) des Codes zu testen, um sicherzustellen, dass sie wie erwartet funktionieren.
Beispiel: Testet, ob eine bestimmte Methode einer Klasse die erwarteten Ergebnisse zurückgibt.
Mockito:
Art von Test: Mockito ist eine Mocking-Bibliothek für Java.
Zweck: Es wird verwendet, um Mock-Objekte zu erstellen und das Verhalten von Abhängigkeiten (z. B. externe Klassen oder Schnittstellen) in einem Test zu steuern.
Beispiel: Mockt eine Datenbankverbindung, um sicherzustellen, dass eine Methode korrekt mit den erwarteten Daten interagiert.
Spy:
Art von Test: Ein Spy ist eine Technik, die in Mockito verwendet wird.
Zweck: Ein Spy ist ein echtes Objekt, das jedoch von Mockito überwacht wird, um festzustellen, welche Methoden aufgerufen werden und wie oft.
Beispiel: Ein Spy kann verwendet werden, um zu überwachen, wie oft eine bestimmte Methode aufgerufen wird, während der Rest des echten Objekts unverändert bleibt.
Selenium:
Art von Test: Selenium ist ein Framework für das End-to-End-Testen von Webanwendungen.
Zweck: Es wird verwendet, um sicherzustellen, dass eine Webanwendung in einem realen Browser ordnungsgemäß funktioniert, indem es Interaktionen mit der Benutzeroberfläche durchführt.
Beispiel: Automatisiert das Ausfüllen von Formularen, Klicken auf Schaltflächen und Überprüfen, ob die erwarteten Elemente auf einer Webseite vorhanden sind.
Zusammengefasst:
JUnit ist hauptsächlich für Einheitentests von Codeeinheiten verantwortlich.
Mockito ist eine Mocking-Bibliothek, die in Verbindung mit JUnit verwendet wird, um das Verhalten von Abhängigkeiten zu steuern.
Spy ist eine Funktion von Mockito, die echte Objekte überwacht, um zu überprüfen, wie oft bestimmte Methoden aufgerufen werden.
Selenium ist ein Framework für das End-to-End-Testen von Webanwendungen und simuliert die Interaktionen eines Benutzers mit der Benutzeroberfläche.
Übungsaufgabe
Mockito
import org.junit.Test;
import static org.mockito.Mockito.*;
public class MorningCheckTest {
@Test
public void testSayHello() {
// Prepare
Display display = mock(Display.class);
TimeProvider timeProvider = mock(TimeProvider.class);
// Set up mock behavior for timeProvider
when(timeProvider.getHour()).thenReturn(10); // Set the hour to a value before 12
MorningCheck morningCheck = new MorningCheck(timeProvider, display);
// Execute
morningCheck.sayHello();
// Verify that the correct message is set on the display
verify(display).setMessage("Good Morning!");
// Additional verification: Ensure that getHour was called on timeProvider
verify(timeProvider).getHour();
}
Indirekte Eingabe:
Die Klasse verwendet das TimeProvider-Interface, um die aktuelle Tageszeit zu erhalten. Hier ist timeProvider.getHour() die indirekte Eingabe, da es die Stunde von TimeProvider abruft.
TimeProvider
timeProvider.getHour()
Indirekte Ausgabe:
Die Klasse verwendet das Display-Interface, um eine Nachricht auf einem Display anzuzeigen. Hier ist display.setMessage("Good Morning!"); und display.setMessage("Good Afternoon!"); indirekte Ausgabe, da es die Anzeige über das Display-Interface ändert.
Display
display.setMessage("Good Morning!");
display.setMessage("Good Afternoon!");
Nutzeranforderung
Kernbedingung Notizapp
Notiz erstellen
-Name
-Titel
Notiz bearbeiten
-teilen
Notizz löschen
-auswählen
-löschen
Teilbedinungen
Ein Nutzer muss am System eingeben oder etwas auswählen können.
Definition: Ein Fehlzustand tritt auf, wenn ein System oder ein Programm in einem nicht beabsichtigten oder fehlerhaften Zustand gerät. Es ist eine Abweichung vom erwarteten Verhalten und kann durch Fehler im Code, Design oder durch unvorhergesehene Umstände verursacht werden.
Beispiel: In einer Notizen-App tritt ein Fehlzustand auf, wenn der Benutzer versucht, eine Notiz zu öffnen, aber die App unerwartet abstürzt. Der Absturz der App ist der Fehlzustand, der durch einen Fehler im Programmcode oder ein unerwartetes Eingabeverhalten verursacht wird.
Definition: Die Fehlerwirkung beschreibt die sichtbaren oder spürbaren Auswirkungen eines Fehlers auf das System oder die Benutzer. Es ist das beobachtbare Verhalten, das durch einen Fehler verursacht wird.
Beispiel: Bei einer E-Commerce-Website tritt die Fehlerwirkung auf, wenn der Bestellvorgang fehlschlägt, und der Benutzer erhält eine Fehlermeldung, die besagt, dass die Bestellung nicht abgeschlossen werden kann. Die Fehlerwirkung ist die fehlgeschlagene Bestellung und die angezeigte Fehlermeldung.
Last changeda year ago