+49 6221 672 19-00 info@hdvisionsystems.com

Code-Qualität: Wie und warum man sie verbessert

Frage: Was braucht man um einen Parameter in einem vor einem Jahr ausgelieferten Programm zu ändern?
Antwort: 1 Student, 2 Doktoren und 6 Stunden

Frage: Wie kann man den Ressourcenbedarf abschätzen oder verringern?
Antwort: Code-Qualität!

Code-Qualität ist ein Konzept, dass häufig diskutiert wird, sobald der wunderschöne selbsterklärende, praktisch fehlerfreie Code, sich als weder fehlerfrei noch selbsterklärend erweist. Und wenn sich der verantwortliche Stümper in weiser Voraussicht anderen Herausforderungen zugewandt hat und deshalb nicht mehr zur Verfügung steht.

Hier fehlt doch die Bildunterschrift?

Code-Qualität – Wünsche des Maintainers

Zunächst sei gesagt, dass mir die zu Beginn geschilderte Situation in etwa so widerfuhr. Die Hälfte der Zeit verbrachten wir mit der Suche nach dem Parameter, seiner assoziierten Funktion, sowie den Build-Skripten für das Projekt. Diese waren scheinbar ähnlich wie die Inhalte des Kölner Stadtarchivs über das Projekt gleich verteilt.

Nun ist recht offensichtlich, dass sich unsere Kategorisierung des Codes von der des Code-Autors unterschied. Dies kann durch die unterschiedlichen Ansprüche an den Code erklärt werden: Für Wartungsarbeiten, wünscht sich die wartende Person in der Regel einen einfachen und schnellen Eingriff. Im Idealfall öffnet man die  Dokumentation, identifiziert den für das Fehlverhalten verantwortlichen Programmteil, editiert einige Zeilen Code und es treten keine Nebenwirkungen auf.

Die Wartungsperspektive unterscheidet sich also deutlich von der des Code-Autors. Vereinfacht können Sie sich, als Code-Autor, den Wartenden als eine äußerst lese- und schreibfaule Person vorstellen, welche versucht, den Kontakt mit ihrem Code zu minimieren.

Falls Ihnen diese Perspektive fremd erscheint, fragen Sie sich, wie häufig Sie oder die Personen, mit denen Sie arbeiten, sich den Sourcecode einer Bibliothek durchlesen. Meiner Erfahrung nach wird auch die Dokumentation erst verwendet, wenn sich die Bibliothek gegen einen intuitiven Nutzungsversuch sträubte.

Einen besseren Einblick in die Schwierigkeiten kann How to write unmaintainable code, liefern, welches Sie auch auf GitHub finden können. 

Wo wir Fehler finden

Die Hälfte unserer Zeit verbrachten wir also mit Suchen, die andere Hälfte mit unerwartetem, unerwünschtem und undokumentiertem Verhalten.

Die unangenehmeren Fälle sind häufig das Resultat von kleineren Fehlern, welche sich tief im Inneren des Codes verbergen und meist indirekt Symptome hervorrufen, welche dann behandelt werden.

Eine solch symptomatische Behandlung ist oft nicht erwünscht, jedoch nicht zu vermeiden. Vor allem, wenn der tatsächliche Fehler in der Hardware, fremden (evtl. proprietären) Bibliotheken oder missverstandenen Feinheiten der Aufgabenstellung oder Implementierung zu finden ist.

Vielleicht haben Sie auch schon eine Person getroffen, welche davon überzeugt war, fehlerfreie Programme zu schreiben. Ich persönlich glaube, dass dies für größere Projekte unmöglich ist, da die Komplexität mit der Größe des Projekts super-linear ansteigt. Das wiederum lässt einen Versuch, dieses vollständig bis ins letzte Bit zu verstehen, ambitioniert erscheinen.

Deshalb rate ich dazu, Fehler zu erwarten und sich auf das Auftreten von Fehlern vorzubereiten.

Das Mittel der Wahl für gute Code-Qualität sind Tests: Sollte es gelingen, den ganzen Code mit Tests abzudecken, sollten wir das Auftreten eines Fehlverhaltens sofort bemerken und im Idealfall auch grob lokalisieren können.

Online gibt es zahlreiche Ressourcen, welche sich mit Testen beschäftigen, zum Beispiel The Ultimate Guide to Software Testing. Ich persönlich würde auch “Growing Object-Oriented Software, Guided by Tests” von Steve Freeman und Nat Pryce, empfehlen, allerdings steht es leider nicht frei zur Verfügung.

Die Augen der Anderen

Zu Beginn des Artikels benannte ich einen Stümper als Verantwortlichen für die geringe Code-Qualität, obwohl besagter Stümper, genau wie ich sein Handwerk durchaus beherrscht. Dass mir seine Arbeit stümperhaft erscheint, kann wohl mit unseren unterschiedlichen Perspektiven auf den Code erklärt werden.

Beschäftigt man sich für Wochen oder Monate mit einem Projekt oder begleitet dieses seit seiner Entstehung, so erlangt man eine Vertrautheit mit dem Projekt, die eine Projekt-fremde Person niemals erlangen könnte. Dies, glaube ich, erschwert es die Leserlichkeit des Codes zu beurteilen. Vereinfacht gesagt, Sie werden ohne Probleme das Salz in Ihrer Küche finden, aber vermutlich nicht in meiner und umgekehrt.

Nachdem es schwierig ist, das Projekt durch die Augen einer Projekt-fremden Person zu betrachten, da man hierfür die impliziten Erwartungen dieser kennen müsste, empfehle ich einen arbeitssparenden Umweg.

