diff --git a/lerntagebuch.md b/lerntagebuch.md index f56b27a..3c07f99 100644 --- a/lerntagebuch.md +++ b/lerntagebuch.md @@ -1,12 +1,365 @@ -# Lerntagebuch von Salma Zouaghi +# Mein Lerntagebuch Programmiermethoden und werkzeuge -## Vorlesung von 2023.10.24 +## SU 01 (27.10.2023) ### Lernziel -Programmiersprachen beherrschen und neue Programmiersprache erlernen wie Java , C++ ; -In der Lage sein Programmierwerkzeuge zu nutzen ; -In der Lage sein Softwareprojekte zu entwickeln; -### Erkenntnis -Programmierkonzepte lernen: Grundlagen der Programmierung ; -Algorithmen Entwickeln; -### Wiederholung + +#### Organisatorische Aspekte: + +-Besprechung grundlegender organisatorischer Punkte; +-Prüfungsanforderungen: +Lerntagebuch (20%) +Gruppenprojekt (65%) +Zusatzpunkte (20%) z.B. durch Präsentationen + +#### Forschungsfragen: + +1-Informatiker: Künstler oder Handwerker? +2-Unterschied zwischen Profi und Laie: + -Profi: Bezahlung, Prinzipien, tiefes Verständnis; + -Laie: Unbezahlt, oberflächliches Wissen; + +#### Technische Fehler-Beispiele: + +1-Ariane-5-Explosion: + +- Übernahme Navigationssystems führte zur Überlastung des Computersystems; +- Selbstzerstörung der Rakete + +#### Aktiengesellschaft: + +- Veralteter Algorithmus nicht aus Software gelöscht; +- Server übernahm versehentlich veralteten Algorithmus; +- Schaden in Billionenhöhe entstand. + +### Erkenntnis: + +Informatik erfordert präzises Arbeiten +- Beispiel Ariane 5: + -Sorgfältige Überarbeitung oder neues System hätte Selbstzerstörung vermieden +- Wichtig für Gruppenprojekt: + -Löschung veralteter Software-Teile entscheidend +- Beispiel Aktiengesellschaft: + -Insolvenz durch Nichtlöschung überholter Algorithmus-Elemente + -Sofortige Entfernung nicht benötigter Teile empfohlen + +### Wiederholung: +Die gänzlich neu entwickelte europäische Trägerrakete Ariane 5 integrierte das Navigationssystem ihrer Vorläuferin und erlebte eine Explosion kurz nach dem Start. Dies resultierte aus der erheblich schnelleren Beschleunigung der neuen Ariane, die eine Fehlerberechnung provozierte. Die bestehenden Programme waren auf dieses unvorhergesehene Szenario nicht vorbereitet, stürzten ab und setzten letztendlich den Selbstzerstörungsmechanismus in Gang. + +### kritik + +## SU 02 (31.10.23) + +### Lernziel: + +In der Lehrveranstaltung wurden acht verschiedene Programmierparadigmen besprochen und ihre Verbindung zu den jeweiligen Programmiersprachen erläutert. Zusätzlich haben wir uns intensiv mit den "Dos and Don'ts" beim Software-Schreiben auseinandergesetzt, einschließlich des in der Softwareentwicklung verwendeten Akronyms "STUPID & SOLID". Abschließend präsentierte der Vortrag noch weitere grundlegende Programmierprinzipien (KISS, FCoH, SLA, YAGNI, IOC, DI). + +### Erkenntnis: + +#### Diversität der Programmiersprachen: + +- Verschiedene Paradigmen prägen die Vielfalt der Programmiersprachen, wodurch sie für unterschiedliche Zwecke geeignet sind. +- Jede Sprache zeichnet sich durch individuelle Eigenschaften aus (wie Syntax, Typisierung) und weist spezifische Vor- und Nachteile auf. + +#### Wiederholung: + +#### SOLID-Prinzip und Programmierregeln: + +- Die SOLID-Prinzipien bieten klare Richtlinien für erfolgreiche Programmierung. +- Elemente wie die strukturierte Klassenfunktion, mühelose Erweiterbarkeit bei geringen Codeanpassungen und die Beschränkung des öffentlichen Codezugangs stehen dabei im Fokus. + +### kritik + +## SU 03 (7.11.23) + +### Lernziel : + +- Entwurfsmuster: + -Lösungsschablonen für häufig auftretende Probleme + -Inspiriert von den Prinzipien der objektorientierten Programmierung (OOP) + +- Vorteile: + -Bewährte Lösungen + -Bekannte Vor- und Nachteile + +- Nachteile: + -Einstieg erfordert Erfahrung + +- Verschiedene Arten von Entwurfsmustern: + -Typen, z.B. Builder, Factory Method + -Strukturmuster, z.B. Adapter, Brücke + -Verhaltensmuster, z.B. Accumulator, Kommando + +- Entwicklungsumgebungen (IDE): + -Unterschiedliche Features basierend auf Programmiersprache und Zielplattform + -Kernfunktionen: Automatisierung, Refactoring, Debuggin + +### Erkenntnis: + +- Entwicklungsumgebungen (IDEs): + -Erleichtern und beschleunigen den Programmierprozess durch diverse Funktionen. + -Setzen Entwurfsmuster in der Programmierung ein, um wiederkehrende Probleme effizient zu lösen. + +### Wiederholung: + +- Entwicklungsumgebungen (IDEs): + -IDEs fungieren als umfassende Entwicklungsplattformen, die grundsätzlich alle Programmiersprachen unterstützen können. + -Eine Spezialisierung auf eine bestimmte Sprache steigert jedoch die Effizienz der Kompilierung. + -Bekannte Beispiele für IDEs sind Eclipse, Visual Studio Code und NetBeans. + +### kritik + +## SU 04 (14.11.2023): + +### Lernziel: + +#### Git-Funktionalitäten: +- Git bietet Zugriff auf den aktuellen und vergangene Stände. +#### Sicherungsmethoden: +- Lokale Kopien, Zip-Archive und Cloudspeicher dienen als einfache Sicherungsmethoden. + +#### Source Code Management (SCM): + +- Optimiert Speichernutzung +- Automatisches Merging +- Einfache Navigation/Suche +- Verfügbar in zentralen und dezentralen Varianten + +#### Git-Konzept: +- Basierend auf Änderungssets, nicht auf Dateien +- Commits werden mit SHA gesichert + +#### Commit-Prinzipien: +- Empfehlung: Commits sollten stets klein und übersichtlich sein. + +#### Branches: + +- Master +- Develop +- Release +- Hotfix +- Feature + +### Erkenntnis: + +#### Source Code Management (SCM): + +- Das SCM erleichtert die gemeinsame Arbeit von Entwicklern an einem Projekt. +- Die Verwendung verschiedener Branches ermöglicht unterschiedliche Entwicklungsstadien und schützt gleichzeitig vor Konflikten, indem neuer Code den alten nicht beeinträchtigt. + +### Wiederholung: + +#### Branch-Kategorien: +- Verschiedene Branches erfüllen spezifische Aufgaben im Entwicklungszyklus. +- Der Master-Branch repräsentiert den stabilen Zustand für die Auslieferung der Software. +- Weitere wichtige Branches sind Develop, Release, Hotfix und Feature. + +### kritik + +## SU 05 (28.11.2023): + +### Lernziel: + +#### Entwicklungsdimension: + +- Die Dimension von Projekten wächst stetig, wird komplexer. + +#### Kontinuierliche Integration (CI): + +- Automatisches Zusammenführen von Codebeiträgen verschiedener Entwickler durch CI-Systeme. + +#### Ablauf des Softwareentwicklungsprozesses (6 Teile): + +- Code schreiben +- Abhängigkeitsverwaltung +- Code veröffentlichen +- Integration +- Build-Prozess +- Bereitstellung + +#### Automatisierte Tests im CI-System: + +- Kein manueller Eingriff erforderlich +- Hält einen bereitstellungsreifen Stand +- Dokumentiert das Verhalten +- Identifiziert Laufzeitfehler +- Findet Abweichungen vom gewünschten Verhalten, jedoch keine neuen Fehler + +#### Gemeinsames Repository: + +- Alle Entwickler arbeiten in einem zentralen Repository. +- Jeder hat Schreib-/Lesezugriff. +- Einfache Synchronisation. + +#### Privater Fork: + +- Zentrales Repository +- Jeder Entwickler besitzt sein eigenes Remote-Repository (Fork). + +### Erkenntnis: + +#### Optimierte Zusammenarbeit durch CI-Systeme: + +- CI-Systeme erleichtern die Zusammenarbeit mehrerer Entwickler. +- Automatisches Merging und Tests reduzieren menschlichen Eingriff und dokumentieren das Verhalten. + +### Wiederholung: + +#### Aufgaben der CI-Systemtests: + +- Die Tests des CI-Systems dokumentieren das Verhalten des Programms und identifizieren Laufzeitfehler. +- Sie stellen stets einen bereitstellungsreifen Softwarestand sicher. Jedoch liegt der Fokus darauf, keine neuen Fehler zu erkennen, sondern lediglich Abweichungen vom gewünschten Verhalten zu identifizieren. + +### kritik + +## SU 06 (05.12.2023): + +### Lernziel: + +- Ein Projekt kennzeichnet sich durch ein klar definiertes Vorhaben mit festen Anfangs- und Endzeitpunkten, umfassende Handlungsabläufe und die Zuweisung spezifischer Ressourcen. + +- Innerhalb eines Projekts nehmen verschiedene Rollen eine entscheidende Funktion ein, darunter der Auftraggeber, Projektleiter, Projektmitarbeiter und Stakeholder. + +- Es existieren diverse Modelle, um Projekte zu strukturieren, darunter das Wasserfallmodell, V-Modell, Agiles Modell, Kanban, Burn-Down-Chart und Scrum. + +- Die Dokumentation eines Projekts erfolgt durch verschiedene Instrumente wie das Lastenheft, Pflichtenheft, die Systembeschreibung sowie im agilen Kontext durch User Stories und ein Ticketsystem. + +### Erkenntnis: + +Effektives Projektmanagement ist von entscheidender Bedeutung für die Realisierung von Projekten, die durch ihre interdisziplinäre und komplexe Natur herausfordernd sind. Die klare Definition von Projektzielen, Rollen und die strukturierte Darstellung von Aufgaben in Modellen tragen wesentlich dazu bei, das Projekt transparenter und besser steuerbar zu machen. + +### Wiederholung: + +Im Rahmen der Zielformulierung und -erreichung folgt ein strukturierter Prozess. Dieser beinhaltet das Sammeln von Informationen, die Entstehung der Idee, die Planung und Organisation, die Durchführung sowie abschließend die Kontrolle. + +### Kritik + +## SU 07 (12.12.2023): + +### Lernziel + +- Fehler im Projektmanagement werden in latente, maskierte und kaskadierte Fehler unterteilt. Defekte können syntaktisch, semantisch, logisch oder auf der Design-Ebene auftreten. + +- Tests, darunter manuelle, automatische, statische und dynamische, spielen eine Schlüsselrolle. Ihr Ziel ist es, Fehler aufzuzeigen, die Qualität zu erfassen und Vertrauen zu erhöhen. + +- Der Testablauf umfasst die Erstellung eines klaren Testplans mit definierten Zielen und Ressourcen. Der Prozess basiert auf Anforderungsdokumentation und Testfällen. Die Testausführung generiert ein Testlog mit Fehlverhalten und Fehlerkategorien, während der Testreport eine Zusammenfassung bietet und Entscheidungen zur Lieferfähigkeit trifft. + +### Erkenntnis: + +- Die Durchführung von Tests ist ein essenzieller Prozess, um Fehler zu identifizieren. +- Die Häufigkeit der Tests variiert je nach Typ. +- Das frühzeitige Aufspüren von Fehlern kann dazu beitragen, größere Probleme zu verhindern und hohe Kosten zu minimieren. + +### Wiederholung: + +Der Unit-Test ist entscheidend, um einzelne Module zu prüfen. Seine Signifikanz liegt darin, dass er die Funktionalitäten unabhängig von anderen Modulen testet. Dadurch lassen sich mögliche Folgefehler bei späteren Integrationen vermeiden. + +### Kritik + +## SU 08 (19.12.2023): + +### Lernziel : + +- Weshalb testet man den geschriebenen Code und welche Vorteile bietet die Automatisierung dieses Prozesses (beispielsweise in Bezug auf Kostenersparnis) +- Diskussion über die geeigneten Tests für die Automatisierung (Unittests, Modultests, Integrationstests, Application Tests...) und die Unterschiede zwischen den verschiedenen Testtypen. Dabei wurde speziell der Unit-Test genauer behandelt. + +### Erkenntnis: + +- Im Rahmen unseres Gruppenprojekts sind Tests von entscheidender Bedeutung, um sicherzustellen, dass unser Code die gewünschten Funktionen erfolgreich umsetzt. + +### Wiederholung: + +- Im FIRST-Akronym repräsentiert das "F" den Begriff "Fast" (Schnell) in Bezug auf Unit-Tests. Dies unterstreicht die Bedeutung, dass Unit-Tests zügig durchgeführt werden sollten, um unmittelbare Rückmeldungen zur Code-Integrität zu erhalten. Im Kern sollten die Unit-Tests in einem flinken und effizienten Tempo abgewickelt werden können. + +### kritik + +## SU 09 (09.01.24): + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +