Commit 5c179a1d authored by Klaus-Dieter Quibeldey-Cirkel's avatar Klaus-Dieter Quibeldey-Cirkel 🏀

revise demo cards

parent 479a43c9
......@@ -662,8 +662,8 @@
},
"cardType2": {
"name": "Mitschrift",
"longName": "Mitschrift (Mitschrift | Nachbearbeitung | To-dos)",
"content1": "Mitschrift",
"longName": "Mitschrift (Foto der Mitschrift | Nachbearbeitung | To-dos)",
"content1": "Foto der Mitschrift",
"content2": "Nachbearbeitung",
"content3": "To-dos",
"placeholders": {
......
{"name":"B: Aus dem Portal .cards","description":"Dient in der Demo-Kartei als Inhaltsverzeichnis der Beispielkarten.","date":"2018-07-08T06:28:46.220Z","dateUpdated":"2018-07-08T09:37:39.258Z","editors":[],"owner":"jCZ6oHcbZhJaKKodN","visible":false,"ratings":true,"kind":"personal","price":0,"reviewed":false,"reviewer":"undefined","request":false,"relevance":0,"raterCount":0,"quantity":1,"license":[],"userDeleted":false,"learningActive":false,"maxCards":0,"daysBeforeReset":0,"learningStart":"1970-01-01T00:00:00.000Z","learningEnd":"1970-01-01T00:00:00.000Z","learningInterval":[],"learners":0,"wordcloud":false,"shuffled":false,"cardType":8,"difficulty":1,"originalAuthor":"Quibeldey-Cirkel, Klaus, Dr."}, {"subject":"Beispiel-Karten","front":"(##) Es folgen reale Beispiele für die 14 verschiedenen Kartentypen\n\n\n<div style=\"columns:2;-webkit-columns:2;-moz-columns:2;column-gap:3em;-webkit-column-gap:3em;-moz-column-gap:3em\">\nKarten aus Bachelor- und Masterkursen im Studiengang Informatik an der THM:\n\n* Lernkarte\n* Glossarkarte\n* Anweisungskarte\n* Formelkarte\n* Entwurfsmusterkarte\n* Zitatkarte\n* Vokabelkarte\n* Prüfungskarte\n* Quizkarte\n* To-do-Karte\n* Mitschrift\n* Exzerptkarte\n* Fotokarte\n* Notizkarte\n</div>\n","difficulty":1,"centerTextElement":[false,false,false,false,false,false],"date":"2018-07-08T06:03:49.254Z","learningGoalLevel":0,"backgroundStyle":1,"learningIndex":"0","learningUnit":"0","cardType":8,"dateUpdated":"2018-07-08T09:35:41.081Z","originalAuthor":"Quibeldey-Cirkel, Klaus, Dr."}
\ No newline at end of file
{"name":"C: Beispiel für eine Glossarkarte","description":"Vorlesung Diskrete Strukturen nach Erhart Ecker im Sommersemester 2006.","date":"2018-07-05T08:41:54.153Z","dateUpdated":"2018-07-06T08:02:01.883Z","editors":[],"owner":"Z3LfhpTsXcbvspRtu","visible":false,"ratings":true,"kind":"personal","price":0,"reviewed":false,"reviewer":"undefined","request":false,"relevance":0,"raterCount":0,"quantity":1,"license":["by","nc","sa"],"userDeleted":false,"learningActive":false,"maxCards":0,"daysBeforeReset":0,"learningStart":"1970-01-01T00:00:00.000Z","learningEnd":"1970-01-01T00:00:00.000Z","learningInterval":[],"learners":0,"wordcloud":false,"shuffled":false,"cardType":3,"difficulty":1,"originalAuthor":"Thelen, Christoph"}, {"subject":"Induktionsbeweis","front":"**$q$-Baum der Höhe $h$**","back":"![Vollständiger 3-Baum der Höhe 2](https://arsnova-uploads.mni.thm.de/ds107.png)\n\nEin vollständiger $q$-Baum der Höhe $h$ hat in der Schicht 0 die Wurzel, die $q$ Söhne in Schicht 1 hat, von denen jeder wieder $q$ Söhne in Schicht 2 hat, usw.\n\n**Behauptung:** Er hat $\\alpha_q(h) = (q^{h+1} - 1)/(q - 1)$ Knoten.\n\n**Beweis:** Durch Induktion über $h \\in ℕ_0$.\nIA ($h = 0$): In diesem Fall besteht der Baum nur aus der Wurzel und hat einen Knoten. Andererseits ist $\\alpha_q(1)=1$.\n\nIS ($h \\to h + 1$): Ein $q$-Baum der Höhe $h$ hat $\\alpha_q(h)$ Knoten, von denen sich $q^h$ in Schicht $h$ befinden. Jeder Blattknoten des Baums der Höhe $h$ hat $q$ Söhne, so dass beim Baum der Höhe $h + 1$ noch $q^{h+1}$ Knoten in Schicht $h + 1$ dazukommen. Also ist die Knotenzahl\n\n$$=\\frac{q^{h+1} - 1}{q - 1} = q^{h+1} = \\frac{q^{h+1}-1+q^{h+2}-q^{h+1}}{q-1} = \\frac{q^{h+2}-1}{q-1}$$\n\nund dies ist $\\alpha_q(h + 1)$.","difficulty":1,"centerTextElement":[true,false,false,false,false,false],"date":"2018-07-04T16:11:00.441Z","learningGoalLevel":0,"backgroundStyle":1,"learningIndex":"0","learningUnit":"0","cardType":3,"hint":"Brill, M.: Mathematik für Informatiker. Hanser, München 2005.\n\nEbbinghaus, H.D. et al.: Einführung in die mathematische Logik. Wissenschaftliche Buchgesellschaft, Darmstadt 1978.\n\nGarey, M. R. and D.S. Johnson: Computers and Intractability. Freeman, New York 1979.\n\nHartmann, P.: Mathematik für Informatiker. Vieweg, Wiesbaden 2004.\n\nRosen, K. H.: Discrete Mathematics and Ist Applications. Chapters 3, 6, 7, 9. McGraw-Hill, New York.\n\nSalomaa, A. K.: Formale Sprachen. Springer, Berlin 1978\n\nTeschl, G. und S.: Mathematik für Informatiker, Band 1","dateUpdated":"2018-07-06T07:44:32.217Z","originalAuthor":"Thelen, Christoph"}
\ No newline at end of file
{"name":"D: Beispiel für eine Glossarkarte","description":"Vorlesung Diskrete Strukturen nach Erhart Ecker im Sommersemester 2006.","date":"2018-07-05T08:41:54.153Z","dateUpdated":"2018-07-06T08:02:01.883Z","editors":[],"owner":"Z3LfhpTsXcbvspRtu","visible":false,"ratings":true,"kind":"personal","price":0,"reviewed":false,"reviewer":"undefined","request":false,"relevance":0,"raterCount":0,"quantity":1,"license":["by","nc","sa"],"userDeleted":false,"learningActive":false,"maxCards":0,"daysBeforeReset":0,"learningStart":"1970-01-01T00:00:00.000Z","learningEnd":"1970-01-01T00:00:00.000Z","learningInterval":[],"learners":0,"wordcloud":false,"shuffled":false,"cardType":3,"difficulty":1,"originalAuthor":"Thelen, Christoph"}, {"subject":"Induktionsbeweis","front":"**$q$-Baum der Höhe $h$**","back":"![Vollständiger 3-Baum der Höhe 2](https://arsnova-uploads.mni.thm.de/ds107.png)\n\nEin vollständiger $q$-Baum der Höhe $h$ hat in der Schicht 0 die Wurzel, die $q$ Söhne in Schicht 1 hat, von denen jeder wieder $q$ Söhne in Schicht 2 hat, usw.\n\n**Behauptung:** Er hat $\\alpha_q(h) = (q^{h+1} - 1)/(q - 1)$ Knoten.\n\n**Beweis:** Durch Induktion über $h \\in ℕ_0$.\nIA ($h = 0$): In diesem Fall besteht der Baum nur aus der Wurzel und hat einen Knoten. Andererseits ist $\\alpha_q(1)=1$.\n\nIS ($h \\to h + 1$): Ein $q$-Baum der Höhe $h$ hat $\\alpha_q(h)$ Knoten, von denen sich $q^h$ in Schicht $h$ befinden. Jeder Blattknoten des Baums der Höhe $h$ hat $q$ Söhne, so dass beim Baum der Höhe $h + 1$ noch $q^{h+1}$ Knoten in Schicht $h + 1$ dazukommen. Also ist die Knotenzahl\n\n$$=\\frac{q^{h+1} - 1}{q - 1} = q^{h+1} = \\frac{q^{h+1}-1+q^{h+2}-q^{h+1}}{q-1} = \\frac{q^{h+2}-1}{q-1}$$\n\nund dies ist $\\alpha_q(h + 1)$.","difficulty":1,"centerTextElement":[true,false,false,false,false,false],"date":"2018-07-04T16:11:00.441Z","learningGoalLevel":0,"backgroundStyle":1,"learningIndex":"0","learningUnit":"0","cardType":3,"hint":"Brill, M.: Mathematik für Informatiker. Hanser, München 2005.\n\nEbbinghaus, H.D. et al.: Einführung in die mathematische Logik. Wissenschaftliche Buchgesellschaft, Darmstadt 1978.\n\nGarey, M. R. and D.S. Johnson: Computers and Intractability. Freeman, New York 1979.\n\nHartmann, P.: Mathematik für Informatiker. Vieweg, Wiesbaden 2004.\n\nRosen, K. H.: Discrete Mathematics and Ist Applications. Chapters 3, 6, 7, 9. McGraw-Hill, New York.\n\nSalomaa, A. K.: Formale Sprachen. Springer, Berlin 1978\n\nTeschl, G. und S.: Mathematik für Informatiker, Band 1","dateUpdated":"2018-07-06T07:44:32.217Z","originalAuthor":"Thelen, Christoph"}
\ No newline at end of file
{"name":"B: Beispiel für eine Lernkarte","description":"Die Lernkartei ist Teil der Demo-Kartei, siehe den roten Button auf der Startseite.","date":"2018-05-25T07:24:31.276Z","dateUpdated":"2018-07-06T04:27:51.347Z","editors":[],"owner":"jCZ6oHcbZhJaKKodN","visible":false,"ratings":true,"kind":"personal","price":0,"reviewed":false,"reviewer":"undefined","request":false,"relevance":0,"raterCount":0,"quantity":1,"license":["by","nc","nd"],"userDeleted":false,"learningActive":false,"maxCards":1,"daysBeforeReset":7,"learningStart":"2018-05-25T07:24:31.276Z","learningEnd":"2038-01-19T19:42:43.323Z","learningInterval":[1,3,7,28,84],"learners":1,"wordcloud":false,"shuffled":false,"cardType":0,"difficulty":1,"originalAuthor":"Quibeldey-Cirkel, Klaus, Dr."}, {"subject":"Test-Pyramide","difficulty":1,"centerTextElement":[false,false,false,false],"date":"2018-05-25T07:31:40.262Z","learningGoalLevel":0,"backgroundStyle":1,"learningIndex":"0","learningUnit":"0","cardType":0,"front":"Die Test-Pyramide von Mike Cohn dient als **Metapher für die Testautomation**.\n\n![Test-Pyramide nach Mike Cohn ([Zeichnung von Ham Vocke](https://martinfowler.com/articles/practical-test-pyramid.html))](https://martinfowler.com/articles/practical-test-pyramid/testPyramid.png)\n\n!!! Tip Lernziel\n Sie sollen den Aufbau der Test-Pyramide beschreiben können und verstehen, welche automatisierten Tests in welcher Quantität und Qualität für eine CI/CD-Pipeline erforderlich sind. </br> </br>\n\n","dateUpdated":"2018-07-06T04:27:51.338Z","back":"Die **Test-Pyramide** ist ein Konzept, ursprünglich von **Mike Cohn** vorgestellt, das eine anschauliche Gliederung von automatisierten Testprozessen in drei Schichten vorschlägt:\n\n1. **Unit Tests** (viele und möglichst kleine Tests von Funktionen und Klassen)\n2. **Service Tests** (weitere, gröbere Tests unter Beteiligung externer Dienste)\n3. **User Interface Tests** (möglichst wenige End-to-End-Akzeptanztests)\n\n!!! Tip Merke \n Tests werden mit **unterschiedlicher Granularität** geschrieben und **je höher die Ebene, desto weniger Tests**! </br></br>\n","hint":"**Fowler, Martin (2006)**: *”TestDouble”*. Online-Artikel, veröffentlicht: 17. Januar 2006. URL: https://martinfowler.com/bliki/TestDouble.html (Stand: 25.05.2018). \n\n**Vocke, Ham (2018)**: *\"The Practical Test Pyramid\"*. Online-Artikel, veröffentlicht: 26. Februar 2018. URL: https://martinfowler.com/articles/practical-test-pyramid.html (Stand: 25.05.2018)\n\n![\"The Practical Test Pyramid\", Zeichnung von Ham Vocke](https://martinfowler.com/articles/practical-test-pyramid/teaser.png)\n\n---\n\n!!! TIP Hinweis\n Diese **Lernkarte** bereitet den Inhalt des Artikels [The Practical Test Pyramid](https://martinfowler.com/articles/practical-test-pyramid.html) von Ham Vocke auf. Im Zentrum steht die **Test Pyramide** von Mike Cohn und die **Testautomation** im Kontext einer _Continuous Delivery Pipeline_. Das Thema Testautomation wurde von den Teilnehmern des Master-Informatikkurses \"Continuous Delivery\" im SoSe 2018 am Fachbereich MNI der THM bearbeitet.</br></br>Während des Semesters erstellten die Studenten auf .cards jeder für sich ein Kursglossar, Lernkarteien zu einzelnen Kursinhalten, eine Zitatensammlung und eine Prüfungskartei mit insgesamt ca. 200 Karten. In den Sommerferien lernten sie kontinuierlich ca. 500 Karten -- max. 20 täglich -- nach der [5-Fächer-Lernmethode von Sebastian Leitner](https://de.wikipedia.org/wiki/Lernkartei). Wer dies befolgte, erhielt für seine Lernleistung einen Bonus von 15 Prozent auf die Klausurnote. Die Klausur umfasste 15 zufällige Lernziel- und Prüfungsfragen aus allen Lern- und Prüfungskarteien sowie eine Transferaufgabe.\n\n!!! NOTE Danksagung\n Die Lernkarte basiert auf einer Exzerpt-Karte des Kursteilnehmers Felix Brück. ","lecture":"# The Importance of (Test) Automation\nSoftware wird immer wichtiger und bestimmt zunehmend den Alltag. Um mithalten zu können, muss Software schneller entwickelt werden können, ohne an Qualität einzubüßen. \n\n**Continuous Delivery**, ist eine Praxis, bei der eine **Buildpipeline** zum automatischen Testen eingesetzt wird und die damit einen beschleunigten Softwareentwicklungsprozess unterstützen kann, indem sie repetitive, umständliche, händische Tests durch Automatisierung ersetzen und effizienter machen.\n\n# The Test Pyramid\n![Die Test-Pyramide](https://martinfowler.com/articles/practical-test-pyramid/testPyramid.png)\n\nDie **Test-Pyramide** ist ein Konzept, ursprünglich von *Mike Cohn* vorgestellt, das eine simple Gliederung bei der Erstellung von Testsuiten in grob drei Schichten vorschlägt:\n\n1. **Unit Tests** *(viele und möglichst kleine Tests)*\n2. **Service Tests** *(weitere, gröbere Tests)*\n3. **User Interface Tests** *(möglichst wenige High-Level End-to-End-Tests)*\n\n!!! Tip Merke \n Tests werden mit **unterschiedlicher Granularität** geschrieben und **je höher die Ebene, desto weniger Tests**\n\n\n# Unit Tests\n![Unit Tests ersetzen externe Objekte mit Test Doubles](https://martinfowler.com/articles/practical-test-pyramid/unitTest.png)\n\n**Unit Tests** dienen als eine Art Sicherheitsnetz bei Codeänderungen (weshalb sie auch nicht zu stark an die Implementierung gebunden sein sollten) ([Vocke 2018](https://martinfowler.com/articles/practical-test-pyramid.html#WhatToTest)).\n\nAllgemein soll getestet werden, ob eine **Unit** (Einheit) so funktioniert wie erwartet. Dabei ist nicht genau definiert, was eine „Unit“ ist. In einer funktionalen Programmiersprache wären dies z.B. Funktionen, in einer OO Sprache könnten es einzelne Methoden oder ganze Klassen sein [Vocke 2018](https://martinfowler.com/articles/practical-test-pyramid.html#UnitTests).\n\n## Mocking and Stubbing\nUm automatische Tests einfach und möglichst schnell zu halten, werden **Mocks** und **Stubs** benutzt, die anstelle von z.B. teuren Datenbankaufrufen oder HTTP-Queries verwendet werden. Außerdem dienen sie zur Vermeidung von Seiteneffekten und komplexen Testsetups. Es werden also reale Module/Klassen/Funktionen/etc. durch Fake-Versionen ersetzt, die dieselbe Signatur aufweisen. \nDiese sogenannten **Test Doubles** umfassen u.a. (vgl. [Fowler 2006](https://martinfowler.com/bliki/TestDouble.html)):\n- **Mocks**: Sind vorprogrammiert mit Erwartungen an Aufrufen, die sie gemäß den Spezifikationen ihrer realen Vorbilder erhalten sollten, um zu testen, ob alle erwarteten Aktionen ausgeführt werden. Bei unerwarteten Aufrufen können sie Exceptions auswerfen.\n\n- **Stubs**: Sie enthalten vorgefertigte Antworten, die sie für Aufrufe während der Testphase verwenden.\n\n!!! NOTE Hinweis\n Es wird oft unterschieden zwischen **solitary Unit Tests**, bei denen alles durch Stubs und Mocks ersetzt wird und **sociable Unit Tests**, bei denen teilweise mit den realen Objekten getestet wird.\n\n## What to Test?\nGrundsätzlich können Unit Tests für alle Klassen (unabhängig von ihrer Funktion) eingesetzt werden. Es empfiehlt sich jedoch, nur **eine Testklasse pro Produktions-Klasse** zu schreiben. Dabei sollte eine Testklasse **mindestens das *public*-Interface der Klasse abdecken**. ([Vocke 2018](https://martinfowler.com/articles/practical-test-pyramid.html#WhatToTest))\n\nUnit Tests sollten nicht 100% des Codes abdecken, sondern sich auf nicht-trivialen Testpfade (z.B. Happy Path und Grenzwerte) beschränken. Dabei sollten sie nicht zu implementierungsspezifisch sein, da sie sonst - etwa nach einem Refactoring - umgeschrieben werden müssten.\n\n## Test Structure\nEine gute und grundlegende Struktur für Tests allgemein, sieht wie folgt aus (vgl. [Vocke 2018](https://martinfowler.com/articles/practical-test-pyramid.html#TestStructure)):\n1. Testdaten einrichten\n2. Zu testende Methode aufrufen\n3. Sicherstellen, dass die erwarteten Ergebnisse zurückgegeben werden.\nDiese kann man sich auch durch die Alliteration [Arrange, Act, Assert](https://xp123.com/articles/3a-arrange-act-assert/) merken.\n\n\n\n# Integration Tests\nWie der Name vermuten lässt, testen **Integration Tests** die Integration der eigenen Applikation mit applikationsexternen Services (Datenbank, Dateisystem, Netzwerkaufrufe, REST APIs, etc.).\nEs geht also um Fälle, in denen Aktionen die Integration externer Dinge triggern. \n\nIm Falle eines Datenbankaufrufs, könnte dies bspw. so aussehen:\n1. Datenbank starten\n2. Applikation mit DB verbinden\n3. Funktion triggern, die in die DB schreibt\n4. Testen, ob die erwarteten Daten geschrieben wurden, indem man sie aus der DB lädt\n\nGenerell sollten Integration Tests für alle Fälle geschrieben werden, bei denen **Daten serialisiert oder deserialisiert** werden, um sicherzustellen, dass alle externen Abhängigkeiten/Kollaborateure wie erwartet funktionieren. Also z.B. bei:\n- Aufrufe an REST APIs\n- Lesen/Schreiben auf Datenbanken oder Queues\n- Schreiben auf das Dateisystem\n\nEs sollte dabei mit lokalen Instanzen der Abhängigkeiten gearbeitet werden und **nicht mit realen Produktivsystemen** (bei unzähligen automatisierten Tests kann dies im schlimmsten Falle zu einem Denial of Service führen). Ist es nicht möglich, eine eigene Instanz laufen zu lassen, sollten Fake-Versionen implementiert werden, die das reale Verhalten nachahmen. \n\n![Integration mit separatem Service](https://martinfowler.com/articles/practical-test-pyramid/httpIntegrationTest.png)\n\n\n# Contract Tests\nEs kann sein, dass Softwareentwicklung derart organisiert ist, dass unterschiedliche Teams an unterschiedlichen Serviceimplementierungen arbeiten, die zum Schluss zu einem großen, zusammenhängenden System zusammengefügt werden. \n\nDiese unterschiedlichen Services kommunizieren über Interfaces miteinander (dazu nutzen sie etwa REST und JSON via HTTPS, RPC oder bei einer eventgesteuerten, asynchronen Anwendung via Queues oder Channels). Dann ist immer ein Service ein **Consumer** (der Daten abruft) und der andere ein **Provider** (der Daten bereitstellt). </br>(Bei asynchronen Anwendungen auch **Publisher** und **Subscriber**).\n\nDie Spezifikation eines Interfaces kann als **Contract** (Vertrag) angesehen werden.\n\nBeim **Consumer-Driven Contract Test (CDC)** übernimmt das Team des Consumer-Services die Implementierung des Vertrags. Es schreibt also Tests, die das Interface auf alle Daten prüfen, die es benötig/erwartet, um diese dann an das Provider-Team weiterzugeben. Dieses entwickelt nun die API nach diesen Tests. Dabei durchlaufen alle Änderungen kontinuierlich die Tests in der Buildpipeline. Bei Problemen tauschen sich die Teams aus. (Vgl. [Vocke 2018](https://martinfowler.com/articles/practical-test-pyramid.html#ContractTests))\n\n![Consumer-Driven Contract Tests](https://martinfowler.com/articles/practical-test-pyramid/cdc_tests.png)\n\n\n# UI Tests\n**UI Tests** prüfen, ob das User Interface wie erwartet auf Interaktionen reagiert (dazu zählen Webinterfaces genauso, wie Kommandozeilen-Interfaces oder REST API). Dabei kann auf Dinge geachtet werden wie *Verhalten, Layout, Usability* oder *Wahrung des Corporate Designs*.\n\nUI Tests müssen keine vollständigen End-to-End-Tests sein. Dies kann z.B. auch mit Unit Tests gemacht werden, in dem der Frontend-Code mit Backend-Stubs getestet wird.\n\n![](https://martinfowler.com/articles/practical-test-pyramid/ui_tests.png)\n\n!!! NOTE\n Während das Verhalten automatisiert (z.B. mit Tools wie Selenium) getestet werden kann, kommt man spätestens beim Look & Feel an die Grenzen der Automatisierung.\n\n\n# End-to-End Tests\n**End-to-End Tests** (manchmal auch **Broad Stack Tests**) prüfen die Applikation über ihr eigenes Interface. UI Tests können ebenfalls zu hierzu zählen.\n\nJe komplexer das User Interface ist, desto mehr Probleme können bei Tests auftreten. Doch auch Eigenarten unterschiedlicher Browser können Fehlverhalten verursachen.\nBei Entwicklung der Tests sollte sich auf die Kernanwendungen/interaktionen der Endnutzer konzentriert werden, um Vorlagen für automatisierte Tests dafür zu erstellen (bspw. Produktsuche, Warenkorb und Bezahlen in einem Webshop).\n\nDiese Tests sind sehr zeit- und ressourcenaufwendig und sollten – wie von Cohn empfohlen – auf ein Minimum reduziert werden. Die Lowlevel-Funktionen sollten sowieso bereits auf den unteren Ebenen der **Test-Pyramide** getestet worden sein.\n\n![End-to-End Tests testen das ganze, voll integrierte System](https://martinfowler.com/articles/practical-test-pyramid/e2etests.png)\n\n# Weitere Anmerkungen\n- Neben automatisierten Tests ist es auch sinnvoll, einige Tests selbst durchzuführen und zu testen, wie man Fehlverhalten der eigenen Anwendung provozieren kann. Feedback und Ergebnisse können dokumentiert werden, um sie später in die Tests zu integrieren.\n\n- Es dreht sich beim automatisierten Testen alles um schnelles Feedback. Es ist daher sinnvoll, die Testpipeline so zu gestalten, dass langsame Tests gegen Ende ablaufen, um die einfachen und schnellen nicht aufzuhalten.","originalAuthor":"Quibeldey-Cirkel, Klaus, Dr."}
\ No newline at end of file
{"name":"C: Beispiel für eine Lernkarte","description":"Die Lernkartei ist Teil der Demo-Kartei, siehe den roten Button auf der Startseite.","date":"2018-05-25T07:24:31.276Z","dateUpdated":"2018-07-06T04:27:51.347Z","editors":[],"owner":"jCZ6oHcbZhJaKKodN","visible":false,"ratings":true,"kind":"personal","price":0,"reviewed":false,"reviewer":"undefined","request":false,"relevance":0,"raterCount":0,"quantity":1,"license":["by","nc","nd"],"userDeleted":false,"learningActive":false,"maxCards":1,"daysBeforeReset":7,"learningStart":"2018-05-25T07:24:31.276Z","learningEnd":"2038-01-19T19:42:43.323Z","learningInterval":[1,3,7,28,84],"learners":1,"wordcloud":false,"shuffled":false,"cardType":0,"difficulty":1,"originalAuthor":"Quibeldey-Cirkel, Klaus, Dr."}, {"subject":"Test-Pyramide","difficulty":1,"centerTextElement":[false,false,false,false],"date":"2018-05-25T07:31:40.262Z","learningGoalLevel":0,"backgroundStyle":1,"learningIndex":"0","learningUnit":"0","cardType":0,"front":"Die Test-Pyramide von Mike Cohn dient als **Metapher für die Testautomation**.\n\n![Test-Pyramide nach Mike Cohn ([Zeichnung von Ham Vocke](https://martinfowler.com/articles/practical-test-pyramid.html))](https://martinfowler.com/articles/practical-test-pyramid/testPyramid.png)\n\n!!! Tip Lernziel\n Sie sollen den Aufbau der Test-Pyramide beschreiben können und verstehen, welche automatisierten Tests in welcher Quantität und Qualität für eine CI/CD-Pipeline erforderlich sind. </br> </br>\n\n","dateUpdated":"2018-07-06T04:27:51.338Z","back":"Die **Test-Pyramide** ist ein Konzept, ursprünglich von **Mike Cohn** vorgestellt, das eine anschauliche Gliederung von automatisierten Testprozessen in drei Schichten vorschlägt:\n\n1. **Unit Tests** (viele und möglichst kleine Tests von Funktionen und Klassen)\n2. **Service Tests** (weitere, gröbere Tests unter Beteiligung externer Dienste)\n3. **User Interface Tests** (möglichst wenige End-to-End-Akzeptanztests)\n\n!!! Tip Merke \n Tests werden mit **unterschiedlicher Granularität** geschrieben und **je höher die Ebene, desto weniger Tests**! </br></br>\n","hint":"**Fowler, Martin (2006)**: *”TestDouble”*. Online-Artikel, veröffentlicht: 17. Januar 2006. URL: https://martinfowler.com/bliki/TestDouble.html (Stand: 25.05.2018). \n\n**Vocke, Ham (2018)**: *\"The Practical Test Pyramid\"*. Online-Artikel, veröffentlicht: 26. Februar 2018. URL: https://martinfowler.com/articles/practical-test-pyramid.html (Stand: 25.05.2018)\n\n![\"The Practical Test Pyramid\", Zeichnung von Ham Vocke](https://martinfowler.com/articles/practical-test-pyramid/teaser.png)\n\n---\n\n!!! TIP Hinweis\n Diese **Lernkarte** bereitet den Inhalt des Artikels [The Practical Test Pyramid](https://martinfowler.com/articles/practical-test-pyramid.html) von Ham Vocke auf. Im Zentrum steht die **Test Pyramide** von Mike Cohn und die **Testautomation** im Kontext einer _Continuous Delivery Pipeline_. Das Thema Testautomation wurde von den Teilnehmern des Master-Informatikkurses \"Continuous Delivery\" im SoSe 2018 am Fachbereich MNI der THM bearbeitet.</br></br>Während des Semesters erstellten die Studenten auf .cards jeder für sich ein Kursglossar, Lernkarteien zu einzelnen Kursinhalten, eine Zitatensammlung und eine Prüfungskartei mit insgesamt ca. 200 Karten. In den Sommerferien lernten sie kontinuierlich ca. 500 Karten -- max. 20 täglich -- nach der [5-Fächer-Lernmethode von Sebastian Leitner](https://de.wikipedia.org/wiki/Lernkartei). Wer dies befolgte, erhielt für seine Lernleistung einen Bonus von 15 Prozent auf die Klausurnote. Die Klausur umfasste 15 zufällige Lernziel- und Prüfungsfragen aus allen Lern- und Prüfungskarteien sowie eine Transferaufgabe.\n\n!!! NOTE Danksagung\n Die Lernkarte basiert auf einer Exzerpt-Karte des Kursteilnehmers Felix Brück. ","lecture":"# The Importance of (Test) Automation\nSoftware wird immer wichtiger und bestimmt zunehmend den Alltag. Um mithalten zu können, muss Software schneller entwickelt werden können, ohne an Qualität einzubüßen. \n\n**Continuous Delivery**, ist eine Praxis, bei der eine **Buildpipeline** zum automatischen Testen eingesetzt wird und die damit einen beschleunigten Softwareentwicklungsprozess unterstützen kann, indem sie repetitive, umständliche, händische Tests durch Automatisierung ersetzen und effizienter machen.\n\n# The Test Pyramid\n![Die Test-Pyramide](https://martinfowler.com/articles/practical-test-pyramid/testPyramid.png)\n\nDie **Test-Pyramide** ist ein Konzept, ursprünglich von *Mike Cohn* vorgestellt, das eine simple Gliederung bei der Erstellung von Testsuiten in grob drei Schichten vorschlägt:\n\n1. **Unit Tests** *(viele und möglichst kleine Tests)*\n2. **Service Tests** *(weitere, gröbere Tests)*\n3. **User Interface Tests** *(möglichst wenige High-Level End-to-End-Tests)*\n\n!!! Tip Merke \n Tests werden mit **unterschiedlicher Granularität** geschrieben und **je höher die Ebene, desto weniger Tests**\n\n\n# Unit Tests\n![Unit Tests ersetzen externe Objekte mit Test Doubles](https://martinfowler.com/articles/practical-test-pyramid/unitTest.png)\n\n**Unit Tests** dienen als eine Art Sicherheitsnetz bei Codeänderungen (weshalb sie auch nicht zu stark an die Implementierung gebunden sein sollten) ([Vocke 2018](https://martinfowler.com/articles/practical-test-pyramid.html#WhatToTest)).\n\nAllgemein soll getestet werden, ob eine **Unit** (Einheit) so funktioniert wie erwartet. Dabei ist nicht genau definiert, was eine „Unit“ ist. In einer funktionalen Programmiersprache wären dies z.B. Funktionen, in einer OO Sprache könnten es einzelne Methoden oder ganze Klassen sein [Vocke 2018](https://martinfowler.com/articles/practical-test-pyramid.html#UnitTests).\n\n## Mocking and Stubbing\nUm automatische Tests einfach und möglichst schnell zu halten, werden **Mocks** und **Stubs** benutzt, die anstelle von z.B. teuren Datenbankaufrufen oder HTTP-Queries verwendet werden. Außerdem dienen sie zur Vermeidung von Seiteneffekten und komplexen Testsetups. Es werden also reale Module/Klassen/Funktionen/etc. durch Fake-Versionen ersetzt, die dieselbe Signatur aufweisen. \nDiese sogenannten **Test Doubles** umfassen u.a. (vgl. [Fowler 2006](https://martinfowler.com/bliki/TestDouble.html)):\n- **Mocks**: Sind vorprogrammiert mit Erwartungen an Aufrufen, die sie gemäß den Spezifikationen ihrer realen Vorbilder erhalten sollten, um zu testen, ob alle erwarteten Aktionen ausgeführt werden. Bei unerwarteten Aufrufen können sie Exceptions auswerfen.\n\n- **Stubs**: Sie enthalten vorgefertigte Antworten, die sie für Aufrufe während der Testphase verwenden.\n\n!!! NOTE Hinweis\n Es wird oft unterschieden zwischen **solitary Unit Tests**, bei denen alles durch Stubs und Mocks ersetzt wird und **sociable Unit Tests**, bei denen teilweise mit den realen Objekten getestet wird.\n\n## What to Test?\nGrundsätzlich können Unit Tests für alle Klassen (unabhängig von ihrer Funktion) eingesetzt werden. Es empfiehlt sich jedoch, nur **eine Testklasse pro Produktions-Klasse** zu schreiben. Dabei sollte eine Testklasse **mindestens das *public*-Interface der Klasse abdecken**. ([Vocke 2018](https://martinfowler.com/articles/practical-test-pyramid.html#WhatToTest))\n\nUnit Tests sollten nicht 100% des Codes abdecken, sondern sich auf nicht-trivialen Testpfade (z.B. Happy Path und Grenzwerte) beschränken. Dabei sollten sie nicht zu implementierungsspezifisch sein, da sie sonst - etwa nach einem Refactoring - umgeschrieben werden müssten.\n\n## Test Structure\nEine gute und grundlegende Struktur für Tests allgemein, sieht wie folgt aus (vgl. [Vocke 2018](https://martinfowler.com/articles/practical-test-pyramid.html#TestStructure)):\n1. Testdaten einrichten\n2. Zu testende Methode aufrufen\n3. Sicherstellen, dass die erwarteten Ergebnisse zurückgegeben werden.\nDiese kann man sich auch durch die Alliteration [Arrange, Act, Assert](https://xp123.com/articles/3a-arrange-act-assert/) merken.\n\n\n\n# Integration Tests\nWie der Name vermuten lässt, testen **Integration Tests** die Integration der eigenen Applikation mit applikationsexternen Services (Datenbank, Dateisystem, Netzwerkaufrufe, REST APIs, etc.).\nEs geht also um Fälle, in denen Aktionen die Integration externer Dinge triggern. \n\nIm Falle eines Datenbankaufrufs, könnte dies bspw. so aussehen:\n1. Datenbank starten\n2. Applikation mit DB verbinden\n3. Funktion triggern, die in die DB schreibt\n4. Testen, ob die erwarteten Daten geschrieben wurden, indem man sie aus der DB lädt\n\nGenerell sollten Integration Tests für alle Fälle geschrieben werden, bei denen **Daten serialisiert oder deserialisiert** werden, um sicherzustellen, dass alle externen Abhängigkeiten/Kollaborateure wie erwartet funktionieren. Also z.B. bei:\n- Aufrufe an REST APIs\n- Lesen/Schreiben auf Datenbanken oder Queues\n- Schreiben auf das Dateisystem\n\nEs sollte dabei mit lokalen Instanzen der Abhängigkeiten gearbeitet werden und **nicht mit realen Produktivsystemen** (bei unzähligen automatisierten Tests kann dies im schlimmsten Falle zu einem Denial of Service führen). Ist es nicht möglich, eine eigene Instanz laufen zu lassen, sollten Fake-Versionen implementiert werden, die das reale Verhalten nachahmen. \n\n![Integration mit separatem Service](https://martinfowler.com/articles/practical-test-pyramid/httpIntegrationTest.png)\n\n\n# Contract Tests\nEs kann sein, dass Softwareentwicklung derart organisiert ist, dass unterschiedliche Teams an unterschiedlichen Serviceimplementierungen arbeiten, die zum Schluss zu einem großen, zusammenhängenden System zusammengefügt werden. \n\nDiese unterschiedlichen Services kommunizieren über Interfaces miteinander (dazu nutzen sie etwa REST und JSON via HTTPS, RPC oder bei einer eventgesteuerten, asynchronen Anwendung via Queues oder Channels). Dann ist immer ein Service ein **Consumer** (der Daten abruft) und der andere ein **Provider** (der Daten bereitstellt). </br>(Bei asynchronen Anwendungen auch **Publisher** und **Subscriber**).\n\nDie Spezifikation eines Interfaces kann als **Contract** (Vertrag) angesehen werden.\n\nBeim **Consumer-Driven Contract Test (CDC)** übernimmt das Team des Consumer-Services die Implementierung des Vertrags. Es schreibt also Tests, die das Interface auf alle Daten prüfen, die es benötig/erwartet, um diese dann an das Provider-Team weiterzugeben. Dieses entwickelt nun die API nach diesen Tests. Dabei durchlaufen alle Änderungen kontinuierlich die Tests in der Buildpipeline. Bei Problemen tauschen sich die Teams aus. (Vgl. [Vocke 2018](https://martinfowler.com/articles/practical-test-pyramid.html#ContractTests))\n\n![Consumer-Driven Contract Tests](https://martinfowler.com/articles/practical-test-pyramid/cdc_tests.png)\n\n\n# UI Tests\n**UI Tests** prüfen, ob das User Interface wie erwartet auf Interaktionen reagiert (dazu zählen Webinterfaces genauso, wie Kommandozeilen-Interfaces oder REST API). Dabei kann auf Dinge geachtet werden wie *Verhalten, Layout, Usability* oder *Wahrung des Corporate Designs*.\n\nUI Tests müssen keine vollständigen End-to-End-Tests sein. Dies kann z.B. auch mit Unit Tests gemacht werden, in dem der Frontend-Code mit Backend-Stubs getestet wird.\n\n![](https://martinfowler.com/articles/practical-test-pyramid/ui_tests.png)\n\n!!! NOTE\n Während das Verhalten automatisiert (z.B. mit Tools wie Selenium) getestet werden kann, kommt man spätestens beim Look & Feel an die Grenzen der Automatisierung.\n\n\n# End-to-End Tests\n**End-to-End Tests** (manchmal auch **Broad Stack Tests**) prüfen die Applikation über ihr eigenes Interface. UI Tests können ebenfalls zu hierzu zählen.\n\nJe komplexer das User Interface ist, desto mehr Probleme können bei Tests auftreten. Doch auch Eigenarten unterschiedlicher Browser können Fehlverhalten verursachen.\nBei Entwicklung der Tests sollte sich auf die Kernanwendungen/interaktionen der Endnutzer konzentriert werden, um Vorlagen für automatisierte Tests dafür zu erstellen (bspw. Produktsuche, Warenkorb und Bezahlen in einem Webshop).\n\nDiese Tests sind sehr zeit- und ressourcenaufwendig und sollten – wie von Cohn empfohlen – auf ein Minimum reduziert werden. Die Lowlevel-Funktionen sollten sowieso bereits auf den unteren Ebenen der **Test-Pyramide** getestet worden sein.\n\n![End-to-End Tests testen das ganze, voll integrierte System](https://martinfowler.com/articles/practical-test-pyramid/e2etests.png)\n\n# Weitere Anmerkungen\n- Neben automatisierten Tests ist es auch sinnvoll, einige Tests selbst durchzuführen und zu testen, wie man Fehlverhalten der eigenen Anwendung provozieren kann. Feedback und Ergebnisse können dokumentiert werden, um sie später in die Tests zu integrieren.\n\n- Es dreht sich beim automatisierten Testen alles um schnelles Feedback. Es ist daher sinnvoll, die Testpipeline so zu gestalten, dass langsame Tests gegen Ende ablaufen, um die einfachen und schnellen nicht aufzuhalten.","originalAuthor":"Quibeldey-Cirkel, Klaus, Dr."}
\ No newline at end of file
{"name":"G: Beispiel für eine Mitschrift-Karte","description":"In dieser Kartei werden die Mitschriften aus der SWT Vorlesung nachbearbeitet.","date":"2018-05-09T16:59:37.158Z","dateUpdated":"2018-07-06T12:21:17.219Z","editors":[],"owner":"CYWvz28to9mWFAywP","visible":false,"ratings":true,"kind":"personal","price":0,"reviewed":false,"reviewer":"undefined","request":false,"relevance":0,"raterCount":0,"quantity":1,"license":["by","nc","nd"],"userDeleted":false,"learningActive":false,"maxCards":0,"daysBeforeReset":0,"learningStart":"1970-01-01T00:00:00.000Z","learningEnd":"1970-01-01T00:00:00.000Z","learningInterval":[],"learners":0,"wordcloud":false,"shuffled":false,"cardType":2,"difficulty":0,"originalAuthor":"Klinge, Dominik"}, {"subject":"SWT-Mitschrift vom 08.05.2018","front":"![](https://arsnova.thm.de/blog/wp-content/uploads/2018/07/SWT-Mitschrift-08.05.2018.jpg)","back":"(##) Thema: Domänenmodellierung\n\n<img src = https://upload.wikimedia.org/wikipedia/commons/3/39/Grady_Booch%2C_CHM_2011_2_cropped.jpg align=\"right\" width = 130px height = 170px alt=\"Grady Booch\">\n<u>Wer ist **Grady Booch?**</u>\n\n\nGrady Booch ist ein **amerikanischer Informatiker**. \n\nEr gilt als **Pionier** auf dem Gebiet des **modularen** und **objektorientierten Softwareentwurfs**.\n\n<img src = https://upload.wikimedia.org/wikipedia/de/a/ac/Booch.png align=\"left\" width = 350px height = 220px alt=\"Beispiel: Booch Notation\">\n<u>Was trug **Booch** zum **UML-Diagramm** bei?</u>\n\n\nGrundlage für Boochs Mitarbeit an der Unified Modeling Language (UML) war seine **eigene Notation**, die durch ihre **charakteristische grafische Form** für **Klassen** auffällt. \n\nDiese Notation ist **nicht mehr gebräuchlich**.\n\nDie wesentlichen Elemente dieser Notation sind **Klassen** und ihre **Beziehungen** zueinander. \n\n**Klassen** werden durch eine **Wolke** symbolisiert.\n\n<u>Wozu dient die **Abbott-Textanalyse**?</u>\n\nDie Abbott Textanalyse wird durchgeführt, um **Systemkomponenten** zu **identifizieren**.\n\nSie **analysiert** den **Text** nach **Nomen** und kann daraus **navigierbare Klassendiagramme** erstellen.\n\n<u>Wer sind die **drei Amigos**?</u>\n\nDie **Väter von UML**, insbesondere **Grady Booch**, **Ivar Jacobson** und **James Rumbaugh**, auch „Die drei Amigos“ genannt, waren in den 1990er-Jahren bekannte **Vertreter** der **objektorientierten Programmierung**. \n\nAls sie zusammen beim Unternehmen Rational Software beschäftigt waren, entstand die **Idee**, die **verschiedenen Notationssysteme strukturiert zusammenzuführen**.\n\n<u>Was sind **Kardinalitäten**?</u>\n\nKardinalität spielt bei der **Assioziation in Klassendiagrammen** eine Rolle. Damit ist gemeint, dass zwischen **Objekten** von Klassen **Beziehungen** bestehen.\n\nIn UML Klassendiagrammen werden **Assoziationen** mit **Linien** verdeutlicht. \n\nOft wird die **Richtung der Assoziation** mit einem **Pfeil** angegeben.\n\n<u>Was sollte **niemals** in einem **Domänendiagramm** stehen?</u>\n\n**Domäne** kann man sich wie ein **Standbild** vorstellen.\n\nSie sind <u>**nicht**</u> veränderlich.\n\nDeshalb dürfen in einem Domänendiagramm **niemals Methoden** stehen.\n\n<u>Was sind **Schlüsselabstraktionen**?</u>\n\nEine **Klasse** oder ein **Objekt**, die einen Teil des **Vokabulars** des **Problembereichs** bilden. \n\nVorrangiger Nutzen bei der Festlegung solcher Abstraktionen ist die **Eingrenzung des Problems**; die im System befindlichen relevanten Dinge, die für das **Design** benötigt werden, werden somit **betont**, die **unwichtigen Dinge ausgegrenzt**.\n\nQuellen:\n\nInformationen über **Grady Booch** und die **Booch-Notation** [Wikipedia.org](https://de.wikipedia.org/wiki/Grady_Booch)\n\nInformationen über die **Abbot-Textanalyse** [informit.com](http://www.informit.com/articles/article.aspx?p=29043&seqNum=9) \n\nInformationen über die **3 Amigos** [Wikipedia.org](https://de.wikipedia.org/wiki/Unified_Modeling_Language#Von_den_Anfängen_zur_Unified_Modeling_Language_1.x)\n\nInformationen über **Kardinalitäten** [uni-blaetter.net](http://www.uni-blaetter.net/informatik/uml/kardinalitat-und-assoziation-uml/)\n\nInformationen über **Schlüsselabstraktionen** [wiki-hilfe.de](http://www.wiki-hilfe.de/wiki/Schlüsselabstraktion?redirectedFrom=Schl%FCsselkonzept)\n\n","difficulty":0,"centerTextElement":[true,false,false,false],"date":"2018-05-19T13:05:55.114Z","learningGoalLevel":0,"backgroundStyle":1,"learningIndex":"0","learningUnit":"0","cardType":2,"hint":"[x] Abbott-Analyse nachschlagen\n[x] Begriff \"Schlüsselabstraktionen\": Was ist das? Was machen diese?\n[x] Verdienst der drei Amigos? Wer sind sie? Was haben sie gemacht?","dateUpdated":"2018-07-06T12:21:17.200Z","originalAuthor":"Klinge, Dominik"}
\ No newline at end of file
{"name":"M: Beispiel für eine Mitschrift-Karte","description":"In dieser Kartei werden die Mitschriften aus der SWT Vorlesung nachbearbeitet.","date":"2018-05-09T16:59:37.158Z","dateUpdated":"2018-07-06T12:21:17.219Z","editors":[],"owner":"CYWvz28to9mWFAywP","visible":false,"ratings":true,"kind":"personal","price":0,"reviewed":false,"reviewer":"undefined","request":false,"relevance":0,"raterCount":0,"quantity":1,"license":["by","nc","nd"],"userDeleted":false,"learningActive":false,"maxCards":0,"daysBeforeReset":0,"learningStart":"1970-01-01T00:00:00.000Z","learningEnd":"1970-01-01T00:00:00.000Z","learningInterval":[],"learners":0,"wordcloud":false,"shuffled":false,"cardType":2,"difficulty":0,"originalAuthor":"Klinge, Dominik"}, {"subject":"SWT-Mitschrift vom 08.05.2018","front":"![](https://arsnova.thm.de/blog/wp-content/uploads/2018/07/SWT-Mitschrift-08.05.2018.jpg)","back":"(##) Thema: Domänenmodellierung\n\n<img src = https://upload.wikimedia.org/wikipedia/commons/3/39/Grady_Booch%2C_CHM_2011_2_cropped.jpg align=\"right\" width = 130px height = 170px alt=\"Grady Booch\">\n<u>Wer ist **Grady Booch?**</u>\n\n\nGrady Booch ist ein **amerikanischer Informatiker**. \n\nEr gilt als **Pionier** auf dem Gebiet des **modularen** und **objektorientierten Softwareentwurfs**.\n\n<img src = https://upload.wikimedia.org/wikipedia/de/a/ac/Booch.png align=\"left\" width = 350px height = 220px alt=\"Beispiel: Booch Notation\">\n<u>Was trug **Booch** zum **UML-Diagramm** bei?</u>\n\n\nGrundlage für Boochs Mitarbeit an der Unified Modeling Language (UML) war seine **eigene Notation**, die durch ihre **charakteristische grafische Form** für **Klassen** auffällt. \n\nDiese Notation ist **nicht mehr gebräuchlich**.\n\nDie wesentlichen Elemente dieser Notation sind **Klassen** und ihre **Beziehungen** zueinander. \n\n**Klassen** werden durch eine **Wolke** symbolisiert.\n\n<u>Wozu dient die **Abbott-Textanalyse**?</u>\n\nDie Abbott Textanalyse wird durchgeführt, um **Systemkomponenten** zu **identifizieren**.\n\nSie **analysiert** den **Text** nach **Nomen** und kann daraus **navigierbare Klassendiagramme** erstellen.\n\n<u>Wer sind die **drei Amigos**?</u>\n\nDie **Väter von UML**, insbesondere **Grady Booch**, **Ivar Jacobson** und **James Rumbaugh**, auch „Die drei Amigos“ genannt, waren in den 1990er-Jahren bekannte **Vertreter** der **objektorientierten Programmierung**. \n\nAls sie zusammen beim Unternehmen Rational Software beschäftigt waren, entstand die **Idee**, die **verschiedenen Notationssysteme strukturiert zusammenzuführen**.\n\n<u>Was sind **Kardinalitäten**?</u>\n\nKardinalität spielt bei der **Assioziation in Klassendiagrammen** eine Rolle. Damit ist gemeint, dass zwischen **Objekten** von Klassen **Beziehungen** bestehen.\n\nIn UML Klassendiagrammen werden **Assoziationen** mit **Linien** verdeutlicht. \n\nOft wird die **Richtung der Assoziation** mit einem **Pfeil** angegeben.\n\n<u>Was sollte **niemals** in einem **Domänendiagramm** stehen?</u>\n\n**Domäne** kann man sich wie ein **Standbild** vorstellen.\n\nSie sind <u>**nicht**</u> veränderlich.\n\nDeshalb dürfen in einem Domänendiagramm **niemals Methoden** stehen.\n\n<u>Was sind **Schlüsselabstraktionen**?</u>\n\nEine **Klasse** oder ein **Objekt**, die einen Teil des **Vokabulars** des **Problembereichs** bilden. \n\nVorrangiger Nutzen bei der Festlegung solcher Abstraktionen ist die **Eingrenzung des Problems**; die im System befindlichen relevanten Dinge, die für das **Design** benötigt werden, werden somit **betont**, die **unwichtigen Dinge ausgegrenzt**.\n\nQuellen:\n\nInformationen über **Grady Booch** und die **Booch-Notation** [Wikipedia.org](https://de.wikipedia.org/wiki/Grady_Booch)\n\nInformationen über die **Abbot-Textanalyse** [informit.com](http://www.informit.com/articles/article.aspx?p=29043&seqNum=9) \n\nInformationen über die **3 Amigos** [Wikipedia.org](https://de.wikipedia.org/wiki/Unified_Modeling_Language#Von_den_Anfängen_zur_Unified_Modeling_Language_1.x)\n\nInformationen über **Kardinalitäten** [uni-blaetter.net](http://www.uni-blaetter.net/informatik/uml/kardinalitat-und-assoziation-uml/)\n\nInformationen über **Schlüsselabstraktionen** [wiki-hilfe.de](http://www.wiki-hilfe.de/wiki/Schlüsselabstraktion?redirectedFrom=Schl%FCsselkonzept)\n\n","difficulty":0,"centerTextElement":[true,false,false,false],"date":"2018-05-19T13:05:55.114Z","learningGoalLevel":0,"backgroundStyle":1,"learningIndex":"0","learningUnit":"0","cardType":2,"hint":"[x] Abbott-Analyse nachschlagen\n[x] Begriff \"Schlüsselabstraktionen\": Was ist das? Was machen diese?\n[x] Verdienst der drei Amigos? Wer sind sie? Was haben sie gemacht?","dateUpdated":"2018-07-06T12:21:17.200Z","originalAuthor":"Klinge, Dominik"}
\ No newline at end of file
{"name":"Z: Beispiel für eine Notiz-Karte","description":"Diese Notiz dient als Abschlusskarte in der Demo-Kartei.","date":"2018-07-05T04:33:28.173Z","dateUpdated":"2018-07-06T04:17:55.889Z","editors":[],"owner":"jCZ6oHcbZhJaKKodN","visible":false,"ratings":true,"kind":"personal","price":0,"reviewed":false,"reviewer":"undefined","request":false,"relevance":0,"raterCount":0,"quantity":1,"license":["by","nc","nd"],"userDeleted":false,"learningActive":false,"maxCards":0,"daysBeforeReset":0,"learningStart":"1970-01-01T00:00:00.000Z","learningEnd":"1970-01-01T00:00:00.000Z","learningInterval":[],"learners":0,"wordcloud":false,"shuffled":false,"cardType":8,"difficulty":1,"originalAuthor":"Quibeldey-Cirkel, Klaus, Dr."}, {"subject":"Letzte Karte","front":"**Los geht's:** Klick auf **Startseite** in der Fußzeile. Wenn du in der Vollbildansicht bist, muss du diese zuvor verlassen. Auf der Startseite siehst du, wie sich eine **bunte Wolke** mit Karteinamen aufbaut. Die Größe der Schrift entspricht der Anzahl der Karteikarten. Klick auf eine Kartei, um deren Beschreibung zu sehen. Die Wolke ist nur ein Ausschnitt aus der Menge der Karteien, die von der .cards-Redaktion empfohlen werden. \n\n+ Log dich mit deinem **THM-Konto** ein und erstelle eigene Karteien für dein Studium.\n+ Lerne die Karten **regelmäßig**, so dass du das Wissen aus dem Studium sehr, sehr lange behältst.Schau dir dazu die Infos und Videos auf den Portalseiten [\"Lernen\"](https://informatik.cards/learning) und [\"FAQ\"](https://staging.arsnova.cards/faq) an!\n+ Folge dem Slogan von .cards: **Organize. Learn. Remember.**","difficulty":1,"centerTextElement":[false,false,false,false,false,false],"date":"2018-07-05T04:43:37.045Z","learningGoalLevel":0,"backgroundStyle":1,"learningIndex":"0","learningUnit":"0","cardType":8,"dateUpdated":"2018-07-06T04:16:28.211Z","originalAuthor":"Quibeldey-Cirkel, Klaus, Dr."}
\ No newline at end of file
{"name":"P: Beispiel für eine Notiz-Karte","description":"Diese Notiz dient als Abschlusskarte in der Demo-Kartei.","date":"2018-07-05T04:33:28.173Z","dateUpdated":"2018-07-06T04:17:55.889Z","editors":[],"owner":"jCZ6oHcbZhJaKKodN","visible":false,"ratings":true,"kind":"personal","price":0,"reviewed":false,"reviewer":"undefined","request":false,"relevance":0,"raterCount":0,"quantity":1,"license":["by","nc","nd"],"userDeleted":false,"learningActive":false,"maxCards":0,"daysBeforeReset":0,"learningStart":"1970-01-01T00:00:00.000Z","learningEnd":"1970-01-01T00:00:00.000Z","learningInterval":[],"learners":0,"wordcloud":false,"shuffled":false,"cardType":8,"difficulty":1,"originalAuthor":"Quibeldey-Cirkel, Klaus, Dr."}, {"subject":"Letzte Karte","front":"**Los geht's:** Klick auf **Startseite** in der Fußzeile. Wenn du in der Vollbildansicht bist, muss du diese zuvor verlassen. Auf der Startseite siehst du, wie sich eine **bunte Wolke** mit Karteinamen aufbaut. Die Größe der Schrift entspricht der Anzahl der Karteikarten. Klick auf eine Kartei, um deren Beschreibung zu sehen. Die Wolke ist nur ein Ausschnitt aus der Menge der Karteien, die von der .cards-Redaktion empfohlen werden. \n\n+ Log dich mit deinem **THM-Konto** ein und erstelle eigene Karteien für dein Studium.\n+ Lerne die Karten **regelmäßig**, so dass du das Wissen aus dem Studium sehr, sehr lange behältst.Schau dir dazu die Infos und Videos auf den Portalseiten [\"Lernen\"](https://informatik.cards/learning) und [\"FAQ\"](https://staging.arsnova.cards/faq) an!\n+ Folge dem Slogan von .cards: **Organize. Learn. Remember.**","difficulty":1,"centerTextElement":[false,false,false,false,false,false],"date":"2018-07-05T04:43:37.045Z","learningGoalLevel":0,"backgroundStyle":1,"learningIndex":"0","learningUnit":"0","cardType":8,"dateUpdated":"2018-07-06T04:16:28.211Z","originalAuthor":"Quibeldey-Cirkel, Klaus, Dr."}
\ No newline at end of file
{"name":"D: Beispiel für eine Prüfungskarte","description":"Vorlesung Objektorientierte Programmierung nach Thomas Letschert im Sommersemester 2006.","date":"2018-07-05T09:22:35.847Z","dateUpdated":"2018-07-06T08:00:32.312Z","editors":[],"owner":"Z3LfhpTsXcbvspRtu","visible":false,"ratings":true,"kind":"personal","price":0,"reviewed":false,"reviewer":"undefined","request":false,"relevance":0,"raterCount":0,"quantity":1,"license":["by","nc","sa"],"userDeleted":false,"learningActive":false,"maxCards":0,"daysBeforeReset":0,"learningStart":"1970-01-01T00:00:00.000Z","learningEnd":"1970-01-01T00:00:00.000Z","learningInterval":[],"learners":0,"wordcloud":false,"shuffled":false,"cardType":5,"difficulty":2,"originalAuthor":"Thelen, Christoph"}, {"subject":"Vererbung","front":"Das Programm\n\n~~~~~~~~~~~C++\nclass Basis {\npublic:\n Basis() : x(0) {}\n Basis(int pb) : x(pb) {}\n Basis(Basis &b): x(b.x) {}\n int x;\n};\n\nclass Abgeleitet : public Basis {\npublic:\n Abgeleitet() {}\n Abgeleitet(int y) : Basis(y) {}\n Abgeleitet(Abgeleitet &a) {}\n};\n\nint main() {\n Abgeleitet a1(4711);\n Abgeleitet a2(a1); // Kopierkonstruktor\n cout << \"a1.x: \" << a1.x << \" a2.x: \" << a2.x << endl;\n}\n~~~~~~\n\nerzeugt seltsamerweise die Ausgabe\n\n```\na1.x: 4711 a2.x: 0\n```\n\nWarum ist das so?","back":"Der automatisch generierte Kopierkonstruktor ruft den Defaultkonstruktor der Basisklasse auf. \n\nDieser belegt die Komponente `x` mit 0.","hint":"Sofern der Kopierkonstruktur der Basisklasse aufgerufen werden soll, muss dies in der Unterklasse explizit angegeben werden:\n\n~~~~~~C++\nclass Abgeleitet : public Basis {\npublic:\n Abgeleitet () {}\n Abgeleitet (int y) : Basis(y) {}\n Abgeleitet (const Abgeleitet &a)\n : Basis(a) // <-- OK: KOPIER-Konstruktor aktivieren\n {}\n};\n~~~~~~\n","difficulty":2,"centerTextElement":[false,false,false,false,false,false],"date":"2018-07-04T16:11:00.441Z","learningGoalLevel":1,"backgroundStyle":1,"learningIndex":"0","learningUnit":"0","cardType":5,"dateUpdated":"2018-07-06T07:57:37.865Z","originalAuthor":"Thelen, Christoph"}
\ No newline at end of file
{"name":"J: Beispiel für eine Prüfungskarte","description":"Vorlesung Objektorientierte Programmierung nach Thomas Letschert im Sommersemester 2006.","date":"2018-07-05T09:22:35.847Z","dateUpdated":"2018-07-06T08:00:32.312Z","editors":[],"owner":"Z3LfhpTsXcbvspRtu","visible":false,"ratings":true,"kind":"personal","price":0,"reviewed":false,"reviewer":"undefined","request":false,"relevance":0,"raterCount":0,"quantity":1,"license":["by","nc","sa"],"userDeleted":false,"learningActive":false,"maxCards":0,"daysBeforeReset":0,"learningStart":"1970-01-01T00:00:00.000Z","learningEnd":"1970-01-01T00:00:00.000Z","learningInterval":[],"learners":0,"wordcloud":false,"shuffled":false,"cardType":5,"difficulty":2,"originalAuthor":"Thelen, Christoph"}, {"subject":"Vererbung","front":"Das Programm\n\n~~~~~~~~~~~C++\nclass Basis {\npublic:\n Basis() : x(0) {}\n Basis(int pb) : x(pb) {}\n Basis(Basis &b): x(b.x) {}\n int x;\n};\n\nclass Abgeleitet : public Basis {\npublic:\n Abgeleitet() {}\n Abgeleitet(int y) : Basis(y) {}\n Abgeleitet(Abgeleitet &a) {}\n};\n\nint main() {\n Abgeleitet a1(4711);\n Abgeleitet a2(a1); // Kopierkonstruktor\n cout << \"a1.x: \" << a1.x << \" a2.x: \" << a2.x << endl;\n}\n~~~~~~\n\nerzeugt seltsamerweise die Ausgabe\n\n```\na1.x: 4711 a2.x: 0\n```\n\nWarum ist das so?","back":"Der automatisch generierte Kopierkonstruktor ruft den Defaultkonstruktor der Basisklasse auf. \n\nDieser belegt die Komponente `x` mit 0.","hint":"Sofern der Kopierkonstruktur der Basisklasse aufgerufen werden soll, muss dies in der Unterklasse explizit angegeben werden:\n\n~~~~~~C++\nclass Abgeleitet : public Basis {\npublic:\n Abgeleitet () {}\n Abgeleitet (int y) : Basis(y) {}\n Abgeleitet (const Abgeleitet &a)\n : Basis(a) // <-- OK: KOPIER-Konstruktor aktivieren\n {}\n};\n~~~~~~\n","difficulty":2,"centerTextElement":[false,false,false,false,false,false],"date":"2018-07-04T16:11:00.441Z","learningGoalLevel":1,"backgroundStyle":1,"learningIndex":"0","learningUnit":"0","cardType":5,"dateUpdated":"2018-07-06T07:57:37.865Z","originalAuthor":"Thelen, Christoph"}
\ No newline at end of file
This source diff could not be displayed because it is too large. You can view the blob instead.
{"name":"E: Beispiel für eine Vokabelkarte","description":"Die Vokabelkarte ist Teil der Demo-Kartei, siehe den roten Button auf der Startseite.","date":"2018-04-24T11:05:15.991Z","dateUpdated":"2018-07-06T04:20:25.534Z","editors":[],"owner":"jCZ6oHcbZhJaKKodN","visible":false,"ratings":true,"kind":"personal","price":0,"reviewed":false,"reviewer":"undefined","request":false,"relevance":0,"raterCount":0,"quantity":1,"license":["by","nc","sa"],"userDeleted":false,"moduleActive":false,"college":"THM","learningActive":false,"maxCards":2,"daysBeforeReset":7,"learningStart":"2018-04-24T11:05:15.991Z","learningEnd":"2038-01-19T13:04:27.919Z","learningInterval":[1,3,7,28,84],"learners":1,"wordcloud":false,"shuffled":false,"cardType":1,"difficulty":2,"originalAuthor":"Quibeldey-Cirkel, Klaus, Dr."}, {"subject":"Englisch – Deutsch (mit BEOLINGUS-Hilfe)","back":"**erinnern**","difficulty":2,"centerTextElement":[true,true,false,false],"date":"2018-06-10T16:58:28.909Z","learningGoalLevel":0,"backgroundStyle":0,"learningIndex":"0","learningUnit":"0","cardType":1,"front":"**remember**","dateUpdated":"2018-07-06T04:20:25.521Z","originalAuthor":"Quibeldey-Cirkel, Klaus, Dr."}
\ No newline at end of file
{"name":"I: Beispiel für eine Vokabelkarte","description":"Die Vokabelkarte ist Teil der Demo-Kartei, siehe den roten Button auf der Startseite.","date":"2018-04-24T11:05:15.991Z","dateUpdated":"2018-07-06T04:20:25.534Z","editors":[],"owner":"jCZ6oHcbZhJaKKodN","visible":false,"ratings":true,"kind":"personal","price":0,"reviewed":false,"reviewer":"undefined","request":false,"relevance":0,"raterCount":0,"quantity":1,"license":["by","nc","sa"],"userDeleted":false,"moduleActive":false,"college":"THM","learningActive":false,"maxCards":2,"daysBeforeReset":7,"learningStart":"2018-04-24T11:05:15.991Z","learningEnd":"2038-01-19T13:04:27.919Z","learningInterval":[1,3,7,28,84],"learners":1,"wordcloud":false,"shuffled":false,"cardType":1,"difficulty":2,"originalAuthor":"Quibeldey-Cirkel, Klaus, Dr."}, {"subject":"Englisch – Deutsch (mit BEOLINGUS-Hilfe)","back":"**erinnern**","difficulty":2,"centerTextElement":[true,true,false,false],"date":"2018-06-10T16:58:28.909Z","learningGoalLevel":0,"backgroundStyle":0,"learningIndex":"0","learningUnit":"0","cardType":1,"front":"**remember**","dateUpdated":"2018-07-06T04:20:25.521Z","originalAuthor":"Quibeldey-Cirkel, Klaus, Dr."}
\ No newline at end of file
{"name":"A: Quiz zum Kennenlernen von .cards","description":"Die Quizfragen sind Teil der Demo-Kartei, siehe den roten Button auf der .cards-Startseite.","date":"2018-06-08T13:51:09.335Z","dateUpdated":"2018-07-06T12:24:39.939Z","editors":[],"owner":"jCZ6oHcbZhJaKKodN","visible":true,"ratings":true,"kind":"free","price":0,"reviewed":false,"reviewer":"undefined","request":false,"relevance":0,"raterCount":0,"quantity":5,"license":["by","nc","sa"],"userDeleted":false,"learningActive":false,"maxCards":2,"daysBeforeReset":7,"learningStart":"2018-06-08T13:51:09.335Z","learningEnd":"2038-01-19T15:33:57.156Z","learningInterval":[1,3,7,28,84],"learners":0,"wordcloud":false,"shuffled":false,"cardType":11,"difficulty":1,"originalAuthor":"Quibeldey-Cirkel, Klaus, Dr."}, {"subject":"1. Gesammeltes Wissen","front":"**Was bleibt?**\n![](https://arsnova.cards/img/background/zettelkasten_wikipedia_original.jpg width=\"500px\")\n","back":"![Angesammeltes Wissen](https://arsnova.cards/img/background/zettelkasten_wikipedia_original.jpg width=\"200 pt\") \nEin Studierzimmer [^Foto-Quelle] kann eine kreative persönliche Lernumgebung sein. Das auf tausenden Zetteln in dutzenden Kartons gesammelte Wissen ist zumindest der Bewohnerin des abgebildeten Zimmers zugänglich (ein Klick auf das Foto zeigt die Schuhgröße 4½ auf den Kartons). Warum also nicht mit Zetteln in Schuhkartons studieren? Den digitalen Karten fehlt doch die Haptik des Papiers und die Gesamtschau -- im Regal und auf dem Boden. \n\nStimmt. Dafür haben digitale Karten aber auch **unbestreitbare Vorteile** -- gemäß dem Slogan unserer Plattform:\n\n+ **Organize**: Das Wissen aus deinem Studium kannst du jederzeit und überall mit wenigen Klicks wiederfinden, auch noch viele Jahre nach deinem Studium, wenn du aus deiner Studierbude längst ausgezogen bist, womöglich dein Zettelarchiv bis auf das IKEA-Regal entsorgt hast. Eines Tages, in deinem Job, in einer Teambesprechung, brauchst du sicherlich das Wissen aus deinem Studium wieder.\n\n+ **Learn**: Die Karten sind multimedial: Du kannst Bilder, Podcasts und Videos einfügen. Du studierst ein MINT-Fach? Schreib mit $\\TeX$ die kompliziertesten mathematischen Formeln und mit `Syntax-Highlighting` beliebigen Programmiercode schnell und sauber auf eine Karte. Du darfst kostenlos die [Open Source Software](https://github.com/thm-projects/arsnova-flashcards) .cards als persönliche Lernumgebung auf deinem Laptop installieren. So kannst du deine Karten auch ohne Internet überall lernen.\n\n+ **Remember**: Die Karten deines Lernpensums werden dir zum dauerhaften Memorieren an [kognitionswissenschaftlich berechneten Tagen](https://en.wikipedia.org/wiki/Spaced_repetition) wieder vorgelegt. Push-Nachrichten auf dein Handy oder E-Mails erinnern dich ans Lernen.\n\n[^Foto-Quelle]: Foto zum Wikipedia-Begriff [Zettelkasten](https://de.wikipedia.org/wiki/Zettelkasten), Kai Schreiber, CC BY-SA 2.0","difficulty":1,"centerTextElement":[true,false,false,false],"date":"2018-06-10T05:23:42.665Z","learningGoalLevel":0,"backgroundStyle":1,"learningIndex":"0","learningUnit":"0","cardType":11,"dateUpdated":"2018-07-06T05:21:54.431Z","originalAuthor":"Quibeldey-Cirkel, Klaus, Dr."}, {"subject":"2. Worum es geht","front":"Was unterscheidet **.cards** von anderen Lernkartei-Apps?","difficulty":1,"centerTextElement":[true,false,false,false],"date":"2018-06-08T13:54:04.447Z","learningGoalLevel":0,"backgroundStyle":1,"learningIndex":"0","learningUnit":"0","cardType":11,"dateUpdated":"2018-07-06T12:24:39.925Z","back":"(##) Was unterscheidet .cards von anderen Lernkartei-Apps?\n\n1. Im Gegensatz zu Lernkartei-Apps wie [Quizlet](https://quizlet.com/) oder [SuperMemo](https://www.supermemo.com/) unterstützt die .cards-Plattform auch das **Mitschreiben in Vorlesungen**. Weiter hinten in dieser Demo-Kartei haben wir ein Beispiel für eine Mitschrift eingefügt. Sie wurde handschriftlich in einer Bachelor-Vorlesung erstellt, abfotografiert und zu Hause digital auf .cards zum Lernen nachbearbeitet.\n\n+ Die Plattform .cards ist eine **vorlesungsbegleitende persönliche Lernumgebung**, ein virtueller Ort, an dem Lernzeit mit kognitiven Tätigkeiten -- Mitschreiben, Nachbearbeiten, Lernkarten erstellen, Lernfragen wiederholt beantworten -- intensiv verbracht wird. \n\n+ Es gibt auf .cards eine Option, die es der Lehrperson ermöglicht, kontinuierliches und wiederholtes Lernen mit **Bonuspunkten** zu honorieren. Wir haben .cards mit dem Ziel entwickelt, der **Aufschieberitis** und dem **Bulimielernen** im Studium entgegen zu wirken. Lies hierzu unser [Paper](https://hochschulforumdigitalisierung.de/sites/default/files/dateien/HFD_Winter_School_E-Book_Version_2.pdf) (S. 91-98).","originalAuthor":"Quibeldey-Cirkel, Klaus, Dr."}, {"subject":"3. Digitale Schuhkartons: Karteien","front":"Welche **Karteitypen** gibt es auf .cards?","back":"Es gibt 14 Kartentypen, die beim Anlegen einer Kartei zur Auswahl stehen. \nJede Kartei beinhaltet ausschließlich **Karten desselben Typs**, es sei denn sie wurde aus mehreren Karteien unterschiedlichen Typs gemischt wie diese Demo-Kartei. Einige Karteitypen haben eine **Schwierigkeitsstufe (Level)**, die an der Kartenfarbe erkennbar ist: Grün für Basics, Blau für Fortgeschritten und Rot für Expert*in. Einige Kartentypen sind unliniert, der besseren Lesbarkeit wegen, bei anderen kann dies individuell eingestellt werden. \n\nKarteitypen unterscheiden sich in der Anzahl der Kartenseiten: nicht nur Vorder- und Rückseiten sind möglich, sondern auch weitere virtuelle Seiten zur Vertiefung des Lerninhalts oder zur Angabe von Quellen und Literatur. Lern- und Prüfungskarten haben zusätzlich eine **Lernzielstufe** in Anlehnung an die [Taxonomie von Anderson & Krathwohl](https://thesecondprinciple.com/teaching-essentials/beyond-bloom-cognitive-taxonomy-revised/): Verstehen, Anwenden, Analysieren, Synthetisieren, Bewerten, Innovieren. Für die Formulierung des Lernziels auf der gewählten Lernzielstufe werden passende Verben im Editor vorgeschlagen.\n\n<div style=\"columns:2;-webkit-columns:2;-moz-columns:2;column-gap:3em;-webkit-column-gap:3em;-moz-column-gap:3em\">\nDiese **Karteitypen** stehen zur Verfügung:\n\n1. **Mitschrift** (Mitschrift | Nachbearbeitung | To-dos)\n+ **Lernkartei** (Lernziel | Vertiefung | Fazit | Literatur)\n+ **Glossar** (Fachbegriff | Beschreibung | Literatur)\n+ **Anweisungssatz** (Semantik | Syntax | Online-API)\n+ **Formelsammlung** (Aufgabe | Formel | Lösung | Links)\n+ **Entwurfsmuster** (Problem | Kontext | Kräfte | Lösung | Verwendung | Verweise)\n+ **Quiz** (Quizfrage | Antwort)\n+ **Prüfung** (Prüfungsfrage | Erwartete Antwort | Begründung)\n+ **Vokabelkartei** (Fremdwort | Übersetzung)\n+ **Fotokartei** (Foto | Lizenz)\n+ **Zitatensammlung** (Zitat | Zitierte Person | Bibliografische Angaben)\n+ **Exzerpte** (Exzerpt | Anmerkungen | Quellenangabe)\n+ **Notizen** (1 Seite)\n+ **To-dos** (1 Seite)\n</div>\nIn dieser Demo-Kartei findest du für die meist genutzten Karteitypen ein Beispiel aus Informatik-Kursen an der THM.","difficulty":1,"centerTextElement":[true,false,false,false],"date":"2018-06-08T14:56:06.624Z","learningGoalLevel":0,"backgroundStyle":1,"learningIndex":"0","learningUnit":"0","cardType":11,"dateUpdated":"2018-07-06T06:26:59.124Z","originalAuthor":"Quibeldey-Cirkel, Klaus, Dr."}, {"subject":"4. Digitale Regale: Kurse","front":"Was wird auf .cards unter einem **Kurs** verstanden?","back":"(##) Was wird auf .cards unter einem \"Kurs\" verstanden?\n\nWie aus dem Studium bekannt, ist ein Kurs das aktuelle Angebot eines Bachelor- oder Mastermoduls als Vorlesung, Übung, Seminar oder Praktikum. Die offizielle Modulbeschreibung nennt die Lernziele und Lerninhalte. In thematisierter Form stehen Lerninhalte auf .cards als Karteien zur Verfügung -- im sogenannten **Themen-Pool**. Da einzelne Themen auch in mehreren Kursen relevant sind, zum Beispiel $\\LaTeX$ oder \"Wissenschaftliches Schreiben\", kann eine Kartei auf .cards auch in mehreren Kursen genutzt werden.\n\n!!! NOTE\n Ein Kurs auf .cards fasst mehrere Karteien zusammen. Um im Bild zu bleiben: In deinem IKEA-Regal wären das Schuhkartons, die nebeneinander lagern.\n\n!!! NOTE\n Das Kurskonzept von .cards erlaubt das Lernen mit einer beliebigen Auswahl thematischer Karteien. Die Lehrperson kann **Bonuspunkte** für das wiederholte Lernen einzelner Themen als auch für das Lernen aller Themen eines Kurses vergeben.\n\n!!! TIP\n Du kannst deine eigenen Kurse zusammenstellen. Es bedarf hierzu keiner Lehrperson! Das ermöglicht dir eine einfache Organisation deiner digitalen Mitschriften, **selbstbestimmtes Lernen** und bei Bedarf auch Crash-Kurse vor der Klausur.\n\n\n\n \n","difficulty":1,"centerTextElement":[true,false,false,false],"date":"2018-06-09T17:45:11.922Z","learningGoalLevel":0,"backgroundStyle":1,"learningIndex":"0","learningUnit":"0","cardType":11,"dateUpdated":"2018-07-01T06:25:28.666Z","originalAuthor":"Quibeldey-Cirkel, Klaus, Dr."}, {"subject":"5. Digitale Zettel: Karten","front":"Wie kann man den Text auf einer Karte **formatieren**?\n\nWie lässt sich eine Karte **multimedial** mit Bildern und Videos anreichern?","back":"(##) Wie kann man den Text auf einer Karte formatieren?\n\n\nKurze Antwort: mit **Markdeep**.\n\n---\n\n![ Figure [robot]: Markdeep-Logo](https://casual-effects.com/image/project/icon-markdeep.png width=\"130 pt\") \nKarteien (im Hintergrund sind das die Schuhkartons im IKEA-Regal) und Karten (die Zettel in den Kartons) kannst du auf **.cards** vielfältig gestalten -- fast wie in Microsoft Word™ oder in Pages™ von Apple. Diese Karte zeigt dir beispielhaft einige Formatierungen mit [Markdeep](http://casual-effects.com/markdeep/), der vereinfachten [Auszeichnungssprache](https://de.wikipedia.org/wiki/Auszeichnungssprache) im **.cards**-Editor. Du kannst deinen Text mit etwas Magie (ein paar Tastaturzeichen genügen wie <code>* _ # [ ] > | ~ $ ˋ</code>) sehr einfach formatieren -- ohne Maus. \n\n\n!!! TIP\n Eine sorgfältige Gestaltung deiner Karten mit Text, Bildern und Erklärvideos motiviert und fördert zugleich dein Lernen. Nutze also die Formatierungsoptionen für die Beschriftung deiner Karteien ( -> Etikett am Karton) und für die anschauliche Gestaltung deiner Karten. \n\n\nWas alles mit Markdeep möglich ist, zeigt die [Demo-Seite](http://casual-effects.com/markdeep/features.md.html). So geht zum Beispiel auch $\\TeX$, inline: $\\sigma = \\sqrt{ \\frac{1}{N} \\sum_{i=1}^N (x_i -\\mu)^2}$ (Standardabweichung) oder abgesetzt die Maxwell-Faraday-Gleichung:\n\n$$\\oint_{\\partial \\Sigma} \\mathbf{E} \\cdot \\mathrm{d}\\boldsymbol{\\ell} = - \\frac{d}{dt} \\iint_{\\Sigma} \\mathbf{B} \\cdot \\mathrm{d}\\mathbf{S}$$\n\n</br>\n\n**************\n\n</br>\n\nUnd zwischen zwei Trennlinien kommt der [Entwickler von Markdeep](https://csci.williams.edu/people/faculty/morgan-mcguire/) zu Wort:\n\n> \"Markdeep\n> is a technology for writing plain text documents\n> that will look good in any web browser, whether \n> local or remote. It supports diagrams, calendars, equations, and\n> other features as extensions of [Markdown](https://de.wikipedia.org/wiki/Markdown) syntax.\"\n> -- Morgan McGuire\n\n********\n</br>\n</br>\nVideos auf YouTube und Vimeo lassen sich sehr einfach mit einem Einzeiler in die Seite einbinden:\n\n![Figure [Markdown]: Erklärvideo über Markdown, auf dem Markdeep aufbaut](https://youtu.be/hpAJMSS8pvs)\n\n</br>\n\nBilder können abgesetzt, rechtsbündig zum Absatz (siehe das Markdeep-Logo oben) und skaliert eingebunden werden:\n\n![Figure [examplePicture]: Klick auf das Bild, um es in Vollansicht zu sehen!](https://pbs.twimg.com/media/CXzB2rZWsAERiV8.png width=\"400 pt\")\n\nWie im Bild zu sehen, zeigt dir die Vorschau des Editors -- **synchron** zu deiner Eingabe --, wie deine Textformatierung aussehen wird. \n\n!!! TIP\n Im Themen-Pool auf .cards steht dir die Kartei \"Markdown | Markdeep\" als Hilfe zur Verfügung.","difficulty":1,"centerTextElement":[true,false,false,false],"date":"2018-06-08T14:56:06.624Z","learningGoalLevel":0,"backgroundStyle":1,"learningIndex":"0","learningUnit":"0","cardType":11,"dateUpdated":"2018-07-06T06:28:42.421Z","originalAuthor":"Quibeldey-Cirkel, Klaus, Dr."}
\ No newline at end of file
{"name":"A: Quiz zum Kennenlernen von .cards","description":"Die Quizfragen sind Teil der Demo-Kartei, siehe den roten Button auf der .cards-Startseite.","date":"2018-06-08T13:51:09.335Z","dateUpdated":"2018-07-08T09:29:14.366Z","editors":[],"owner":"jCZ6oHcbZhJaKKodN","visible":false,"ratings":true,"kind":"personal","price":0,"reviewed":false,"reviewer":"undefined","request":false,"relevance":0,"raterCount":0,"quantity":5,"license":[],"userDeleted":false,"learningActive":false,"maxCards":2,"daysBeforeReset":7,"learningStart":"2018-06-08T13:51:09.335Z","learningEnd":"2038-01-19T15:33:57.156Z","learningInterval":[1,3,7,28,84],"learners":0,"wordcloud":false,"shuffled":false,"cardType":11,"difficulty":1,"originalAuthor":"Quibeldey-Cirkel, Klaus, Dr."}, {"subject":"1. Gesammeltes Wissen","front":"**Was bleibt?**\n![](https://arsnova.cards/img/background/zettelkasten_wikipedia_original.jpg width=\"500px\")\n","back":"![Angesammeltes Wissen](https://arsnova.cards/img/background/zettelkasten_wikipedia_original.jpg width=\"200 pt\") \nEin Studierzimmer [^Foto-Quelle] kann eine kreative persönliche Lernumgebung sein. Das auf tausenden Zetteln in dutzenden Kartons gesammelte Wissen ist zumindest der Bewohnerin des abgebildeten Zimmers zugänglich (ein Klick auf das Foto zeigt die Schuhgröße 4½ auf den Kartons). Warum also nicht mit Zetteln in Schuhkartons studieren? Den digitalen Karten fehlt doch die Haptik des Papiers und die Gesamtschau -- im Regal und auf dem Boden. \n\nStimmt. Dafür haben digitale Karten aber auch **unbestreitbare Vorteile** -- gemäß dem Slogan unserer Plattform:\n\n+ **Organize**: Das Wissen aus deinem Studium kannst du jederzeit und überall mit wenigen Klicks wiederfinden, auch noch viele Jahre nach deinem Studium, wenn du aus deiner Studierbude längst ausgezogen bist, womöglich dein Zettelarchiv bis auf das IKEA-Regal entsorgt hast. Eines Tages, in deinem Job, in einer Teambesprechung, brauchst du sicherlich das Wissen aus deinem Studium wieder.\n\n+ **Learn**: Die Karten sind multimedial: Du kannst Bilder, Podcasts und Videos einfügen. Du studierst ein MINT-Fach? Schreib mit $\\TeX$ die kompliziertesten mathematischen Formeln und mit `Syntax-Highlighting` beliebigen Programmiercode schnell und sauber auf eine Karte. Du darfst kostenlos die [Open Source Software](https://github.com/thm-projects/arsnova-flashcards) .cards als persönliche Lernumgebung auf deinem Laptop installieren. So kannst du deine Karten auch ohne Internet überall lernen.\n\n+ **Remember**: Die Karten deines Lernpensums werden dir zum dauerhaften Memorieren an [kognitionswissenschaftlich berechneten Tagen](https://en.wikipedia.org/wiki/Spaced_repetition) wieder vorgelegt. Push-Nachrichten auf dein Handy oder E-Mails erinnern dich ans Lernen.\n\n[^Foto-Quelle]: Foto zum Wikipedia-Begriff [Zettelkasten](https://de.wikipedia.org/wiki/Zettelkasten), Kai Schreiber, CC BY-SA 2.0","difficulty":1,"centerTextElement":[true,false,false,false],"date":"2018-06-10T05:23:42.665Z","learningGoalLevel":0,"backgroundStyle":1,"learningIndex":"0","learningUnit":"0","cardType":11,"dateUpdated":"2018-07-06T05:21:54.431Z","originalAuthor":"Quibeldey-Cirkel, Klaus, Dr."}, {"subject":"2. Worum es geht","front":"Was unterscheidet **.cards** von anderen Lernkartei-Apps?","difficulty":1,"centerTextElement":[true,false,false,false],"date":"2018-06-08T13:54:04.447Z","learningGoalLevel":0,"backgroundStyle":1,"learningIndex":"0","learningUnit":"0","cardType":11,"dateUpdated":"2018-07-08T09:24:46.576Z","back":"1. Im Gegensatz zu Lernkartei-Apps wie [Quizlet](https://quizlet.com/) oder [SuperMemo](https://www.supermemo.com/) unterstützt die .cards-Plattform auch das **Mitschreiben in Vorlesungen**. Weiter hinten in dieser Demo-Kartei haben wir ein Beispiel für eine Mitschrift eingefügt. Sie wurde handschriftlich in einer Bachelor-Vorlesung erstellt, abfotografiert und zu Hause digital auf .cards zum Lernen nachbearbeitet.\n\n+ Die Plattform .cards ist eine **vorlesungsbegleitende persönliche Lernumgebung**, ein virtueller Ort, an dem Lernzeit mit kognitiven Tätigkeiten -- Mitschreiben, Nachbearbeiten, Lernkarten erstellen, Lernfragen wiederholt beantworten -- intensiv verbracht wird. \n\n+ Es gibt auf .cards eine Option, die es der Lehrperson ermöglicht, kontinuierliches und wiederholtes Lernen mit **Bonuspunkten** zu honorieren. Wir haben .cards mit dem Ziel entwickelt, der **Aufschieberitis** und dem **Bulimie-Lernen** im Studium entgegen zu wirken [#HFD18] [#SITE18].\n\n[#HFD18]: Quibeldey-Cirkel, K. (2018).\nDigital gegen das Bulimie-Lernen: Quizzen im Hörsaal und zu Hause, Podcasts für unterwegs.\nIn: Hochschulforum Digitalisierung (Hrsg.): _HFD Winter School E-Book. Hochschullehre im digitalen Zeitalter gestalten._ Arbeitspapier Nr. 31. Version 2. Berlin: Hochschulforum Digitalisierung. (S. 91-98). https://hochschulforumdigitalisierung.de/sites/default/files/dateien/HFD_Winter_School_E-Book_Version_2.pdf (Abruf: 08.07.2018)\n\n[#SITE18]: Quibeldey-Cirkel, K., Heiny, J. & Thelen, C. (2018).\nAgainst Academic Procrastination: Pedagogical Apps to Implement Distributed Learning in Course Design.\nIn E. Langran & J. Borup (Eds.), _Proceedings of Society for Information Technology & Teacher Education International Conference_ (pp. 1617-1622).\nWashington, D.C., United States: Association for the Advancement of Computing in Education (AACE). http://www.learntechlib.org/p/182756/ (Abruf: 08.07.2018)","originalAuthor":"Quibeldey-Cirkel, Klaus, Dr."}, {"subject":"3. Digitale Schuhkartons: Karteien","front":"Welche **Karteitypen** gibt es auf .cards?","back":"Es gibt 14 Kartentypen, die beim Anlegen einer Kartei zur Auswahl stehen. \nJede Kartei beinhaltet ausschließlich **Karten desselben Typs**, es sei denn sie wurde aus mehreren Karteien unterschiedlichen Typs gemischt wie diese Demo-Kartei. Einige Karteitypen haben eine **Schwierigkeitsstufe (Level)**, die an der Kartenfarbe erkennbar ist: Grün für Basics, Blau für Fortgeschritten und Rot für Expert*in. Einige Kartentypen sind unliniert, der besseren Lesbarkeit wegen, bei anderen kann dies individuell eingestellt werden. \n\nKarteitypen unterscheiden sich in der Anzahl der Kartenseiten: nicht nur Vorder- und Rückseiten sind möglich, sondern auch weitere virtuelle Seiten zur Vertiefung des Lerninhalts oder zur Angabe von Quellen und Literatur. Lern- und Prüfungskarten haben zusätzlich eine **Lernzielstufe** in Anlehnung an die [Taxonomie von Anderson & Krathwohl](https://thesecondprinciple.com/teaching-essentials/beyond-bloom-cognitive-taxonomy-revised/): Verstehen, Anwenden, Analysieren, Synthetisieren, Bewerten, Innovieren. Für die Formulierung des Lernziels auf der gewählten Lernzielstufe werden passende Verben im Editor vorgeschlagen.\n\n<div style=\"columns:2;-webkit-columns:2;-moz-columns:2;column-gap:3em;-webkit-column-gap:3em;-moz-column-gap:3em\">\nDiese **Karteitypen** stehen zur Verfügung:\n\n1. **Mitschrift** (Foto der Mitschrift | Nachbearbeitung | To-dos)\n+ **Lernkartei** (Lernziel | Vertiefung | Fazit | Literatur)\n+ **Glossar** (Fachbegriff | Beschreibung | Literatur)\n+ **Anweisungssatz** (Semantik | Syntax | Online-API)\n+ **Formelsammlung** (Aufgabe | Formel | Lösung | Links)\n+ **Entwurfsmuster** (Problem | Kontext | Kräfte | Lösung | Verwendung | Verweise)\n+ **Quiz** (Quizfrage | Antwort)\n+ **Prüfung** (Prüfungsfrage | Erwartete Antwort | Begründung)\n+ **Vokabelkartei** (Fremdwort | Übersetzung)\n+ **Fotokartei** (Foto | Lizenz)\n+ **Zitatensammlung** (Zitat | Zitierte Person | Bibliografische Angaben)\n+ **Exzerpte** (Exzerpt | Anmerkungen | Quellenangabe)\n+ **Notizen** (1 Seite)\n+ **To-dos** (1 Seite)\n</div>\nIn dieser Demo-Kartei findest du für jeden Karteityp ein reales Beispiel.","difficulty":1,"centerTextElement":[true,false,false,false],"date":"2018-06-08T14:56:06.624Z","learningGoalLevel":0,"backgroundStyle":1,"learningIndex":"0","learningUnit":"0","cardType":11,"dateUpdated":"2018-07-08T09:29:14.345Z","originalAuthor":"Quibeldey-Cirkel, Klaus, Dr."}, {"subject":"4. Digitale Regale: Kurse","front":"Was wird auf .cards unter einem **Kurs** verstanden?","back":"\nWie aus dem Studium bekannt, ist ein Kurs das aktuelle Angebot eines Bachelor- oder Mastermoduls als Vorlesung, Übung, Seminar oder Praktikum. Die offizielle Modulbeschreibung nennt die Lernziele und Lerninhalte. In thematisierter Form stehen Lerninhalte auf .cards als Karteien zur Verfügung -- im sogenannten **Themen-Pool**. Da einzelne Themen auch in mehreren Kursen relevant sind, zum Beispiel $\\LaTeX$ oder \"Wissenschaftliches Schreiben\", kann eine Kartei auf .cards auch in mehreren Kursen genutzt werden.\n\n!!! NOTE Kurs vs. Kartei\n Ein Kurs auf .cards fasst **mehrere** Karteien (= Themen) zusammen. Um im Bild zu bleiben: In deinem IKEA-Regal wären das Schuhkartons, die nebeneinander lagern.\n\n!!! NOTE Kurs vs. Bonusvergabe\n Das Kurskonzept von .cards erlaubt das Lernen mit einer beliebigen Auswahl thematischer Karteien. Die Lehrperson kann **Bonuspunkte** für das wiederholte Lernen einzelner Themen als auch für das Lernen aller Themen eines Kurses vergeben.\n\n!!! TIP Jeder kann Kurse\n Du kannst deine eigenen Kurse zusammenstellen. Es bedarf hierzu keiner Lehrperson! Das ermöglicht dir eine einfache Organisation deiner digitalen Mitschriften, **selbstbestimmtes Lernen** und bei Bedarf auch Crash-Kurse vor der Klausur.\n\n\n\n \n","difficulty":1,"centerTextElement":[true,false,false,false],"date":"2018-06-09T17:45:11.922Z","learningGoalLevel":0,"backgroundStyle":1,"learningIndex":"0","learningUnit":"0","cardType":11,"dateUpdated":"2018-07-08T09:25:51.788Z","originalAuthor":"Quibeldey-Cirkel, Klaus, Dr."}, {"subject":"5. Digitale Zettel: Karten","front":"Wie kann man den Text auf einer Karte **formatieren**?\n\nWie lässt sich eine Karte **multimedial** mit Bildern und Videos anreichern?","back":"\n\nKurze Antwort: mit **Markdeep**.\n\n---\n\n![ Figure [robot]: Markdeep-Logo](https://casual-effects.com/image/project/icon-markdeep.png width=\"130 pt\") \nKarteien (im Hintergrund sind das die Schuhkartons im IKEA-Regal) und Karten (die Zettel in den Kartons) kannst du auf **.cards** vielfältig gestalten -- fast wie in Microsoft Word™ oder in Pages™ von Apple. Diese Karte zeigt dir beispielhaft einige Formatierungen mit [Markdeep](http://casual-effects.com/markdeep/), der vereinfachten [Auszeichnungssprache](https://de.wikipedia.org/wiki/Auszeichnungssprache) im **.cards**-Editor. Du kannst deinen Text mit etwas Magie (ein paar Tastaturzeichen genügen wie <code>* _ # [ ] > | ~ $ ˋ</code>) sehr einfach formatieren -- ohne Maus. \n\n\n!!! TIP\n Eine sorgfältige Gestaltung deiner Karten mit Text, Bildern und Erklärvideos motiviert und fördert zugleich dein Lernen. Nutze also die Formatierungsoptionen für die Beschriftung deiner Karteien ( -> Etikett am Karton) und für die anschauliche Gestaltung der Lerninhalte deiner Karten. \n\n\nWas alles mit Markdeep möglich ist, zeigt die [Demo-Seite](http://casual-effects.com/markdeep/features.md.html). So geht zum Beispiel auch $\\TeX$, inline: $\\sigma = \\sqrt{ \\frac{1}{N} \\sum_{i=1}^N (x_i -\\mu)^2}$ (Standardabweichung) oder abgesetzt die Maxwell-Faraday-Gleichung:\n\n$$\\oint_{\\partial \\Sigma} \\mathbf{E} \\cdot \\mathrm{d}\\boldsymbol{\\ell} = - \\frac{d}{dt} \\iint_{\\Sigma} \\mathbf{B} \\cdot \\mathrm{d}\\mathbf{S}$$\n\n</br>\n\n**************\n\n</br>\n\nUnd zwischen zwei Trennlinien kommt der [Entwickler von Markdeep](https://csci.williams.edu/people/faculty/morgan-mcguire/) zu Wort:\n\n> \"Markdeep\n> is a technology for writing plain text documents\n> that will look good in any web browser, whether \n> local or remote. It supports diagrams, calendars, equations, and\n> other features as extensions of [Markdown](https://de.wikipedia.org/wiki/Markdown) syntax.\"\n> -- Morgan McGuire\n\n********\n</br>\n</br>\nVideos auf YouTube und Vimeo lassen sich sehr einfach mit einem Einzeiler in die Seite einbinden:\n\n![Figure [Markdown]: Erklärvideo über Markdown, auf dem Markdeep aufbaut](https://youtu.be/hpAJMSS8pvs)\n\n</br>\n\nBilder können abgesetzt, rechtsbündig zum Absatz (siehe das Markdeep-Logo oben) und skaliert eingebunden werden:\n\n![Figure [examplePicture]: Klick auf das Bild, um es in Vollansicht zu sehen!](https://pbs.twimg.com/media/CXzB2rZWsAERiV8.png width=\"400 pt\")\n\nWie im Bild zu sehen, zeigt dir die Vorschau des Editors -- **synchron** zu deiner Eingabe --, wie deine Textformatierung aussehen wird. \n\n!!! TIP\n Im Themen-Pool auf .cards steht dir die Kartei \"Markdown | Markdeep\" als Hilfe zur Verfügung.","difficulty":1,"centerTextElement":[true,false,false,false],"date":"2018-06-08T14:56:06.624Z","learningGoalLevel":0,"backgroundStyle":1,"learningIndex":"0","learningUnit":"0","cardType":11,"dateUpdated":"2018-07-08T09:27:10.397Z","originalAuthor":"Quibeldey-Cirkel, Klaus, Dr."}
\ No newline at end of file
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment