Sem II (Program I) - N2 Flashcards

1
Q

Wie testet man in JUnit das Werfen einer Exception?

A

Mit der Methode assertThrows kann getestet werden, ob eine spezifische Exception geworfen wird.

@Test
public void testEinzahlenFehlerfall() {
    assertThrows(IllegalArgumentException.class, () -> {
        ko.einzahlen(-3.5f);
    });
}

// Der Test besteht, wenn die Methode ko.einzahlen(-3.5f) eine IllegalArgumentException auslöst.
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
2
Q

Was zeigt ein Test-Report an und warum ist er wichtig?

A

Ein Test-Report zeigt nicht nur an, ob ein Test fehlgeschlagen ist, sondern auch den Grund für das Fehlschlagen.

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

Warum ist es wichtig, auch negative Tests durchzuführen, zum Beispiel beim Einzahlen auf ein Konto?

A

Negative Tests prüfen, wie das System auf ungültige Eingaben oder fehlerhafte Bedingungen reagiert.

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

Was ist assertSame in JUnit?

A

prüft hingegen, ob zwei Referenzen auf dasselbe Objekt zeigen.

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

Wann sollte man Tests in einer Softwareentwicklungsphase schreiben – vor oder nach der Implementierung?

A

Bei TDD werden Tests vor der Implementierung geschrieben. Dies stellt sicher, dass die Anforderungen klar definiert sind und die Implementierung zielgerichtet erfolgt.

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

Warum ist es nicht ausreichend, nur einen Test pro Methode zu schreiben?

A

Ein einzelner Test deckt oft nicht alle möglichen Anwendungsfälle und Randbedingungen ab.

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

Was ist assertNull?

A

überprüft, ob ein Objekt den Wert null hat

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

Was ist assertNotNull?

A

sicherstellt, dass ein Objekt nicht null ist.

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

Was sind die wesentlichen Merkmale der Softwarequalität?

A

Funktionalität, Zuverlässigkeit, Effizienz, Benutzbarkeit, Änderbarkeit (Wartbarkeit) und Übertragbarkeit.

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

Warum ist frühes Testen in der Softwareentwicklung wichtig?

A

Fehler sind teurer zu beheben, je später sie im Entwicklungsprozess entdeckt werden. Daher ist es wichtig, Fehler so früh wie möglich zu erkennen und zu beheben.

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

Welche Testebenen gibt es in der Softwareentwicklung?

A

Komponentenebene (Unit Test): Testen einzelner Software-Bausteine.
Modulebene (Integrationstest): Überprüfung der Zusammenarbeit mehrerer Komponenten.
Systemebene (Systemtest): Testen des gesamten Systems als Ganzes.
Anforderungseben: Überprüfung, ob die Anforderungen erfüllt sind.

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

What does @BeforeEach in Java JUnit do?

A

Выполняет метод перед каждым тестовым случаем.

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

What does @AfterEach in Java JUnit do?

A

Выполняет метод после каждого тестового случая.

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

What does @BeforeAll in Java JUnit do?

A

Выполняет метод однократно перед всеми тестами (например, для сложной подготовки).

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

What does @Disabled in Java JUnit do?

A

Временно отключает тест и выводит комментарий в протоколе тестирования.

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

Was ist Failure in JUnit?

A

Tritt auf, wenn ein Testfall fehlschlägt, was auf einen Fehler in der Implementierung der Anwendung hinweist.

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

Wie kann man die Laufzeit eines Tests in JUnit überprüfen?

A

Mit der Angabe eines Timeouts kann man die maximale Ausführungszeit eines Tests festlegen. Beispiel: @Test(timeout = 500) sorgt dafür, dass der Test fehlschlägt, wenn er nicht innerhalb von 500 Millisekunden abgeschlossen ist.

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

Warum sollte man einen Testfall als @Disabled annotieren und nicht einfach auskommentieren oder löschen?

A

Das Auskommentieren wirkt sich nicht auf Refactorings aus, und das Löschen entfernt den Test vollständig, was problematisch ist, wenn der Testfall später wieder relevant wird.

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

