Ein Angebot von

Software-Design für gute Codequalität

| Autor / Redakteur: Dr. Val Lynch und Steve Norman * / Sebastian Gerstl

Um guten, korrekten und sauber lesbaren Code zu generieren, ist vor allem gutes Design essentiell. Hier sind Kompetenz, Erfahrung und die Wertschätzung des künstlerischen Aspektes der Softwareentwicklung entscheidend.
Um guten, korrekten und sauber lesbaren Code zu generieren, ist vor allem gutes Design essentiell. Hier sind Kompetenz, Erfahrung und die Wertschätzung des künstlerischen Aspektes der Softwareentwicklung entscheidend. (Bild: Renesas Electronics)

Guter Code ist Code, der offensichtlich korrekt ist. Offensichtlich korrekter Code ist einfach lesbar, einfach zu warten und einfach überprüfbar. Wie erstellt man also guten Code?

Um gutes Software-Design zu erreichen, bestimmen drei Definitionen das Umfeld:

Software-Architektur: Die Definition der Organisation eines Softwaresystems, das die Anforderungen erfüllen kann und Änderungen sowie eine zukünftige Wiederverwendung erlaubt.

Objekte: Code-Blöcke, die bestimmte Funktionen innerhalb der Software-Architektur ausführen. Objekte lassen sich kombinieren. Diese werden oft auch als Funktionen, Prozeduren oder Module bezeichnet. Die Benennung solcher Blöcke ist oft abhängig von der verwendeten Software-Sprache.

Software-Schnittstellen: Spezifikationen, die Definitionen darüber enthalten, wie ein Teil der Software-Architektur mit einem anderen verknüpft ist. Schnittstellen gibt es auf allen Ebenen der Architektur, zwischen einzelnen Code-Blöcken, zwischen diesen Blöcken und High-Level-Funktionen sowie zu externen Systemen oder Anwendern.

Die mit der Softwareentwicklung einhergehenden Herausforderungen sollten nie unterschätzt werden. Selbst das kleinste Detail von der genauen Benennung eines Objektes bis zur erforderlichen Zeit für die Ausführung einzelner Instruktionen spielt eine Rolle. Sorgfalt und Aufmerksamkeit für Details sind hier wesentlich.

Der wohl wichtigste Merksatz im Software-Design lautet: Es gibt kein Konzept, das universell passt. Fasst man jedoch alle relevanten Daten, Eingaben und Anforderungen zusammen und überprüft ihr Zusammenspiel, bildet dies die Grundlage für ein praktikables Konzept. Dieses muss vor allem das Geschäftsszenario für die Entwicklung erfüllen. In der Literatur gibt es reichlich Beispiele für Konzepte wie etwa Software-Pattern, die sich in solchen Fällen als besonders nutzbringend erwiesen haben. Sie bilden einen nützlichen Ansatzpunkt für den Aufbau einer Architektur.

Pattern beschreiben gängige Code-Merkmale wie Zustandsmaschinen, Model View Controller und Objekt-Observer. Ein nach einem bestimmten Pattern aufgebauter Code ist in der Regel einfacher nachzuverfolgen und zu validieren. Er lässt sich auch für eine Definition zum Aufbau von Code-Objekten nutzen. Pattern sollten allerdings nur verfolgt werden, solange dies angemessen ist. Letztendlich muss der Entwickler sicherstellen, dass der gesamte Code gut organisiert und klar verständlich ist. Nur dann kann er als offensichtlich richtig bewertet werden. Besondere Aufmerksamkeit ist dabei den Schnittstellen zwischen den verschiedenen Objekten zu widmen.

Ordentliche Dokumentation ist unverzichtbar

Nach gängiger Praxis ist stets zu berücksichtigen, welchen Zweck jede Schnittstelle hat und wie diese in die Gesamtarchitektur passt. Schnittstellen sollten schriftlich und klar in allen Entwicklern zugänglichen Dokumenten definiert werden. Vor einer Entscheidung über Details sind beide Seiten der Schnittstelle zu untersuchen. Dies gilt besonders, wenn der Code durch unterschiedliche Entwickler oder sogar verschiedene Unternehmen für beide Seiten zu schreiben ist.

Dokumentation ist oft das Stiefkind der Softwareentwicklung und etwas, wovor Entwickler zurückschrecken. Eine gut geschriebene Schnittstellen-Spezifikation kann aber viele Arbeitsstunden einsparen. Die Kunst der Schnittstellen-Entwicklung besteht darin, dass man sie so generisch wie möglich anlegt, ohne dass dabei Stabilität oder Zielsetzung verloren gehen. Nur dann bietet die Schnittstelle die Möglichkeit, von beiden Seiten aus erforderliche Änderungen vorzunehmen. Dabei ist vor allem sicherzustellen, dass der Code immer der Schnittstellen-Spezifikation folgt und nicht andersherum.

Die Entwicklung von Software für Mikrocontroller wie etwa der Renesas Synergy Plattform erfordert besondere Sorgfalt aufgrund der davon betroffenen Hardware-Schnittstellen. Jede Peripherieschaltung innerhalb des Mikrocontrollers ist so zu konfigurieren, dass sie die von der Software benötigten bzw. genutzten Daten liefern kann. Zudem müssen sämtliche nicht verwendeten Pins angesprochen werden. Betrachtet man jede dieser Peripherieschaltungen als Objekte innerhalb des Systems, dann lässt sich die Schnittstelle effektiv adressieren.

Inhalt des Artikels:

Kommentar zu diesem Artikel abgeben

Schreiben Sie uns hier Ihre Meinung ...
(nicht registrierter User)

Zur Wahrung unserer Interessen speichern wir zusätzlich zu den o.g. Informationen die IP-Adresse. Dies dient ausschließlich dem Zweck, dass Sie als Urheber des Kommentars identifiziert werden können. Rechtliche Grundlage ist die Wahrung berechtigter Interessen gem. Art 6 Abs 1 lit. f) DSGVO.
Kommentar abschicken
copyright

Dieser Beitrag ist urheberrechtlich geschützt. Sie wollen ihn für Ihre Zwecke verwenden? Infos finden Sie unter www.mycontentfactory.de (ID: 44950780 / Software Engineering)