- Видео 63
- Просмотров 142 471
ArchiLab
Германия
Добавлен 31 окт 2020
Software Architecture Lab (ArchiLab) von Prof. Dr. Stefan Bente und seinem Team am Cologne Institute for Digital Ecosystems (CIDE) der TH Köln. Alles rund um Spezifikation, Implementierung und Anwendung von modernen Software-Architekturen!
Typen von automatisierten Tests
Im Alltag spricht man oft von "Unit Tests", wenn man eigentlich ganz verschiedene Typen von automatisierten Software-Tests meint. In diesem Video werden die verschiedenen Typen vorgestellt - mit Nutzen, Vor- und Nachteilen.
0:00 Motivation
0:30 Die drei wichtigsten Typen: Unit / Integration / System Test
2:31 Ein Beispiel-Softwaresystem: Player M.O.N.T.E. aus dem Microservice Dungeon
5:32 Unit Test
8:30 Integration Test (1)
10:14 Was ist ein Mock?
11:56 Integration Test (2)
14:02 System Test
15:26 E2E Test
16:15 Acceptance Test
18:03 UI Test
18:30 Performance / Load Test
19:12 Stress Test
19:46 Security Test
20:04 Quiz: Welchen Typ haben unsere Tests im ST-Praktikum?
21:30 Zusammenfassung
0:00 Motivation
0:30 Die drei wichtigsten Typen: Unit / Integration / System Test
2:31 Ein Beispiel-Softwaresystem: Player M.O.N.T.E. aus dem Microservice Dungeon
5:32 Unit Test
8:30 Integration Test (1)
10:14 Was ist ein Mock?
11:56 Integration Test (2)
14:02 System Test
15:26 E2E Test
16:15 Acceptance Test
18:03 UI Test
18:30 Performance / Load Test
19:12 Stress Test
19:46 Security Test
20:04 Quiz: Welchen Typ haben unsere Tests im ST-Praktikum?
21:30 Zusammenfassung
Просмотров: 535
Видео
Unit Testing 101
Просмотров 752Год назад
Gerade wenn Softwaresystem groß werden (mehrere 10.000, 100.000 oder sogar Millionen Zeilen Sourcecode), dann kann man nicht nur auf Logausgaben und Debugger vertrauen, um Fehler zu finden. Mit lokalen Unittests stellt man sicher, dass jede einzelne Klasse getestet ist. Damit gibt es von vornherein weniger Fehler im Gesamtsystem. In diesem Video werden die grundlegenden Aspekte von Unittests an...
Prozedural oder Objektorientiert? Ein C#-Vergleich am Beispiel "Game of Life"
Просмотров 8742 года назад
Objekt-orientiert ist besser als prozedural - ist ja klar. Wirklich? Und wenn ja, warum eigentlich? Dieses Video geht dieser Frage anhand eines Beispiels auf den Grund. Zwei kurze Implementierungen für das Conway'sche Game of Life werden miteinander verglichen. Fazit: Objekt-orientiert ist länger, aber man findet Fehler leichter und kann den Code besser weiterentwickeln. Den Code zu diesem Vide...
Die O(...)-Notation, oder: Schlechtes Design = schlechte Performance?
Просмотров 4432 года назад
Wenn man Datenstrukturen falsch nutzt, bei Schleifen nicht genug nachdenkt, Datenmodelle unbedacht entwirft - dann hat man vielleicht nicht nur schlechten Code oder eine schlechte Architektur, sondern unter Umständen sogar ein handfestes Performance-Problem. Dieses Video zeigt auf, wie man insbesondere durch die Wahl der passenden Datenstruktur (Array, Liste, Hash, Set, ...) überlange Laufzeite...
Datenstrukturen in C#
Просмотров 6992 года назад
Datenstrukturen wie Arrays, Listen, HaspMaps, Stacks und Queues gehören zum Standard-Repertoire für komplexe Berechnungen. In diesem Video schauen wir uns an, wie diese Datenstrukturen in C# benutzt werden. Anhand von praktischen Code-Beispielen lässt sich alles nachvollziehen. Die Sourcen in diesem Video findet man unter gitlab.com/archi-lab/public/csharp-intro.
Basistypen und Kontrollfluss in C#
Просмотров 5622 года назад
C# ist eine moderne und mächtige Programmiersprache. Wenn man noch nicht so viel Erfahrung mit dem Programmieren hat, dann nähert man sich am besten über die Basistypen (int, float/double, string, bool) und die einfachen Kontrollfluss-Strukturen (if, for, while, do). Dieses Video erklärt an einfachen Beispielen, wie das zusammenspielt. Die Sourcen in diesem Video findet man unter gitlab.com/arc...
Git Basics (mit Git Bash und Visual Studio)
Просмотров 6 тыс.2 года назад
Ohne ein Sourcecode-Management-System wie Git kommt professionelle Software-Entwicklung nicht mehr aus. Nicht nur wenn man im mit mehreren Personen gemeinsamt entwickelt, ist Git sinnvoll - auch als 1-Personen-Team lohnt sich die Verwendung. Dieses Video beschreibt anschaulich die 6 wichtigsten Git-Befehle, mit denen man in Visual Studio oder in der Git Bash seinen Code managen kann.
Kafka + Spring + Kotlin 101
Просмотров 1,9 тыс.3 года назад
Wie bindet man den Apache Kafka als Eventing-Lösung am besten in den eigenen Code ein? Dieses Video erklärt das anschaulich anhand eines Spring/Kotlin-basierten Beispielprojekts.
Kafka Essentials
Просмотров 3673 года назад
Apache Kafka ist eine Event-Streaming-Plattform, die industrieweit als der "Goldstandard" für asynchrone Kommunikation in Microservice-Architekturen gilt. Kafka zeichnet sich durch sehr hohe Skalierbarkeit und Robustheit aus. In diesem Video werden die wesentlichen technischen Konzepte und APIs vorgestellt.
Asynchrone Inter-Service-Kommunikation mit Apache Kafka
Просмотров 6933 года назад
In lose gekoppelten Architekturen, wie beispielsweise Microservices, ist die asynchrone Kommunikation über Eventing die präferierte Art des Datenaustausches - sie ermöglicht ein "Fire & Forget" von Informationen und lässt die einzelnen Services autark. Aber worauf muss man dabei aufpassen, und gibt es Ausnahmen? Dieses Video gibt eine Antwort. In zwei weiteren Videos wird noch tiefer auf Apache...
Master Digital Sciences: Make Your Own Personal Study Plan Using the Study Planner
Просмотров 9063 года назад
In the Digital Sciences Master program by TH Köln, you can choose from 60 (!) modules to build your very own, personal study plan. The Study Planner helps you select the right modules for your specialization and your wishes. This video explains how this tool is used.
Coding REST - mit sechs zentralen Konzepten
Просмотров 2,5 тыс.3 года назад
REST APIs sind eigentlich ganz einfach zu implementieren - wenn man sechs zentrale Konzepte kennt, die einem das Leben einfacher machen. Das sind die verschiedenen Layer unserer Architektur (und deren Zweck), Application- und Domain-Services, DTOs und DTO-Mapper, der REST-Controller selbst und die Annotation von Exceptions mit HTTP-Statuscodes. Damit kann man Controller-Funktionalität ganz einf...
HTTP Return Codes in REST APIs
Просмотров 1,1 тыс.3 года назад
Der Charme von REST ist die Nutzung von (HTTP) Standards, um das API schlank zu halten. Das gilt insbesondere auch für die Return Codes, die eine Auskunft über Erfolg oder Fehlerquelle einer Anfrage geben. Dieses Video stellt die wichtigsten Codes vor - und wann man sie verwendet.
(De-Facto-)Standards für REST-API-Design
Просмотров 2,2 тыс.3 года назад
Erschreckend oft findet man in der Praxis schlecht gestaltete REST-APIs. Das muss nicht sein - für das Design von REST-APIs gibt es ein paar allgemein akzeptierte, einfache Regeln. Dieses Video stellt sie vor.
Prinzipien von REST
Просмотров 6 тыс.3 года назад
REST ist kein Datenaustausch-Protokoll, sondern ein Architekturstil - mit ganz bestimmten Forderungen und Prinzipien, die sich durch die Verwendung von HTTP-Standards prima umsetzen lassen. Das Video erklärt, wie man sich in einem REST-API den HTTP-Standard zu Nutze machen kann.
Unit Testing (und ein bisschen TDD)
Просмотров 1,1 тыс.3 года назад
Unit Testing (und ein bisschen TDD)
The Return of the Evil Stacktrace, or: How to Debug
Просмотров 6253 года назад
The Return of the Evil Stacktrace, or: How to Debug
Text Adventure mit SOLID und Clean Code (Teil 2)
Просмотров 6983 года назад
Text Adventure mit SOLID und Clean Code (Teil 2)
Text Adventure mit SOLID und Clean Code (Teil 1)
Просмотров 1,4 тыс.3 года назад
Text Adventure mit SOLID und Clean Code (Teil 1)
Gut erklärt, danke!
Die bisher beste Erklaerung von bisher ca. 10 angesehenen. Vielen Dank!
Vielen Dank für eine sehr übersichtliche Darstellung ohne viel bla bla !
Super Video, danke! System und E2E test werden häufig synonym verwendet. Die Test Pyramide wäre auch erwähnenswert gewesen.
Tolle Erklärung, danke! Schön, dass es am Anfang eine Übersicht als Sequenzdiagramm gibt.
Super kompakt und verständlich erklärt! Danke für die tollen Videos
klasse
Hammer Prof! Hammer Videos
🫶🫶🫶
Super erklärz, danke!
❤🧡💛💚💙💜🤎🖤🤍💯
Danke sehr wenn man keinen Mentor oder Ausbilder hat sind Menschen wie sie Gold wert :D
Vielen Dank für dieses Video, besonders für diese Übersicht mit den 4 Stufen (lokales Verz., ..., Remote Repo)! 🙂
Warum lassen sie beim Integrationstest das spring framework nicht weg? Ich dachte im DDD ist das framework nur ein Detail und wird ganz zuletzt angeschlossen. Bei mir läuft das nur im UI-Test.
DDD sagt da eigentlich nichts zu - da geht es eher um einen sauberen fachlichen Schnitt. Spring Framework ist beim Testen einfach als Dependency Injection Container nötig, um sich die zustandslosen Services zu instanziieren. (Und für eine Reihe anderer Convenience-Aspekte auch ...). Möglicherweise kann man das (irgendwie) umgehen, aber dann würde man ja in den Tests einen anderen Weg gehen als im Produktivcode.
@@archilab Ja, aber der saubere Schnitt ist doch zwischen fachlicher Logik und Technologie. Ja, auf DI und JPA muss man im DDD verzichten. Aber dies macht die Tests eh nur langsam und halt der erste Satz. Also ich gehe kein anderen Weg im Produktivcode. Es gibt nur dann zusätzlich ein *Bean-Service welcher von *Aggregate abgeleitet ist und eine H2DB für die Tests. Damit laufen die IT's unabhängig von spring und sind sie wesentlich schneller. "Mocken" (ich glaube für mich wäre ein anderer Begriff angebracht) muss man nur das Senden der Registrierungsmail und das Erzeugen von PW-Hash's (md5 nutzt ich im Test). ATM hab ich 900 Tests (meist IT's) die in 30s auf einem i5-8th Gen laufen. Wobei bei für jeden Test die DB geleert wird. So macht Entwicklung Spaß. Ich glaube ich hab noch nie so angenehm gearbeitet. Vorher haben die EE frameworks immer ein wenig genervt oder ärger gemacht.
Schön an einem Sonntag Abend zu sehen, dass es wieder neue qualitativ hochwertige Videos gibt :)
Danke für das nette Feedback :-). Ich plane für das kommende Jahr noch mal ein paar weitere Videos insbesondere zu Event-Driven Architecture.
Super erklärt! Vielen Dank! Nur eine Stelle versteh ich nicht, nämlich die Begründung, warum POST keine "sichtbare Semantik" hat. Ich würde "sichtbare Semantik" so verstehen, dass die Bedeutung des Requests ersichtlich ist, und das ist sie doch bei einem POST, nämlich "Anlegen der benannten Ressource", oder nicht? Sie sagen da, dass man dafür in den Body reingucken müsste, aber inwiefern unterscheidet sich das von PUT/PATCH? Ich würde sagen der Unterschied zwischen POST und PUT/PATCH liegt in dem Kriterium "identifizierbare Ressource".
Ja, da ist was dran.
super hilfreich. vielen lieben dank
Wow, der erste Kommentar überhaupt? Dann ist ein "Vielen Dank für deine Mühe!" aber erst recht überfällig! Sehr hilfreich zum Verständnis von RestAPI-Abfragen.🤓
Das finde ich kurzsichtig
Moin @archilab, danke für eure tollen Videos! Eine Frage: Wenn ich als Anforderung die Historisierbarkeit von Änderungsdaten habe, sprecht ihr ja hier von der Modellierung und entsprechend Implementierung dieser. Nun könnte ich ja aber auch darauf verzichten und stattdessen auch auf Auditing der Stamm-/Bestandsdaten direkt auf der Datenbank setzen. Gibt es hier einen Vorteil durch die Modellierung? (Vermutlich gilt die Antwort dann auch für Bewegungsdaten?) Danke :)
Wenn ich das direkt in der Datenbank mache, dann binde ich Fachlogik an eine bestimmte Technologie (meine [vermutlich relationale] DB), und ich verteile mein Domain Model an zwei Stellen. Daher bin ich kein Fan von so einem Ansatz.
Wie immer gut erklärt anhand humorvollen Beispielen
Danke, toll erklärt
Danke für die super Darstellung, - einschließlich der Einordunung in bezug auf aktuelle Vorgehensweisen
Danke, tolle Übersicht mit guter Erlärung
Endlich ein Vortrag, ohne sinnloses, nerviges, lautes Intro, kurz, klar, deutlich, übersichtlich und verständlich. Warum haben das nur so wenig Leute angesehen in dieser langen Zeit ?
Weil der Herr Professor, so verständlich etwas beibringt, das Sie das Video gar nicht anschauen müssen.
@@poparab "dass_Sie_das_Video gar nicht anschauen müssen" verstehe ich nicht im Bezug auf meinen Kommentar.
Gutes Video! Hat mir sehr geholfen Interfaces richtig zu verstehen 👍
Toller Kanal! Hilft mir sehr beim lernen und weiterbilden, sowie diese Konzepte letztlich zu verstehen und anzuwenden. Alles sehr verständlich. Vielen lieben Dank für Deine Videos!
Danke
Vielen Dank für das tolle Video. Wie gliedert sich denn die Domäne in die Projektorganisation oder Projektstruktur ein? Ist die Domäne das Kerntream eines Projektteams oder ersätzt die Domäne den Produktowner und gibt Anforderung und Aufträge direkt an die Entwickler weiter? Gibt es in dem Modell einen Projektleiter?
Das sind eher zwei verschiedene orthogonale Ebenen. Die Domäne ist fachlich getrieben. Wie man eine Projektstruktur dazu definiert, hängt von vielen Faktoren ab - unter anderem natürlich der Projektgröße; es kann natürlich Projekte geben, die mehrere Domänen überspannen. Daher ist es eher sinnvoll, in (agilen, selbstorganisierten) Teams zu denken. Diese Teams sollten sich innerhalb einer Domänen- oder Subdomänengrenze befinden, damit eben Diskussionen leichter werden.
@@archilab Vielen Dank!
Hoffentlich bringt mich das weiter.
Viele Dank für die hilfreiche Videoreihe! Kleine Anmerkung: "Im vergangenen Video" am Anfang trifft nicht zu, das vergangene Video ist "Eine kurze Einführung in Domain-Driven Design (DDD)". Welches ist das gemeinte Video?
Gemeint ist das Video zur Textanalyse und Glossarerstellung: ruclips.net/video/Jyp0FQIMovY/видео.html
@@archilab Vielen Dank! Ich erstelle gerade ein DDD Domänenmodell für ein Java Programm.. Welches Video würden Sie mir dazu empfehlen außer das über Entitäten und Value Objects? (die Begriffe sind bekannt). Viele Grüße, ein Student
@@HA-gu1qk Ich würde mir in jedem Fall die beiden Videos zu Aggregates anschauen. Darüber hinaus das zu Domain Primitives. Zum ganzen Strategic Design (Bounded Context etc.) fehlen leider (noch) Videos. Interessant könnte zusätzlich sein, sich die drei Videos zum Logischen Datenmodell anzuschauen, auch wenn das nicht nach DDD klingt. Es hilft aber IMHO sehr dabei, die Abhängigkeiten richtig zu modellieren (und in der richtigen Richtung). Also ruclips.net/video/wSXWknKQkbU/видео.html, ruclips.net/video/RufBXPTt1SA/видео.html und ruclips.net/video/w6967RWoLTk/видео.html.
@@archilab Super, vielen Dank! :)
Danke, gut auf den Punkt gebracht. Diese Video-Playlist ist in dem Sumpf an schwammigen Tutorials und Zusammenfassungen zum DDD sehr notwendig.
Großartiges Lehrvideo
Super Videos 👍
Ehrenmann
Ich weiß
Danke für das Video!
🤣😂🙃🤕
🤔 Freiberuflicher Softwareentwickler hört sich gut an
🤣😂🤔🤕
🤣😂🙃🤮
Der gute Evans hat 2005 Regeln aufgestellt die heute erst von der Mehrzahl verstanden werden und nach wie vor "best practice" sind ... eine Seltenheit in der IT - Welt
Habe meine Wissen befestigt. HQL Danke Herr Bente. ❤🧡💛💚💙💜🤎🖤🤍
🤣😂😅 WTF / min
Wie kann man soooo trocken lehren Herr Professor ?
Soll er für Sie ein SubwaySurfer Video irgendwo einblenden oder eher singend lehren?
Thank you so much! This video help me so much with my code
Super Videos, vielen Dank für die Mühe!
Thanks, appreciate it :-)
Hi @archilab kann ich nochmal den Link zum Podcast mit Eric Evans haben?
www.se-radio.net/?s=226
Hilfreiche Liste der Datenstrukturen 👍
Guten Tag. Ich möchte Ihnen nur ein kleines Feedback geben und sagen, dass es super cool ist, dass Sie Ihr Wissen hier öffentlich teilen und dass Sie das sehr gut machen. Ich bin froh und dankbar, dass ich Zugang zu Ressourcen wie diesen habe, um mich auf meine zukünftige Karriere vorzubereiten. Ich beginne nächstes Jahr eine Ausbildung zum Fachinformatiker für Anwendungsentwicklung und dank solchen Vorträgen kann ich mir ein solides Fundament an Wissen aufbauen, um meine Karriere mit Zuversicht und Selbstvertrauen zu starten. Ich wünsche Ihnen alles Gute und weiterhin viel Erfolg!
Sehr cooles Video, gerne mehr davon! :D Ich finde Clean Code sollte man immer mit so praktsichen Beispielen erklären, so lernt man viel schneller und praktischer was. @25:30 Ich denke auch die grüne Variante ist riskant. Würden wir annehmen, dass auch das produkt.asMarkdown() stets einen Footer ergänzt, dann würde im getMarkdown() des Produktkatalogs für jedes Produkt der Footer injiziert werden. Vermutlich gehört der Footer semantisch gar nicht zum Markdown und eine völlig neue Funktion sollte das Markdown ergänzt mit dem Footer returnen. Hier würde das Problem dann auftreten, wenn ein Markdown aus mehreren Produktkatalogen erzeugt werden soll.