Warum ist es wichtig, Anwendungscode und Testcode in JUnit voneinander zu trennen?

A

Die Trennung von Anwendungscode und Testcode ermöglicht eine klare Struktur, sodass Testfälle in einer eigenen Klassenhierarchie erstellt werden können.

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

Welche Vorteile bietet die Annotation @BeforeAll in JUnit?

A

ermöglicht es, Vorbereitungen einmalig vor allen Tests durchzuführen, was nützlich ist, wenn zeitaufwendige Operationen wie das Erstellen von Objekten oder das Herstellen einer Datenbankverbindung erforderlich sind. Dies spart Zeit im Vergleich zur Ausführung vor jedem einzelnen Test.

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

Was ist der Zweck der JUnit-Annotation @AfterAll, und wann sollte sie verwendet werden?

A

@AfterAll wird verwendet, um Aufräumarbeiten einmalig nach der Ausführung aller Tests durchzuführen, wie z.B. das Schließen einer Datenbankverbindung. Sie ist hilfreich, um Ressourcen freizugeben, die während der Tests verwendet wurden.

22
Q

Wie kann man in JUnit die Ausnahmen eines Tests gezielt überprüfen?

A

Dies geschieht durch die Verwendung der assertThrows-Methode, z.B. assertThrows(IllegalArgumentException.class, () -> { … }).

23
Q

Was ist Polymorphie und wie hängt sie mit Vererbung zusammen?

A

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

24
Q

Was sind abstrakte Klassen und wann sollten sie verwendet werden?

A

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

25
Q

Was ist der Unterschied zwischen einer abstrakten Klasse und einer Schnittstelle?

A

Абстрактный класс может содержать как абстрактные, так и конкретные методы. Классы могут наследовать только от одного класса, но реализовывать несколько интерфейсов.

25
Q

Was sind finale Klassen und Methoden? Warum sollte man sie verwenden?

A

Финальные классы нельзя наследовать, а финальные методы нельзя переопределять. Они используются для защиты определенной функциональности или класса от изменений подклассами.

26
Q

Was ist der Unterschied zwischen einer abstrakten Klasse und einer Schnittstelle?

A

Абстрактный класс может содержать как абстрактные, так и конкретные методы. Классы могут наследовать только от одного класса, но реализовывать несколько интерфейсов.

27
Q

Was sind Wrapper-Klassen in Java und warum werden sie verwendet?

A

Классы-обертки в Java - это объекты, которые включают примитивные типы данных в иерархию классов Java. Они используются для методов манипулирования данными, например, для преобразований и сравнений.

public class WrapperExample {
public static void main(String[] args) {
// Пример с использованием Integer (обертка для int)
int primitiveValue = 42; // Примитивный тип данных
Integer wrappedValue = Integer.valueOf(primitiveValue); // Обернули в объект (boxing)
// Использование методов класса-обертки
String stringValue = wrappedValue.toString(); // Преобразование в строку
int parsedValue = Integer.parseInt(“123”); // Преобразование строки в int

    System.out.println("Примитивное значение: " + primitiveValue);
    System.out.println("Объект-обертка: " + wrappedValue);
    System.out.println("Строковое представление: " + stringValue);
    System.out.println("Распарсенное значение: " + parsedValue);

    // Пример с автоматической распаковкой (unboxing)
    int result = wrappedValue + parsedValue; // Обертка автоматически преобразуется в примитив
    System.out.println("Результат сложения: " + result);
} }
28
Q

Wie wird die Auswertungsreihenfolge von Operatoren in Java bestimmt?

A

Порядок вычисления операторов в Java определяется их приоритетом. Операторы с более высоким приоритетом вычисляются первыми. При одинаковом приоритете ассоциативность определяет, происходит ли вычисление слева направо или наоборот.

29
Q

Was ist der Unterschied zwischen Präfix- und Postfix-Inkrement-/Dekrementoperatoren in Java?

A

