You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 

3.6 KiB

Lerntagebuch für Programmiermethoden und -werkzeuge von Philipp Hartmann

SU5 23.11.2022

Lernziele (Was waren die wesentlichen Inhaltlichen Punkte der letzten Vorlesung - Stichpunktartig)

Buchempfehlung

Kooperation im Softwareentwicklungsprozess

  • Größe von Software-Projekten
  • Zusammenführen der Einzelleistungen
  • Vorteile von CI Systemen

Softwareentwicklungsprozess

Bestandteile

  • Code schreiben
  • Abhängigkeitenverwaltung
  • Code veröffentlichen
  • Integration
  • build-Prozess -- compile (Programm erstellen) -- test (das Programm testen)
  • Bereitstellung

Abhängigkeitenverwaltung

  • nicht selbst im Build-Lauf erzeugt
  • nicht im SCM eingecheckt
  • zentrale Bereitstellung
  • Zugriff auf einzelne Versionen

Semantische Versionierung

  • MAJOR ist nicht rückwärtskompatibel
  • MINOR ist rückwärtskompatibel
  • PATCH Fehlerbehebungen & rückwärtskompatibel
  • LABEL spezifische Kennzeichnung

Source Code Management System (SCM)

  • Sicherung der eigenen Arbeit
  • zentrale Verfügbarkeit
  • Zusammenführung parallel geändeter Dateien (merge)
  • parallele Entwicklung der featueres möglich
  • Zugriff auf dedizierte Stände ( releases)
  • Wechsel zwischen Entwicklungsständen (branches)

build - Prozess

  • Übersetzen
  • Abhängigkeiten organisieren
  • Tests ausführen (können auch automatisiert sein)
  • Liefer-Artefakte erzeugen
  • Deployment (Zentral bereitstellen)

Integration

  • SCM überwachen
  • build- Prozess starten -- Abhängigkeiten auflösen -- compilieren -- automatisierte Tests ausführen -- Lieferartefakt erstellen
  • Ergebnisse berichten

Rolle von automatisierten Tests

Problem des Continous Integration

  • kein menschlicher Eingriff
  • compilierbar != ausführbar
  • CI soll immer lieferbaren Stand bereit halten
  • Programm muss im CI Prozess ausgeführt werden #Vorteile automatisierter Tests
  • automatisierte Tests führen Programm aus
  • dokumentieren gewünschtes Verhalten
  • sind wiederholbar
  • erkennen Laufzeitfehler welche teifgründiger sind(außer UnitTests)
  • Ausführungszeit von Arbeitszeit entkoppeln
  • automatisierte Tests sind erheblich schneller als "menschliche" Tests

Grenzen automatisierte Tests

  • finden nur Abweichungen von gewünschten/bekannten Verhalten (findet nur das wonach der Entwicker sucht)
  • finden keine neuen fachlichen Fehler

Vorgehensmodelle

gemeinsames remote repository

  • alle Entwickler arbeiten ausschließlich gegen ein gemeinsames remote repository
  • jeder Entwickler hat (Schreib-) Zugriff
  • einfache Synchronisation
  • (gepushte) Zwischenstände für alle direkt sichtbar

privater fork

  • es gibt ein zentrales remote repository (=master)
  • jeder Entwickler hat ein seperates remote repository (= fork)
  • jedes locale repository hat 2 remote repositories -- origin --> master, nur lesend (dies nutzt man um syncrhon zu bleiben) -- upstream --> privater fork, Schreibrechte (dort kann ich meine Änderungen pushen)

Erkenntnis (Was kann ich für das Gruppenprojekt anwenden -2-3 Sätze)

Jetzt weiß ich, wie man ein Projekt versioniert. Auf diese Weise kann ich dem Gruppenprojekt eine Version zuweisen und weiß, welche Version ich gerade habe und ob es die neueste ist.

Wiederholung (Einen Begriff/Ein Thema erklären -2-3 Sätze)

Automatisierte Tests sind Tests, die im Voraus für das Projekt von den Entwicklern erstellt werden. Diese Tests laufen Automatisch und schauen auf die Fehler an die der Entwickler selbst gedacht hat. Dies hat Allerdings den Nachteil, dass sie nur die Fehler finden an die der Entwickler gedacht hat und finden keine neuen fachlichen Fehler.

Kritik (Kritik oder Lob für den Dozenten - Optimal 2-3 Sätze

  • Nichts