‏ ‏ ‎ ‏ ‏ ‎

1. 2021-09-23, Do.

  • Anwesend: M.Bucek

  • Vorläufige Einteilung der Projektgruppen

2021 09 23.projektgruppen

2. 2021-09-27

git folder

2.1. Projekte festgelegt

3. 2021-10-05

  • Projektarbeit (UCD und CLD)

  • Datenmodelle (Beispielskatalog)

    • Bsp 4 - Kinokette

      • CLD wurde teilweise erarbeitet

Übung: Fertigstellen des CLDs bis Donnerstag 7.10.2021

4. 2021-10-11

4.1. Erstellung von Asciidoctor-Dokumenten

Es wurde im Detail erläutert und vorgezeigt, wie man gh-pages mit Asciidoctor und revealjs erstellen kann.

5. 2021-11-22 (Distance Learning)

5.1. Aufsetzen des Projekts

  • Eintragen des Projekts im YouTrack

  • Verbindung zum VCS herstellen

  • Definieren der User Stories und Eintragen ins YT

  • Definieren von Tasks, Zuweisen zu Personen, Eintragen ins YT

  • Erstellen von Sprints (sprint 1, sprint 2) als zeitliche Komponente

  • Die jeweiligen Commits sind den Tasks zuzuweisen (→ in YT sind bei den Tasks die Commits aufgelistet)

5.2. Projektthemen

Projekt Teammitglieder Anmerkung

Absolventenverband FIT

Niklas Aichinger, Julia König

Repository von M.Bucek

LeoCompetition

Christoph Handel, Lukas Baumgartner, Joachim Pelzeder

Vinitor

Sheila Hautzmayer, Anna Hartl

Repository bei Vinitor (gitlab)

Beeyond

Markus Remplbauer, Nico Hirsch

LeoCode

Florian Keintzel, Raphael Ablinger, Oliver Sugic

School-IoT

Jakob Rathberger, Philipp Kerschbaum

LeoQuest

Edina Abazovic, Sebastijan Bogdan, Marcel Plakolb, Paul Binder

Franklyn

Tamara Melcher, Michael Tran

Leonie-Chatbot (LeonieWeb)

Darius-Cristian Pavelescu, Niklas Neudorfer, Johannes Tunc

5.3. Erstellen von Protokollen

  • Jedes Gespräch mit Nicht-Teammitgliedern ist zu protokollieren

    • ev. Gedächtnisprotokoll

  • Die Protokolle sind im adoc-Format zu erstellen

  • Wenn man will kann man diese Protokolle in die gh-pages einbinden (vgl quarkus-technology-notes)

    <<20yy-mm-dd-thema.adoc>>
  • Vorlage für Protokolle

6. 2021-11-23

6.1. Vorgehensweise beim Projekt

6.1.1. gh-pages

  • Die Projektgruppen arbeiten selbstständig an Ihren Projekten, dh es wird nicht gewartet bis jede Kleinigkeit mit dem Betreuungslehrer besprochen wird.

  • Ist keine Arbeit zu machen, wird aktiv nachgefragt und neue User Stories werden vereinbart.

  • Es sind gh-pages zu erstellen, mit einer kurzen Beschreibung des Projekts

    • Die gh-pages dienen als Landing Page, dh wenn Besucher der Website, die keine Ahnung vom Projekt haben, dies lesen, so soll ihnen ungefähr klar sein, um was es geht

    • Wir verwenden ein jam-stack.

      • j → javascript; a → api; m → markup language

    • Dann werden die anderen Entwurfsdokumente, Protokolle usw verlinkt

    • Bsp: Projekt Netunus

6.1.2. Youtrack

  • Ausgehend von den Use Cases werden die User Stories (aus Gründen der Vereinfachung) abgeleitet

  • In Youtrack wird für jede User Story eine Swimlane (Zeile) erstellt

  • Für jede User Story werden Tasks erstellt

  • Die Tasks werden einem oder mehreren Teammitgliedern zugewiesen

  • (Wenn man auch die Storypoints vergibt, kann man ein Burndown-Chart generieren lassen )

  • Als zeitliche Komponente (Fertigstellungstermin) sind Sprints zu erstellen

    • Sprints werden mit "Sprint 001 xxx", "Sprint 002" usw bezeichnet

    • Die Sprints werden den einzelnen Tasks (ev auch US) zugewiesen.

  • Jeder Commit ist den einzelnen Tasks zuzuordnen

    • zB Commit-Message: bla bla #leocomp-3 in progress

