ProKomMa/C ist ein Projekt zur Unterstützung von Unternehmen bei der Erstellung und Auslieferung von Software-Produkten. Mit Hilfe des Projekts werden Verfahren und Werkzeuge entwickelt, die Software-Entwickler bei der Arbeit unterstützen und den Unternehmen eine automatisierte und sichere Erstellung und Übergabe der Software-Produkte an ihre Abnehmer ermöglichen.
Die Erstellung eines Software-Produkts wird in der Fachsprache als Build bezeichnet, die Geschäftsprozesse zur Erstellung von Software-Produkten als Build Management. Die im Projekt entwickelten Verfahren und Werkzeuge verbessern das Build Management insbesondere von Software-Produkten, die in den Programmiersprachen C und C++ entwickelt werden.
Die Verfahren zur Erstellung von Software-Produkten haben strategische Bedeutung in der Software-Produktentwicklung. Mit Hilfe von speziellen Build-Werkzeugen können diese Verfahren automatisiert werden. Ein Build-Werkzeug steuert u.a. die Prozesse zur Umwandlung der von Entwicklern erstellten Programmquelltexte in ausführbaren Code und stellt diesen für Tests oder zur Auslieferung an Kunden bereit. Ein hoher Automatisierungsgrad ist zwingend notwendig, um kurzfristig neue Produktversionen für Kunden oder Entwickler bereitzustellen. Besonders Fehlerkorrekturen wegen Sicherheitsproblemen verlangen eine schnelle Reaktion, die durch geeignete Build-Systeme effizient sichergestellt werden kann.
Software-Entwickler verwenden meist die Build-Werkzeuge, die ihre Entwicklungsumgebung zur Verfügung stellt, da sie oft auch nur eine Komponente eines größeren Produkts bearbeiten. Die Verfahren zur Auslieferung von Software-Produkten stellen weitere Anforderungen, z.B. Protokollierung oder Paketierung, die in der Komponentenentwicklung nicht benötigt werden. Für die Auslieferung werden daher andere Build-Werkzeuge benötigt.
Für die Auslieferung von Software-Produkten müssen meist eigene Skripte entwickelt werden, da die Anforderungen oft weit über die Funktionen hinausgehen, die Standard-Build-Werkzeuge bereitstellen. Die Entwicklung eines Build-Verfahrens ist daher sehr kosten- und zeitintensiv.
In den letzten Jahren gab es verschiedene Neuentwicklungen von Build-Werkzeugen, die sich meist jedoch auf die Sprachen Java und .NET fokussieren. Für die sehr wichtigen Programmiersprachen C und C++ gab es wenig neue Entwicklungen, die sich auch nicht entscheidend durchsetzen konnten, da wichtige Produktivitätsprobleme nicht gelöst werden konnten. Eine Unterstützung dieser Sprachen ist sehr wichtig, da sie in der Systemsoftware-Entwicklung (z.B. für Betriebssysteme, Telekommunikationsinfrastruktur) und Embedded Systems (Hardware-nahe Entwicklung) benötigt werden und somit intensiv in wichtigen Branchen wie Maschinenbau, Automotive, Multimedia- und Spielanwendungen genutzt werden.
Trotz der Bedeutung der Programmiersprachen C und C++ für die Software-Entwicklung insgesamt sind sie in den letzten Jahren aus dem Fokus geraten, andere Programmiersprachen wie Java und .NET haben massiv an Zulauf gewonnen. Grund dafür ist eine Konzentration auf Anwendungsprogramme und Internet-Anwendungen in der Öffentlichkeit .
C und C++ werden nach wie vor in der Systemsoftwareentwicklung, in Infrastrukturanwendungen (besonders in der Telekommunikation) und in der Hardware-nahen Entwicklung technischer Geräte und Anlagen eingesetzt. Die Sprachen sind daher sehr bedeutend für die Unternehmen in Deutschland und werden auch in Zukunft vielfach genutzt.
Da diese Sprachen direkt für eine bestimmte Prozessorarchitektur umgesetzt und nicht wie Java und .NET von virtuellen Maschinen (VM) ausgeführt werden, ist die Binärschnittstelle (Application Binary Interface (ABI)) nicht genormt, die diese Umsetzung definiert. Für die Build-Systeme bedeutet das, dass sie für jeden Prozessor eine gesonderte Konfiguration vorhalten müssen. In der Praxis müssen bestimmte Produkte daher mehrfach compiliert werden, was einen erhöhten Aufwand für die Verwaltung der Build-Ergebnisse nach sich zieht.
Da C und C++ im Rahmen eines unternehmensunabhängigen Gremienstandards weiterentwickelt werden, ist die Sprachevolution sehr langsam, dafür ist eine langjährige Kompatibilität gewährleistet. Der Sprachumfang ist (gewollt) sehr schmal, Software-Entwickler müssen daher für speziellere Funktionen externe Komponenten einbinden. Das führt zu einem hohen Recherche- und Lernaufwand. Für den Build bedeutet das, dass Komponenten zusätzlich zum eigentlichen Produkt verwaltet werden müssen (üblicherweise auch in verschiedenen Versionen).
Da die heutigen Build-Systeme Komponenten nur mit manuellen Aufwand verwalten können, führt das zu unproduktiven und daher teuren Seiteneffekten.
Einige Unternehmen erstellen Build-Verfahren, die externe Komponenten vollständig in das Produkt integrieren. So entsteht ein hoher Aufwand für die Analyse der Build-Anforderungen der Komponente und die Einbindung in das Build-Verfahren des zu erstellenden Produkts.
Andere Unternehmen scheuen diese Kosten und verzichten auf ein geordnetes Komponentenkonzept. Diesen Unternehmen entgeht dadurch leider die wichtigste Möglichkeit zur Kostensenkung in der Software-Entwicklung sowie eine sehr gute Möglichkeit zur Steigerung der Produktqualität durch Wiederverwendung gut getesteter Komponenten.
Die wichtigste Anforderung an ein Build-Werkzeug für C und C++, die leider aktuell von den verfügbaren Systemen nicht befriedigend erfüllt wird, ist ein flexibles Komponentenmanagement ohne aufwendige manuelle Konfigurationen.
Im Projekt ProKomMa/C (Progressives Komponentenmanagement für C++) soll ein Build-Werkzeug entwickelt werden, dass die komponentenorientierte Entwicklung speziell für die Programmiersprachen C und C++ unterstützt.
Das Build-Werkzeug unterstützt verschiedene Konfigurationen, mit denen unterschiedliche Compiler oder Produkte abgebildet werden können. Die erstellten Komponenten werden in zentralen Repositories abgelegt und stehen dort für die weitere Verwendung in Builds zur Verfügung. Durch diese Architektur muss jede Komponente nur einmal erstellt werden, was die Erstellungszeiten deutlich reduziert und so die Produktivität der Software-Entwicklung erhöht.
Repository-Komponenten können auch manuell erstellt werden. Mit diesem Verfahren können auch im Internet verfügbare Open Source-Komponenten verwendet werden und erleichtern die Entwicklung neuer Anwendungen.
Die Build-Konfigurationen können für verschiedene Entwicklungssysteme exportiert werden und so direkt von Programmierern genutzt werden, die bisher benötigte aufwendige und fehlerträchtige manuelle Projektkonfiguration entfällt.
ProKomMa/C kann über eine komfortable graphische Benutzeroberfläche bedient werden und unterstützt auch zeitgesteuerte Prozesse, z.B. für regelmäßige, automatisierte Builds.
Das Projekt bietet seinen Nutzern wesentliche Vorteile gegenüber heutigen Lösungen und besitzt daher gute Vermarktungschancen. Es erhöht ihre Produktivität und ermöglicht ihnen die effektive Nutzung von Vorteilen durch Wiederverwendung bestehender Komponenten.