Empfohlenes Webinar: KI-gestütztes API-Testing: Ein No-Code-Ansatz zum Testen | Zum Video

Bereitstellen statischer Analysen und Komponententests in containerisierten Umgebungen, Teil 2

Headshot von Miroslaw Zielinski, Direktor Produktmanagement bei Parasoft
9. Juni 2023
6 min lesen

Möglicherweise haben Sie in einem früheren Beitrag darüber gelesen, wie man SAST und Unit-Tests in einer Containerumgebung anwendet. Hier finden Sie eine Fortsetzung dazu, wie Sie statische Analysen und Unit-Tests mit Parasoft C/C++test Standard in einem Docker-Container sinnvoll bereitstellen können.

Bedeutung der Containerisierung für Tests und statische Analysen

Container sind eine evolutionäre, standardisierte und tragbare Verpackungstechnologie, die direkt in den heutigen modernen agilen Entwicklungsworkflows wie DevOps/DevSecOps eingesetzt wird. Container wurden zunächst für die Entwicklung und Bereitstellung von Webanwendungen und Microservices eingeführt und fanden dort breite Akzeptanz in der IT-Branche. Heutzutage werden in der Embedded-Branche in großem Umfang Container eingesetzt.

Container bieten eine schnelle Reproduktion identischer Umgebungen für eingebettete Entwicklung, Softwaretests, Staging und Produktion in jeder Phase des SDLC.

Die Bereitstellung von Containern bietet mehrere Vorteile.

  • Beschleunigt die Markteinführungszeit der Softwareentwicklung.
  • Verbessert die Sicherheit und Zuverlässigkeit des Codes.
  • Hilft bei der Bewältigung der wachsenden Komplexität von Entwicklungsökosystemen.
  • Bietet die Möglichkeit, dynamisch auf Softwarebereitstellungstests in einem sich schnell und sich ständig weiterentwickelnden Markt zu reagieren.

Erklärung der Docker- und Container-Images

Es ist wichtig, die Containerarchitektur zu verstehen. Lassen Sie uns eine kurze Beschreibung durchgehen. Ein Container ist eine Anwendung, die mit anderen Komponenten oder Abhängigkeiten wie Binärdateien oder bestimmten Sprachlaufzeitbibliotheken und Konfigurationsdateien gebündelt ist. Container haben ihre eigenen Prozesse, ihre eigenen Netzwerkschnittstellen und Mounts.

Container sind außerdem voneinander isoliert und laufen auf einer Container-Engine wie Docker, um eine einfache Portabilität und Flexibilität zu gewährleisten. Darüber hinaus teilen sich Container ein Betriebssystem und laufen auf einem der folgenden Betriebssysteme:

  • Linux-, Windows- und Mac-Betriebssysteme
  • Virtuelle Maschinen oder physische Server
  • Auf den Maschinen der Entwickler oder in Rechenzentren vor Ort
  • Die öffentliche Cloud

Es ist auch wichtig, die Rolle der Container-Engine zu verstehen, da sie wichtige Funktionen bereitstellt, darunter:

  • Virtualisierung auf Betriebssystemebene
  • Die Container-Laufzeit, die den Lebenszyklus des Containers verwaltet (Ausführung, Überwachung, Bildübertragung, Speicherung und Netzwerkanhänge)
  • Kernel-Namespaces, die zum Isolieren von Ressourcen verwendet werden

Ein Container-Image ist eine statische Datei mit ausführbarem Code und enthält alles, was ein Container zum Ausführen benötigt. Daher ist ein Container eine laufende Instanz eines Container-Images. C/C++test wird mit einem Beispiel-Container-Image ausgeliefert, genauer gesagt handelt es sich um eine Docker-Datei.

So erstellen Sie ein Container-Image

Teil 1 In diesem Beitrag wurden die Vorteile der Verwendung von Containern zum Bereitstellen eingebetteter Entwicklungs-Toolchains erläutert. Es wurde gezeigt, wie Parasoft C / C ++ test Professional für die Arbeit mit der in einem Container bereitgestellten Kompilierungs-Toolchain und Testausführungsumgebung konfiguriert wird.

Schauen wir uns nun an, wie Sie mit Parasoft C / C ++ Test Standard ein Container-Image erstellen. Ich werde ein einfaches Beispiel mit einer statischen Analyse im Container demonstrieren.

Stellen Sie den Parasoft C / C ++ - Teststandard in einem Docker-Container bereit

