Sem II (Program I) - N1 Flashcards

1
Q

Was sind manuelle Tests und wann könnten sie eingesetzt werden?

A

Manuelle Tests sind solche, bei denen der Programmierer die Ausführung und die Überprüfung der Ergebnisse manuell durchführt. Sie eignen sich besonders für einmalige, spezifische Testfälle oder für Testszenarien, bei denen eine automatisierte Prüfung schwierig ist.

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

Was ist die “Class Under Test” (CUT) in der modellbasierten Entwicklung?

A

Тестируемый класс” обозначает класс, который проверяется в рамках модульных тестов.

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

Was bedeuten die Farben in der JUnit-Testausgabe?

A

Ein roter Balken bedeutet, dass der Test fehlgeschlagen ist, während ein grüner Balken anzeigt, dass der Test bestanden wurde.

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

Was überprüft der folgende Unit-Test?

@Test
public void testGetKontostand() {
    Konto ko = new Konto();
    assertTrue(ko.getKontostand() == 0f);
}
A

Dieser Test überprüft, ob der Anfangskontostand eines neuen Kontos tatsächlich 0 ist. Es handelt sich um einen einfachen Test, der sicherstellt, dass das Konto korrekt initialisiert wurde.

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

Was bedeutet die Annotation @Test in einer JUnit-Testklasse?

A

Die Annotation @Test kennzeichnet eine Methode als Testfall. Diese Methode wird von JUnit ausgeführt, um zu überprüfen, ob eine bestimmte Bedingung erfüllt ist.

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

Was ist der Zweck der Methode assertTrue() in JUnit?

A

verwendet, um zu prüfen, ob eine gegebene Bedingung wahr ist. Ist sie nicht wahr, schlägt der Test fehl.

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

Wann verwendet man Test Driven Development (TDD)?

A

TDD wird eingesetzt, bevor der eigentliche Code geschrieben wird. Man entwickelt zuerst Tests für die gewünschten Funktionalitäten und schreibt dann den Code, um die Tests zu bestehen.

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

Wie kann man negative Tests mit JUnit durchführen, um Fehlersituationen abzudecken?

A

Negative Tests überprüfen, ob die Software erwartungsgemäß reagiert, wenn unerwartete oder fehlerhafte Eingaben auftreten. In JUnit kann dies durch die Verwendung von assertThrows() erreicht werden, um sicherzustellen, dass eine bestimmte Ausnahme geworfen wird.

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

Wie kann man sicherstellen, dass eine Methode explizit fehlschlägt?

A

Eine Methode kann absichtlich durch fail(“Nachricht”) zum Fehlschlagen gebracht werden, wenn bestimmte Bedingungen im Code nicht erfüllt sind. Dies ist nützlich, um festzustellen, ob der Code eine spezifische Ausführung erreicht.

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

Was bedeutet “modellbasierte Entwicklung” im Kontext des Testens?

A

Modellbasierte Entwicklung bedeutet, dass Softwareentwicklung und -tests auf Grundlage eines Modells durchgeführt werden. Dieses Modell beschreibt die zu testenden Funktionalitäten, zum Beispiel durch Klassen, Methoden und deren erwartetes Verhalten.

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

Warum ist es wichtig, die JUnit-Libs zum Build-Pfad hinzuzufügen?

A

Die JUnit-Libs müssen zum Build-Pfad hinzugefügt werden, damit die JUnit-Framework-Funktionen im Projekt verfügbar sind und die Testklassen korrekt ausgeführt werden können.

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

Was sind die wesentlichen Merkmale von Software-Qualität gemäß ISO 9126?

A

Software-Qualität umfasst Funktionalität, Zuverlässigkeit, Effizienz, Benutzbarkeit, Änderbarkeit und Übertragbarkeit.

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

Wie erreicht man eine hohe Software-Qualität?

A

Trennung von Anwendungs- und Testklassen für modularen Aufbau.
Kapselung von Instanz- und Klassenvariablen (private).
„Do One Thing“-Prinzip: Methoden sollen nur eine Aufgabe erfüllen.
Vermeidung von „Magic Numbers“: Stattdessen Konstanten verwenden.
Defensive Programmierung: Fehler antizipieren und behandeln.
Klare Namenskonventionen und Formatierung.

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