В префиксных операторах (++A, –A) переменная сначала увеличивается или уменьшается, затем возвращается значение. В постфиксных операторах (A++, A–) сначала возвращается текущее значение, затем выполняется увеличение или уменьшение.

Bei ++a sehen Sie sofort den erhöhten Wert (6)
Bei b++ sehen Sie zunächst den ursprünglichen Wert (5), aber danach ist b auch 6
Gleiches gilt für die Dekrement-Operatoren

Der wichtigste Unterschied wird besonders in Berechnungen deutlich:

y = ++x * 2 ergibt y = 12 (da x erst auf 6 erhöht wird)
y = x++ * 2 ergibt y = 10 (da x erst nach der Multiplikation erhöht wird)
30
Q

Welche Ausnahme gibt es bei der Auswertung von Operatoren in Java?

A

Операторы &&, || и тернарный оператор ?: имеют короткое замыкание. Это означает, что вычисление прекращается, как только результат определен, без проверки остальных операндов.

31
Q

Was ist eine finale Methode und warum sollte man sie verwenden?

A

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

32
Q

Welche Testarten gibt es neben Unit-Tests, und wie unterscheiden sie sich?

A

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

33
Q
A
34
Q

Welche Testarten gibt es neben Unit-Tests, und wie unterscheiden sie sich?

A

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

35
Q

Was sind die Vorteile von Test-Driven Development (TDD)?

A

Преимущества разработки через тестирование (TDD): способствует чистому коду, уменьшает ошибки на ранней стадии и обеспечивает лучшее покрытие кода.

36
Q

Что такое побочный эффект в программировании?

A

Побочный эффект возникает, когда во время вычисления выражения изменяется состояние переменной, например, когда значение статической переменной изменяется в памяти.

37
Q

Каков порядок вычисления параметров в Java?

A

В Java текущие параметры всегда вычисляются слева направо.

38
Q

Какие операторы имеют побочные эффекты?

A

Побочные эффекты могут возникать у унарных операторов как ‘a++’ или у комбинированных операторов присваивания как ‘a += b’.

39
Q

Что такое унарные операторы и какие примеры существуют?

A

Унарные операторы - это операторы, требующие только один операнд.

'a++' (постфиксный инкремент)
!b' (логическое отрицание)
'~a' (побитовое дополнение)
40
Q

Was ist der Unterschied zwischen arithmetischen, relationalen und logischen binären Operatoren?

A

Arithmetische Operatoren führen mathematische Berechnungen durch, z.B. a + b.
Relationale Operatoren vergleichen zwei Werte, z.B. a <= b.
Logische Operatoren verbinden boolesche Ausdrücke, z.B. a && b (logisches UND).

41
Q

Какую роль играют операторы сдвига и что они делают?

A

Операторы сдвига (‘»’, ‘«’) перемещают битовое представление значения влево или вправо.

42
Q

Что происходит при вычислении с побочными эффектами, когда в выражении используется несколько операторов?

A

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

43
Q

Как работают перегруженные и переопределенные методы в наследовании?

A

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

44
Q

Что означает “Полиморфизм” в объектно-ориентированном программировании?

A

Полиморфизм обозначает способность существования различных реализаций метода с идентичным заголовком (имя и параметры) в разных классах. Это позволяет методу, например print(), иметь специфический вывод для разных объектов (Person, Bruch), при этом вызов метода остается идентичным.

45
Q

Что входит в сигнатуру метода в Java, а что нет?

A

Сигнатура метода в Java состоит из имени метода и списка параметров. Тип возвращаемого значения не входит в сигнатуру.

46
Q

Warum sind überladene Methoden in Java sinnvoll?

A

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

47
Q

Warum ist es in Java nicht erlaubt, mehrere Implementierungen desselben Methodenkopfs innerhalb einer Klasse zu haben?

A

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

48
Q

Как в Java можно использовать концепцию наследования для переопределения методов?

A

Создавая подкласс, можно переопределить метод базового класса новой реализацией. Заголовок метода остается тем же, но тело метода изменяется для обеспечения специфического поведения в подклассе.

49
Q

В чем преимущество использования полиморфных методов в программе?

A

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