Als befehlszeilenbasiertes Tool eignet sich Parasoft C/C++test Standard für In-Container-Bereitstellungen. Es kann mit dem Compiler und dem Build-System in ein Container-Image gepackt und für CI/CD verwendet und auf den Desktops der Entwickler für die lokalen Befehlszeilenscans bereitgestellt werden. Das Bild unten zeigt die allgemeine Übersicht über dieses Setup:

Allgemeiner Überblick über den Workflow zur Bereitstellung des Parasoft C/C++test Standard in einem Docker-Container

Das Diagramm zeigt Jenkins, der einen containerisierten C / C ++ - Test verwendet, um eine statische Analyse durchzuführen. In diesem speziellen Setup werden der Parasoft C / C ++ - Test, die Kompilierungs-Toolchain und die Build-Tools in dem Container bereitgestellt, der in der oberen rechten Ecke des Diagramms angezeigt wird.

Der Container darunter unten rechts bietet die Ausführungsumgebung, die möglicherweise zur Ausführung von Laufzeitprüfungen erforderlich ist, z. B. Komponententests oder automatisierte Tests auf Systemebene.

Wenn wir nur statische Analysen implementieren möchten, wird unser Setup höchstwahrscheinlich nur einen Containertyp mit der Kompilierungs-Toolchain und dem Parasoft C / C ++ - Test enthalten.

Erstellen Sie ein Container-Image mit dem Parasoft C / C ++ - Test

Wenn Sie dies noch nicht getan haben, bitte Installieren Sie die neueste Version des Parasoft C/C++-Tests für Linux.

Um das Erstellen eines Container-Images mit dem C / C ++ - Test zu vereinfachen, wird die neueste Version mit einem Beispiel für die Docker-Datei geliefert. Sie finden diese Docker-Datei an folgendem Ort:

/ integration / docker / Dockerfile

Diese einfache Docker-Datei konzentriert sich nur auf die erforderlichen C / C ++ - Testschritte zum Erstellen des Images. In den meisten Fällen der realen Welt müssen Sie diese Datei mit Ihrer Docker-Datei zusammenführen.

Bevor wir den Inhalt im Beispiel Dockerfile analysieren, wollen wir sehen, wie es funktioniert. In meinem Beispiel wird die folgende einfache Dateistruktur angenommen:

style = ”Schriftgröße: 13px;”>$ HOME / sandbox / parasoft_cpptest_standard-2020.1.0-linux.x86_64.tar.gz

1. Entpacken Sie die C / C ++ - Testdistribution.

  • cd $ HOME / Sandbox
  • tar xzf parasoft_cpptest_standard-2020.1.0-linux.x86_64.tar.gz

2. Kopieren Sie die Beispiel-Docker-Datei aus der Distribution

  • cp cpptest / integration / docker

3. Bereiten Sie eine Eigenschaftendatei für den C / C ++ - Test mit den Informationen zur Lizenz vor. Wir verwenden die Standarddatei cpptestcli.properties als Basis und kopieren sie in unser Arbeitsverzeichnis:

  • cp cpptest / cpptestcli.properties

Bearbeiten Sie es, um die Informationen zu Ihrem Lizenzserverstandort einzufügen. Verwenden Sie Ihren bevorzugten Editor, um die Lizenzinformationen zu konfigurieren. Speichern Sie die Datei, wenn Sie fertig sind.

4. Bearbeiten Sie die Docker-Datei und kommentieren Sie die Zeilennummer 13 (die, in die die Datei cpptestcli.properties aus dem lokalen Verzeichnis an den Speicherort in den Containern kopiert wird). Die Zeile in der Docker-Datei sollte folgendermaßen aussehen:

  • KOPIEREN Sie cpptestcli.properties / opt / parasoft / cpptest

5. Jetzt können wir das Docker-Image erstellen. Führen Sie den Befehl aus, um das erste Image mit dem C / C ++ - Test zu erstellen. Der Bildname lautet "cpptest_ci_image".

  • Docker-Build -t cpptest_ci_image

Docker benötigt einige Zeit, um den Cache zu analysieren und das erforderliche Basis-Image herunterzuladen. Sobald dies erledigt ist, wird die C / C ++ - Testdistribution kopiert und in das Image installiert. Nach ein oder zwei Minuten sollte das Bild fertig sein. Bestätigen Sie dies, indem Sie den Befehl ausführen, um alle Bilder aufzulisten:

  • Docker-Bildliste

In der Ausgabe sollte oben "cpptest_ci_image" angezeigt werden. Großartig, also haben wir ein Bild erstellt und bereit. Jetzt ist es Zeit, es zu testen!

Testen Sie das Container-Image

Verwenden Sie für einen einfachen Test eine der in der Docker-Datei bereitgestellten Hilfs- / Beispielbefehlszeilen.