Was versteht man unter „defensiver Implementierung“ in der Softwareentwicklung?

A

Defensive Implementierung bedeutet, potenzielle Fehlerfälle vorwegzunehmen und angemessen darauf zu reagieren, z.B. durch Ankündigung und Behandlung von Ausnahmen (Exceptions) oder Rückgabe von Fehlercodes.

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

Welche Vorteile bietet die Verwendung von Unit-Tests?

A

Unit-Tests helfen dabei, die Funktionalität der Software zu überprüfen und Fehler frühzeitig zu erkennen.

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

Warum sollte eine Methode nur eine Aufgabe erledigen?

A

Eine Methode, die nur eine Aufgabe erfüllt, ist leichter zu verstehen, zu ändern und zu testen

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

Welche Kosten entstehen durch Fehlerbehebung in verschiedenen Phasen des Software-Entwicklungsprozesses?

A

Die Kosten zur Behebung von Fehlern steigen, je später sie im Entwicklungsprozess entdeckt werden. Fehler, die erst im Betrieb gefunden werden, sind in der Regel am teuersten zu beheben.

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

Kann in Java eine Klassenmethode mit objekt.methode() aufgerufen werden?

A

Nein, Klassenmethoden sollten mit Klasse.methode() aufgerufen werden. Es ist zwar technisch möglich, sie mit objekt.methode() aufzurufen, aber das ist nicht best practice.

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

Welche Testfälle sollten beim Testen von Software berücksichtigt werden?

A

Normalfall: Die üblichen(Обычные), erwarteten Eingaben.
Grenzfall: Testen von Eingaben an den Rändern der zulässigen Wertebereiche.
Bester Fall: Günstigster Fall für die Eingaben (z.B. bereits sortiertes Array).
Schlechtester Fall: Ungünstigster Fall für die Eingaben (z.B. umgekehrt sortiertes Array).
Unzulässige Eingaben: Absichtliche Fehlereingaben, um die Robustheit zu prüfen.
Ressourcen-Tests: Testen der Leistungsfähigkeit (z.B. sehr lange Arrays sortieren).

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

Wie sieht der typische Ablauf eines TDD-Zyklus aus?

A

Test schreiben: Einen Unit-Test für eine noch zu implementierende Funktion erstellen.
Implementieren: Minimalen Code schreiben, um den Test bestehen zu lassen.
Refaktorisieren: Den Code verbessern, ohne dass die Tests fehlschlagen.

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

Was ist beim Refactoring während des TDD wichtig?

A

Beim Refactoring sollte der Code verbessert oder vereinfacht werden, ohne dass die Funktionalität verändert wird.

22
Q

Wie kann man sicherstellen, dass Tests umfassend sind?

A

Tests sind umfassend, wenn sie alle relevanten Fälle abdecken, einschließlich der Normalfälle, Grenzfälle, Fehlerfälle und Leistungsanforderungen.

23
Q

Wie geht man bei der Entwicklung einer neuen Methode vor, wenn man TDD nutzt?

A

Начинают с создания скомпилированного заголовка метода без реализации. Затем пишется тест, описывающий требования к методу. Реализация выполняется итеративно, пока тест не будет успешным.

24
Q

Warum ist es wichtig, unterschiedliche Testfälle (wie Normalfall, Grenzfall, usw.) zu berücksichtigen?

A

Различные тестовые случаи помогают обеспечить надежность и устойчивость кода, гарантируя, что реализация правильно реагирует на разные типы входных данных. Они охватывают как обычные сценарии использования, так и граничные условия и потенциальные источники ошибок.

25
Q

Welche Vorteile bietet Test-Driven Development im Vergleich zum traditionellen Ansatz “Erst implementieren, dann testen”?

A

TDD способствует улучшению качества кода, так как тесты создаются до реализации и явно формулируют требования. Это помогает выявлять ошибки на ранних этапах и приводит к более четкому дизайну. Кроме того, облегчает рефакторинг, поскольку уже имеется обширный набор тестов.

