Hardware-Design und Entwicklungswerkzeuge / Technologien
Software-Entwicklungstools
Architektur-Modell
Bevor wir uns an die Software-Implementierung machen, bereiten wir die Architektur in einem UML-Modell vor. Für diese Modellierung verwenden wir verschiedene Werkzeuge.
Vor langer Zeit haben wir mit Rational Rhapsody begonnen, jetzt verwenden wir auch PlantUML, Microsoft Visual Studio, Microsoft Visio, Lucid Chart und Enterprise Architect.
Wir passen die Architektur entsprechend an - egal, ob wir auf einem Betriebssystem - Linux oder Windows - oder Bare-Metal-Firmware aufbauen.
Projekt-Management-Systeme
Für den Softwareentwicklungsprozess verwenden wir eine Toolfamilie von Atlassian. Wir haben langjährige Erfahrung mit JIRA, das für die Fehlerverfolgung eingesetzt wird, wobei wir häufig agile Prozessabläufe auf der Grundlage von Kanban oder Scrum verwenden.
Und wir nutzen den Hauptvorteil von JIRA, nämlich die enge Verbindung mit dem Bitbucket-Repository.
Versionskontrollsysteme
Als Revisionskontrollsystem haben wir vor ein paar Jahren mit SVN begonnen. In den letzten Jahren sind wir auf Toolchains auf der Grundlage von Git umgestiegen, was den Vorteil des flexiblen Branching und Merging (im Vergleich zu SVN) mit sich bringt. Wir pushen unsere Inhalte in ein entferntes Bitbucket-Repository, das eine leistungsstarke Infrastruktur und die Integration mit anderen Tools von Atlassian bietet.
Wir haben Technologien zur kontinuierlichen Integration (CI) wie Jenkins Server verwendet.
Codierungstools
Unsere Kollegen sind nicht gezwungen, bestimmte Tools zu verwenden. Die meisten von ihnen verwenden gerne VS Code oder MS Visual Studio, andere mögen Atom, Eclipse oder einfache Linux-basierte Editoren.
Fast alle Tools bieten die volle Leistungsfähigkeit eines Remote-Target-Debuggers und verschiedener Plug-in-Pakete.
Für die Quelldateien setzen wir statische Code-Analyse-Tools wie Clang ein.
Programmiersprachen
Die meisten der von uns verwendeten Programmiersprachen unterstützen sowohl Linux- als auch Windows-Betriebssysteme.
Einige von uns mögen Python wegen seiner Flexibilität und der Tatsache, dass es nicht kompiliert werden muss, insbesondere für schnelles Software-Prototyping oder Testskripte.
Für die webbasierten Anwendungen haben wir gute Erfahrungen mit JavaScript, TypeScript und verschiedenen Web-Frameworks wie ReactJS und Express, die von Runtimes wie NodeJS und Electron unterstützt werden.
Andererseits beherrschen die Kollegen, die sich intensiv mit ARM Cortex-Embedded-Firmware-Anwendungen auf niedrigerer Ebene beschäftigen, C oder C++.
Gerätetreiber
Einige Projekte, die wir für unsere Kunden durchführen, verwenden PCIe-Karten für einen Host-PC. Solche Computer laufen meist unter Windows; daher unterstützen wir unsere Kunden bei der Entwicklung von Windows-Treibern.
Wir haben detaillierte Erfahrungen mit dem älteren Windows Driver Kit (WDK) und dem neueren Kernel-Mode Driver Framework (KMDF).
Natürlich erstellen wir auch erfolgreich Treiber für Embedded Linux - in den meisten Fällen für die Peripherie, die nicht Teil des individuellen SOM (System on Module) ist.
Überblick über Technologien und Tools