From 1b2b99ffd14c7af6572ede89815508ed94ba07f3 Mon Sep 17 00:00:00 2001 From: Vedant Date: Mon, 9 Jan 2023 23:19:07 +0100 Subject: [PATCH] update lerntagebuch und TDD --- .DS_Store | Bin 8196 -> 10244 bytes Lerntagebuch.md | 112 ++++++++++++++---- TDD/.DS_Store | Bin 0 -> 6148 bytes TDD/TDD Java Project | 1 + Testenautomatisierung/.DS_Store | Bin 0 -> 8196 bytes Testenautomatisierung/CMock/CMock | 1 + Testenautomatisierung/Projekt1/.DS_Store | Bin 0 -> 6148 bytes .../Uebung-Automatisiertes-Testen-in-C | 1 + Testenautomatisierung/Projekt2/.DS_Store | Bin 0 -> 6148 bytes .../Uebung-Automatisiertes-Testen-in-Java | 1 + Testenautomatisierung/Unity/Unity | 1 + ceedling | 1 + 12 files changed, 94 insertions(+), 24 deletions(-) create mode 100644 TDD/.DS_Store create mode 160000 TDD/TDD Java Project create mode 100644 Testenautomatisierung/.DS_Store create mode 160000 Testenautomatisierung/CMock/CMock create mode 100644 Testenautomatisierung/Projekt1/.DS_Store create mode 160000 Testenautomatisierung/Projekt1/Uebung-Automatisiertes-Testen-in-C create mode 100644 Testenautomatisierung/Projekt2/.DS_Store create mode 160000 Testenautomatisierung/Projekt2/Uebung-Automatisiertes-Testen-in-Java create mode 160000 Testenautomatisierung/Unity/Unity create mode 160000 ceedling diff --git a/.DS_Store b/.DS_Store index 05ac705c85135b224d8ee2f32cefb430828c865b..79e6837e2c1a3dee3690d1481aae25e2c098a5f1 100644 GIT binary patch literal 10244 zcmeHM&2JM&6n|?6vL<{)g0x(aRzek2by6olf>j~8!BK@uB*1(e0Ht=;axB)nmUrD8 ztVq7nUVz@-C24r3lSfJ8yR8z4`dP-#mN9 zL}bi&?P(&5h)g^z$9E%3NZiiPK+4FPDM$nM5Lmn}V&>Z!a)GJBZ4`pahhCF;2a%4lEPz*6T`nQBS8KqF_TqB?n7({^2?jtls z4Qf&lIlpKA_(^SRdF67=@oK0uUk0Zp7uTQs7;U#x+uJM3-9YX!OtIsasg93L4n}vW zp^l%K{Aw~uN1ey{^GgT5yD#Q3&{xabm`|FXI|i@B}< zrxw{~9B)}7!Rm~{)N7GYB05OtVC%uI1M3z(P0?E$Z(L*Jy@A>~`cLZbVXVI#U7!Vw zQl>@71PkL(%pyw{pt648VJ>gY&8_9FUU8<7w~im1U0chU6NkV5;lk1lr{#J#885_Y8PjP``2IHk4JEl4 zl^R5^4sW!mgjj#!K7IYCAcVA2X)xHTI-j!VcwlMwYo+5lp4&hT&u#*c*2xDU*lktN zA%KfpC%0R zEPkLXhpbL@<`9*rJF^b}=MYWRp?B`>J8|`%aOhC&4VP}N9dYVT_UW)$#M~-Wb*2%} z2xtVh69U+WC&qX7k5%|am7$fCMnUC#n?qTBnXHa3``2`Or*6W8- zm>^>nt{2zwc;V~#qq45Rk`vlXQuaeB%uz4QAwScf0kJC^^{1Ua|0mw(>GS`)-5ID< J+Scd){{iwMY1#k) delta 499 zcmZn(XmOBWU|?W$DortDU;r^WfEYvza8FDWo2aMAD7P_SH$S7?WF7&@IEJc4Kq(dm zJ%)6KOoo!&d>5Cboctt^wy$$%zBB1O;)p7rf>*vE!!S5GKeqs=2k3?elcfcZOr9w! zySYjUXS6juTYBg}>i>oYMhY|avIhUoqvp~BH6)|Mzd z@rdK(4-!&B2pvem5|a}oc|rQ}C4C|K_DiX86!O+=@tFnGw_i#INgtB1lmLqJLC)PT tB{ex-dY>T3?LZ*G4J2GaLAf#UJM(0Il|T+gNB}cTj^~-mIS`K94FEyZhOYns diff --git a/Lerntagebuch.md b/Lerntagebuch.md index 01021dc..24e2e78 100644 --- a/Lerntagebuch.md +++ b/Lerntagebuch.md @@ -9,8 +9,6 @@ - Sollten Probleme an der Software auftreten, können wir zu einem funktionierenden Stand wechseln und durch das Commit-Log die Ursache ausfindig machen. Außerdem kann ich als Developer mit den gelernten vim-Befehlen vor den anderen flexen. ### Kritik - `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 Dateien verschwinden von der Ausgabe, wenn ich `git commit` ausführe. Rote Dateien werden mit `git add` grün. - -### Mitteilung an die Dozierenden - ## Uebung 01 (31.10.2022) @@ -30,10 +28,6 @@ - Wie verschiedene Programmiersprachen eigentlich gut funktionieren. Sehr hilfsreich, weil jeder Programmiersprache ihre eigene Vorteile, Funktionen und Methoden fuer jeweiligen Anwendung haben. ### Wiederholung - - -### Kritik - - -### Mitteilung an die Dozierenden - ## Uebung 02 (07.11.2022) @@ -56,10 +50,6 @@ - **Geschichte der Programmierwerkzeugen** - Die erste Maschinen (Bohrer). Dann haben wir ueber **IDEs** diskutiert. IDEs sind sehr nuetzlich und zeigt uns auch, falls es einen Fehler gibt. Die formatiert oder schlaegt automatisch Code. ### Wiederholung - - -### Kritik - - -### Mitteilung an die Dozierenden - ## Uebung 03 (14.11.2022) @@ -148,9 +138,6 @@ after step over ### Wiederholung - -### Kritik - - -### Mitteilung an die Dozierenden - ## Uebung 04 (21.11.2022) @@ -183,9 +170,6 @@ after step over ### Wiederholung - Warum SCM ideal für die Softwareentwicklung ist. Was sind remote und lokale Repositories und wie können sie auf unterschiedliche Weise vorteilhaft genutzt werden. -### Kritik - - -### Mitteilung an die Dozierenden - ## Uebung 05 (28.11.2022) @@ -259,12 +243,9 @@ after step over - **Projektmanagement Techniken:** Mit _**Kanban**_ kann man die Workflow und Teilaufgaben definieren. Die Projektfortschritt kann man mit einer _**Burn-Down-Chart**_ vorstellen. _**Scrum**_ ist auch nötig, weil damit man regelmäßige Meetings und Story-Point Tracking machen kann. ### Wiederholung - - -### Kritik - - -### Mitteilung an die Dozierenden - + - ## Uebung 06 (02.12.2022) + ## Uebung 06 (05.12.2022) **Kooperation Projekt Management** @@ -294,12 +275,95 @@ after step over - **Psychologische Aspekte:** Wir, als Menschen, könnten natürlich Fehler machen. Man kann das lösen, wenn man das gegenseitig testet. Eine formalisierte Fehlerberichte ist auch hilfsreich. ### Wiederholung - - -### Kritik - + + + ## Uebung 07 (12.12.2022) + + **Testen Übung** + +- **Was ist ein Test?** _Ein Test ist der Prozess der Ausführung eines Programms, um Fehler zu finden. Damit unsere Software gut funktioniert, sollte sie fehlerfrei sein. Wenn das Testen erfolgreich durchgeführt wird, werden alle Fehler in der Software beseitigt._ +- **Was ist ein Fehler?** _Fehler sind die Probleme oder die Fehler, die im Programm auftreten, die das Verhalten des Programms anormal macht, und erfahrene Entwickler können diese Fehler auch machen. Programmierfehler sind auch als Bugs oder Fehler bekannt, und der Prozess der Beseitigung dieser Fehler ist als Debugging bekannt._ +- **Welche Ziele haben Tests?** _Die Hauptziele von Softwaretests sind wie folgt: Auffinden von Fehlern, die vom Programmierer bei der Entwicklung der Software verursacht werden können. Vertrauen in das Qualitätsniveau zu gewinnen und Informationen darüber zu liefern. Fehler zu vermeiden._ +- **Nennen Sie die Bestandteile eines Tests.** _Die Bestandteile eines Tests sind Stichprobe, Testfälle, Testdaten, Testobjekt, Testumgebung, Testziel und Soll-/Ist- Wertvergleich._ +- **Welche Bedeutung hat die Testpyramide?** _Die Testpyramide, auch bekannt als Testautomatisierungspyramide, beschreibt im Wesentlichen die Testtypen, die die Entwicklungs- und QS-Teams in eine automatisierte Testsuite einbauen sollten. Außerdem legt sie die Reihenfolge und Häufigkeit solcher Bewertungen fest. Ziel ist es, schnelles Feedback zu geben, um sicherzustellen, dass Codeänderungen keine Auswirkungen auf bestehende Funktionen haben._ + +- **Beschreiben Sie ein Element des Testprozesses.** _Ein Testplan ist ein Plan, der die Teststrategien, die Ziele, den Zeitplan, die Schätzungen, die Fristen und die Ressourcen enthält, die für die Durchführung des Projekts erforderlich sind. Betrachten Sie ihn als einen Entwurf für die Durchführung der Tests, die erforderlich sind, um sicherzustellen, dass die Software korrekt funktioniert - kontrolliert von Testmanagern. Es wird eine Teststrategie geplant, die die Prioritäten, Entwurfsmethode, Testabdeckung, Testendekriterium und Testumgebung bestätigt._ +- **Definieren Sie 5 Testfälle für eine Rechenoperation einer Taschenrechner-Anwendung.** +_Überprüfen Sie, ob alle arithmetischen Operationen (+, -, /, X, % usw.) ordnungsgemäß funktionieren. +Überprüfen Sie, ob die Summen- oder Gleichungstaste richtig funktioniert. +Überprüfen Sie, ob alle Zahlen richtig funktionieren (0-9) +Überprüfen Sie, ob frühere Berechnungen angezeigt werden können. +Überprüfen Sie, ob die "C"- oder Löschtaste alle eingegebenen Ziffern und Operationen löscht._ + +- **Definieren Sie 5 Testfälle für die Zeilenumbruch-Funktion einer Textverarbeitung.** +_Überprüfen Sie, ob die Zeilenumbruchfunktion den Text korrekt in die nächste Zeile umbricht, wenn eine Zeile die maximale Zeilenlänge überschreitet. +Überprüfen Sie, ob die Zeilenumbruchfunktion mehrere aufeinanderfolgende Leerzeichen korrekt verarbeitet und dabei sicherstellt, dass der Text an der richtigen Stelle umgebrochen wird und die zusätzlichen Leerzeichen nicht verloren gehen. +Überprüfen Sie, ob die Zeilenumbruchsfunktion Wörter, die länger als die maximale Zeilenlänge sind, korrekt behandelt und sicherstellt, dass das gesamte Wort in die nächste Zeile gesetzt wird. +Überprüfen Sie, ob die Zeilenumbruchfunktion Sonderzeichen wie Tabulatoren und Emojis korrekt verarbeitet, ohne sie über mehrere Zeilen zu verteilen. +Überprüfen Sie, ob die Zeilenumbruchsfunktion unterschiedliche Schriftgrößen und -stile korrekt verarbeitet, so dass die Zeilenumbrüche unabhängig von der Formatierung des Textes an der richtigen Stelle eingefügt werden._ + +- **Definieren Sie 5 Testfälle für Selbsteinschreibung bei horstl.** +_Überprüfen Sie, ob die Anmeldefunktion mit der richtigen Datenbank funktioniert, damit sich die Schüler anmelden können. +Überprüfen Sie, ob die Optionen des Startmenüs korrekt angezeigt werden und zu den richtigen Seiten führen. +Überprüfen Sie, ob die Studierenden ihre Kurspläne entsprechend den angemeldeten Kursen korrekt anzeigen lassen können. +Überprüfen Sie, ob die Studierenden ihre Noten entsprechend den abgelegten Prüfungen korrekt anzeigen können. +Überprüfen Sie, ob das System für Semestergebühren und Rückmeldung korrekt funktioniert._ +- **Recherchieren Sie veröffentlichte Softwarefehler.** __ +- **Handelte es sich dabei um latente, maskierte oder kaskadierte Fehler?** __ + +## SU 08 (14.12.2022) +### Lernziel - **Automatisiertes Testen von Software** - Motivation - Grundlagen - UnitTests - Anforderungen an zu testenden Code -### Mitteilung an die Dozierenden - +### Erkenntnis - + +- **Motivation:** Es gibt viele Probleme, die bei manuellen Tests auftreten können. Wiederholbarkeit von Problemen kann häufig vorkommen. Unterschiedliche Bedeutungen und Kontexte verschiedener Tester überschneiden sich und behindern die Testdurchführung. Das Testwissen der Tester spielt eine wichtige Rolle bei der korrekten Durchführung von Tests und der Vermeidung von weiteren Problemen. Unvollständige Testdokumentation, setzt implizites Wissen über den Betrieb der Anwendung voraus. +- **Grundlagen:** Die Tests müssen sich auf häufig wiederkehrende Fälle mit hoher Anzahl, hoher Kritikalität und hoher Stabilität beziehen. Beispiele für Tests sind Unit-Tests, Modultests, die Integrationstests und Regressionstests enthalten, und Anwendungstests, die Integrationstests, Regressionstests, Lasttests und Akzeptanztests enthalten. +- **UnitTests:** Unit-Tests werden in einem frühen Stadium des Entwicklungsprozesses durchgeführt. Sie haben ein einfaches API. Diese Tests sind im Vergleich zu anderen Units stabil gegenüber Änderungen. Unit-Tests zeigen, welche Anforderung nicht erfüllt ist, wo der Fehler besteht und unter welchen Bedingungen er auftritt. Unit-Tests prüfen die Geschäftslogik, Anwendungs-/Modultests prüfen die "Verdrahtung". Unit-Tests testen keinen Code. Sie prüfen Rückgabewerte und die Kommunikation mit anderen Einheiten des zu testenden Codes als Reaktion auf die übergebenen Parameter und/oder die Reaktionen der anderen Einheiten. Ein einzelner Unit-Test prüft genau eine Erwartung der Unit. Unit-Tests verhindern unerwünschte Änderungen. +- **Anforderungen an zu testenden Code:** Die Qualität des produktiven Codes beeinflusst die Qualität der Tests.Die wichtigsten "Clean Code"-Regeln sind _Separation of Concerns / Single Resposibility, Dependency inversion, Tell! Don't ask und Law of Demeter_. Schreibe immer einen sauberen Code. Konzentrieren sich auf die Konzepte des Gesetzes von Demeter und DRY. +### Wiederholung - + +- Tests sind unerlässlich, um Schwachstellen aufzuzeigen, die Qualität zu erfassen, das Vertrauen zu stärken und die Grenzen zu ermitteln. Tests generieren Geld und Ressourcen. Testen hilft uns, unser Programm zu verbessern und unnötige Hürden in unserem Code zu vermeiden. + + + ## Uebung 08 (19.12.2022) + + **Testenautomatisierung Übung** + +- Installiertes Ruby + +- Installiert Ceedling + +- Wir haben an zwei Projekten gearbeitet, einem in C und einem in Java. In diesen Projekten haben wir Haltepunkte eingeführt und mit Hilfe des installierten Ceedling und Ruby die Tests über das Terminal ausgeführt. + +## SU 08 (21.12.2022) +### Lernziel - **Test Driven Development** - Motivation - Grundlagen +### Erkenntnis - + +- **Motivation:** Unit-Tests sind die vorherrschende Testart. Sie können oft wiederholt werden. Sie können in großer Zahl durchgeführt werden. Sie haben eine hohe Kritikalität und eine größere Stabilität. Ein guter Test kann leicht lesbar sein, ist vertrauenswürdig in seiner Art der Arbeit, funktioniert schnell und kann leicht für eine lange Zeit gewartet werden. Es ist wichtig zu prüfen, ob der Produktionscode tatsächlich ausgeführt wird. Wenn der Test fehlschlägt, ist zu prüfen, ob er aus dem richtigen Grund fehlschlägt. Die Schlussfolgerung ist, dass Unit-Tests die am häufigsten zu erstellenden automatisierten Tests sind und dass die Test Driven Development der am besten geeignete Ansatz für ihre Erstellung ist. +- **Grundlagen:** Test Driven Development führt zu 100% Anforderungsabdeckung. TDD führt zu einer hohen Testabdeckung, aber nicht zu 100%. + **Der TDD-Mikrozyklus**: +1. Schreibe einen neuen Test, gerade genug, um ihn fehlschlagen zu lassen. +2. Schreiben Sie gerade genug Produktionscode, um den Test zu erfüllen. +3. Verbessern Sie den Code (Produktion und Test), ohne einen Test zu verletzen und ohne neue Funktionen (Geschäftslogik) hinzuzufügen. + +### Wiederholung - + +- Tests sind unerlässlich, um Schwachstellen in unserem Code aufzuzeigen, die Qualität unseres Codes zu erfassen und Einschränkungen zu ermitteln. Tests helfen uns, unser Programm zu verbessern und unnötige Hürden in unserem Code zu vermeiden. +- Es gibt verschiedene Arten von Tests: Unit-Tests, Modultests, die Integrationstests und Regressionstests umfassen, und Anwendungstests, die Integrationstests, Regressionstests, Lasttests und Akzeptanztests umfassen. + + + ## Uebung 08 (09.01.2023) + + **Test Driven Development Übung** + +1. Für die TDD-Übung haben wir das Projekt aus unserer früheren Java-Testrepository-Übung übernommen. +2. Wir haben es in einen neuen Ordner mit dem Titel TDD in unserem Git-Repository verschoben. +3. Wir haben Tests zum Thema Bowling erstellt. +4. Der erste Test wurde für den Fall erstellt, dass keine Pins umgeworfen werden, was zu einer Nullpunktzahl führt. Der Test schlug fehl, da er nicht viele Informationen enthielt. Dann haben wir genug produktiven Code eingegeben, um ihn zu einem erfolgreichen Test zu machen. +5. In diesem Prozess haben wir unseren Code mit neuen Tests (mit neuer Funktionalität) verbessert, ohne die früheren Tests zu zerstören. + diff --git a/TDD/.DS_Store b/TDD/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..a99382c70a3d17184acf22dd2b760bbd4af9efe0 GIT binary patch literal 6148 zcmeHK!AiqG5S?wSO({YSiXIod7OYw<;w992@g%0`L8T_PXf$S}P1{2$~6(U#fylPnK1iiXJ>ZVm#~us0MQt9wgFrKa8LZJd3)cw!3<$k~D~tZcisfoi2u4o<~VXjT&l@box5i zHv>+|DYf18@wis4S7g0DsmSsEPPHOyyL*#K$ywXnIyh}V#E*%3HrxvQ47IFSoWctl zKW=mA_mWs8w-`H}XPVE*3@`)Cz(O%#4>_m2P`l#IFaylMZ!kdTgG43tEM^Av(SZ&9 zKGJxBkOXbIOAtznp2f@{j-UvWifB@WyZn4>0n{EXRoo&-LPc6}F=@DgKp4saP>AEGHF3OA>@-4ABwx#w zm*5R}0ghbhGa%joi377gN!{2fIRHUoR@(hGJ2Rf$Z@gZQ0|2Z(bSnVc0AOGhSlq-W zqX@aEsj{X=wh$TG19aW6?K_DWsY)Fs3Te$ zV};5bm@)^ZJu{u5FzFrbOsNjcQb;W^Kn$cA5V?CE4&WhhXkX0V6T|*d#cuOnKVhGc z_IRV=_}oFM@#Fo?!y6wy-Me_%9(RAC(LYXkFyJu^a9VGm16_!q;*7$+_Vdx{`(7B8 z%V%tDJ(s_-VQd(i#w+`nkL;)w4a0hC@Iw50iXS7KX}{$hdYw_Tc+X|g z*Y5@VR1w7VLkg}Y2ov3RSX0YNeltl4Gnh~5B>4}{><60v488LxT&A~7EKck};Pc=J z7bF%t@2k4{Sk*9Awci}8>NHlFYhEH&)nu$rzI=VOAXcb%9;?grmWWk#E>?MX1_5}u zquyrBI3Z2W_1pK)_H19z?31(1)|j6kledewY3TgNeM5y9SQ!KB%Ja6!|L-sU{=c&M zkz-vCXwERG~z@b!OmtB<=Tf53`$RUcf*Y=0{ zCwvcYYzKi-E>(r9YDSuQV|&J4KSy?kh}3ABzaZ)pQ3Pe|^kA+L9%o&VPUu+!DmRCr zQ`)9?G^J)GS~~6`1AKPR=mQm$;ne;-KTBtn;v7q=p#@Fg7x1^~$RW23TBWo5*{nX# zDw|=xtL(fg>t;CosXA-j2M^by^=KnHNxs=x(xlC_9;K6GZXH=$WlKNJK9#tRYt?@#)GU1P8Vk&D+G2imzmme)C z3dsI8p;?4Y(2WG1ICpAz%II-z~@?mb9BHsVCxYh z5am;WK2?PhL-};{>ktJz*r~)@ct7=9Xzwvm+v-`ZV*F>a-)A3uPE)hjg##RT-AB4wQSELm@jLOYn z=#;i-kET?wM2q7gGQey1nm$oZ8CLE0^|N$FDb}%|3Yyadb`E=sjvaE(pjWu|2(cHG zX0z%%D{Y2Zue0;AsOo(NH^E%{+*NuAcyYM4&Ga_`vMGF#ed_PNMs zqwe#4YwENx`NSm@;~XI;UkWp}v!R`uapiIoKM-}I&ZzrxKHu#RdU`Ne^z{7wcE6{0 zcit@)o#@4@Hy=KZewJs(Uiwu~_+Xtp3%GK0}qt}-XAoSF%H;xbXx}+{(a=}HX{pczDqFbfN{XaBSs*~rviPd z3Reu})8W@4E)Lju^y#ErWy}*Qt8hb6t~&hMg_DXsN-GQq19ur%^W83=|A&9S|KClL zo-iN`JSqlM`ye?O;+4YLy7F>-)@tZ?C=16m9)G34a7Qs>`6%9mI)Pua0gMAS9^rw= OkAR~=8e!nSGH?q3!(n>> literal 0 HcmV?d00001 diff --git a/Testenautomatisierung/Projekt2/Uebung-Automatisiertes-Testen-in-Java b/Testenautomatisierung/Projekt2/Uebung-Automatisiertes-Testen-in-Java new file mode 160000 index 0000000..4d18da9 --- /dev/null +++ b/Testenautomatisierung/Projekt2/Uebung-Automatisiertes-Testen-in-Java @@ -0,0 +1 @@ +Subproject commit 4d18da9bfa89d73cd16d375d34b889620c4b837b diff --git a/Testenautomatisierung/Unity/Unity b/Testenautomatisierung/Unity/Unity new file mode 160000 index 0000000..d826f09 --- /dev/null +++ b/Testenautomatisierung/Unity/Unity @@ -0,0 +1 @@ +Subproject commit d826f09bbf140b0acb227066b34a8653ea4b8717 diff --git a/ceedling b/ceedling new file mode 160000 index 0000000..da96583 --- /dev/null +++ b/ceedling @@ -0,0 +1 @@ +Subproject commit da96583ed94217acc49322ca91cb12941f60ce9f