‏ ‏ ‎ ‏ ‏ ‎

1. Testtermine

  • 1. Dez. 2025

  • es wurden statt dem 2. Test schriftliche und mündliche Mitarbeitsüberprüfungen vereinbart

2. 2025-09-15

2.1. Projekte

  • Franklyn weiterarbeiten

  • ev. Seniorenheim

2.1.1. Themen

  • Gesundheit

  • Umwelt

  • Bildung

  • Beeinträchtigte Personen

3. 2025-09-16

3.1. Authentifizierung und Autorisierung

  • Statuscodes sind nicht korrekt

    • 401 Unauthorized sollte unauthenticated heissen

    • 403 Forbidden sollte unauthorized heissen

3.1.1. Ablauf einer HTTP Anfrage

  1. Zugriff auf eine geschützte Ressource durch Request.

  2. Server antwortet mit 401 Unauthorized und fordert Authentifizierung an. Der Client wird an den Keycloak weitergeleitet.

  3. Client authentifiziert sich beim Keycloak (z.B. durch Login).

  4. Keycloak sendet ein Token (z.B. JWT) an den Client zurück.

  5. Client sendet das Token in der nächsten Anfrage an den Server.

  6. Server überprüft das Token und gewährt Zugriff auf die Ressource, wenn das Token gültig ist.

3.1.2. Keycloak

Realm
User
Client
Role
  • Collection von Rechten

Group
  • Collection von Usern

4. 2025-09-22

4.1. Projektideen Stütz

  • Franklyn: Lehreraccounts, KI-Detektion, ev. weitere Funktionen wie aufzeigen

    • Clemens, Jakob, Eldin, Gregor

  • LeoIoT Jonas, Daniel L, Paul, Elias, Stefan

    • Sensoren in Klassen mit Dashboard

    • Dashboard für PV-Anlage und Verbräuche der Schule

  • Trainingsplaner (Paul, Elias, Daniel L.)

  • HTL 3D für Elternsprechtag

  • MusicVoting

    • Miriam, Simone, Marlies

  • Der sprechende Eisbär (Chatbot mit KI)

  • Dashboard mit Grafana und InfluxDB für eine Mineralölfirma

    • Hanan

    • Almin

  • FPV-Drohnen Assistent (David, Simon)

4.2. Projektideen Schüler

  • Brailleleiste

  • Lernplattform (Hanan) vgl. Code Academy

  • HÜ-Planer (Clemens, Jakob)

  • Whatsapp-Alternative (Miriam)

  • SOS-Taschenrechner (Daniel R.)

4.3. Aufgabenstellung

  • Erstellung einer Projektidee mit Projektkonzept

    • User Stories

    • Systemarchtitektur

5. 2025-09-23 Keycloak

IAM …​ Identity and Access Management

Keycloak ist ein Softwareprodukt zur Verwaltung von Identitäten und Zugriffsrechten in Anwendungen und Diensten. Es bietet Funktionen wie Single Sign-On (SSO), Benutzerverwaltung, Rollen- und Berechtigungsmanagement sowie Integration mit verschiedenen Authentifizierungsprotokollen wie OAuth2, OpenID Connect und SAML.

reverse proxy webpack

Die Payload eines tokens ist nicht verschlüsselt jedoch fälschungssicher signiert.

  • Was ist Keycloak

    • Keycloak ist eine Open-Source Identity- und Access-Management-Lösung (IAM), die Single Sign-On (SSO) für Anwendungen und Services bereitstellt. Es übernimmt zentrale Aufgaben im Bereich der Authentifizierung und Autorisierung, basierend auf modernen Sicherheitsstandards wie OAuth 2.0, OpenID Connect (OIDC) und SAML 2.0.

  • CORS (Cross-Origin-Ressource-Sharing)

    • CORS (Cross-Origin Resource Sharing) ist ein Sicherheitsmechanismus in Webbrowsern, der den Zugriff von Webanwendungen auf Ressourcen über Domänengrenzen hinweg regelt.

cors
  • Was ist Kubernetes?

    • Kubernetes ist ein Container-Orchestrierungstool, welches dafür sorgt , dass Container automatisch gestartet, überwacht, skaliert und im Fehlerfall neu gestartet werden.

6. 2025-10-07

6.1. Pure Web

 npm create vite
  • Wir verwenden Vite als Build-Tool (Bundler)

    • https://vitejs.dev/guide/

    • Erstellt ein großes javascript file mit allen Abhängigkeiten.

    • Unterstützt auch React, Vue, Svelte, …​

    • Einfacher zu konfigurieren als Webpack

    • Vergleichbar mit webpack

  • package-lock.json zu .gitignore hinzufügen

  • Model erstellen