26
Q

Welche Schwierigkeiten können bei TDD auftreten, wenn man eine neue Funktion entwickelt?

A

TDD может быть сложным, когда требования неясны или часто меняются. Также трудно писать тесты без достаточной информации о разрабатываемом методе. В таких случаях может потребоваться предварительное определение некоторых спецификаций.

27
Q

Wie geht man vor, wenn ein Test fehlschlägt, und welche Schritte sollten anschließend unternommen werden?

A

Если тест не проходит, разработчик должен проверить реализацию и изменить метод так, чтобы тест прошел. Этот процесс повторяется, пока все тесты не будут успешными. Затем можно провести рефакторинг для оптимизации кода, обеспечивая при этом успешное прохождение тестов.

28
Q

Warum ist das Testen von Ressourcenintensiven Fällen (wie z.B. langen Arrays) wichtig?

A

Тестирование ресурсоемких случаев важно для обеспечения производительности и эффективности программного обеспечения. Такие тесты гарантируют, что код не только функционально корректен, но и эффективно работает при высоких нагрузках или с большими объемами данных.

29
Q

Was ist Refactoring und welche Ziele verfolgt es?

A

Refactoring ist die Verbesserung des Quellcodes, ohne das Verhalten des Systems zu ändern. Die Ziele sind die Erhöhung der Wartbarkeit, Lesbarkeit und Verständlichkeit des Codes sowie die Erhöhung der Wiederverwendbarkeit.

30
Q

Wann sollte Refactoring durchgeführt werden?

A

Refactoring sollte durchgeführt werden, wenn alle Tests erfolgreich bestanden wurde Dies stellt sicher, dass die aktuellen Funktionalitäten korrekt sind, bevor der Code verbessert wird.

31
Q

Welche typischen Aktivitäten sind beim Refactoring üblich?

A
  • Изменение имен классов или методов
  • Удаление избыточного кода
  • Очистка дублированного кода
  • Объединение похожих классов
  • Преобразование классов без поведения в атрибуты
  • Разделение сложных классов на более простые
  • Реорганизация классов для увеличения наследования и связности
32
Q

Wie kann in JUnit sichergestellt werden, dass der Anfangszustand für jeden Testfall hergestellt wird?

A

В JUnit начальное состояние можно создать, используя метод с аннотацией @Before. Этот метод выполняется перед каждым тестовым случаем.

33
Q

Was ist ein Regressionstest und warum ist er wichtig?

A

Регрессионное тестирование - это тест, выполняемый после внесения изменений (например, рефакторинга) для проверки отсутствия новых ошибок (регрессий). Оно важно для обеспечения стабильности программного обеспечения.

34
Q

Wie wird in JUnit das Aufräumen nach einem Testfall organisiert?

A

Очистка после тестового случая может быть вынесена в метод с аннотацией @After. Этот метод выполняется после каждого теста для освобождения ресурсов, таких как файлы или соединения с базой данных.

35
Q

Welche Funktion hat die Methode assertEquals in JUnit?

A

assertEquals проверяет, соответствует ли фактическое значение (actual) ожидаемому значению (expected). Для чисел с плавающей точкой дополнительно определяется допуск (delta), устанавливающий допустимую разницу между значениями.

36
Q

Warum ist es sinnvoll, duplizierten Code zu bereinigen?

A

Устранение дублированного кода улучшает сопровождаемость и читаемость программы, снижает риск ошибок, так как изменения нужно вносить только в одном месте.

37
Q

Was ist der Zweck der Methode setUp() in JUnit, und wie wird sie implementiert?

A

Метод setUp() используется для создания определенного начального состояния перед каждым тестом. В JUnit он помечается аннотацией @Before для автоматического выполнения перед каждым тестом. Это помогает избежать повторяющихся инициализационных работ.

38
Q

Welche Vorteile bietet die Verwendung von Unit-Tests im Softwareentwicklungsprozess?