Verwenden Sie Ihren bevorzugten Editor, um die Docker-Datei zu öffnen, und scrollen Sie zum Ende der Dateien. Sie sollten einige Beispielbefehlszeilen wie diese sehen:

Beispiel-Befehlszeile in einer Docker-Datei

Verwenden Sie die Befehlszeile aus Zeile 26, um eine statische Analyse innerhalb des Containers für eines der mit der Distribution gelieferten C / C ++ - Testbeispiele auszuführen.

Da wir uns entschieden haben, die Datei cpptestcli.properties mit den Lizenzinformationen in den Container einzubauen, können wir die Befehlszeile vereinfachen und die Option -settings entfernen. Die Befehlszeile für den Test sollte so aussehen:

  • Docker-Lauf –rm -v $ PWD: $ PWD -w / opt / parasoft / cpptest / examples / ATM cpptestcli -compiler gcc_9-64 -modul. -trace alles sauber machen

Voila! Die statische Analyse wurde im Container durchgeführt. Die Ergebnisse wurden auf der Konsole gemeldet.

Wir könnten das Tool noch weiter konfigurieren, um den HTML-Bericht im lokalen Dateisystem zu erstellen, aber das ist eine andere Geschichte. Unser Hauptziel bestand darin, den Container mit C/C++test darin zu erstellen und ihn für die Ausführung einer statischen Analyse zu konfigurieren. Wir haben das Ziel erreicht.

Richten Sie einen CI-Server mit statischer Analyse ein

Wenn Sie einen CI-Server mit einrichten müssen statische Analyse Als Teil des Prozesses ist Ihre Aufgabe viel einfacher. Greifen Sie einfach auf den Container zu. Gleiches gilt, wenn Entwickler in Ihrem Team statische Analysen durchführen möchten.

Müssen Sie Parasoft C/C++test auf die neueste Version aktualisieren? Laden Sie einfach die Distribution herunter, erstellen Sie Ihr Container-Image neu und fertig! Das Team und die automatisierte Infrastruktur werden diesen Vorgang nicht einmal bemerken. Reibungslos, einfach und bei Bedarf reversibel.

Informationen zum Dockerfile-Inhalt

Bevor wir fertig sind, schauen wir uns den Inhalt der Docker-Datei an, die mit dem Parasoft C / C ++ - Test geliefert wurde, der gerade zum Erstellen unseres Images verwendet wurde. Das Bild unten zeigt den Inhalt von / integration / docker / Dockerfile.

Beispielinhalt der mit Parasoft C/C++test gelieferten Docker-Datei

Hier sind die Details:

  • Linie 2 Gibt den Docker-Hub des GCC-Images an, auf dem das Container-Image basiert.
  • Linie 4 Richtet das Arbeitsverzeichnis für nachfolgende Befehle ein, die in diesem Skript ausgeführt werden.
  • Linie 7Wir kopieren die C / C ++ - Testverteilung (Archiv) in das Container-Image.
  • Linie 10 extrahiert die Verteilung in den Speicherort im Container: / opt / parasoft (beachten Sie den Befehl WORKDIR in Zeile 4).
  • Linie 13 Kopiert die angepasste Datei cpptestcli.properties aus dem lokalen Verzeichnis in die In-Container-Installation von C / C ++. Dieser Schritt ist optional und standardmäßig auskommentiert. In den meisten Fällen möchten Sie einige Eigenschaften in die Installation des C / C ++ - Tests einbetten. Das typischste Szenario ist die Lizenzkonfiguration, die den Speicherort des Lizenzservers, Anmeldeinformationen usw. enthält.
  • Linie 16 Entfernt das Distributionsarchiv. Dies ist nur eine Bereinigung.
  • Linie 18 setzt das Arbeitsverzeichnis auf / home zurück (optional)
  • Linie 19 Gibt die ausführbare Datei an, die ausgeführt werden soll, wenn der Container gestartet wird.

Dies ist alles, was zum Erstellen eines einfachen Containers mit Parasoft C / C ++ - Test erforderlich ist, der zur Ausführung einer statischen Analyse bereit ist.

Wie bereits erwähnt, handelt es sich hierbei um eine einfache Docker-Datei. Es wurde der Produktverteilung hinzugefügt, um Ihnen ein Beispiel dafür zu geben, was Sie möglicherweise zum Erstellen eines Container-Images für Ihre Umgebung benötigen. Sie müssen es an Ihre Bedürfnisse anpassen oder mit vorhandenen Docker-Dateien zusammenführen.

Sehen Sie, wie Container und Parasoft C/C++test in Ihre CI/CD-Pipeline passen und die Produktivität steigern.