Grundprinzip: Wir überlegen uns, was wir tun, wir tun es und wir dokumentieren das Tun

6.2. Projektarbeit ist zu dokumentieren

  • Die Teams werden darauf hingewiesen, dass die Projektarbeit zu dokumentieren ist:

    • Zuerst sind im Youtrack User-Stories einzutragen

    • Für diese User-Stories sind Tasks zu erstellen

      • Diese müssen den einzelnen Teammitgliedern zugewiesen werden

      • weiters sind die Sprints (zeitliche Komponente) festzulegen

      • Die einzelnen Commits sind den Tasks zuzuordnen.. Im Youtrack muss man ersehen

zuordnung commit task yt

7. 2021-12-06

7.1. Testen im Rahmen der Qualitätssicherung

7.2. Grundprinzipien

  • Objektorientierung (Objektidentität)

  • Programmieren gegen Schnittstellen

  • Single-Responsibility-Principle

  • Open/Closed Principle

7.2.1. Analytische Maßnahmen

  • Buch Seite 322

  • Statische Methoden

  • Dynamische Methoden (Testen)

  • Black-Box

black box white box
Testfallspezifikation - man überlegt sich, wie die zu erstellenden Testfälle aussehen
  • Äquivalenzklassenmethode

  • Grenzwertfallanalyse

    • Testfall auf der Grenze des Wertebereichs

    • Testfall knapp über der Grenze

    • Testfall knapp unter der Grenze

  • White Box

  • Grey Box

pfadabdeckung
v modell

8. 2022-01-10

9. 2022-01-18

v modell
  • Jede Komponente soll getestet werden

  • Die Tests sollen voneinander unabhängig sein (beliebige Reihenfolge)

  • Es sollen Tests auf den verschiedenen Testlevels (Modultest / Integrationstest / Systemtest / Akzeptanztest) erstellt werden

Table 1. Testplan
Testlevel Testmethode Testgegenstand Erwartetes Verhalten

Modultest

MyTest::calcAgeWith100y_Fail

berechnetes Altersfeld Person

Column 4, row 1

Systemtest

…​

…​

…​

10. 2022-01-24

10.1. Informationswürfel

  • relationale DB vs noSQL-DB

10.2. Vorgehensmodelle

  • Wasserfallmodell

  • eXtreme Programming

  • Scrum

10.3. Software-Qualitätsmanagement

  • Zertifizierungen

    • ISO 9000

    • TQM

    • CMM

    • SPICE

11. 2022-02-14 - DevOps

  • Please, watch this video

12. 2022-03-01

12.1. Übung: Erstellung von Dockerfile 's

  • Erstellen Sie für jede Datenbank ein eigenes Verzeichnis in Ihrem Microprojekt

12.1.1. Derbydb

  • Die verschiedenen Dockerfiles sind jeweils in einem eigenen Verzeichnis mit aussagekräftigem Namen

  • Erstellen Sie ein Dockerfile für die DerbyDb

    • Eine Version soll die Daten der DB im Container speichern.

    • eine zweite Version soll die Daten mittels Bind Mount im Ausführungsverzeichnis im Verzeichnis data speichern.

  • Erstellen Sie

    • einen Aufruf mittels docker-Command

    • erstellen Sie einen Aufruf mittels docker-compose

      • fügen Sie der docker-compose Konfiguration noch einen Container mit einem nativen Quarkus Server hinzu, der Daten in der Datenbank speichert.

12.1.2. Postgres

  • Erstellen Sie dieselbe Aufgabe mit einer Postgres DB

  • Fügen Sie hier noch einen "Adminer" hinzu (als eigenen docker-compose Service)

13. 2022-03-14

13.1. asciidoctor / plantuml - testdrive

Lernen Sie Datenmodellierung
Verstehen Sie die Zusammenhänge

Stg-T

fussballliga cld soll

13.2. Stoffumfang der 1. LF

  • asciidoctor

  • plantuml

  • qualitätsmanagement

    • wähle ich testfälle aus?

    • Teststrategien?

      • Grenzwertanalyse

      • Äquivalenzklassenanalyse

    • assertj-core und assertj-db

  • git

13.2.1. Stoff der zu dieser LF nicht kommt

  • gh-actions

  • docker

  • karate

  • rest-assured

13.3. Projektpräsentation

14. 2022-03-21