6.1.2. Warum Typescript Module?

  • Auf einer herkömmlichen Website wird alles javascript direkt im globalen Scope ausgeführt. Eigener Code im globalen Scope kann leicht mit fremdem Code kollidieren (z.B. Bibliotheken) und ist daher unwartbar.

  • Deshalb werden Typescript Module verwendet. Diese haben ihren eigenen Scope und kollidieren nicht mit anderem Code.

typemodule

6.1.3. Model

  • Das Model ist die Wahrheit, die reine Wahrheit und nichts als die Wahrhei → Single Source of truth

  • Das Aussehen des Bildschirms wird AUSSCHLIESSLICH durch das Model bestimmt. In der GUI werden keine Zustände gespeichert.

7. 2025-10-21

7.1. Trennung von Layout und Daten

7.1.1. MVC

7.1.2. MVVM

Ein Model ist immer notwendig. Ein Model ist die Wahrheit, die reine Wahrheit und nichts als die Wahrheit.
  • Problem: Wir sollten die Daten nicht in den Komponenten speichern.

  • Abhilfe: Die Daten sollten zentral gespeichert werden → store

8. 2025-11-04

tests in projekten

9. 2025-11-10

9.1. Backlog mit User Stories

Jede Gruppe muss ein Backlog erstellen, in dem alle User Stories für das Projekt gesammelt werden. Dabei ist zu beachten, dass die User Stories klein genug sind, um in einem Sprint umgesetzt werden zu können. Auch sind nur wenige User Stories detailliert auszuarbeiten, die meisten sollten nur grob beschrieben werden, da diese erst späte im Projekt detailliert werden.

9.2. Systemarchitektur

Abgeleitet vom Backlog ist ein erster entwurf der Systemarchitektur zu erstellen. Dabei sind die wichtigsten Komponenten des Systems zu identifizieren und deren Zusammenspiel zu beschreiben. Auch sind die wichtigsten Technologien und Frameworks zu benennen, die im Projekt verwendet werden sollen.

10. 2025-12-02 [Hanan Mehic]

10.1. Kubernetes

kubectl
YAML-Konfigurationsdatei für Kubernetes.
apiVersion: apps/v1
kind: Deployment
metadata:
  name: postgres
spec:
  replicas: 1
  selector:
    matchLabels:
      app: postgres
  template:
    metadata:
      labels:
        app: postgres
    spec:
      containers:
        - name: postgres
          image: postgres:16-alpine
          ports:
            - containerPort: 5432
          env:
            - name: POSTGRES_PASSWORD
              value: "demo"
            - name: POSTGRES_USER
              value: "demo"
            - name: POSTGRES_DB
              value: "demo"
          volumeMounts:
            - name: postgres-storage
              mountPath: /var/lib/postgresql/data
      volumes:
        - name: postgres-storage
          persistentVolumeClaim:
            claimName: postgres-pvc

10.2. Port Forwarding

  • Port Forwarding ist eine Netzwerktechnik, die es ermöglicht, eingehende Datenpakete, die an einer bestimmten Adresse und einem externen Port ankommen, zu einem bestimmten Gerät und einem internen Port im privaten Netzwerk umzuleiten. Sie ist notwendig, da Geräte in deinem privaten Netzwerk standardmäßig durch eine Firewall verborgen sind.

11. 2025-12-22

11.1. Teststrategien

  • Vorgehen zum Auswählen von Testfällen

  • Äquivalenzklassen

  • Grenzwertanalyse

testen einer methode
testen aequivalenzklassenmethode
testen grenzwertanalyse

Testobjekte: * Black-Box-Tests * White-Box-Tests * Gray-Box-Tests

11.1.1. Testaufbau

  • Arrange - Act- Assert (AAA-Pattern)

  • Given - When - Then (GWT-Pattern)

  • Mock

    • Mocking bedeutet täuschen oder vortäuschen

    • Ein Mock-Objekt ist ein Objekt, das das Verhalten eines echten Objekts simuliert.

    • Mocks werden verwendet, um Abhängigkeiten zu isolieren und kontrollierte Testumgebungen zu schaffen.

    • Bibliotheken: Mockito, JMock, EasyMock

    • Mock Objekte können auch Stubs oder Spies sein.

      • Ein Stub ist ein einfaches Mock-Objekt, das vordefinierte Antworten auf Methodenaufrufe zurückgibt.

      • Ein Spy ist ein Mock-Objekt, das das Verhalten eines echten Objekts überwacht und aufzeichnet.

  • Philipp Hauer’s Blog - Modern Best Practices for Testing in Java

