Parasoft C / C ++ test
Ausführen statische Analyse, Unit-Tests und Code-Coverage um hochwertigen C- und C++-Code zu entwickeln, der robust, sicher und konform mit Industriestandards ist.
Strukturelle Codeabdeckung ist die Identifizierung von Code, der ausgeführt und protokolliert wurde, um festzustellen, ob das System angemessen getestet wurde.
Die Codeabdeckung drückt den Grad aus, in dem der Quellcode der Anwendung von allen Testpraktiken, einschließlich Einheitentests, manuellen Tests, automatisierten Funktionstests und dergleichen, ausgeübt wird. Es auch:
Infolgedessen bietet die Anwendungsabdeckung einen äußerst aussagekräftigen Einblick in das Risiko. In den meisten Organisationen sind Unit-Tests das primäre Mittel für die Fahrabdeckung. Und obwohl Unit-Tests eine wertvolle Testpraxis sind, die auch mehrere prozessorientierte Vorteile bietet, ist es auch teuer in Bezug auf das Fachwissen und die Zeit, um die Tests zu erstellen, zu verwalten und zu warten.
Die Codeabdeckung kann als Teil des Continuous Integration (CI)-Prozesses sowie als Teil des Entwickler-Desktop-Workflows genutzt werden. Sie können auch erweiterte Analysen des Quellcodes durchführen und anhand der vom Entwickler vorgenommenen Codeänderungen ermitteln, welche Komponententests erneut ausgeführt werden müssen.
Diese Code-Coverage-Tools sind besonders nützlich in Branchen für die eingebettete Entwicklung von sicherheits- und sicherheitskritischen Anwendungen, in denen Softwaresysteme nicht ausfallen können oder Menschenleben verloren gehen.
Die Gründlichkeit der Abdeckung in sicherheitskritischen Systemen hängt von der in verschiedenen Branchen verwendeten Metrik für die Anwendungssicherheitsintegritätsstufe (SIL oder ASIL) und der in der Avionik üblichen Entwicklungssicherheitsstufe (DAL) ab. Gründlichkeit bezieht sich auf die strukturellen Elemente im Code. Diese werden typischerweise in Code-Anweisung, Verzweigung, modifizierte Bedingungsentscheidungen und aufgeschlüsselt Mit Parasoft können Sie auch auf eine viel feinere Ebene der Abdeckungsgranularität aufschlüsseln, wie der Objektcode oder die Assemblersprache.
Die Codeabdeckung wird häufig durch Codeinstrumentierung identifiziert oder gemessen. Dies erfolgt durch Anreichern des Quellcodes mit zusätzlichem Verfolgungscode, um während der Ausführung festzustellen, ob jede Anweisung, Verzweigung und/oder der Entscheidungspfad für modifizierte Bedingungen (MC/CD) ausgeführt wurde.
Es ist wichtig zu wissen, dass die Code-Instrumentierung Code-Bloat verursacht. Die Zunahme der Codegröße ist normalerweise kein Problem. Bei eingebetteten Zielen mit Speicherbeschränkungen kann sich die Erhöhung auf die Fähigkeit auswirken, den Code zum Testen auf Ihre Zielhardware zu laden.
Die prozentualen Ziele für die Codeabdeckung können in einigen Fällen subjektiv sein. In anderen Fällen sind sie obligatorisch. Beim Erstellen sicherheitskritischer Anwendungen, bei denen ein Versagen zum Tod führen kann, erfordern behördliche und branchenspezifische Standards eine 100-prozentige Abdeckung struktureller Vorschriften.
Bei Anwendungen, die nicht sicherheitskritisch sind, wird die Codeabdeckung in der Regel der Entwicklungsorganisation überlassen. Das übliche Komfortniveau für diese Art von Umständen ist das Erreichen eines Ziels von 80 % Codeabdeckung.
Stellen Sie die Produktsuite von Parasoft bereit, um die strukturelle Codeabdeckung von Anwendungen durchzuführen, die in C, C ++, Java, C # und VB.NET geschrieben wurden.
Sammeln Sie die Abdeckung von Unit-Tests, Systemtests, manuellen Tests sowie allen anderen verwendeten Testausführungsmethoden. Parasoft C/C++test unterstützt eine Reihe von Abdeckungsmetriken (Branch, Statement, MC/DC usw.), die Teams in der nativen und anwendungsübergreifenden Entwicklung verwenden können.
Demo anfordernErfassen und überwachen Sie die Codeabdeckung während manueller oder automatisierter Funktionstests, die in Ihrer Java-Anwendung durchgeführt werden. Benutzer können Abdeckungsdaten und Testergebnisse senden, um sie zur Analyse zusammenzuführen und zu korrelieren, was Einblicke in die Testqualität der Anwendung und Ihre Testqualität bietet.
Demo anfordernSammeln Sie Informationen zur Codeabdeckung für Standalone- und Webanwendungen, die in C# und VB.NET geschrieben wurden. Installieren Sie die überwachte Anwendung auf demselben Computer, auf dem dotTEST installiert ist, oder auf einem anderen Computer.
Demo anfordernDie Ermittlung der Codemenge, die während des Testens ausgeführt wird, ist eine leistungsstarke Metrik, um das in der Anwendung verbleibende Risikoniveau zu verstehen. Hier sind einige Best Practices, die Sie befolgen sollten.
Die Integration von Tests und Codeabdeckung in Ihr Build-System erhöht die Effizienz, fördert die Zusammenarbeit und bietet mehr Transparenz über Ihren gesamten Softwareentwicklungslebenszyklus.
Nutzen Sie Ihre Systemtests, um Codeabdeckung zu erhalten und fehlende Tests zu identifizieren, die versteckte Fehler aufdecken können.
Verlieren Sie keine Zeit damit, alle Eingabewerte und Vorbedingungen zu bestimmen, die in einem Testfall erforderlich sind, um eine schwer fassbare Anweisung, Verzweigung oder MC/CD-Codezeile abzudecken. Nutzen Sie den Deckungsratgeber.
Verwenden Sie die verschiedenen Testmethoden, die Sie durchführen müssen, um Ihre Abdeckungsanforderungen zu beschleunigen. Die aggregierte Abdeckung kann aus System-, Integrations-, Einheiten- und manuellen Tests erhalten werden.
Parasoft-Lösungen können Unit-Testfälle automatisch analysieren und generieren, um Null-Zeiger-Probleme, Grenzwertbedingungen, Division durch Null und viele andere Arten von Fehlern auszuschließen. Darüber hinaus können diese Testfälle aktiviert werden, um eine Codeabdeckung zu erzeugen und in einigen Fällen eine strukturelle Codeabdeckung von bis zu 90 % zu erreichen.
Code-Instrumentierung verursacht Code-Bloat und die Zunahme der Codegröße kann sich auf die Fähigkeit auswirken, den Code zum Testen auf Ihre speicherbeschränkte Zielhardware zu laden. Instrumentieren Sie Teile Ihres Codes gleichzeitig, führen Sie Ihre Tests durch und aggregieren Sie Ihre Abdeckungsmetriken aus jedem Lauf.
Wenn Sie eine 100%ige strukturelle Codeabdeckung erfüllen müssen, aber defensiven Code haben, der nur ausgeführt wird, wenn das System in einen Fehlerzustand eintritt, der Wochen, Monate oder sogar Jahre (oder vielleicht nie) dauern kann, verwenden Sie Ihren Debugger, um die erforderlichen Bedingungen zu simulieren und Durchführen einer visuellen Inspektion der Codeausführung/-abdeckung.
Wenn Code gefunden wird, weil er keinen Weg zu seiner Ausführung hat, stellen Sie aus Sicherheitsgründen sicher, dass er gelöscht wird und niemals ins Feld gelangt.
Parasoft-Codeabdeckung innerhalb der IDE- und DTP-Dashboard-Berichts- und Analyselösungen.
Um mit der Erfassung der Codeabdeckung zu beginnen, machen Sie sich mit Ihren Abdeckungsanforderungen vertraut. Möglicherweise erfordern Ihre Branche und Art der Anwendung keine Abdeckungsmetriken, aber Sie möchten die Codequalität sicherstellen oder verbessern, daher könnten 75 % Ihr erstes Ziel sein.
Wenn Ihre Branche die Einhaltung eines funktionalen Standards wie DO-178C für die Avionik oder ISO 26262 und ISO 21434 für die Automobilindustrie oder IEC 62304 für die Medizintechnik erfordert, bestimmen Sie, ob Sie eine 100-prozentige Codeabdeckung benötigen oder ob ein anderer Prozentsatz der Codeabdeckung empfohlen wird. Informieren Sie sich auch darüber, welchen strukturellen Codeabdeckungstyp Sie erfüllen müssen. Es könnte die Funktion, Zeile, Anweisung, Block, Aufruf, Pfad, Entscheidung, einfache Bedingung, MC/DC, Objekt/Assembly oder eine Kombination davon sein.
Eine der einfachsten Möglichkeiten, Codeabdeckung zu erhalten, ist während der Implementierung, wenn Ingenieure Unit-Testfälle erstellen, um ihren Code zu testen. Mit Lösungen wie Parasoft C/C++test und Jtest,
Beachten Sie, dass das Instrumentieren des Codes zu Code-Bloat führen kann, und wenn Sie auf Zielhardware testen, müssen Sie möglicherweise eine Teilinstrumentierung durchführen. Instrumentierter Code kann auch die Leistung der Ausführung verändern, daher sollten Sie sich mit verschiedenen Optimierungsfunktionen vertraut machen, die Ihnen zur Verfügung stehen.
Das Erfassen und Melden Ihrer Codeabdeckungsmetriken ist von entscheidender Bedeutung. Es gibt mehrere Methoden, je nachdem, ob Ihre Anwendung auf einem eingebetteten Ziel oder einem vollständig mit Ressourcen ausgestatteten System oder Server ausgeführt wird.
Letztendlich werden Sie Abdeckungsdaten abrufen oder zusammenführen, um Ihre vollständigen Metriken zur Codeabdeckung zu erhalten. Abdeckungsberichte können von Ihrer IDE generiert und in das Berichts- und Analyse-Dashboard DTP von Parasoft exportiert werden. In DTP können Benutzer die Bereiche mit hohem Risiko visuell inspizieren, verstehen, was als Nächstes angegangen werden sollte, und Compliance- und Auditberichte erstellen.
Die Lösung von Parasoft für die Code-Coverage liefert kritisches Feedback über die Vollständigkeit und Gründlichkeit des Testprozesses, indem sie Tests und strukturelle Code-Coverage-Ergebnisse korreliert. Sie können diese Ergebnisse oder Metriken verwenden, um die Vollständigkeit von Tests auf Unit-, Integrations- und Systemebene durch unsere Unterstützung aller wichtigen Arten der Codeabdeckung (Funktion, Aufruf, Zeile, Anweisung, Block, Pfad, Entscheidung, einfache Bedingung und MC/ DC), einschließlich Objekt-/Baugruppenabdeckung.
Coverage-Ergebnisse sind direkt in der IDE verfügbar, mit bequemen Ansichten und Hervorhebungen im Quellcode-Editor sowie in Form von statischen HTML- oder PDF-Berichten und dynamischen Berichten über das zentralisierte Berichts-Dashboard von Parasoft.
Benutzer können Anwendungen überwachen, die nativ auf dem Desktop, plattformübergreifend mit Simulatoren oder auf echter Embedded-Hardware ausgeführt werden. Das Coverage-Modul von C/C++test ist optimiert, um die Auswirkungen auf die Ausführungsleistung und den binären Footprint des Tests zu minimieren, wodurch es für den Einsatz mit serverbasierten High-End-Anwendungen sowie sehr eingeschränkten Systemen auf Basis von 16-Bit . geeignet ist Mikrocontroller.
In Verbindung mit der Process Intelligence Engine von Parasoft profitieren Anwender von der Testauswirkungsanalyse. Für jeden durchgeführten Test, einschließlich manueller, systembasierter oder UI-basierter Tests, werden Tests nicht nur für Test/Fail und Ergebnisse, sondern auch für ihre Auswirkungen auf die Codebasis aufgezeichnet.
Jeder weitere Test wird mit diesen vorhandenen Informationen überlagert, wodurch ein vollständiges Bild von Testerfolg und -abdeckung entsteht. Wenn Code geändert wird, sind die Auswirkungen auf den zugrunde liegenden Datensatz deutlich sichtbar und heben Coverage-Tests hervor, die jetzt fehlschlagen oder Code, der jetzt nicht getestet wurde. Die Erhebung dieser Informationen in verschiedenen Detailgraden ermöglicht es Entwicklern und Testern, schnell zu erkennen, was für den nächsten Testlauf geändert/korrigiert werden muss.
Mit Parasoft können sich Teams auf die Codeabdeckung für die Bereiche der aktiven Entwicklung konzentrieren, anstatt auf die gesamte Codebasis, was insbesondere bei der Arbeit mit Legacy-Codebasen problematisch sein kann. Anstatt nur zu versuchen, eine Abdeckungsnummer für die gesamte Codebasis zu erreichen, hilft Ihnen Parasoft dabei, die Teile des Codes zu lokalisieren, die sich ändern.
Das Reporting-Dashboard von Parasoft korreliert die Daten von C/C++test mit beobachteten Änderungen in der Codebasis, um das Entwicklungsteam darauf zu konzentrieren, eine höhere Codeabdeckung für diese spezifischen, modifizierten Teile der Codebasis zu erreichen. Mit Parasoft können Sie die Auswirkungen von Änderungen minimieren, indem Sie die Änderung selbst effizient verwalten.
Strukturelle Codeabdeckung ist die Identifizierung von Code, der ausgeführt und protokolliert wurde, um festzustellen, ob das System ausreichend getestet wurde. Die Codeabdeckung drückt den Grad aus, in dem der Quellcode der Anwendung durch alle Testverfahren, einschließlich Komponententests, manueller Tests, automatisierter Funktionstests usw., verwendet wird. Dies ermöglicht genauere Qualitäts- und Abdeckungsmetriken, während toter Code, ungetestete oder nicht getestete Teile der Anwendung aufgedeckt werden. Infolgedessen bietet die Anwendungsabdeckung äußerst aussagekräftige Einblicke in das Risiko. In den meisten Organisationen sind Unit-Tests das primäre Instrument für die Abdeckung des Fahrens.
Die Codeabdeckung sollte durch Ihre Anforderungen oder Ziele für die Abdeckungsanforderungen bestimmt werden. Müssen Sie einen funktionalen Sicherheitsstandard (DO-178C für Avionik oder ISO 26262 für Automotive oder IEC 62304 für Medizintechnik) erfüllen, der eine Abdeckung von 100 % vorschreibt oder empfiehlt? Oder vielleicht möchten Sie einfach nur Ihre Codequalität verbessern, also könnten 60 % Ihr erstes Ziel sein. Bestimmen Sie außerdem, welchen Coverage-Typ des strukturellen Codes Sie erfüllen müssen. Dies können Aufruf, Zeile, Anweisung, Block, Funktion, Pfad, Entscheidung, einfache Bedingung, MC/DC, Objekt/Assembly oder eine Kombination davon sein.
Wir empfehlen eine Codeabdeckung von mindestens 60 %, die leicht zu erreichen sein sollte. Dies wird Ihnen etwas Trost geben, aber zu wissen, dass 40% des Codes nicht getestet wurden, kann Ihnen einige schlaflose Nächte bescheren.
Einige empfehlen 70-80%, aber der beste Weg, um festzustellen, ob Sie Ihren Abdeckungsprozentsatz erhöhen müssen, basiert auf der Anzahl der identifizierten Fehler. Wenn es sich um eine hohe Zahl handelt, ist die Codequalität ein Problem, und wir empfehlen, die Codeabdeckung zu erhöhen. Seien Sie sich bewusst, dass selbst bei einer 100%igen Codeabdeckung keine Garantie dafür ist, dass alle Fehler identifiziert wurden. Es bietet nur eine Reduzierung des Risikos.
Ja, eine 100%ige Codeabdeckung ist möglich. Dies erreichen Sie durch die Aggregation verschiedener Testmethoden und durch die Beobachtung der Codeausführung mit Ihrem Debugger. Unit-Tests können Sie beispielsweise Ihrem 100 %-Ziel sehr nahe bringen, aber für Codezeilen, deren Ausführung sehr spezifische Umstände erfordert, wie z. B. defensiver Code, kann es Wochen, Monate, Jahre dauern, oder Sie erreichen dieses Ereignis nie . Wenn Ihr Coverage-Tool keine Möglichkeit bietet, eine 100 %ige Codeabdeckung zu erreichen, können Sie Ihren Debugger verwenden und in einigen Fällen die Aufrufliste bearbeiten und den aufgedeckten Code durch Sichtprüfung durchgehen.
Zu wissen, dass Ihre Tests keinen ungetesteten Code ausgelassen haben, ist Ihr Signal. Ihre Ziele für die Analyse der Codeabdeckung sollten jedoch auf allen Compliance-Anforderungen oder dem Ziel Ihres Unternehmens basieren, die Codequalität zu verbessern. Wenn die Anforderung 100 % Anweisungsabdeckung, Zweigabdeckung und MC/DC-Abdeckung ist, ist dies Ihr Ziel. Wenn Sie alle Ihre Codezeilen getestet und den Prozentsatz der Abdeckung erreicht haben, den der Vertrag fordert, sind Sie fertig. Bedenken Sie, dass Open-Source-Tests nicht so genau oder zuverlässig sind wie professionell entwickelte Testtools. Daher sollten Sie zertifizierte Tools verwenden, wie sie Parasoft anbietet.
Absolut! Die Testautomatisierungslösungen von Parasoft verfügen über eine Integration in Azure-Pipelines und mit anderen Tools wie GitHub, GitLab, Jira und anderen, die Ihren Continuous Integration- und Continuous Delivery-Workflow automatisieren. Die Integrationen bieten Flexibilität, wie die Verwendung der Befehlszeilen-API, um nicht nur Code-Coverage-Tests, sondern alle Ihre Softwaretests durch Aufrufen all Ihrer Testsuiten zu automatisieren.