14.1. gh-actions

  • Was sind gh-actions?

    • Jedes Softwaresystem muss deployed werden

      • zB eine SPA auf einem Web-Server bereitstellen

      • SPA …​ Single Page Application

    • dieser Vorgang wird automatisert

      • man verwendet dazu gh-actions

    • sind vergleichbar mit einer Scriptsprache, die sequentiell mehrere Aktionen ausführt.

    • zusätzlich gibt es actions, die eine bestimmte Funktionalität kapseln, zB

      • Installation von Java

      • kopieren des repos auf die aktuelle Maschine

    • in gh kann man dazu virtuelle Instanzen (meist Linux) verwenden

14.1.1. Verwendung

  • in einem .github/workflows-Verzeichnis im Project-Root werden die yml-Files erstellt

  • Die gh-Actions sind grundsätzlich nach Jobs und Steps strukturiert

    • Jobs: werden parallel ausgeführt

    • Steps: werden sequentiell ausgeführt

15. 2022-03-24 (Supplierung)

16. 2022-03-28

16.1. Uebung - Deployment einer native quarkus app in die oravm

  • mittels gh-actions eine beliebige quarkus-app nativ kompilieren und in die oravm mit scp kopieren

17. 2022-04-25

17.1. Projekt Franklyn2 - Sachstandsbericht

  • Sprints sind ungenügend

17.2. Testen mit Karate

18. 2022-05-24

19. Qualitätssicherung

19.1. Buch Kapitel QS

  • Konstruktive Maßnahmen

  • Analytische Maßnahmen

    • statische Prüfungen

    • dynamische Prüfungen

19.2. Test Doubles

  • https://martinfowler.com/bliki/TestDouble.html

  • Test Doubles

    • Dummy objects are passed around but never actually used. Usually they are just used to fill parameter lists.

    • Fake objects actually have working implementations, but usually take some shortcut which makes them not suitable for production (an InMemoryTestDatabase is a good example).

    • Stubs provide canned answers to calls made during the test, usually not responding at all to anything outside what’s programmed in for the test.

    • Spies are stubs that also record some information based on how they were called. One form of this might be an email service that records how many messages it was sent.

    • Mocks are pre-programmed with expectations which form a specification of the calls they are expected to receive. They can throw an exception if they receive a call they don’t expect and are checked during verification to ensure they got all the calls they were expecting.

19.3. Testen mit Karate

19.3.1. pom.xml - Dependencies

<dependency>
  <groupId>com.intuit.karate</groupId>
  <artifactId>karate-junit5</artifactId>
  <version>1.2.0</version>
  <scope>test</scope>
</dependency>
Zusätzliche Abhängigkeiten, da Karate Probleme mit Quarkus hat
<properties>
    ...
    <graal-sdk.version>22.1.0.1</graal-sdk.version>
</properties>
...
<dependencies>
    ...
    <dependency>
      <groupId>org.graalvm.sdk</groupId>
      <artifactId>graal-sdk</artifactId>
      <version>${graal-sdk.version}</version>
      <scope>test</scope>
    </dependency>
    <dependency>
      <groupId>org.graalvm.js</groupId>
      <artifactId>js</artifactId>
      <version>${graal-sdk.version}</version>
      <scope>test</scope>
    </dependency>
    <dependency>
      <groupId>org.graalvm.js</groupId>
      <artifactId>js-scriptengine</artifactId>
      <version>${graal-sdk.version}</version>
      <scope>test</scope>
    </dependency>
    <dependency>
      <groupId>org.graalvm.truffle</groupId>
      <artifactId>truffle-api</artifactId>
      <version>${graal-sdk.version}</version>
      <scope>test</scope>
    </dependency>
</dependencies>

19.3.2. Config File

src/java/karate-config.js
function fn() {
    var env = karate.env; // get java system property 'karate.env'
    karate.log('karate.env system property was:', env);
    if (!env) {
        env = 'dev'; // a custom 'intelligent' default
    }
    var config = { // base config JSON
        baseUrl: 'http://localhost:8081'
    };
    // don't waste time waiting for a connection or if servers don't respond within 5 seconds
    karate.configure('connectTimeout', 5000);
    karate.configure('readTimeout', 2000);
    return config;
}

19.4. gherkin-Testfile

Feature: Product creation endpoint.
  An user of the endpoint is able to create Products

Background:
  * url baseUrl

Scenario: Create a Product
  Given path 'products'
  And request { name: "Timmie's Hundefutter" }
  When method POST
  Then status 201