testebenen

12. 2026-01-12

12.1. Testen des Backends

  • Unit-Tests (assertj-core)

  • Integrationstests (assertj-db)

siehe im Ordner labs das Projekt testen.

13. 2026-01-20 [A. Mahmutovic]

13.1. API Testing mit httpyac

Um API-Endpunkte automatisiert und reproduzierbar zu testen, verwenden wir das Tool httpyac.

13.1.1. Installation und Setup

Die Installation erfolgt lokal im Projektverzeichnis (Ordner api), um globale Abhängigkeiten zu vermeiden.

# Initialisierung des API-Ordners
cd api
npm init -y

# Lokale Installation von httpyac
npm install httpyac

13.1.2. Erstellen von Requests

Requests werden in einer .http Datei definiert. Mit ?? werden Test-Assertions direkt unter dem Request eingefügt.

# @name clients
GET http://localhost:8080/clients
?? status == 200

13.1.3. Automatisierung (package.json)

Um die Tests einfach über die CLI zu starten, wird ein Script in der package.json hinterlegt:

"scripts": {
  "test": "httpyac --send --all --bail request.http"
}

Der Aufruf erfolgt dann mittels:

npm test

13.1.4. Konfiguration mit Variablen

Für unterschiedliche Umgebungen wird eine http-client.config.js erstellt. In der request.http kann dann die Variable {{host}} statt localhost:8080 verwendet werden.

13.2. Code Coverage mit JaCoCo

JaCoCo (Java Code Coverage) misst, wie viel Prozent des Codes durch Tests tatsächlich ausgeführt werden.

13.2.1. Konfiguration Quarkus

Die Integration erfolgt über die pom.xml und die application.properties.

<dependency>
  <groupId>io.quarkus</groupId>
  <artifactId>quarkus-jacoco</artifactId>
  <scope>test</scope>
</dependency>

In den application.properties muss das Paket-Format umgestellt werden, um auch Integration-Tests korrekt zu erfassen:

quarkus.package.type=uber-jar

13.2.2. Ausführung

Die Reports werden beim Build-Prozess generiert:

mvn package
# Starten mit JaCoCo Agent (falls Integrationstests manuell geprüft werden)
java -jar target/*-runner.jar

Der fertige Report ist als interaktive Webseite unter target/jacoco-report/index.html verfügbar.

13.3. Test-Strategie (Prof. Aberger)

  • Code Coverage Ziel: Ein Abdeckungsgrad von ca. 80% wird angestrebt.

  • Sinn des Testens: Die Abdeckung ist der Hauptgrund für das Testing, um die Stabilität bei Refactorings zu gewährleisten.

  • Code Design: Verwendung von Expressions (z.B. Switch-Expression mit return) statt Statements erhöht die Testbarkeit und Übersichtlichkeit.

    • Unnötige Getter und Setter sollten vermieden werden (Datenklassen/Records), da diese die Coverage-Statistik verfälschen (Boilerplate-Code ohne Logik).

// Effizientes Design: Expression statt Statement
public String resolve(int code) {
    return switch (code) {
        case 200 -> "OK";
        default -> "Error";
    };
}

13.4. Kubernetes

kubectl
YAML-Konfigurationsdatei für Kubernetes.
apiVersion: apps/v1
kind: Deployment
metadata:
  name: postgres
spec:
  replicas: 1
  selector:
    matchLabels:
      app: postgres
  template:
    metadata:
      labels:
        app: postgres
    spec:
      containers:
        - name: postgres
          image: postgres:16-alpine
          ports:
            - containerPort: 5432
          env:
            - name: POSTGRES_PASSWORD
              value: "demo"
            - name: POSTGRES_USER
              value: "demo"
            - name: POSTGRES_DB
              value: "demo"
          volumeMounts:
            - name: postgres-storage
              mountPath: /var/lib/postgresql/data
      volumes:
        - name: postgres-storage
          persistentVolumeClaim:
            claimName: postgres-pvc

13.5. Port Forwarding

  • Port Forwarding ist eine Netzwerktechnik, die es ermöglicht, eingehende Datenpakete, die an einer bestimmten Adresse und einem externen Port ankommen, zu einem bestimmten Gerät und einem internen Port im privaten Netzwerk umzuleiten. Sie ist notwendig, da Geräte in deinem privaten Netzwerk standardmäßig durch eine Firewall verborgen sind.

14. 2026-01-27

mqtt vs rest
Image von Mr. Mehic
mqtt