A
  • Рано обнаруживать ошибки.
  • Проводить автоматизированные регрессионные тесты, гарантируя, что изменения не вызывают новых ошибок.
  • Служить документацией ожидаемого поведения кода.
  • Облегчать рефакторинг, позволяя разработчикам убедиться в сохранении функциональности.
39
Q

Was bedeutet “Regression” im Kontext von Softwaretests, und wie kann sie vermieden werden?

A

Регрессия означает повторное появление ошибок в программном обеспечении, которые уже были исправлены ранее. Ее можно избежать, проводя регрессионное тестирование после каждого изменения, чтобы убедиться, что существующие функции продолжают работать корректно.

40
Q

Was ist der Unterschied zwischen den Methoden assertTrue und assertEquals in JUnit?

A

assertTrue überprüft, ob der übergebene Ausdruck true ergibt.
assertEquals prüft, ob zwei Werte gleich sind.

41
Q

Welche Vorteile bringt die Neuanordnung von Klassen und Operationen im Rahmen des Refactorings?

A

Реорганизация классов и операций улучшает связность и когезию в коде, облегчает обслуживание и может повысить переиспользуемость за счет создания более четких абстракций.

42
Q

Wie kann redundanter Code durch das Refactoring beseitigt werden?

A

Избыточный код можно устранить путем выделения общих функций в отдельные методы или классы, позволяя вызывать их из нескольких мест вместо дублирования кода.

43
Q

Was bedeutet es, eine komplexe Klasse in mehrere einfachere Klassen aufzuteilen, und warum wird dies gemacht?

A

Разделение сложного класса на несколько более простых выполняется для уменьшения сложности, улучшения читаемости и облегчения обслуживания кода. Каждый класс должен иметь четко определенную задачу, что повышает модульность.

44
Q

Was ist Test-Driven Development (TDD) und wie läuft es ab?

A

TDD ist eine Softwareentwicklungsmethode, bei der zuerst Tests für eine Funktion geschrieben werden, bevor die Funktion selbst implementiert wird. Der Ablauf umfasst:

1) Erstellung einer neuen Methode mit einem Dummy-Implementierung.
2) Schreiben von Testfällen für diese Methode.
3) Herstellung eines Anfangszustands (z.B. durch @Before oder setUp()).
4) Implementierung der eigentlichen Tests (z.B. durch @Test).
5) Aufräumen nach den Tests (z.B. durch @After oder tearDown()).
6) Ausführen der Tests – zuerst fehlschlagen lassen.
7) Implementierung der Methode, um die Tests zu bestehen.
8) Tests erneut ausführen, bis sie alle bestehen.
9) Refactoring des Codes.

45
Q

Welche Vorteile bietet TDD?

A
  • Четко документированные требования через тестовые случаи.
  • Улучшенное качество кода с меньшим количеством ошибок.
  • Сокращение времени разработки, так как тесты создаются заранее и предотвращаются последующие исправления ошибок.
  • Способствует структурированному подходу через метод “сначала тест”, предотвращая необдуманное программирование.
46
Q

Welche Schritte sind notwendig, um eine Testmethode nach TDD zu implementieren?

A

Создание тестируемого метода с заполнителем тела метода.
Реализация тестовых случаев.
Выполнение тестов и корректировка метода до успешного прохождения тестов.
Проведение рефакторинга для оптимизации кода.

47
Q

Wie viele Tests sollten für eine Methode geschrieben werden?

A

Для каждого метода следует создать как минимум один тестовый случай, но обычно этого недостаточно. Необходимо создавать тесты для каждого типичного использования метода, что часто включает последовательность вызовов методов.

48
Q

Welche Arten von Fehlerfällen sollten in Tests berücksichtigt werden?

A

Ungültige Eingaben wie negative Werte.
Grenzwerte und unerwartete Situationen.
Ausnahmebedingungen wie das Werfen einer Exception.

49
Q

Vergleicht Arrays in JUnit?

A

assertArrayEquals(expected, actual)

50
Q

assertSame(expected, actual) JUnit
assertNotSame(unexpected, actual) JUnit

A

Prüft, ob zwei Referenzen auf dasselbe oder unterschiedliche Objekte zeigen.