Scenario: Get a product
  Given path 'products'
  When method GET
  Then status 200
  And match response ==  { name: "Timmie's Hundefutter" }

19.5. JUnit-Test

  • Die Cucumber/gherkin-Tests werden von einem junit-Test aufgerufen

ProductResourceTest.java
package at.htl.karatedemo.boundary;

import com.intuit.karate.junit5.Karate;
import io.quarkus.test.junit.QuarkusTest;

@QuarkusTest
class ProductResourceTest {

    @Karate.Test
    Karate product_crud_in_productEndpointTest() {
        return Karate.run("products").relativeTo(getClass());
    }
}

19.6. results

19.6.1. intellij

image::karate-tests.png[

19.6.2. karate report

target/karate-reports/karate-summary.html

karate reports1

karate reports2

20. 2022-06-21 Testarten

v modell my
testarten

20.1. Pattern

  • given - when - then

  • arrange - act assert (AAA)

21. 2020-06-29

21.1. User Design, User Experience

21.1.1. Gestaltgesetze

gestaltgesetze
  • ISO-Norm 9241-12

21.1.2. Usability-Interaktionsprinzipien

  • Grundprinzipien der GUI:

    1. Sichtbarkeit des Zustands und Feedback des Systems

    2. Übereinstimmung mit der (realen) Welt der Nutzer

    3. Kontrolle und Freiheit der Nutzer - Nutzer sollen die Freiheit haben Aufgaben abzubrechen und Aktion zu widerrufen.

    4. Konsistenz und Standards- branchenübliche Standards; Innere Konsistenz bedeutet, dass Elemente, die gleiche Aufgaben haben, auch in Aussehen und Verhalten gleich sind.

    5. Fehlerprävention - Am besten gestaltest du das System so, dass Fehleingaben unwahrscheinlich werden zB Eingabefeld für Telefonnummer nur Ziffern als Eingabe zulässt

    6. Helfen Fehler zu erkennen, verstehen und beheben - verständliche und gut sichtbare Fehlermeldungen

    7. Hilfe und Dokumentation

  • Interaktionsprinzipien:

    1. Aufgabenangemessenheit

    2. Selbstbeschreibungsfähigkeit

    3. Erwartungskonformität

    4. Erlernbarkeit

    5. Steuerbarkeit

    6. Robustheit gegen Benutzungsfehler

21.2. Git Branching Strategies

21.2.1. Zero Branch Strategy

git 1 zero branch strategy

21.2.2. Develop Branch Strategy

git 2 develop branch strategy

21.2.3. Feature Branch Strategy

git 3 feature branch strategy

21.2.4. Gitflow Branch Strategy

git 4 gitflow branch strategy

21.3. Versionierung

versionierung
  • pre-alpha: Oft wird eine solche Version verwendet, wenn ein halbwegs fertiges Modul der Software vorgestellt werden soll. Eine weitere Bezeichnung ist die Entwicklervorschau (von englisch developer preview)

  • alpha: Die erste zum Test durch Fremde (also nicht die eigentlichen Entwickler) bestimmte Version. Noch nicht feature-complete.

  • beta:Eine Beta-Version ist die erste Version, die vom Hersteller zu Testzwecken veröffentlicht wird. Der Begriff ist nicht exakt definiert, als Faustregel zur Abgrenzung einer Beta-Version von anderen Versionen gilt in der Regel, dass in ihr zwar alle wesentlichen Funktionen des Programms implementiert, aber noch nicht vollständig getestet sind. Das Programm kann oder wird daher unter Umständen noch viele, evtl. auch schwerwiegende Fehler enthalten, die einen produktiven Einsatz nicht empfehlenswert machen.

  • release candidate: Darin sind alle Funktionen, die die endgültige Version der Software enthalten soll, schon verfügbar (sogenannter feature complete), alle bis dahin bekannten Fehler sind behoben. Aus dem Release Candidate wird vor der Veröffentlichung die endgültige Version erstellt, um einen abschließenden Produkttest oder Systemtest durchzuführen. Dabei wird die Qualität der Software überprüft und nach verbliebenen Programmfehlern gesucht.

21.4. Arten von Systemarchitekturdiagrammen

21.4.2. Conceptual Architecture Diagram

concept sys arch diagr 2
Figure 3. Modernizing Enterprise Java by Markus Eisele and Natale Vinto, 2022

21.4.3. UML

  • Deployment Diagram

21.4.4. 5 diagrams you need to document your solution architecture