Varianten einer Software verwalten

Manchmal ist es notwendig Varianten einer Software anzufertigen, zum Beispiel, um etwas auf unterschiedliche Weise zu Probieren und die Ergebnisse zu Vergleichen.

Um verschiedene Varianten einer Software anlegen zu können gibt es mehrere Möglichkeiten:

  • Jede Variante hat ihren eigenen Sourcecode (Copy und Paste)
  • Die Varianten werden als Compilerdefine #Ifdef eingearbeitet
  • Die Variante liegt in einem Software-Layer der ausgetauscht wird (portable Software)
  • Die Varianten werden in der Software-Konfiguration als Branch verwaltet

Jede Variante mit eigenem Sourcecode
Das geht eigentlich nur wenn es eine einfache, relativ kleine Software ist und nicht viele Varianten vorliegen. Der Überblick ist noch zu behalten. Am besten die Testkriterien und damit den Vergleich schon vorher bestimmen und jede Variante nach ihrer Erstellung danach testen und die Ergebnisse als Testbericht für den späteren Vergleich notieren. Der Testsieger ist dann die Variante, die weiter Entwickelt wird.

Die Varianten werden als Compilerdefine #Ifdef eingearbeitet
Diese Vorgehensweise ist mit Vorsicht zu genießen. Wenn sich die #Ifdef Direktiven auch noch schachteln, wird es schnell unübersichtlich. Damit wird es auch schwieriger mit der Softwareentwicklung und vor allem der Fehlersuche. Das liegt an der schlechteren Übersicht in den Sourcen. Für eine bessere Übersicht gibt es Hilfsmittel, in manchen Editoren lassen sich inaktive Compilerschalter zuklappen (Falteneditor). Bei eclipse und allen Ablegern lässt sich das folgendermaßen einstellen:

Window -> Preferences -> C/C++ -> Editor -> Folding

Dort werden dann zwei Häkchen gesetzt bei:
– Enable folding of preprocessor branches (#if/#endif)
– Inactive Preprocessor Branches

Wenn die Anzeige von Zeilennummern aktiviert ist kann man dann mit einem Rechtsklick auf die Zeilennummer unter „Folding“ wählen aus:

– Enable Folding = Ein- oder Ausschalten
– Expand All = Alle Aufklappen
– Collapse All = Alle Zuklappen
– Reset Structure = Nur inaktive Zuklappen

Die Variante liegt in einem Software-Layer der ausgetauscht wird
Wenn es eigentlich um die Portabilität der Software geht, also z.B. die Lauffähigkeit auf verschiedenen Mikrocontrollern. Hierfür wird die Schnittstelle zur Hardwaretreiber-Ebene gleich gehalten. Dann kann man den kompletten Layer mit den Hardwaretreibern austauschen. Die Applikation selbst mit ihrer Logik bleibt immer gleich.

Die Varianten werden in der Software-Konfiguration als Branch verwaltet
Meine bevorzugte Arbeitsweise ist es jede Variante als eigenen Branch und Sandbox zu verwalten. Hier behalte ich über die Konfigurationssoftware die Übersicht, auch nach längerer Zeit. Jede Fehlerkorrektur in einer beliebigen Variante, die auch für eine oder mehrere Varianten wichtig sind, können in jede andere Variante „ge-merged“ werden. In den gemeinsamen Anteilen sind alle Änderungen ohnehin schon in allen Varianten drin.
Das Erscheint erst einmal Aufwendig, hat aber den Vorteil immer gut nachvollziehbar zu sein.

Links

Software Architektur für Mikrocontroller
– http://www.autosar.org/specifications/release-42/software-architecture/general/AUTOSAR_EXP_LayeredSoftwareArchitecture.pdf

Arbeiten mit Subversion

Anwenden von Softwarekonfiguration

Veröffentlicht von

Jürgen

Ich bin Software Ingenieur und habe meine Schwerpunkte in allen Aktivitäten, die zur Software Entwicklung gehören. Am längsten bin ich als Software Entwickler von Embedded Software in C tätig.