Praktische Informatik I: Logging und Records
7 Questions
0 Views

Choose a study mode

Play Quiz
Study Flashcards
Spaced Repetition
Chat to lesson

Podcast

Play an AI-generated podcast conversation about this lesson

Questions and Answers

Was ist das Hauptziel der Boundary-Analysis?

  • Erzeugung von Zufallswerten für Tests
  • Validierung von Randwerten zur Sicherstellung der Funktionalität (correct)
  • Testen von Werten innerhalb eines gültigen Bereichs
  • Überprüfung von außergewöhnlichen Fällen in den Daten
  • Welches ist ein Beispiel für eine Partition bei der Schokoladenfabrik?

  • Die Anzahl der kleinen Tafeln ist gleich null.
  • Es sind nur große Tafeln und keine kleinen Tafeln erforderlich. (correct)
  • Das Gesamtgewicht überschreitet die Maximalkapazität.
  • Das Gesamtgewicht ist ein negatives Zahl.
  • Was wird zurückgegeben, wenn das Gesamtgewicht mit den verfügbaren Tafeln nicht erreicht werden kann?

  • Ein leeres Objekt
  • 1
  • 0
  • -1 (correct)
  • Welche Funktion hat die Methode calculate in der Klasse ChocolateBags?

    <p>Berechnung, wie viele Tafeln benötigt werden, um das Gesamtgewicht zu erreichen</p> Signup and view all the answers

    Welcher Testfall könnte durch das Konzept der Äquivalenzklassen abgedeckt werden?

    <p>Die Eingabewerte sind alle positiv.</p> Signup and view all the answers

    Was passiert, wenn die Anzahl der großen Tafeln kleiner ist als die maximale berechnete Anzahl?

    <p>Die Berechnung wird entsprechend angepasst.</p> Signup and view all the answers

    In welchem Szenario wird die Methode calculate unterfordert?

    <p>Wenn weniger als 0 Tafeln als Eingaben gegeben werden</p> Signup and view all the answers

    Study Notes

    Praktische Informatik I: Imperative Programmierung und Objektorientierung - Logging und Records

    • Das Thema ist Praktische Informatik I, konzentriert sich auf imperative Programmierung und Objektorientierung, mit einem Fokus auf Logging und Records.
    • Der Dozent ist Prof. Dr. Nico Hochgeschwender von der Universität Bremen.
    • Das Material basiert teilweise auf Vorlesungsfolien von Prof. Gips von der Hochschule Bielefeld.
    • Die Folien wurden am 10. Dezember 2024 präsentiert.
    • Die Veranstaltung ist Teil des Software Engineering for Cognitive Robots and Systems (SECORO) Programms.

    Lernziele

    • Die Studenten sollen das Konzept der Partitionen verstehen und anwenden, um Testfälle für eigene Probleme zu entwickeln.
    • Das Konzept der Äquivalenzklassen wird erklärt.
    • Die Erstellung und Ausführung von parametrisierten Tests mit JUnit für Problemstellungen wird gezeigt.
    • Das Konzept der Boundary-Analysis wird vermittelt, um es für eigene Problemstellungen anzuwenden.

    Wiederholung: Testen der Randwerte

    • Eine Schokoladenfabrik produziert Schokoladen-Pakete (ChocolateBags) mit variablen Gesamtgewichten.
    • Die Pakete können mit kleinen (1 kg) und grossen (5 kg) Tafeln gefüllt werden.
    • Die Füllung erfolgt zuerst mit grossen, dann mit kleinen Tafeln, falls notwendig.
    • Partitionen für Gesamtgewicht-Berechnungen und benötigte Tafeln werden identifiziert (z.B., kleene Tafel 1, grosse Tafel 1, Gesamtgewicht 10).
    • Codebeispiel (public class ChocolateBags) für die Berechnung der benötigten Tafeln ist in den Folien gegeben.

    Wiederholung: Testen der Randwerte (Fs.)

    • Beispiele für Tests (totallsTooBig, onlyBig) mit erwarteten Resultaten (z.B., Gesamtgewicht 10, kleene Tafel 5, grosse Tafel 3 -> Ergebnis 0, Gesamtgewicht 10, kleene Tafel 1, grosse Tafel 1 -> Ergebnis -1) werden gezeigt.
    • Tests sind mit JUnit geschrieben und im Code gezeigt.
    • Ein Fehlerbericht für ein fehlendes Ergebnis bei einer bestimmten Kombination von Gesamtgewicht und Anzahl an grossen und kleinen Tafeln wird thematisiert.
    • Boundary-Value-Analyse (Grenzwert-Analyse) wird für Problemstellungen mit Gesamtgewicht 17 kg demonstriert.

    Poor man's debugging mit System.out

    • Der Ansatz, System.out zur Ausgabe von Debugging-Informationen zu verwenden, wird kritisch betrachtet.
    • Der Ansatz hat Nachteile wie fehlende Übersichtlichkeit, geringe Wartbarkeit und ungünstige Performance.
    • Die Ausgabe erfolgt direkt auf die Konsole, ohne Kontrolle über den Ausgabeort.

    Java Logging API

    • Die Java Logging API (java.util.logging) besteht aus Anwendung, Logger, Handler, Output und Formatter.
    • Die Architektur ermöglicht eine strukturierte und erweiterbare Logarithmen.

    Erzeugen neuer Logger

    • Die Methode getLogger aus dem java.util.logging-Paket wird verwendet, um einen neuen Logger zu erzeugen.
    • Die Nutzung des voll qualifizierten Klassennamens für die eindeutige Identifizierung des Loggers wird empfohlen, um z.B. Fehlerquellen leichter zu lokalisieren.
    • Es gibt alternative Namen für die Lokalisierung der Herkunft des Fehlers.

    Ausgabe und Wichtigkeit von Logmeldungen

    • Java Logging definiert sieben log levels (SEVERE, WARNING, INFO, CONFIG, FINE, FINER, FINEST), um die Bedeutung und Priorität der Logmeldungen zu klassifizieren.

    Logging-Handler

    • Mehrere Handler können einem Logger zugeordnet sein.
    • Jeder Handler hat seinen eigenen Log-Level.
    • Standard-Handler (StreamHandler, ConsoleHandler, FileHandler) mit Formatter (z.B., SimpleFormatter, XMLFormatter) zur Ausgabe der Log-Informationen.

    Logger-Hierarchie

    • Logger bilden eine Hierarchie, welche über Namen (z.B., "a", "a.b") strukturiert ist.
    • Jeder Logger kennt seinen Eltern-Logger und es ist möglich, Log-Level per setUseParentHolders(false) zu deaktivieren, um diese Log-Weiterleitung zu kontrollieren.

    Record-Klassen: Motivation

    • Der Boilerplate-Code für die Implementierung von Klassen mit Datenattributen und Gettern kann mit Record-Klassen vereinfacht werden.
    • Ein public record Berg(String name, int hoehe) Beispiel wird gezeigt.

    Klasse Berg als Record

    • Record-Klassen sind immutable (unveränderlich), die Attribute sind private final und werden in den Konstruktoren initialisiert.
    • Record-Klassen bieten Getter für die Attribute.
    • Records werden von Java.lang.Record abgeleitet und können keine anderen Klassen erweitern.

    Records: Prüfungen im Konstruktor

    • Beispiele für die Überschreibung des Record-Konstruktors für die Validierung der Parameter (Name, Höhe) werden gezeigt.
    • Überladene Konstruktoren erlauben initialisierte Werte oder default Werte für die Attribute.

    Getter bei Records

    • Es werden Beispiele für Records mit und ohne explizit deklarierten Gettern gegeben.

    Kommandozeilenparameter und Auswertung von Kommandozeilenparametern

    • Parameter (z.B., --debug) können beim Start eines Programmes über die Kommandozeile übergeben werden.
    • Die übergebenen Parameter können geprüft und parsed werden, umz.B. Log Level zu setzen.

    java.util.properties

    • java.util.Properties wird für die Verwaltung von Schlüssel-Wert-Paaren (z.B., Configuration der Anwendung) eingesetzt.
    • Die Properties werden häufig mit der Endung .properties gespeichert.
    • Laden und Speichern von Properties ist möglich, z.B., mit load() und store().
    • ISO-8858-1-Kodierung ist für den Standard von Properties definiert.

    Studying That Suits You

    Use AI to generate personalized quizzes and flashcards to suit your learning preferences.

    Quiz Team

    Description

    In diesem Quiz zur Praktischen Informatik I werden zentrale Themen der imperativen Programmierung und Objektorientierung behandelt. Fokussiert auf Logging und Records, unterstützen die Lernziele die Studierenden dabei, Testfälle zu entwickeln und verschiedene Testmethoden wie Äquivalenzklassen und Boundary-Analysis zu verstehen. Ideal für Studierende im SECORO Programm.

    More Like This

    Logging in to Toast Tables App
    6 questions

    Logging in to Toast Tables App

    EnergyEfficientFlashback9329 avatar
    EnergyEfficientFlashback9329
    Logging
    10 questions

    Logging

    IndulgentJupiter avatar
    IndulgentJupiter
    Use Quizgecko on...
    Browser
    Browser