{"id":7997,"date":"2025-11-29T08:37:31","date_gmt":"2025-11-29T07:37:31","guid":{"rendered":"https:\/\/web-dev-weissblau.de\/microconsult\/?p=7997"},"modified":"2026-02-13T05:13:04","modified_gmt":"2026-02-13T04:13:04","slug":"customizable-software-cleverly-implemented","status":"publish","type":"post","link":"https:\/\/www.microconsult.de\/en\/anpassbare-software-geschickt-umgesetzt\/","title":{"rendered":"Customizable software cleverly implemented?!"},"content":{"rendered":"<h2>Implementierungsmechanismen anpassbarer Software im Vergleich<\/h2>\n<p>Autoren: Martin Becker und Bo Zhang, Fraunhofer Institut f\u00fcr Experimentelles Software Engineering (IESE)<\/p>\n<h3>Beitrag &#8211; Embedded Software Engineering Kongress 2016<\/h3>\n<p><strong>Bei der erfolgreichen Realisierung von wiederverwendbaren und konfigurierbaren Softwaremodulen ist einer der wichtigsten Schritte die Auswahl von geeigneten Variabilit\u00e4tsmechanismen. Prominente Vertreter sind hier die bedingte Kompilierung mit dem Pr\u00e4prozessor, die Modulauswahl oder die Parametrierung in Verbindung mit bedingter Ausf\u00fchrung. Der Blick in den Entwicklungsalltag zeigt, dass die Mechanismen oftmals leichtfertig ausgew\u00e4hlt und willk\u00fcrlich eingesetzt werden. Die Konsequenz sind dann oftmals schlecht verst\u00e4ndliche und wartbare Software-Unget\u00fcme. Der Beitrag gibt einen \u00dcberblick \u00fcber g\u00e4ngige Variabilit\u00e4tsmechanismen, zeigt Stolperfallen und Best-Practices anhand von Praxisbeispielen auf.<\/strong><\/p>\n<h2>Variabilit\u00e4tstreiber in eingebetteten Systemen<\/h2>\n<p>Der Bedarf an kundenspezifischen Software-L\u00f6sungen steigt ungebremst. Haupttreiber hinter den angebotenen Produktvarianten sind dabei in erster Linie die unterschiedlichen Kundenbed\u00fcrfnisse, der technologische Wandel, z.B. neue Mehrkern-Prozessoren, und der Kostendruck. Diese Treiber lassen sich in der Regel nur begrenzt beeinflussen, wodurch die Vermeidung entsprechender Varianten oftmals schwer f\u00e4llt.<\/p>\n<p>Gerade f\u00fcr den Software-Anteil der eingebetteten Systeme herrscht die Meinung vor, dass dieser schnell und kosteng\u00fcnstig an neue Gegebenheiten angepasst werden kann, was im Vergleich zur Hardware aufgrund der \u00e4u\u00dferst geringen Produktionskosten zun\u00e4chst auch richtig ist. Naheliegender weise versucht man die erforderlichen Anpassungen also in die Software zu verlagern. Dies f\u00fchrt dann im Laufe der Zeit recht schnell zur hochgradig anpassbaren, konfigurierbaren und parametrierbaren Softwarel\u00f6sungen, die immer schwerer zu warten und zu konfigurieren sind. Viele Embedded Software Entwickler haben diese Pr\u00e4prozessor- oder Makefile-H\u00f6lle in der einen oder anderen Form schon am eigenen Leib gesp\u00fcrt.<\/p>\n<h2>Variabilit\u00e4tsmechanismen im Vergleich<\/h2>\n<p>Die Unterschiede in den Produktvarianten lassen sich auf unterschiedliche Arten realisierten. Man spricht in diesem Zusammenhang von Variabilit\u00e4tsmechanismen. Prominente Vertreter sind hier die bedingte Kompilierung mit dem Pr\u00e4prozessor, die Modulauswahl oder die Parametrierung in Verbindung mit bedingter Ausf\u00fchrung. Mit den Variabilit\u00e4tsmechanismen lassen sich also die variablen Produktmerkmale im Quellcode und anderen Entwicklungsartefakten (z.B. Testf\u00e4lle, Anforderungen, Design-Modelle) umsetzen.<\/p>\n<p>Um eine wohl\u00fcberlegte Auswahl der Variabilit\u00e4tsmechanismen zu f\u00f6rdern, stellen wir in der nachfolgenden \u00dcbersicht (siehe Tab. 1) typische Variabilit\u00e4tsmechanismen vor und charakterisieren diese entlang zentraler Eigenschaften. Der Vergleich basiert auf entsprechenden \u00dcbersichten [1][2][5][6], die in der Software Product Line Engineering Community \u00fcber die letzten beiden Jahrzehnte entstanden sind.<\/p>\n<p>Gem\u00e4\u00df unserer industriellen Erfahrung und j\u00fcngsten Studien [3][4][7][8] werden im Kontext von Embedded Software insbesondere folgende Mechanismen zur Realisierung von Software-Varianten eingesetzt:<\/p>\n<ul>\n<li>Cloning &#8211; Softwarest\u00e4nde werden zwischen verschiedenen Projekten kopiert und anschlie\u00dfend modifiziert.<\/li>\n<li>Bedingte Kompilierung &#8211; Mit dem C-Pr\u00e4prozessor werden Code-Bl\u00f6cke per Schalter ein-\/ausgeblendet.<\/li>\n<li>Bedingte Ausf\u00fchrung &#8211; \u00dcber Kontrollkonstrukte der Programmiersprachen werden Code-Bl\u00f6cke \u00fcber Variablen (Parameter) gesteuert aktiviert\/deaktiviert.<\/li>\n<li>Modulaustausch &#8211; Build-Systeme, wie zum Beispiel make, erm\u00f6glichen die Auswahl von Modulen, die beim Bauen zum Einsatz kommen.<\/li>\n<\/ul>\n<p>Weiterhin finden sich noch folgende Mechanismen in der industriellen Praxis:<\/p>\n<ul>\n<li>Polymorphismus &#8211; Sprachkonstrukte wie Funktionszeiger, \u00dcberladung oder virtuelle Methoden k\u00f6nnen verwendet werden, um in der Laufzeit zwischen unterschiedlichen Realisierung auszuw\u00e4hlen.<\/li>\n<li>Aspekt-Orientierung &#8211; \u00dcber entsprechende Weaver (f\u00fcr C, Java) lassen sich variable Aspekte nachtr\u00e4glich in Komponenten einweben.<\/li>\n<li>Frame Technology &#8211; Unter Verwendung dedizierter Pr\u00e4prozessoren l\u00e4sst sich die zu bauende Software in einem Vorverarbeitungsschritt gezielt anpassen. Ein prominenter Vertreter ist hier die Frame Technology von Paul Basset.<\/li>\n<\/ul>\n<p>Bei der Auswahl von Mechanismen sollten folgende generelle Aspekte ber\u00fccksichtigt werden:<\/p>\n<ul>\n<li>Bindezeit: Wann wird die Variabilit\u00e4t gebunden, d.h. wann wird die konkrete Variante in den Artefakten gebildet?<\/li>\n<li>Granularit\u00e4t: Wie fein k\u00f6nnen die \u00c4nderungen sein, die zwischen den Varianten durchzuf\u00fchren sind, z.B. einzelne Zeilen, Bl\u00f6cke, Dateien, Module, Subsysteme?<\/li>\n<li>Explizite Variationspunkte: Lassen sich die Stellen, in denen sich die Varianten unterscheiden, einfach lokalisieren und mit den entsprechenden variablen Merkmalen in Verbindung bringen?<\/li>\n<li>Varianten-Isolation. Ist die Realisierung einer einzelnen Variante isoliert von den restlichen oder befinden sich alle Varianten innerhalb einer Datei?<\/li>\n<li>Offene Variation: Lassen sich neue Varianten hinzuf\u00fcgen, ohne dass dies einen Einfluss auf existierende Varianten hat?<\/li>\n<li>Nicht-Code-Artefakte: Kann der Mechanismus auch jenseits von Code eingesetzt werden?<\/li>\n<li>Default-Werte: Werden Default-Realisierungen unterst\u00fctzt?<\/li>\n<\/ul>\n<p>Die obigen Mechanismen lassen sich bez\u00fcglich ihrer Eigenschaften wie folgt charakterisieren.<\/p>\n<p>&nbsp;<\/p>\n<div align=\"center\">\n<table border=\"1\" cellspacing=\"0\" cellpadding=\"0\">\n<tbody>\n<tr>\n<td>Mechanismus<\/td>\n<td width=\"138\">\n<p align=\"center\">Techniken<\/p>\n<\/td>\n<td width=\"52\">\n<p align=\"center\">Bindezeit<\/p>\n<\/td>\n<td width=\"64\">\n<p align=\"center\">Granularit\u00e4t<\/p>\n<\/td>\n<td width=\"84\">\n<p align=\"center\">Explizite Variationpunkte<\/p>\n<\/td>\n<td width=\"54\">\n<p align=\"center\">Varianten Isolation<\/p>\n<\/td>\n<td width=\"48\">\n<p align=\"center\">Offene Variation<\/p>\n<\/td>\n<td width=\"52\">\n<p align=\"center\">Nicht-Code-Artefakte<\/p>\n<\/td>\n<td width=\"53\">\n<p align=\"center\">Default-Werte<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td width=\"74\">Cloning<\/td>\n<td width=\"138\">\n<p align=\"center\">Kopieren der Artefakte, Branches im Konfigurationsmanagement<\/p>\n<\/td>\n<td width=\"52\">\n<p align=\"center\">Build time<\/p>\n<\/td>\n<td width=\"64\">\n<p align=\"center\">alle<\/p>\n<\/td>\n<td width=\"84\">\n<p align=\"center\">Implizit<\/p>\n<\/td>\n<td width=\"54\">\n<p align=\"center\">ja<\/p>\n<\/td>\n<td width=\"48\">\n<p align=\"center\">nein<\/p>\n<\/td>\n<td width=\"52\">\n<p align=\"center\">ja<\/p>\n<\/td>\n<td width=\"53\">\n<p align=\"center\">nein<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td width=\"74\">Bedingte Kompilierung<\/td>\n<td width=\"138\">\n<p align=\"center\">Pr\u00e4prozessor<\/p>\n<\/td>\n<td width=\"52\">\n<p align=\"center\">Build time<\/p>\n<\/td>\n<td width=\"64\">\n<p align=\"center\">alle<\/p>\n<\/td>\n<td width=\"84\">\n<p align=\"center\">Explizit<\/p>\n<\/td>\n<td width=\"54\">\n<p align=\"center\">nein<\/p>\n<\/td>\n<td width=\"48\">\n<p align=\"center\">nein<\/p>\n<\/td>\n<td width=\"52\">\n<p align=\"center\">ja<\/p>\n<\/td>\n<td width=\"53\">\n<p align=\"center\">ja<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td width=\"74\">Bedingte Ausf\u00fchrung<\/td>\n<td width=\"138\">\n<p align=\"center\">bedingte Anweisungen<\/p>\n<\/td>\n<td width=\"52\">\n<p align=\"center\">Run time<\/p>\n<\/td>\n<td width=\"64\">\n<p align=\"center\">begrenzt<\/p>\n<\/td>\n<td width=\"84\">\n<p align=\"center\">Implizit<\/p>\n<\/td>\n<td width=\"54\">\n<p align=\"center\">nein<\/p>\n<\/td>\n<td width=\"48\">\n<p align=\"center\">nein<\/p>\n<\/td>\n<td width=\"52\">\n<p align=\"center\">nein<\/p>\n<\/td>\n<td width=\"53\">\n<p align=\"center\">nein<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td width=\"74\">Poly\u00admorphismus<\/td>\n<td width=\"138\">\n<p align=\"center\">Funktionszeiger, Overloading, usw.<\/p>\n<\/td>\n<td width=\"52\">\n<p align=\"center\">meistens Run time<\/p>\n<\/td>\n<td width=\"64\">\n<p align=\"center\">begrenzt<\/p>\n<\/td>\n<td width=\"84\">\n<p align=\"center\">Implizit<\/p>\n<\/td>\n<td width=\"54\">\n<p align=\"center\">ja<\/p>\n<\/td>\n<td width=\"48\">\n<p align=\"center\">ja<\/p>\n<\/td>\n<td width=\"52\">\n<p align=\"center\">nein<\/p>\n<\/td>\n<td width=\"53\">\n<p align=\"center\">nein<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td width=\"74\">Modul\u00adaustausch<\/td>\n<td width=\"138\">\n<p align=\"center\">Build-System<\/p>\n<\/td>\n<td width=\"52\">\n<p align=\"center\">meistens Run time<\/p>\n<\/td>\n<td width=\"64\">\n<p align=\"center\">begrenzt<\/p>\n<\/td>\n<td width=\"84\">\n<p align=\"center\">Implizit<\/p>\n<\/td>\n<td width=\"54\">\n<p align=\"center\">ja<\/p>\n<\/td>\n<td width=\"48\">\n<p align=\"center\">ja<\/p>\n<\/td>\n<td width=\"52\">\n<p align=\"center\">ja<\/p>\n<\/td>\n<td width=\"53\">\n<p align=\"center\">nein<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td width=\"74\">Aspekt-Orientierung<\/td>\n<td width=\"138\">\n<p align=\"center\">Aspect Weaver<\/p>\n<\/td>\n<td width=\"52\">\n<p align=\"center\">meistens Run time<\/p>\n<\/td>\n<td width=\"64\">\n<p align=\"center\">begrenzt<\/p>\n<\/td>\n<td width=\"84\">\n<p align=\"center\">Implizit<\/p>\n<\/td>\n<td width=\"54\">\n<p align=\"center\">ja<\/p>\n<\/td>\n<td width=\"48\">\n<p align=\"center\">ja<\/p>\n<\/td>\n<td width=\"52\">\n<p align=\"center\">ja<\/p>\n<\/td>\n<td width=\"53\">\n<p align=\"center\">ja<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td width=\"74\">Frame Technology<\/td>\n<td width=\"138\">\n<p align=\"center\">Frame-Anpassung<\/p>\n<\/td>\n<td width=\"52\">\n<p align=\"center\">Build time<\/p>\n<\/td>\n<td width=\"64\">\n<p align=\"center\">alle<\/p>\n<\/td>\n<td width=\"84\">\n<p align=\"center\">Explizit<\/p>\n<\/td>\n<td width=\"54\">\n<p align=\"center\">ja<\/p>\n<\/td>\n<td width=\"48\">\n<p align=\"center\">ja<\/p>\n<\/td>\n<td width=\"52\">\n<p align=\"center\">ja<\/p>\n<\/td>\n<td width=\"53\">\n<p align=\"center\">ja<\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<p><em>Tab. 1: Charakterisierung der Variabilit\u00e4tsmechanismen<\/em><\/p>\n<h2>Praktische Erfahrungen mit Variabilit\u00e4tsmechanismen<\/h2>\n<p>In diesem Abschnitt wird die Verwendung der Variabilit\u00e4tsmechanismen in der Praxis n\u00e4her beleuchtet sowie deren praktische Vorteile und Herausforderungen diskutiert und entsprechende Empfehlungen gegeben.<\/p>\n<p>Vorteile, Herausforderungen und Empfehlungen sind in der folgenden Tabelle aufgelistet.<\/p>\n<div align=\"center\">\n<table border=\"1\" cellspacing=\"0\" cellpadding=\"0\">\n<tbody>\n<tr>\n<td width=\"86\">Mechanismen<\/td>\n<td width=\"150\">Praktische Vorteile<\/td>\n<td width=\"175\">Praktische Herausforderungen<\/td>\n<td width=\"158\">Empfehlungen<\/td>\n<\/tr>\n<tr>\n<td width=\"86\">Cloning<\/td>\n<td width=\"150\">Schnelle Einf\u00fchrung mit geringem Aufwand. Unabh\u00e4ngigkeit von anderen Varianten. Gilt f\u00fcr jede Artefakt-Art und -Gr\u00f6\u00dfe.<\/td>\n<td width=\"175\">Hohe (Langzeit-) Wartungsaufwand .Unvollst\u00e4ndige Ausbreitung von \u00c4nderungen und Fehlerkorrekturen, was zu niedrigerer Codequalit\u00e4t f\u00fchrt.<\/td>\n<td width=\"158\">Geringer Aufwand von kurzlebigen Klonen. \u00c4nderungen sollten klar lokalisiert sein und gemanagt werden. Periodische Klon-Analyse und Refactoring auf andere Mechanismen bei Wartungsproblemen.<\/td>\n<\/tr>\n<tr>\n<td width=\"86\">Bedingte Kompilierung<\/td>\n<td width=\"150\">Einfach einzuf\u00fchren. Alle Granularit\u00e4ten. Explizite Variationspunkte. Keine Laufzeit-Auswirkung (Ressourcen-Bedarf).<\/td>\n<td width=\"175\">#ifdef Code ist schwer zu verstehen wegen #ifdef Verschachtelung, Vermischung, Streuung usw. #ifdef Code neigt zur Erosion und ist oftmals in der Evolution schwer zu warten.<\/td>\n<td width=\"158\">Namensrichtlinien erm\u00f6glichen einfache Identifikation und Analyse von Variationspunkten.<\/p>\n<p>Analysieren und die unn\u00f6tige Komplexit\u00e4t des #ifdef Codes aktiv vermeiden \/ reduzieren. Umbau im Falle von Wartungsproblemen.<\/td>\n<\/tr>\n<tr>\n<td width=\"86\">Bedingte Ausf\u00fchrung<\/td>\n<td width=\"150\">Einfach einzuf\u00fchren und zu verstehen. Unterst\u00fctzt Bindung zur Laufzeit. Hohe Flexibilit\u00e4t.<\/td>\n<td width=\"175\">Begrenzt auf kleine Granularit\u00e4t. Schwer zu unterscheiden zwischen der Variationslogik und Code-Funktionalit\u00e4t. Laufzeit-Overhead.<\/td>\n<td width=\"158\">Erw\u00e4gen Sie, ob die Bindung zur Laufzeit zwingend notwendig ist.<\/p>\n<p>Ggf. anderen Mechanismus, z.B. Bedingte Kompilierung einsetzen.<\/td>\n<\/tr>\n<tr>\n<td width=\"86\">Poly\u00admorphismus<\/td>\n<td width=\"150\">Die Trennung von gemeinsamen und varianten Elementen. Hohe Flexibilit\u00e4t. Jede Variante Element kann in Isolation entwickeln.<\/td>\n<td width=\"175\">Geringere Effizienz aufgrund der Fragmentierung der varianten Elemente. Erh\u00f6htes Risiko von Softwarefehlern.<\/td>\n<td width=\"158\">Falls sich Probleme ergeben, k\u00f6nnte Modulaustausch eine Alternative sein.<\/td>\n<\/tr>\n<tr>\n<td width=\"86\">Modul\u00adaustausch<\/td>\n<td width=\"150\">Vorteile von Polymorphismus. Keine Laufzeit-Auswirkung<\/td>\n<td width=\"175\">Variationspunkte und variante Elemente sind schwer zu identifizieren und zu verstehen.<\/td>\n<td width=\"158\">Verwalten von Variationspunkten und varianten Elemente mit dedizierten Modellen mit geeigneter Werkzeugunterst\u00fctzung, z.B. Generierung der entsprechenden Makefiles.<\/td>\n<\/tr>\n<tr>\n<td width=\"86\">Aspekt Orientierung<\/td>\n<td width=\"150\">Vorteile von Polymorphismus. Klare Separierung der \u00c4nderungen von den Gemeinsamkeiten. Default-Support.<\/td>\n<td width=\"175\">Lernaufwand . Erh\u00f6ht die Codegr\u00f6\u00dfe. Effektiver Code wird erzeugt\/modifiziert. Erfordert erneute Validierung. Niedrige Codeverst\u00e4ndlichkeit.<\/td>\n<td width=\"158\">Seien Sie vorsichtig bei der Verwendung. Im Falle von negativen Auswirkungen sollten Sie auf andere Mechanismen wechseln.<\/td>\n<\/tr>\n<tr>\n<td width=\"86\">Frame Technology<\/td>\n<td width=\"150\">Vorteile von Polymorphismus. Keine begrenzte Granularit\u00e4t. Keine Laufzeit-Auswirkung. Explizite Variationspunkte.<\/td>\n<td width=\"175\">Kaum bekannt. Erfordert spezielle Werkzeuge. Erfordert erneute Validierung.<\/td>\n<td width=\"158\">Seien Sie vorsichtig bei der Verwendung. Im Falle von negativen Auswirkungen sollten Sie auf andere Mechanismen wechseln.<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<p><em><br \/>\nTab. 2: Praktische Erfahrungen mit Variabilit\u00e4tsmechanismen<\/em><\/p>\n<p>Generell l\u00e4sst sich sagen, dass in der Vergangenheit aufgrund der Ressourcenbeschr\u00e4nkungen vermehrt auf Bedingte Kompilierung und Modulaustausch gesetzt wurde. Im zunehmenden Ma\u00dfe wird Variabilit\u00e4t aufgrund der h\u00f6heren Flexibilit\u00e4t, neuer Gesch\u00e4ftsmodelle und des geringeren Management-Aufwandes in die Laufzeit verlagert. Dabei kommen neben Polymorphismus und Bedingter Ausf\u00fchrung vor allem auch entsprechende Lifecycle-Management-Frameworks wie beispielsweise OSGI zum Einsatz. Egal welche Mechanismen zum Einsatz kommen, achten Sie darauf, dass die Variationspunkte einfach lokalisieren lassen und sich auf die zugrunde liegenden Variabilit\u00e4ten zur\u00fcckverfolgen lassen. Damit erleichtern Sie das Varianten-\/Variabilit\u00e4tsmanagement ungemein und erm\u00f6glichen toolgest\u00fctzte Analysen und Verbesserungen.<\/p>\n<h2>Zusammenfassung<\/h2>\n<p>Unzul\u00e4ngliche Realisierung von Software-Varianten f\u00fchrt schnell zu unn\u00f6tiger Komplexit\u00e4t und sollte nach M\u00f6glichkeit fr\u00fchzeitig vermieden werden. In diesem Beitrag haben wir einen \u00dcberblick \u00fcber g\u00e4ngige Variabilit\u00e4tsmechanismen gegeben und Stolperfallen und Best-Practices aufgezeigt. Der Beitrag ist als Orientierungshilfe gedacht.<\/p>\n<h2>Literatur- und Quellenverzeichnis<\/h2>\n<p class=\"References\">[1] S. Apel, D. Batory, C. K\u00e4stner, G. Saake, &#8222;Feature-Oriented Software Product Lines&#8220;, Springer, 2013.<br \/>\n[2] F. Bachmann and P. Clements, &#8222;Variability in software product lines&#8220;, Software Engineering Institute, Pittsburgh, USA, Tech. Rep. CMU\/SEI-2005-TR-012, Sep. 2005.<br \/>\n[3] Y. Dubinsky, J. Rubin, T. Berger, S. Duszynski, M. Becker, K. Czarnecki, &#8222;An Exploratory Study of Cloning in Industrial Software Product Lines&#8220;, Proceedings of the 17<sup>th<\/sup>\u00a0European Conference on Software Maintenance and Reengineering, 2013<br \/>\n[4] S. Duszynski, &#8222;Analyzing Similarity of Cloned Software Variants using Hierarchical Set Models&#8220;, Dissertation, Fraunhofer IESE, Kaiserslautern, Germany, 2015.<br \/>\n[5] C. Gacek and M. Anastasopoulos, &#8222;Implementing product line variabilities&#8220;, SIGSOFT Softw. Eng. Notes, vol. 26, no. 3, pp. 109-117, May 2001.<br \/>\n[6] T. Patzke, &#8222;Sustainable Evolution of Product Line Infrastructure Code&#8220;, Dissertation, Fraunhofer IESE, Kaiserslautern, Germany, 2011.<br \/>\n[7] B. Zhang, M. Becker, T. Patzke, K. Sierszecki, and J. E. Savolainen, &#8222;Variability evolution and erosion in industrial product lines: a case study&#8220;, 17th International Software Product Line Conference (SPLC 2013), pp. 168\u2014177.<br \/>\n[8] B. Zhang, &#8222;VITAL &#8211; reengineering variability specifications and realizations in software product lines&#8220;, Dissertation, Fraunhofer IESE, Kaiserslautern, Germany, 2015.<\/p>\n<p><a title=\"Anpassbare Software geschickt umgesetzt?! (PDF)\" href=\"https:\/\/www.microconsult.de\/wp-content\/uploads\/2025\/11\/impl_anpassbaresoftware_fraunhofer_beckerzhang.pdf\" target=\"_blank\" rel=\"noopener\"><strong>Beitrag als PDF downloaden<\/strong><\/a><\/p>\n<hr \/>\n<h2>Implementierung &#8211; unsere Trainings &amp; Coachings<\/h2>\n<p><strong>Wollen Sie sich auf den aktuellen Stand der Technik bringen?<\/strong><\/p>\n<p>Dann informieren Sie sich\u00a0<a title=\"MicroConsult Training\" href=\"https:\/\/www.microconsult.de\/alle-trainings-termine-komplettuebersicht\/\" target=\"_blank\" rel=\"noopener\"><strong>hier<\/strong>\u00a0<\/a>zu Schulungen\/ Seminaren\/ Trainings\/ Workshops und individuellen Coachings von MircoConsult zum Thema Implementierung \/Embedded- und Echtzeit-Softwareentwicklung.<\/p>\n<p><strong>Training &amp; Coaching zu den weiteren Themen unseren Portfolios finden Sie\u00a0<a title=\"Training &amp; Beratung - alle Themen\" href=\"https:\/\/www.microconsult.de\/training-beratung\/\" target=\"_blank\" rel=\"noopener\">hier<\/a>.<\/strong><\/p>\n<hr \/>\n<h2>Implementierung &#8211; Fachwissen<\/h2>\n<p>Wertvolles Fachwissen zum Thema Implementierung\/\u00a0Embedded- und Echtzeit-Softwareentwicklung steht\u00a0<a title=\"Embedded- und Echtzeit-Softwareentwicklung\" href=\"https:\/\/www.microconsult.de\/embedded-und-echtzeit-softwareentwicklung\/\" target=\"_blank\" rel=\"noopener\"><strong>hier\u00a0<\/strong><\/a>f\u00fcr Sie zum kostenfreien Download bereit.<\/p>\n<p><a title=\"Embedded- und Echtzeit-Softwareentwicklung\" href=\"https:\/\/www.microconsult.de\/embedded-und-echtzeit-softwareentwicklung\/\" target=\"_blank\" rel=\"noopener\"><strong>Zu den Fachinformationen<\/strong><\/a><\/p>\n<p><strong>Fachwissen zu weiteren Themen unseren Portfolios finden Sie <a title=\"MicroConsult Fachwissen\" href=\"https:\/\/www.microconsult.de\/fachwissen\/\" target=\"_blank\" rel=\"noopener\">hier<\/a>.<\/strong><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Implementierungsmechanismen anpassbarer Software im Vergleich Autoren: Martin Becker und Bo Zhang, Fraunhofer Institut f\u00fcr Experimentelles Software Engineering (IESE) Beitrag &#8211; Embedded Software Engineering Kongress 2016 Bei der erfolgreichen Realisierung von wiederverwendbaren und konfigurierbaren Softwaremodulen ist einer der wichtigsten Schritte die Auswahl von geeigneten Variabilit\u00e4tsmechanismen. Prominente Vertreter sind hier die bedingte Kompilierung mit dem Pr\u00e4prozessor, die [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"_et_pb_use_builder":"","_et_pb_old_content":"","_et_gb_content_width":"","inline_featured_image":false,"footnotes":""},"categories":[],"tags":[],"class_list":["post-7997","post","type-post","status-publish","format-standard","hentry"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.9 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Anpassbare Software geschickt umgesetzt?! - MicroConsult Academy GmbH<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.microconsult.de\/en\/customizable-software-cleverly-implemented\/\" \/>\n<meta property=\"og:locale\" content=\"en_GB\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Anpassbare Software geschickt umgesetzt?! - MicroConsult Academy GmbH\" \/>\n<meta property=\"og:description\" content=\"Implementierungsmechanismen anpassbarer Software im Vergleich Autoren: Martin Becker und Bo Zhang, Fraunhofer Institut f\u00fcr Experimentelles Software Engineering (IESE) Beitrag &#8211; Embedded Software Engineering Kongress 2016 Bei der erfolgreichen Realisierung von wiederverwendbaren und konfigurierbaren Softwaremodulen ist einer der wichtigsten Schritte die Auswahl von geeigneten Variabilit\u00e4tsmechanismen. Prominente Vertreter sind hier die bedingte Kompilierung mit dem Pr\u00e4prozessor, die [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.microconsult.de\/en\/customizable-software-cleverly-implemented\/\" \/>\n<meta property=\"og:site_name\" content=\"MicroConsult Academy GmbH\" \/>\n<meta property=\"article:published_time\" content=\"2025-11-29T07:37:31+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2026-02-13T04:13:04+00:00\" \/>\n<meta name=\"author\" content=\"weissblau media\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"weissblau media\" \/>\n\t<meta name=\"twitter:label2\" content=\"Estimated reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"9 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/www.microconsult.de\\\/anpassbare-software-geschickt-umgesetzt\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.microconsult.de\\\/anpassbare-software-geschickt-umgesetzt\\\/\"},\"author\":{\"name\":\"weissblau media\",\"@id\":\"https:\\\/\\\/www.microconsult.de\\\/#\\\/schema\\\/person\\\/b6d4c4ae959b068fbe8d9416ed019a0a\"},\"headline\":\"Anpassbare Software geschickt umgesetzt?!\",\"datePublished\":\"2025-11-29T07:37:31+00:00\",\"dateModified\":\"2026-02-13T04:13:04+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/www.microconsult.de\\\/anpassbare-software-geschickt-umgesetzt\\\/\"},\"wordCount\":1609,\"commentCount\":0,\"inLanguage\":\"en-GB\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/www.microconsult.de\\\/anpassbare-software-geschickt-umgesetzt\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.microconsult.de\\\/anpassbare-software-geschickt-umgesetzt\\\/\",\"url\":\"https:\\\/\\\/www.microconsult.de\\\/anpassbare-software-geschickt-umgesetzt\\\/\",\"name\":\"Anpassbare Software geschickt umgesetzt?! - MicroConsult Academy GmbH\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.microconsult.de\\\/#website\"},\"datePublished\":\"2025-11-29T07:37:31+00:00\",\"dateModified\":\"2026-02-13T04:13:04+00:00\",\"author\":{\"@id\":\"https:\\\/\\\/www.microconsult.de\\\/#\\\/schema\\\/person\\\/b6d4c4ae959b068fbe8d9416ed019a0a\"},\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.microconsult.de\\\/anpassbare-software-geschickt-umgesetzt\\\/#breadcrumb\"},\"inLanguage\":\"en-GB\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.microconsult.de\\\/anpassbare-software-geschickt-umgesetzt\\\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.microconsult.de\\\/anpassbare-software-geschickt-umgesetzt\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/www.microconsult.de\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Anpassbare Software geschickt umgesetzt?!\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/www.microconsult.de\\\/#website\",\"url\":\"https:\\\/\\\/www.microconsult.de\\\/\",\"name\":\"MicroConsult Academy GmbH\",\"description\":\"Professionelle Schulungen, Beratung und Projektunterst\u00fctzung\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/www.microconsult.de\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-GB\"},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/www.microconsult.de\\\/#\\\/schema\\\/person\\\/b6d4c4ae959b068fbe8d9416ed019a0a\",\"name\":\"weissblau media\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-GB\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/bbb409da4970da9446f6c49465d453cb8a0dae301e4d4f465b5c4e62408daa2e?s=96&d=mm&r=g\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/bbb409da4970da9446f6c49465d453cb8a0dae301e4d4f465b5c4e62408daa2e?s=96&d=mm&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/bbb409da4970da9446f6c49465d453cb8a0dae301e4d4f465b5c4e62408daa2e?s=96&d=mm&r=g\",\"caption\":\"weissblau media\"},\"sameAs\":[\"https:\\\/\\\/www.microconsult.de\"]}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Customizable software cleverly implemented?! - MicroConsult Academy GmbH","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.microconsult.de\/en\/customizable-software-cleverly-implemented\/","og_locale":"en_GB","og_type":"article","og_title":"Anpassbare Software geschickt umgesetzt?! - MicroConsult Academy GmbH","og_description":"Implementierungsmechanismen anpassbarer Software im Vergleich Autoren: Martin Becker und Bo Zhang, Fraunhofer Institut f\u00fcr Experimentelles Software Engineering (IESE) Beitrag &#8211; Embedded Software Engineering Kongress 2016 Bei der erfolgreichen Realisierung von wiederverwendbaren und konfigurierbaren Softwaremodulen ist einer der wichtigsten Schritte die Auswahl von geeigneten Variabilit\u00e4tsmechanismen. Prominente Vertreter sind hier die bedingte Kompilierung mit dem Pr\u00e4prozessor, die [&hellip;]","og_url":"https:\/\/www.microconsult.de\/en\/customizable-software-cleverly-implemented\/","og_site_name":"MicroConsult Academy GmbH","article_published_time":"2025-11-29T07:37:31+00:00","article_modified_time":"2026-02-13T04:13:04+00:00","author":"weissblau media","twitter_card":"summary_large_image","twitter_misc":{"Written by":"weissblau media","Estimated reading time":"9 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.microconsult.de\/anpassbare-software-geschickt-umgesetzt\/#article","isPartOf":{"@id":"https:\/\/www.microconsult.de\/anpassbare-software-geschickt-umgesetzt\/"},"author":{"name":"weissblau media","@id":"https:\/\/www.microconsult.de\/#\/schema\/person\/b6d4c4ae959b068fbe8d9416ed019a0a"},"headline":"Anpassbare Software geschickt umgesetzt?!","datePublished":"2025-11-29T07:37:31+00:00","dateModified":"2026-02-13T04:13:04+00:00","mainEntityOfPage":{"@id":"https:\/\/www.microconsult.de\/anpassbare-software-geschickt-umgesetzt\/"},"wordCount":1609,"commentCount":0,"inLanguage":"en-GB","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.microconsult.de\/anpassbare-software-geschickt-umgesetzt\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.microconsult.de\/anpassbare-software-geschickt-umgesetzt\/","url":"https:\/\/www.microconsult.de\/anpassbare-software-geschickt-umgesetzt\/","name":"Customizable software cleverly implemented?! - MicroConsult Academy GmbH","isPartOf":{"@id":"https:\/\/www.microconsult.de\/#website"},"datePublished":"2025-11-29T07:37:31+00:00","dateModified":"2026-02-13T04:13:04+00:00","author":{"@id":"https:\/\/www.microconsult.de\/#\/schema\/person\/b6d4c4ae959b068fbe8d9416ed019a0a"},"breadcrumb":{"@id":"https:\/\/www.microconsult.de\/anpassbare-software-geschickt-umgesetzt\/#breadcrumb"},"inLanguage":"en-GB","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.microconsult.de\/anpassbare-software-geschickt-umgesetzt\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/www.microconsult.de\/anpassbare-software-geschickt-umgesetzt\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.microconsult.de\/"},{"@type":"ListItem","position":2,"name":"Anpassbare Software geschickt umgesetzt?!"}]},{"@type":"WebSite","@id":"https:\/\/www.microconsult.de\/#website","url":"https:\/\/www.microconsult.de\/","name":"MicroConsult Academy GmbH","description":"Professional training, consulting and project support","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.microconsult.de\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-GB"},{"@type":"Person","@id":"https:\/\/www.microconsult.de\/#\/schema\/person\/b6d4c4ae959b068fbe8d9416ed019a0a","name":"weissblau media","image":{"@type":"ImageObject","inLanguage":"en-GB","@id":"https:\/\/secure.gravatar.com\/avatar\/bbb409da4970da9446f6c49465d453cb8a0dae301e4d4f465b5c4e62408daa2e?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/bbb409da4970da9446f6c49465d453cb8a0dae301e4d4f465b5c4e62408daa2e?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/bbb409da4970da9446f6c49465d453cb8a0dae301e4d4f465b5c4e62408daa2e?s=96&d=mm&r=g","caption":"weissblau media"},"sameAs":["https:\/\/www.microconsult.de"]}]}},"post_mailing_queue_ids":[],"_links":{"self":[{"href":"https:\/\/www.microconsult.de\/en\/wp-json\/wp\/v2\/posts\/7997","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.microconsult.de\/en\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.microconsult.de\/en\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.microconsult.de\/en\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.microconsult.de\/en\/wp-json\/wp\/v2\/comments?post=7997"}],"version-history":[{"count":6,"href":"https:\/\/www.microconsult.de\/en\/wp-json\/wp\/v2\/posts\/7997\/revisions"}],"predecessor-version":[{"id":11657,"href":"https:\/\/www.microconsult.de\/en\/wp-json\/wp\/v2\/posts\/7997\/revisions\/11657"}],"wp:attachment":[{"href":"https:\/\/www.microconsult.de\/en\/wp-json\/wp\/v2\/media?parent=7997"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.microconsult.de\/en\/wp-json\/wp\/v2\/categories?post=7997"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.microconsult.de\/en\/wp-json\/wp\/v2\/tags?post=7997"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}