Fehler im Code finden (und vermeiden) // deutsch

  Рет қаралды 1,163

the native web GmbH

the native web GmbH

Күн бұрын

Пікірлер: 18
@JentaroYusong
@JentaroYusong 3 жыл бұрын
Wir gehen sehr ähnlich vor wie von dir im Video genannt. Generell arbeiten wir testgetrieben, das gilt auch für die Behebung von Bugs. Neben der technischen Fehlerursache versuchen wir häufig auch zu verstehen, wie es zu dem Implementierungsfehler kommen konnte; also wie wir solche Arten an Fehlern zukünftig verhindern können. Um Fehler besser Nachzuvollziehen nutze ich, falls denn notwendig, im Frontend (TypeScript, meist Angular) schlichtweg console.log. Auf Seiten des Backends nutzen wir Kotlin, hier greife ich auch auf den Debugger zurück, wo nötig. Generell ist beides aufgrund der hohen Testabdeckung glücklicherweise aber nur relativ selten von Nöten. :-)
@thenativeweb
@thenativeweb 3 жыл бұрын
[gr] Das hört sich insgesamt nach einem sehr guten Vorgehen an. Nicht nur nach den technischen Ursachen zu suchen, sondern auch zu hinterfragen, wie es überhaupt dazu kommen konnte, um zum Beispiel Missverständnisse ausräumen zu können, finde ich ebenfalls sehr gelungen 😊
@ettoreatalan8303
@ettoreatalan8303 3 жыл бұрын
Ist Code, der selbst für eine(n) erfahrene(n) EntwicklerIn nur noch schwer verständlich ist, nicht ein Hinweis auf zu wenig Clean Code?
@thenativeweb
@thenativeweb 3 жыл бұрын
[gr] Ja, würde ich schon sagen. Denn wenn Code nur schlecht verständlich ist, ist er nicht so gut strukturiert, wie er sein sollte - und dann lässt sich das häufig etwas verbessern, indem man Clean-Code-Kriterien anwendet 😊
@17plus9
@17plus9 3 жыл бұрын
Vielleicht mal ein Video zu REPL machen.
@thenativeweb
@thenativeweb 3 жыл бұрын
[gr] Du meinst, zum Konzept der REPL, wie es zum Beispiel die Grundlage von Lisp darstellt, oder zur konkreten REPL einer bestimmten Programmiersprache?
@17plus9
@17plus9 3 жыл бұрын
@@thenativeweb Allgemein, aber kommt ja demnächst.
@thenativeweb
@thenativeweb 3 жыл бұрын
[gr] Morgen früh ist es soweit 😊
@SeoOderNichtsein
@SeoOderNichtsein 3 жыл бұрын
Ohne TDD ist eine komplexe Software mit mehreren Entwicklern meiner Meinung nach nur sehr schwer wartbar und mit steigender Komplexität auch immer schwieriger erweiterbar. Gerade bei monolithischer Entwicklung (Wie sie leider noch viel zu oft gemacht wird) kommt man irgendwann an den Punkt an dem jede Änderung oder Erweiterung durch interne Abhängigkeiten und asynchrone Prozessketten ggf. unvorhersehbare Folgen haben kann. Ohne Tests wird das immer eine Bananensoftware (Reift beim Kunden). Mir persönlich ist TDD aber nicht genug. Ich bin ein großer Freund von Tracing-Klassen und einem Debug-Mode. Und wenn ich den Debug-Mode über einen Parameter oder eine Methode aktiviere, dann erwarte ich, dass zwischen der Aktivierung und der Deaktivierung alle Aktionen in einer Datenbanktabelle protokolliert werden. Das bedeutet für mich alle Seiten-, API- und Methodenaufrufe mit allen Parametern. Bei Konstrukten mit mehreren verteilten Diensten in verschiedenen Containern oder bei asynchronen Abläufen hat sich diese Vorgehensweise schon mehrfach bezahlt gemacht. Wenn man das schon bei der Planung der Software und der Schnittstellen berücksichtigt, dann kann man einen Hash von Anfang bis Ende durchschleifen und hat alle Zwischenschritte von der Anfrage bis zum Ergebnis. Selbst bei Multithreading oder Queues oder komplexen auf mehreren Hosts verteilten Diensten kann man alles ohne Probleme einem Aufruf oder einem Task zuordnen. Berücksichtigt man dieses Prinzip bis in das Frontend hinein, dann hat man z.B. beim CQRS den kompletten Ablauf vom Klick eines Buttons bis zum asynchronen Ergebnis irgendwann. Und selbst wenn das ganze über mehrere Formulare oder Seitenaufrufe zwischen dem Client hin und her geht, hat man trotzdem noch eine eindeutige Zuordnung zu einem Prozess. Wenn man sich dann ein kleines Tool schreibt, dass diese Datenflut aufbereitet und über Filter und Sortierfunktionen leicht verständlich ausgibt, dann kann man schon in den Daten eingrenzen in welcher Klasse etwas schief gelaufen sein muss. Ein schöner Nebeneffekt dieser Vorgehensweise ist die Reproduzierbarkeit einer Benutzereingabe. Man hat ja jede Kleinigkeit in einer Datenbanktabelle und kann es automatisiert wieder ablaufen lassen. Also hat man einen komplexen Test für einen kompletten Ablauf, der über simple Unit- und e2e-Tests hinaus geht.
@thenativeweb
@thenativeweb 3 жыл бұрын
[gr] Ja, das stimmt - wobei ich nicht unbedingt so weit gehen würde zu sagen, dass das zwingend in einer Datenbank festgehalten werden muss, da das die Performance ja unter Umständen auch massiv beeinflusst. Aber generell alles mit-tracen, kann durchaus sehr hilfreich sein, und gerade das Nachvollziehen können, was auf Grund einer Eingabe passiert ist, ist oftmals Gold wert. Das geht ja auch in Richtung Event-Sourcing, zumindest in einem gewissen Sinne. Wer das übrigens auch schon so gemacht hat, war id.software in Doom: Auch dort wurden alle Eingaben protokolliert, so dass man sie replayen konnte - was unter anderem zum Debuggen recht praktisch war, was man von John Carmack zu dem Thema so hört und liest 😊
@SeoOderNichtsein
@SeoOderNichtsein 3 жыл бұрын
@@thenativeweb Wenn du es nicht in einer Datenbank ablegen würdest, wie würdest du es anders lösen, wenn es um verteilte und teils asynchrone und/oder parallele Prozesse auf mehreren Hosts geht? Das wäre doch auch mal ein cooles Video. Eventuell in Kombination mit dem Elastic Stack :)
@thenativeweb
@thenativeweb 3 жыл бұрын
@@SeoOderNichtsein [gr] Vielleicht war's blöd formuliert - was ich meinte war, dass sich die Anwendung nicht selbst darum kümmern sollte, sondern dass sie erst mal irgendwohin loggt, zum Beispiel auf die Konsole. Dass man das dann von dort abnimmt und irgendwohin weiterreicht, wo es persistiert wird, ist richtig und sinnvoll, man muss nur natürlich trotzdem aufpassen, dass das von der Performance her hinterherkommt 😉 Das Thema "verteiltes Logging", evtl mit ELK-Stack, wäre aber tatsächlich eine gute Idee 👍
@christianhorauf9958
@christianhorauf9958 3 жыл бұрын
Ich werde dafür angemeckert, das ich keinen Debugger nutze. Ich muss aber auch zugeben, das ich auch nur bedingt Ahnung davon habe wie ich den vsc Debugger anbinde. console.log kommt aber doch rinem Debugger gleich... Ich bin zwar nicht so gut, das ich auf console.log verzichten könnte würde aber folgenden sprich unterschreiben: wer einen Debugger benutzen muss, versteh seinen eigenen Code nicht.
@17plus9
@17plus9 3 жыл бұрын
console.log() ist ein Antipattern.
@thenativeweb
@thenativeweb 3 жыл бұрын
@@17plus9 [gr] Hm … also in Produktivcode würde ich das auch nicht haben wollen (deshalb ist es bei uns auch per Linter verboten), aber zur Fehlersuche finde ich es manchmal durchaus praktisch.
@thenativeweb
@thenativeweb 3 жыл бұрын
[gr] Was (theoretisch) an einem Debugger ein cooles Feature ist, ist so was wie Back-In-Time-Debugging, also dass man ab einem Breakpoint nicht nur vorwärts, sondern auch rückwärts steppen kann, um die Ursache zu finden. Praktisch braucht man das dann aber zugegebenermaßen doch eher selten. Was ich so oder so aber nicht in Ordnung finde, ist, dass Du dafür angegriffen wirst - letztlich muss doch jede Entwicklerin und jeder Entwickler die Werkzeuge für sich selbst entscheiden.
@christianhorauf9958
@christianhorauf9958 3 жыл бұрын
@@thenativeweb erst vor kurzem war ich an einem Projekt beteiligt, wo ich zum ersten Mal angular und ngrx im Einsatz hatte. Damit hätte man vermutlich auch backintime debugging machen können, der Hauptgrund, warum ich mich für Redux interessiere. Aber leider haben wir uns zum eben dazu entschieden quasi nur pro Unterseite den store upzudaten, so dass wir also bestenfalls diese Änderungen hätten nachverfolgen können, zum anderen hat der Technical Lead nicht erkannt, dass wenn wir uns diese protokolle vom user hätten schicken lassen, daß wir dann auch jeden bug der in zukunft irgendwann mal aufkommen mag hätten leicht debuggen können. Hast du vielleicht schon eine Folge über Redux gemacht und kann man mit den react hooks vielleicht auch den Redux Debugger nutzen?
@thenativeweb
@thenativeweb 3 жыл бұрын
@@christianhorauf9958 [gr] Das mit den Hooks kann ich Dir leider aus dem Stegreif nicht beantworten, aber zu Redux gab es schon mal zumindest eine halbe Folge: kzbin.info/www/bejne/pZPHfoSarthmgK8 Und ja, Deine Überlegungen waren genau richtig: Denn letztlich macht man da Event-Sourcing, und das wiederum kann man wunderbar unter anderem für Debugging verwenden 😊
Gute Anforderungen schreiben // deutsch
11:38
the native web GmbH
Рет қаралды 3,9 М.
Software architecture is not an end in itself // German
17:08
the native web GmbH
Рет қаралды 6 М.
Enceinte et en Bazard: Les Chroniques du Nettoyage ! 🚽✨
00:21
Two More French
Рет қаралды 42 МЛН
coco在求救? #小丑 #天使 #shorts
00:29
好人小丑
Рет қаралды 120 МЛН
Scrum, Extreme Programming (XP) & Co.: Die agile Lüge // deutsch
20:20
the native web GmbH
Рет қаралды 135 М.
Low-Code und No-Code: Mehr Schaden als Nutzen? // deutsch
14:58
the native web GmbH
Рет қаралды 11 М.
Programmieren Lernen: Die BESTE Methode (für Anfänger)
23:46
Niklas Steenfatt
Рет қаралды 1,6 МЛН
How Diplomats Learn Languages Fast | Easy German 585
18:07
Easy German
Рет қаралды 345 М.
C++ Super Optimization: 1000X Faster
15:33
Dave's Garage
Рет қаралды 332 М.
8 Fehler, die Programmieranfänger machen
10:31
Programmieren lernen
Рет қаралды 11 М.
This is the Only Right Way to Write React clean-code - SOLID
18:23