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.

801 lines
20 KiB

  1. ## Lerntagebuch
  2. Das ist ein Beispiel wie ein Lerntagebuch aussehen könnte.
  3. ## SU 01(21.10.2021)
  4. ### Lernziel
  5. - Organisatorisches
  6. - Versionskontrollsysteme allgemein
  7. - git
  8. - Vorteile
  9. - wie lege ich ein Repository an
  10. - vim (ein paar alltägliche Befehle)
  11. ### Erkenntnis
  12. Versionskontrolle werden wir im Projekt einsetzen, um
  13. zu jeder Zeit den Entwicklungsstand einzusehen und paralleles Arbeiten an Dateien zu ermöglichen. Sollten Probleme an der Software auftreten, können wir zu einem funktionierenden Stand wechseln und durch das Commit-Log die Ursache ausfindig machen.
  14. Außerdem kann ich als Developer mit den gelernten vim-Befehlen vor den anderen flexen.
  15. ### Kritik
  16. `git status` zeigt mir einen groben Zustand meines Git-Repositorys an. Manchmal werden Dateien oder Verzeichnisse dort rot oder grün angezeigt. Die grünen
  17. Dateien verschwinden von der Ausgabe, wenn ich `git commit`
  18. ausführe. Rote Dateien werden mit `git add` grün.
  19. ### Mitteilung
  20. an die Dozierenden Da dieser Punkt optional ist, lasse ich ihn
  21. weg. Aber wenn mich irgendwas stört oder begeistert, kann ich es
  22. hier anmerken.
  23. ---
  24. ## Uebung 01 (27.10.2022)
  25. ### Lernziel
  26. - SSH-Zugriff-zum-git-server-konfigurieren
  27. - SSH key pair generieren
  28. - oeffentlichen SSH key im Repository eintragen
  29. - Lokale Kopie auf SSh-Zugriff umstellen
  30. - Neue lokale Repositories
  31. ### Erkenntnis
  32. - einen ssh-key erstellt
  33. - öffentlichen Schlüssel zu gogs hinzugefügt
  34. - Master Branch erstellt
  35. ### kritik
  36. man muss die git-Konfigurationsdatei überprüfen und den url-Link in gitea/gogs SSH-Remote-Repository-Link ändern.
  37. ### Mitteilung
  38. ---
  39. ## Übung 02 (2.11.2022)
  40. ### Lernziel
  41. - legen Sie in Ihrem Repository die Datei Programmierparadigmen.md an.
  42. - Analysieren Sie die Programmiersprachen Java,C,Python,go,JavaScript und TypeScript hinsichtlich der in der Vorlesung genannten Kriterien und Schreiben sie ihre Analyse in Stichpunkten in die neu erstellte datei.
  43. - Suchen Sie im Internet nach weiteren Programmierprinzipien und dokumentieren sie diese (Acronym, Langbezeichnung, Beschreibung) in der Obigen Datei.
  44. ### Erkenntnis
  45. Ein neu Datei als Programmierparadigmen.md an Gitea hochgeladet.
  46. ### Kritik
  47. Programmierprinzipien
  48. - SOLID
  49. - STUPID
  50. - KISS (Keep It Simple & Stupid)
  51. - FCoH (Favor Composition over Inheritance)
  52. - YAGNI (You Ain't Gonna Need It)
  53. - IOC (Inversion Of Control)
  54. - DI (Dependency Injection)
  55. - DRY (Don't Repeat Yourself)
  56. - DYC (Document Your Code)
  57. - Clean Code at All Cost
  58. ### Mitteilung
  59. ---
  60. ## Übung 3 (16.11.2022)
  61. clone link <https://gogs.informatik.hs-fulda.de/Programmiermethoden_und_werkzeuge-public/UebungDebugging.git>
  62. ### Lernziel
  63. - Führen Sie die Übung entsprechend den Anweisungen in der README.md-Datei aus.
  64. - Debugging
  65. ### Erkenntnis
  66. **Task 1 Uebung 1**
  67. - Nachdem Aktivieren Sie die Zeilen 36 bis 38 durch entfernen der beiden _slashes_.
  68. **Ausgaben sind:**
  69. enter an integer number: 5
  70. - input: 5, Schleifenvariable: 2, Ergebnis 1
  71. - input: 5, Schleifenvariable: 3, Ergebnis 2
  72. - input: 5, Schleifenvariable: 4, Ergebnis 1
  73. - number 5 passed check: true%
  74. enter an integer number: 34
  75. - input: 34, Schleifenvariable: 2, Ergebnis 0
  76. - number 34 passed check: false%
  77. enter an integer number: 89
  78. - nachdem schleifen es gibt
  79. - number 89 passed check: true%
  80. Nachdem einen Breakpoint an ziele 35 und zahl 45 eingeben es gibt
  81. - die Inhalte der Variablen sind nextInt: 45, i:2, ergebnis:1
  82. Nochmal lauft das Programm im Debug-modes und eingeben zahl ist 47
  83. - die Inhalte der Variablen sind nextInt: 47, i:2, ergebnis:1 dann nextInt: 47, i:3, ergebnis:2
  84. - am ende nextInt: 47, i:46 Ergebnis:1 check: true
  85. **Task 2 Uebung 2**
  86. Öffnen Sie das programm `Uebung2.java` im Editor
  87. - Starten Sie das Programm mehrfach (_"run as Java Application"_) und geben Sie verschiedenen natürliche Zahlen ein.
  88. - **natürliche zahlen sind 45, 14, 89 ergebnis sind False ingesamt**
  89. - setzen Sie einen BreakPoint in Zeile 40
  90. - Starten Sie das Programm wie bisher
  91. - Starten Sie das Programm im Debug-Modus und geben Sie die Zahl 45 ein
  92. - Notieren Sie die Inhalte der Variablen (this) nextInt: 23
  93. - this: **Uebung2@8**
  94. - count: **3**
  95. - Notieren Sie die Anzahl der Einträge in der _Debug View_ (this): **this, count, in, out in total 4 mit Zwischenüberschritt**
  96. - in welcher Zeile steht der Debugger? 34->36
  97. - Notieren Sie die Anzahl der Einträge in der _Debug View_ (this)
  98. - nextInt: **45**, count: **2**
  99. - in welcher Zeile steht der Debugger? **40**
  100. - Notieren Sie die Anzahl der Einträge in der _Debug View_ (this) false
  101. - nextInt: **16**, count: **4** ergebnis: **false**
  102. **Beenden Sie den Debugger (_"Terminate"_)**
  103. ### Kritik
  104. ### Mitteilung
  105. ---
  106. ## Uebung 4 (23.11.2022)
  107. ### Lernziel
  108. Lokale Respository
  109. - Stage und Historic
  110. - Merge
  111. - rebase
  112. ### Erkenntnis
  113. ### kritik
  114. ### Mitteilung
  115. ---
  116. ## SU 07 (07.12.2022)
  117. ### Lernziel
  118. - Relvante Literatur
  119. - Motivation
  120. - Grundlagen
  121. - Testmethodologie
  122. - TestProzess
  123. - Psychologische Aspekte
  124. ### Erkenntnis
  125. **Testmethodoligie - Bestandteile eine Tests**
  126. - Stichprobe
  127. - Testfälle
  128. - Testdaten
  129. - Testobekt
  130. - Testumgebung
  131. - Testziel
  132. - Soll-/Ist- Wertvergliech
  133. **Testziele**
  134. - Fehler aufzeigen
  135. - Qualität erfassen
  136. - Vertrauen erhöhen
  137. - Grenzen ermitteln
  138. **Testebenen**
  139. - Anwendung/System
  140. - Teilsystem/Modul
  141. - Codeebene/Unit
  142. **Testpyramide**
  143. - GUI Tests (end to end tests)
  144. business logik überprufen, functions und kommiunikation mit anderen components überprufen.
  145. - Integration tests
  146. - Component / Contract Tests
  147. - Unit Tests
  148. **Testnamen**
  149. Test werden benannt nach:
  150. - Ziel (Integration Test, Lasttest)
  151. - Methode (Regressionstest)
  152. - Testgegenstand (UI-test, Module-test, Unit-test)
  153. - Level (Systemtest)
  154. - Personen (Entwicklertest, Anwendertest)
  155. - Testabdeckung (Komplettest, partieller Test)
  156. **Qualitätskosten**
  157. - High Cost -> Poor Quality -> Failure Costs
  158. - High Cost -> Exceptional Quality -> Sweet Spot (prevention & Appraisal Cost)
  159. - Low Cost -> Exceptional Quality -> prevention & Appraisal Cost
  160. **Testprozess**
  161. **Testprozess - Ablauf**
  162. **Testprozess - Plannung**
  163. **Testprozess - Analyse & design**
  164. - basiert auf Anforderungsdokumentation
  165. - Testspezifikation
  166. - Testfaelle
  167. - Kritikalitaet
  168. - Testdaten
  169. - Testumgebung
  170. - Ausfuehrungsreihenfolge
  171. - Infrastruktur
  172. - Testkriterium
  173. **Testprozess - Testausfuerung**
  174. Testlog
  175. - aufgetretenes Fehlverhalten
  176. - Fehlerkategorie (high/medium/low)
  177. **Testprozess - Testnachbereitung**
  178. - Testreport
  179. - Zusammenfassung Testausfuehrungen
  180. - Vergleich mit frueheren Testlaeufen
  181. - Entscheidung ueber Lieferfaehigkeit
  182. ### kritik
  183. ### Mitteilung
  184. ---
  185. ## SU (14.12.2022)
  186. ### Lernziel
  187. - Automatisiertes Testen von Software
  188. - Motivation
  189. - Grundlegen
  190. - UnitTests
  191. - Anforderungen an zu testenden Code
  192. ### Erkenntnis
  193. **Motivation** - _warum automatiestert Testen?_
  194. Probleme manuellen Testens
  195. - Testfähigkeit der Software
  196. - Wiederholbarkeit
  197. - nachlassende Aufmerksamkeit
  198. - unterschiedlicher Kontetn verschiedener Tester:Innen
  199. - Überlappungen / Lücken bei der Testausführung
  200. - Fehlerzustände Testen
  201. - Wissen der Tester:Innen
  202. - unvollständige Testdokumentation, setzt implizites Wissen voraus
  203. - Bedienung der Anwendung
  204. - Bedienung der Testwerkzeuge
  205. - Aufwand
  206. - langsam
  207. - Arbeitszeit
  208. **Motivation** - _Qualitätskosten_
  209. **Motivation** - _Gründe gegen Automatisiert Tests_
  210. Wie kann ich das testen?
  211. - nur User interface
  212. - prettier Code
  213. - Keine Tests
  214. Persönliche, technische und Soziale Voraussetzungen
  215. - UnitTests schreiben ist eine Fertigkeit und muss ständig geübt werden.
  216. - Technische Voraussetzungen müssen sichergestellt sein.
  217. - Team und Vorgesetzte müssen automatisiertes Testen unterstützen.
  218. Für jedes Verhalten, das wir bei einer Person beobachten ist deren Umfeld perfekt daraus ausgereichtet, dieses Verhalten zu fördern.
  219. ---
  220. **Grundlagen** - _Wleche Tests automatisierien?_
  221. - häufige Wiederholung
  222. - hohe Anzahl
  223. - hohe Kritikatiltät
  224. - hohe Stabilität
  225. - Unittests
  226. - Modultests
  227. - Integrationstest
  228. - Regressionstest
  229. - ApplicationTests
  230. - Integrationstest
  231. - Regressionstest
  232. - Lasttests
  233. - Acceptance-Tests
  234. **Unterschied Application / Module-Tests zu UnitTests**
  235. _Appplication und Module_
  236. - werden spät im entwicklungsprozess ausgeführt
  237. - Testwerkzeuge sind Komplex
  238. - sind aufwendig zu warten
  239. - zeigen, das ein Fehler existiert
  240. _UnitTest_
  241. - laufen früh im Entwikclungsprozess (idealer Weise nach jedem Spiechern)
  242. - Werkzeuge haben einfache API
  243. - sind stabil gegen Änderungen(anderer Units)
  244. - zeigen welche Anforderung nicht erfüllt wird, wo der Fahler existiert und unter welchen Bedigungen er auftritt.
  245. ---
  246. **_UnitTests_**
  247. Was macht ein Unittest?
  248. - Unittests sind ausführbare Dokumentation.
  249. - Unittest testen keinen Code.
  250. - Unittest verifizieren von außen beobachtbares gewünschtes Verhalten von Code.
  251. Sie prüfne Rüchgabewerte und kommuikation mit anderen Units des zu testenden Codes als Reacktion auf die übergebenen Parameter und/oder den Reaktionen der anderen Units.
  252. - Ein einzelner Test prüft genau eine Erwartung an die Unit.
  253. - Unittests verhindern ungewollte Änderungen.
  254. **_Wie schreibt man einen guten Unittest?_**
  255. **F**ast - schnell
  256. Kann nach jedem speichern ausgeführt werden ohne den Arbeitsablauf zu verzögern.
  257. - primitive Vorbereitung (setup)
  258. - Abhängigkeiten durch Test-Doubles ersetzen
  259. **I**ndependent - unabhängig
  260. Jeder Test kann einzeln ausgeführt werden.
  261. - kein Test schafft Voraussetzungen für nachfolgende
  262. - Test können in beliebiger Reihenfolge laufen
  263. **R**epeatable - wiederholbar
  264. Jede Ausführung (ohne Änderung des getesteten Codes) führt zum selben
  265. Ergebnis.
  266. - nicht von zufälligen Größen abhängig
  267. - kein Einfluß durch Änderungen an anderen Units
  268. - kein Einfluß durch Testumgebung (Netzwerk, Festplatte, Position in der Verzeichnisstruktur)
  269. **S**elfevaluating - selbstauswertend
  270. Das Testergebnis ist eindeutig und binär.
  271. - Erfolg oder Mißerfolg sind eindeutig erkennbar
  272. - Ergebnis muss nicht in Logdateien o.ä. gesucht werden
  273. - Ergebnis kann automatisiert weiter verarbeitet werden
  274. **T**imely - zeitnah
  275. Unittests entstehen zeitnah zum getesteten Code.
  276. - Code first
  277. Tests werden nach dem zu testenden Code geschrieben.
  278. - Test first
  279. Tests werden vor dem zu testenden Code geschrieben.
  280. - Test Driven Developement
  281. Test und verifizierter Code entstehen gleichzeitig
  282. **R**eadable - was bedeutet _lesbar_?
  283. - was wird getestet
  284. Name des Test drückt Vorbedingungen und erwartetes Ergebnis aus.
  285. - Kurz
  286. wiederkehrende Vorbereitungen im Methoden auslagern
  287. - Welche Eigenschaften der Parameter sind wichtig?
  288. Explizit Variablen für Parameterwerte anlegen
  289. Variablennamen sorgsam wählen
  290. - Welche Eigenschaften der Ergebnisse sind wichtig?
  291. Explizit Variablen für Ergebnisse anlegen
  292. Variablennamen sorgsam wählen
  293. verifizierungsmethoden mit sprechenden Namen.
  294. **T**rustworthy - Was bedeutet vertrauenswürdig?
  295. - Geschäftsanforderungen erfüllt
  296. Wurde tatsächlich implementiert, was der Kunde wollte?
  297. - technisch
  298. Wird der Produktivcode tatsächlich ausgefühtrt?
  299. - "test first"
  300. Schlägt der Test aus dem richtigen Grund fehl?
  301. - Ersetzten von Abhängigkeiten(Mocking)
  302. - (weitestgehend) keine Logik in Tests
  303. **F**ast
  304. (schone erklärt)
  305. **M**aintainable - Was bedeutet wartbar?
  306. - Stabilität gegenüber Anderungen in anderen Units
  307. Abhängigkeiten ersetzen
  308. - stabil gegen Änderungen in der Unit selbst
  309. eine einzelne Anforderung (nicht Codestelle) testen.
  310. ---
  311. **_Anforderungen an zu testenden Code_**
  312. - Was verbessert die Testbarkeit?
  313. - Isolieren einer Unit
  314. - Isolation Ermöglichen
  315. ---
  316. _Testbarkeit von production Code_
  317. Qualität des producktivem code (im Sinne von "Clean Code" und dem "S.O.L.I.D" prinzip) beeinflußt die Qualität der Tests (im Sinne der RTFM - Anforderungen)
  318. die wichtigsten "Clean Code" Regeln sind:
  319. - Separation of Concerns / single responsibility
  320. Erzeugung von Objekten der Abhängigkeiten ist keine aufgabe der Geschäftslogik!
  321. - Dependency Inversion
  322. - Tell! Don´t ask.
  323. - Law of Demeter (Don´t talk to strangers)
  324. vermeide "message chaining" (nicht mit "fluent API" verwechseln)
  325. _Arten von Test-Doubles_
  326. - Stub
  327. - leere Implementierung einen Schnittstelle, üblicher Weise generiert
  328. - Fake
  329. - alternative Implementierung einer Schnittstelle oder Erweiterung einer existerenden Implementierung.
  330. - exterm vereinfachtes Verhalten(keine Logik)
  331. - Mock
  332. - "aufgemotztes" Fake
  333. - konfigurierbares Verhalten
  334. - Verifizierung vom Methodenaufrufen und der übergebenen Parameter
  335. _Was Ermöglicht die Ersetzung von Abhängigkeiten?_
  336. - trenne Instanyiierung der Abhängigkeiten von der Geschäftslogik
  337. - vermeide den Aufruf des **_new_** Operators
  338. - Bereitstellen von "seams" (Nahtstellen)
  339. - dependencz injection
  340. - Getter mit geringer Sichtbarkeit
  341. - keine **static** (public) Methoden
  342. - keine **final** (public) Methoden
  343. - vermeide _Singelton Pattern_ (nicht Singelton als Konzept)
  344. _Schreibe "Clean Code"_
  345. - programmiere gegen Schnittstellen
  346. - SoC/ SRP (Feature envy)
  347. - Law of Demeter
  348. - DRY
  349. - same level of abstraction
  350. ### kritik
  351. ### Mitteilung
  352. ---
  353. ## SU (21.12.2022)
  354. ### Lernziel
  355. Test Driven Development
  356. - Relevante Litratur - Growing Object-Oriented Software, Guided by Tests von Steve Freeman, art of unit Testing von Michael Feathers
  357. - Motivation
  358. - Grundlagen
  359. ### Erkenntnis
  360. **Motivation** - _Qualitaetskosten_
  361. **Motivation** - _Welche Tests automatisieren?_
  362. - Haeufige Wiederholdung
  363. - hohe Anzahl
  364. - hohe Kritikatiltaet
  365. - hohe Stabilitaet
  366. Unittests sind die vorherrschende Testart
  367. _Wie schreibt man einen guten UnitTest?_
  368. - Fast
  369. - Independent
  370. - Repeatable
  371. - Selfevaluating
  372. - **Timely**
  373. - Readable
  374. - **Trustworthy**
  375. - Fast
  376. - Maintainable
  377. Timely - zeitnah
  378. **Unittests entstehen zeitnah zum getesteten Code.**
  379. - Code First
  380. Test werden nach dem zu testenden Code geschreiben.
  381. - Test first
  382. Test werden vor dem zu testenden Code geschreiben.
  383. - Test Driven Development
  384. Test und verifizierter Code entstehen gleichzeitig.
  385. **Motivation** - _Fazit_
  386. Unittests sind die am häfigsten zu erstellenden automatisierten Tests und Test Driven Development ist die geeignetste Vorgehensweise zu deren Erstellung.
  387. **Grundlagen** - _Testabdeckung_
  388. - oft als KPI (key performance indicator) missbraucht
  389. - wichtig für ddie Beurteilung der Vertrauenswürdigkeit des Testhareness
  390. - TDD führt zu hoher testabdeckung, aber nicht zu 100% ( realistisch 70% bis 90%)
  391. - **TDD führt zu 100% Anforderungsabdeckung**
  392. **Grundlagen** - _Vorgehen_
  393. - Formalisierung des Entwicklungsprozesses
  394. - inkrementelle Entwickliung des Code in "Baby-steps"
  395. - verhindert _Flow_
  396. **Grundlagen** - _TDD micro cycle_
  397. - Schreiben einen neuen Test, gerade so viel dass er fehl schlägt ( nicht kompilieren ist Fehlschlagen).
  398. - Schreiben gerade so viel Produktivcode, dass der Test erfüllt wird.
  399. Zukünftige Anforderungen nicht beachten! (so simpel wie möglich, alles ist erlaubt, Transformations-Prämissen beachten).
  400. - Verbessere den Code (Produktion und Test), ohne einen Test zu brechen und ohne neue Funktionalität (Geschäftslogik) hinzuzufügen.
  401. ### kritik
  402. Schreibe Code im TDD cycle.
  403. ### Mitteilung
  404. --------------------------------------------------------------------------------
  405. ## SU (19.01.2023)
  406. ### Lernziel
  407. #### Continous Integration
  408. - Relavante Literatur
  409. - Bedeutung von CI im Softwareentwicklungsprozess
  410. - Aufbau eines CI/CD-Systems
  411. - Ablauf des CI-Prozesses
  412. - Rolle von automatisierten Tests
  413. ### Erkenntnise
  414. #### Bedeutung von CI im Softwareentwicklungsprozess
  415. **Größe von Software-Projekten**
  416. - steigende Komplexität
  417. - mehrere Entwickler
  418. - Zusammenführen der Einzelleistungen
  419. Z**usammenführen der Einzelleistungen**
  420. - Widerspruch Kreativität vs. Konformität
  421. - technische Konflikte
  422. - persönliche Konflikte
  423. - Aufwand
  424. **Vorteile von CI Systemen**
  425. - formale Prozesse verringern
  426. - automatisierte Prozesse verringern Aufwand
  427. - Vorstufe zu Continous Delivery
  428. **Aufbau eines CI/CD-Systems**
  429. - Entwicklungsumgebung des Programmierers
  430. - Source Code Management System (SCM)
  431. - Abhängigkeitenverwaltung
  432. - build – Werkzeug
  433. - Continous Integration Server
  434. - Erweiterungen für Continous Delivery
  435. **Entwicklungsumgebung des Programmierers**
  436. **Integrated Developement Environment (IDE**)
  437. - Syntax highlighting
  438. - Syntax-Vervollständigung
  439. - automatisierte Refactorings
  440. - Navigation
  441. - Compile–Parameter
  442. - Code automatische Formatierung
  443. - Fehler-Lokalisierung
  444. **Source Code Management System (SCM)**
  445. - Sicherung der Arbeit einzelner Entwickler
  446. - zentrale Verfügbarmachung
  447. - Zusammenführung parallel geänderter Dateien
  448. - parallele Entwicklung verschiedener Features ermöglichen
  449. - Zugriff auf dedizierte Stände (releases)
  450. - wechsel zwischen Entwicklungsständen
  451. **Abhängigkeitenverwaltung**
  452. - nicht selbst im Build-Lauf erzeugt
  453. - zentrale Bereitstellung (innerhalb der Organisation)
  454. - Zugriff auf einzelne Versionen
  455. **build – Werkzeug**
  456. - Übersetzen
  457. - Liefer-Artefakte erzeugen
  458. - Abhängigkeiten organisieren
  459. - automatisierte Tests ausführen
  460. - Deploymen
  461. **Continous Integration Server**
  462. - SCM überwachen
  463. - build-Prozess starten
  464. - Ergebnisse berichteten
  465. **Erweiterungen für Continous Delivery**
  466. - Staging System
  467. - Produktions System
  468. **Ablauf des CI-Prozesses**
  469. - Checkin Change
  470. - Fetch Change
  471. - Build
  472. - Test
  473. - Ergebnisauswertung
  474. - Benachrichtigung
  475. **Checkin Change**
  476. - veröffentlichen der Änderung
  477. - eigener branch
  478. - alle aktuell veröffentlichten Änderungen integriert.
  479. - vollständige Änderung
  480. - compiliert lokal
  481. - automatisierte (Unit–)Tests sind ”grün”
  482. - Lieferobjekt kann lokal gebaut werden
  483. **Fetch Change**
  484. - Änderungen feststellen
  485. - zeitgesteuert
  486. - ereignisgesteuert
  487. **Build**
  488. - Änderung mit aktuellem Stand integrieren (merge)
  489. - compile (Produktivcode und Testcode)
  490. **Test**
  491. - nur nach erfolgreichem compile
  492. - Testframework starten
  493. - Ergebnisse sammeln
  494. **Ergebnisauswertung**
  495. - Ermittelt Status von merge, compile und Test
  496. - Erfolgsfall: Änderung als neuen aktuellen Stand übernehmen undveröffentlichen
  497. - Ergebnisdarstellung als Webseite
  498. **Benachrichtigung**
  499. - zeitnah
  500. - Fehlerfall: Committer
  501. - Erfolgsfall: alle
  502. - mögliche Wege:
  503. - Mail
  504. - RSS-Feed
  505. - SMS
  506. - Twitter
  507. - WhatsApp
  508. **Rolle von automatisierten Tests**
  509. - Problem des Continous Integration
  510. - Vorteile automatisierter Tests
  511. - Grenzen automatisierter Tests
  512. **Problem des Continous Integration**
  513. - compilierbar ! = ausführbar
  514. - CI soll immer lieferbaren Stand bereit halten
  515. - Programm muss im CI Prozess ausgeführt werden
  516. **Vorteile automatisierter Tests**
  517. - automatisierte Tests führen Programm aus
  518. - dokumentieren gewünschtes Verhalten
  519. - sind wiederholbar
  520. - erkennen Laufzeitfehler (außer UnitTests)
  521. - Ausführungszeit von Arbeitszeit entkoppelt
  522. **Grenzen automatisierter Tests**
  523. - finden nur Abweichungen von gewünschten/bekanntem Verhalten
  524. - finden keine neuen fachlichen Fehler
  525. ### Kritik
  526. ### Mitteilung
  527. ----------------------------------------------------------------------------------
  528. ## SU (26.01.2023)
  529. ### Lernziel
  530. **Inhalte**
  531. - Motivation
  532. - Klassen
  533. - Vererbung
  534. - OOP Algorithmen
  535. ### Erkenntnise
  536. **Motivation**
  537. - Wiederverwendung von Code im Fokus
  538. - OOP oft auf Vererbung reduziert
  539. - Anwendung prozeduraler Algorithmen
  540. - Vererbung als Selbstzweck → Unnötige Vererbung
  541. **OOP ist ein eigenständiger Ansatz der Problem-lösung der eine andere Denkweise erfordert.**
  542. **Klassen **-
  543. - Eigenschaften / Zustand
  544. - private Methoden
  545. - Strukturierung der Implementierung
  546. - erleichtern Verständnis
  547. - öffentliche Methoden
  548. - Manipulation des Zustandes (Änderung von Eigenschaften)
  549. - spezifisches Verhalten, mit dem sie sich von anderen Klassen unterscheidet unabhängig vom Zustand
  550. **Vererbung** -
  551. - abgeleitete Klasse erweitert Basisklasse
  552. - modelliert eine ”ist ein” Beziehung
  553. - geändertes Verhalten
  554. **OOP Algorithmen** -
  555. - Primitive Type Obsession (PTO)
  556. - falsche Verantwortlichkeiten
  557. - Arrays vs. Collections
  558. **Vorteile des OO Ansatzes:**
  559. - leichter erweiterbar
  560. - Range-Checks nur während Initialisierung → Zeiteinsparung zur Laufzeit.
  561. - nur wenige Zellen werden betrachtet
  562. → Geschwindigkeit hängt nur von Anzahl lebender Zellen ab.
  563. Nachteile des OO Ansatzes:
  564. - 5 Klassen statt einer, 3 mal mehr Code
  565. - nutzt zahlreiche fortgeschrittene Sprachfeatures
  566. ### Kritik
  567. ### Mitteilung