Wir bitten einfach eine Projekt-fremde Person unseren Code zu bewerten, also einen Peer Review durchzuführen. Im besten Fall hilft diese dabei, das Projekt in einen allgemein verständlichen Zustand zu versetzen und die Code-Qualität zu erhöhen, im schlimmsten Falle trägt sie eine Mitverantwortung an der Unverständlichkeit.

Zusammenfassung

Nachdem wir nun die Quellen für Code von geringer Qualität festgestellt haben, hier eine vermutlich nicht unbekannte Liste von Ratschlägen für gute Code-Qualität:

  1. Schreiben Sie ein Übersichts- oder Einführungsdokument.
  2. Dokumentieren Sie Ihren Code, sodass er im Falle einer Wartung leichter durchsucht und verstanden werden kann.
  3. Schreiben Sie Tests um sicherzustellen, dass Ihr Code wie gewünscht funktioniert.
  4. Schreiben Sie Tests, um im Falle einer Wartung unerwünschte Nebenwirkungen zu finden.
  5. Lassen Sie Ihren Code von einer technisch kompetenten Person auf Verständlichkeit und Lesbarkeit prüfen.
  6. Fügen Sie während Wartungsarbeiten Fehler in den Code von Personen ein, welche diese Anweisungen ignorieren, um diese damit über deren Vorteile aufzuklären.

Sollten Sie Probleme haben die Vorteile dieser oder andere Empfehlungen zur Verbesserung der Code Qualität zu verdeutlichen, so empfehle ich eine sechsstündige Wartung unleserlichen Codes.

In der sich rasant entwickelnden Welt der industriellen Automatisierung ist eine zuverlässige und flexible Objekterkennung ein Grundpfeiler für Vision-Guided Robotics (VGR) und Qualitätssicherung. Bei HD Vision Systems ist es unsere Mission, die Grenzen des Möglichen in der Automatisierung neu zu definieren. Als Vision-Partner auf der Bosch Rexroth CtrlX-Plattform bringen wir modernste Bildverarbeitungstechnologie durch leistungsstarke Apps auf den Fabrikboden, die Konnektivität vereinfachen und die Leistung verbessern.

Pattern Matching: Ein traditioneller Ansatz

Eine der häufigsten Fragen beim Entwurf von Automatisierungslösungen ist, ob traditionelle Pattern-Matching-Techniken oder moderne KI-basierte Objekterkennung verwendet werden sollen. Pattern Matching ist regelbasiert und nutzt manuell definierte Vorlagen oder geometrische Formen zur Objekterkennung. Obwohl es lange ein fester Bestandteil klassischer Bildverarbeitung war, stößt es unter realen Bedingungen oft an seine Grenzen. Änderungen in Beleuchtung, Ausrichtung, Maßstab oder selbst kleine Verdeckungen können zu Erkennungsfehlern führen. Zudem ist die Einrichtung aufwändig, erfordert Expertenwissen und lässt sich nur schwer an Veränderungen in der Produktionslinie anpassen.

Deep Learning: Intelligent und anpassungsfähig

Im Gegensatz dazu nutzt die KI-basierte Objekterkennung datengetriebene Modelle, die auf großen und vielfältigen Datensätzen trainiert wurden. Diese Modelle erkennen Objekte anhand abstrakter Muster und sind dadurch wesentlich robuster und flexibler. Sie kommen mit unterschiedlichsten Abweichungen und Unregelmäßigkeiten in industriellen Umgebungen zurecht. Mithilfe von Transfer Learning und Datenaugmentation lassen sich Modelle zudem schnell auf neue Objekte oder Bedingungen anpassen – ganz ohne komplexes Regelwerk.

Integrierte KI auf CtrlX

Wir bei HD Vision Systems setzen konsequent auf diesen modernen Ansatz und haben ihn direkt in die Bosch Rexroth CtrlX-Plattform integriert. Unsere Apps ermöglichen den Anschluss von Standard-Industriekameras gemäß dem GenICam-Standard via Ethernet. Die aufgenommenen Bilder werden von KI-Modellen direkt im CtrlX-Ökosystem verarbeitet. Die Ergebnisse sind nicht nur präzise, sondern werden auch automatisch aus 2D-Bildkoordinaten in 3D-Weltkoordinaten überführt – entscheidend für präzise Roboterführung und Qualitätssicherung.

Vor-Ort-Training und Individualisierung

Neben vortrainierten Modellen bieten wir Frameworks an, mit denen Nutzer eigene Bilddaten annotieren und individuelle Objekterkennungsnetzwerke trainieren können – komplett vor Ort, ohne Daten in die Cloud zu senden. So behalten Sie die volle Kontrolle über Datenschutz und Datensicherheit. Integratoren und Endanwender können so hochspezialisierte Erkennungslösungen entwickeln – exakt zugeschnitten auf ihre Anwendung.

Zukunftsausblick: KI für moderne Fertigung

Pattern Matching hatte seine Zeit, aber die zunehmende Komplexität moderner Fertigungsprozesse verlangt intelligentere, flexiblere Systeme. Deep Learning liefert genau das. Mit den fortschrittlichen Vision-Tools von HD Vision Systems und der Modularität der Bosch Rexroth CtrlX-Plattform stehen Herstellern leistungsstarke Objekterkennungslösungen zur Verfügung, die mit ihren Anforderungen wachsen.

Egal ob Nachrüstung bestehender Anlagen oder Neuplanung – jetzt ist der richtige Zeitpunkt, die Kraft KI-gesteuerter Bildverarbeitung zu nutzen. Wir freuen uns, Sie dabei zu begleiten.

Continue reading:

Share This