logo

Software-Testing-Papers Library

Security für vernetzte Medizingeräte

Royd Lütke und Artur Hirsch

Viele Medizingeräte enthalten Mikrocontroller und werden durch Software gesteuert. Je nach Einsatzbereich und Kritikalität sind die Anforderungen an die Softwarequalität durchaus unterschiedlich. Man beurteilt die Programme hinsichtlich ihrer funktionalen Sicherheit (Safety) sowie ihrer Sicherheit gegenüber Angriffen von außen (Security).Die Bedeutung der funktionalen Sicherheit für in der Medizin eingesetzte Geräte ist klar. Seit der Vernetzung dieser Geräte rückt jedoch der Bedarf an Sicherheit gegen Angriffe mehr in den Fokus. © 2025   Download

Software-Qualität: Statische Code-Analyse und dynamische Tests - Komplementäre Methoden zur Qualitätssicherung

Klaus Lambertz

Um eine gute Softwarequalität zu gewährleisten, werden während der Softwareentwicklung zwei sich ergänzende Verfahren eingesetzt: Statische Code-Analyse und dynamische Tests in Verbindung mit Code-Coverage-Messungen. Dieses Papier zeigt die Vorteile und Grenzen beider Methoden auf und erklärt, warum statische und dynamische Tests einander ergänzen und beide notwendig sind, um eine hohe Softwarequalität zu gewährleisten. © 2024   Download

ISO/SAE 21434 "Road vehicles – Cybersecurity Engineering"

Christian Simco

Mit zunehmender Vernetzung und Komplexität von Fahrzeugen steigt der Umfang der Software stetig. 100 Millionen Codezeilen sind für herkömmliche Automobile Standard. Für autonome Fahrzeuge werden bis zu 300 Millionen Codezeilen benötigt. Mit der Konnektivität und Komplexität wächst auch die Angriffsfläche für Cyberattacken. Das Ziel von ISO/SAE 21434 ist es, diese Sicherheitsbedrohung zu bekämpfen und die Cybersicherheitstechnik von Automobilsoftware zu verbessern. Die 2021 herausgegebene Norm ist eine Ergänzung der ISO-Norm 26262 und soll Ziele, Anforderungen und Richtlinien für die Sicherung elektrischer und elektronischer Systeme in Kraftfahrzeugen definieren. © 2022   Download

Die Testabdeckung messen: 10 Kriterien zur Auswahl eines Code-Coverage-Tools

Klaus Lambertz

Speziell in der sicherheitskritischen Softwareentwicklung schreiben Branchennormen genaue Anforderungen für die Code Coverage vor, so dass Produkte hier ohne den Nachweis einer ausreichenden Testabdeckung nicht zertifiziert werden können. Aber auch bei anderen Entwicklungsprojekten legen Unternehmen zunehmend großen Wert auf Software-Qualität und messen die Code Coverage. Zur Messung der Code Coverage sind am Markt unterschiedliche Code Coverage Analyzer verfügbar. Die Lösungen unterscheiden sich im Handling und in der Qualität teils deutlich. Wir haben deshalb zehn grundsätzliche Kriterien für die Auswahl eines Code-Coverage-Tools zusammengestellt: © 2021   Download

Software-Qualität mit statischer Analyse und dynamischen Tests steigern

Klaus Lambertz

Gute Software erfüllt die erwartete Funktionalität, ist sicher, zuverlässig und gut wartbar. Es ist wichtig, dass Software möglichst keine Fehler hat, damit sowohl die Funktionale Sicherheit (engl. Safety), als auch die Angriffssicherheit (engl. Security) sichergestellt ist. Hierzu kommen während der Softwareentwicklung idealerweise zwei unterschiedliche Verfahren zum Einsatz, die komplementär sind: die statische Code-Analyse und das Testen zur Laufzeit, auch dynamische Analyse genannt. Beide Methoden decken verfahrensbedingt nur einen Teil der vorhandenen Probleme auf. Erst wenn sie gemeinsam genutzt werden, kann die Qualität der Software entscheidend gesteigert werden. © 2021   Download

Gemeinsam zum Erfolg: Statische Codeanalyse und dynamische Tests

Royd Lüdtke

Softwareentwicklern stehen zwei Techniken zum Testen von Software zur Verfügung: dynamische Tests und die statische Codeanalyse. Erst wenn beide Methoden kombiniert werden, lassen sich Fehler in der Software weitgehend ausschließen. Um die Qualität sicherzustellen, werden zwei Methoden unterschieden: statische Codeanalyseverfahren und das Testen lauffähiger Software während der dynamischen Analyse – unter anderem mit Unit-Tests. Beide Verfahren sind komplementär – jeder der beiden Ansätze deckt verfahrensbedingt jeweils nur einen Teil der vorhandenen Fehler auf. Größte Fehlerfreiheit kann erst im Zusammenspiel von statischer und dynamischer Analyse erreicht werden. © 2021   Download

Fehlerfreie Software mit statischer Code-Analyse und dynamischen Tests

Royd Lüdtke / Roland Person

Um eine gute Softwarequalität zu gewährleisten, ist eine Kombination von statischer Analyse und hinreichendem Testen zur Laufzeit (dynamische Tests) in Verbindung mit einer Messung der Testabdeckung erforderlich. Unser Praxisbeispiel zeigt, warum beide Verfahren zur Absicherung der Softwarequalität genutzt werden müssen und warum die Konzentration auf nur eine Test- oder Analyseform gefährliche Konsequenzen haben kann. © 2021   Download

Testreihung mit allen Tricks

Grünfelder, Stephan und Luckeneder, Christoph

Reihung von automatischen Tests für komplexe Embedded-Systeme
Viele Firmen haben über mehrere Jahre automatisierte (Firmware-)Systemtests akkumuliert. Die Tests laufen oft auf proprietären, teuren Anlagen. Auch automatische Testdurchführung benötigt Zeit, mitunter viel Zeit. Wenn der Zeibedarf für einen vollständigen Durchlauf hoch wird, dann wird man versuchen die Tests so zu reihen, dass die Tests mit der höchsten Fehlerfindungswahrscheinlichkeit zuerst drankommen. Das ist zwar naheliegend, aber oft gar nicht so einfach. Das übergeordnete Ziel ist, die Zeit vom Start der Testsuite bis zum ersten Bugreport zu minimieren. Dieser Artikel beschreibt, wie man hier vorgehen kann. Es wird ein einfacher Lösungsansatz vorgestellt, der selbst für verteilte Echtzeit-Systeme anwendbar ist. © 2020   Download

Embedded-Anbieter im Dilemma zwischen Marktdruck und Verantwortung: Wie können Software-Testwerkzeuge helfen?

Klaus Lambertz / Royd Lüdtke

Bei der Entwicklung von Embedded Devices und Embedded Software gilt wie in vielen anderen Projekten das Modell des magischen Dreiecks, in dem Sachziele bzw. Qualität mit Kosten und Zeit in Beziehung gesetzt werden. Vor dem Entwicklungsstart werden die drei Größen definiert und priorisiert. Es wird festgelegt, welche Sachziele man bis zu welchen Terminen mit welchem Budget umsetzen will. Wird später eine der drei Größen verändert, hat das direkte Auswirkungen auf die beiden anderen Größen. Bei der Entwicklung von Embedded Software können vor allem die Qualität und die Produktivität (Zeit) durch geeignete Software(test)-Werkzeuge positiv beeinflusst werden. © 2020   Download

Wegweiser zur Auswahl eines Werkzeuges zur statischen Codeanalyse

Royd Lüdtke

Werkzeuge zur statischen Codeanalyse ermöglichen das Auffinden von Softwarefehlern bereits früh im Entwicklungsprozess und tragen damit dazu bei Kosten und Risiken eines Projektes zu minimieren. Die auf dem Markt erhältlichen Tools unterscheiden sich zum Teil erheblich hinsichtlich Preis und Leistung. Es ist daher nicht einfach das geeignete Werkzeug für einen definierten Einsatzbereich auszuwählen. Das vorliegende Dokument zeigt einige Beurteilungskriterien auf, die Sie dabei unterstützen können, sich für ein zu Ihrem Projekt passendes Werkzeug zu entscheiden. © 2020   Download

Wie Imagix 4D das Verständnis von Programmen auf Quelltextebene unterstützt

Baltzer, Jan-David

Mit wachsender Laufzeit von Softwareprojekten steigen typischerweise deren Umfang und Komplexität. Damit wird es auch zusehends aufwendiger den Überblick zu behalten, sei es zur Wartung, Erweiterung oder Verifikation gegen bestehende und veränderte Anforderungen. Verstärkt wird dies zudem durch Fluktuationen in der Belegschaft und der Einbindung von zusätzlichen Programmteilen, sei es zugekauft, frei zugänglich oder aus bestehenden Projekten. Diese Arbeit zeigt, wie Imagix 4D dabei unterstützt unbekannten Quelltext zu erkunden und zu verstehen. Nach einer Einführung in den Kontext der Problemstellung folgen Erörterungen verschiedener Methoden von Imagix 4D und wie diese zur Lösung beitragen. © 2019   Download

Static Analysis: Detect bottlenecks - Identify problems with the cache usage

Royd Lüdtke

The use of the cache has a considerable impact on the overall system performance, even with small targets. This efficiency plays an important role, in particular in regard to real-time applications. Possibilities for optimisation should already be found in a very early phase of the software development lifecycle. The sooner the bottleneck is recognised, the easier and cheaper it can then also be removed. A procedure is suited for this task, which actually should be established in every development team: Static code analysis. With its use, it is possible to root out problems involving the cache usage and to remove them. © 2019   Download

Grundlagen der Code-Coverage-Messung

Sabine Poehler

Dieser Beitrag bietet Neuanwendern einen Einstieg in das Thema „Code Coverage“. Neben einem systematischen Überblick über die verschiedenen theoretischen Ansätze werden konkrete Entscheidungshilfen für den Einsatz von Coverage Werkzeugen diskutiert. Der Nachweis der Code Coverage wird für den Test sicherheitskritischer Software in einer Reihe von Sicherheitsnormen gefordert oder empfohlen. Dabei werden, abhängig von der Sicherheitsklasse der Software, verschiedene starke Coverage Maße festgelegt. ... © 2019 Download

Testabdeckung und Penetration Testing: Code Coverage zeigt Angriffsvektoren auf

Sabine Poehler

Die Messung der Testabdeckung ist ein unverzichtbarer Standard, wenn es um die funktionale Sicherheit von Embedded-Systemen geht. Doch haben die dafür genutzten Code-Coverage-Analyzer noch einen weiteren Nutzen, der wenig bekannt ist: Code Coverage ist sehr hilfreich, um im Rahmen des Penetration Testings Schwachstellen im Code zu erkennen und in ihrer Brisanz zu bewerten. Vor allem innerhalb des Entwicklungszyklus können die Programmierer und Teamleiter so frühzeitig Sicherheitslücken aufdecken und zeitnah schließen. © 2019   Download

Code Coverage auf Embedded Devices: Testabdeckung bei kleinen Targets

Klaus Lambertz

Auch bei Embedded-Geräten muss die Software hinreichend getestet werden, bevor das Produkt marktreif ist. Die Überwachung des Testfortschritts, die von vielen Sicherheitsnormen gefordert wird, ist hier jedoch nicht ganz trivial. Denn oft sind die Ressourcen der Targets limitiert, Speicher und Prozessor können durch die Code Coverage an ihre Grenzen stoßen. Doch mit etwas Kreativität ist es möglich, auch im Embedded-Bereich die Testabdeckung zu erfassen und nachzuweisen. © 2018   Download

Effizientes Auffinden von Nebenläufigkeitsfehlern durch statische Codeanalyse

Royd Lüdtke

Die zunehmende Verbreitung moderner Multicore-Prozessoren ist mit der Forderung nach nebenläufiger Software verbunden, die derartige Hardwarearchitekturen optimal auszunutzen versteht. In nicht unerheblichem Maße gilt das auch im embedded Umfeld. Softwareentwickler und –Tester müssen sich neuen Herausforderungen stellen. Kann die Softwarequalität von single-threaded Applikationen durch Code-Review und dynamische Testverfahren noch hinreichend gesichert werden, reichen diese Testmethoden für multithreaded Applikationen meist allein nicht mehr aus. © 2014   Download

Bug-Hunting mit statischer Codeanalyse

Daniel Fischer

Statische Testverfahren zählen zu den analytischen SW-Qualitätssicherungsverfahren. Neben Komplexitätsmetriken, Architektur- und WCET-Analysen stellt insbesondere die statische Codeanalyse eine effiziente Möglichkeit dar, um Software-Bugs zu finden, welche durch dynamische Testverfahren (Whige-Box- und Black-Box-Testing) nicht entdeckt wurden. Dieser Artikel enthät einen Vergleich der Werkzeuge CppCheck, Lint und CodeSonar. © 2013   Download

Testwell CTC++: Code Coverage for safety-critical Embedded Systems

Daniel Fischer

Software for embedded systems is often used in safety-critical systems. In this area malfunctions could lead to accidents or damages of high magnitude and even to loss of lives. Therefore, security standards such as the DO178-C (aviation), the ISO 26262 (automotive) or the EN 50128 (railway) demands harsh proff of code coverage. In dependency to the ciritcality, a suitable level of code coverage has to be applied. © 2013   Download

Statische Codeanalyse

Feder, Fabian

Automatisierte Codeüberprüfung ist mittlerweile Stand der Technik. Sie wird in vielen Bereichen der Softwareentwicklung eingesetzt, von Embedded Anwendungen bis hin zu großer Unternehmenssoftware. Im sicherheitskritischen Bereich ist es jedoch notwendig zu beweisen, dass die Tests korrekte Ergebnisse liefern. Dies ist mit der "statischen Codeanalyse" möglich. © 2012   Download

Code-Coverage auf Embedded-Systemen

Fischer, Daniel

Die Testabdeckung sowie der Testfortschritt lassen sich mittels Code-Coverage quantitativ bestimmen. Je nach Kritikalität des Embedded Systems sind dabei verschiedenartige Coveragestufen (Anweisungs- und Zweigüberdeckung, Modified Condition/Decision Coverage) anzuwenden. Zur Messung dieser Coveragestufen ist der Code zu instrumentieren und auf dem Host oder Target möglichst mittels automatisierten Tests auszuführen. Bei der Instrumentierung des Codes entstehen bei kleinen eingebetteten Systemen verschiedenartige Herausforderungen. Neben der Begrenzung durch RAM und ROM sollte beispielsweise das Zeitverhalten kaum oder nur gering beeinflusst werden. Im Rahmen des Papers wird auf die verschiedenen Coveragestufen und die Instrumentierung eingegangen. Die Probleme die dabei bei eingebetteten Systemen entstehen werden aufgezeigt und Lösungsmöglichkeiten dargestellt. © 2012   Download

Automatisches Erkennen von Data Races

Grünfelder, Stephan

Race Conditions sind eine besonders unangenehme Art von Programmfehlern. Sie können überall dort auftreten, wo Software nicht nur rein sequenziell abgearbeitet wird, sondern zumindest zum Teil parallel. Das betrifft also fast alle Anwendungen mit Betriebssystemen und auch Software, die mit Interrupt Service Routinen arbeitet. Race Conditions treten nur sporadisch auf und sind besonders schwer zu erkennen. Dieser Artikel zeigt wie Race Conditions durch Software-Werkzeuge erkannt werden können und demonstriert den Einsatz eines solchen Werkzeugs beim Test eines Echtzeit-Betriebssystems. © 2012   Download

TTCN-3

Schlegel, Andreas

Das Testen komplexer Systeme, besonders im Bereich verteilter Systeme, gestaltet sich oft sehr schwierig. Dies ist bedingt durch das Zusammenwirken verschiedener Komponenten mit unterschiedlicher Hardware und Plattformen. Für diese Komponenten werden die selben Testfälle entwickelt, jedoch aufgrund der Unterschiede meistens für jede Komponente einzeln implementiert. Dies verursacht einen erheblichen Mehraufwand, der besonders auch beim Ändern von Testfällen sehr hoch ist. Um diesen Aufwand zu minimieren ist eine gemeinsame Testsprache notwendig, in der alle Testfälle erstellt werden können. Dieses Paper stellt die Testsprache TTCN-3 vor. TTCN-3 ist eine einheitliche technologie-unabhägige Testsprache für kommunikationsbasierte, verteilte Systeme und bietet dadurch eine Lösung für diese Probleme. © 2010   Download

Fuzzing

Basáez, Daniel

Fuzzing is a technique for Testing, and is very effective for finding security vulnerabilities in software. It was used in several applications like Unix systems, GUI applications under Windows and Apple MacOS. ... it is often used to improve the programming of everything, because it can reach parts of code, in some cases, that other testing tools never reach, this concept of testing is still used nowadays and his creator is still doing research over this. Fuzzing is a method that inserts unexpected data into input. In this paper some approaches are discussed and also some applications and some tools are showed. © 2009   Download

Objektorientierte Codemetriken und deren Anwendung im Bereich von Embedded Systems

Drosdezki, Eugenia

Empirische Untersuchungen haben gezeigt, dass Metriken als Indikatoren der Softwarequalität verwendet werden können.
Durch die immer zunehmende Popularität objektorientierter Paradigmen wird gerade die Bewertung der Qualität objektorientierter Software immer wichtiger. Objektorientierte Metriken berücksichtigen die strukturelle Besonderheit und Charakteristika objektorientierter Software und helfen dabei potenzielle Schwachstellen in der Software zu identizieren und den Softwareentwurf zu optimieren. Der Einsatz objektorientierter Metriken senkt die Entwicklungs-, Test- und Wartungskosten. In dieser Arbeit werden objektorientierte Metriken von Chidamber und Kemerer, Li und Henry sowie von Bruito und Abreu näher vorgestellt. Danach werden die Ergebnisse einer Studie erläutert, in der gezeigt wird, dass Metriken-Tools, die unter anderem Metriken von Chidamber und Kemerer messen, Definitionen von Metriken unterschiedlich interpretieren.
Zum Schluss wird noch aufgezeigt, wie objektorientierte Codemetriken im Bereich eingebetteter Systeme sinnvoll eingesetzt werden können. © 2009   Download

Testen von Echtzeitsystemen

Ehret, Mathias

Das Testen ist ein sehr teurer Schritt in der Entwicklung von Real-Time Systems. Während für reine Softwaresysteme mit moderaten Anforderungen an das Laufzeitverhalten schon länger moderne Testverfahren und Paradigmen angewandt werden, sind deren Varianten für das Testen von Echtzeitsystemen noch relativ unbekannt. Echtzeitsysteme können günstig als Timed Automata beschrieben und als Black-Box Systeme nach digitaltechnischen und formalen Gesichtspunkten verifiziert werden. Weitere Möglichkeiten ergeben sich durch adaptive Testgenerierung und Robustheitsprüfungen. Für die Spezifikation der Testfälle existiert eine Echtzeiterweiterung der TTCN Notation. © 2009   Download

Echtzeitprogrammierung und Echtzeitverhalten von Keil RTX

Erdrich, Frank

Echtzeitsysteme werden immer komplexer. Darum bedarf es Hilfsmittel wie Echtzeitbetriebssysteme, die die Komplexität vereinfachen. Das vorliegende Paper zeigt anhand gängiger Verfahren zur Echtzeitprogrammierung auf, inwieweit das Echtzeitbetriebssystem RTX von Keil Echtzeitprogrammierung und Echtzeitverhalten unterstützt. © 2009   Download

Softwaremetriken gezielt einsetzen

Fischer, Daniel

Software-Metriken stellen Kennwerte dar, um Software hinsichtlich Komplexität, Wartbarkeit und Fehleranfälligkeit zu bewerten. So empfliehlt die DIN EN 61508 die Erhebung von Software-Metriken für die Safety Integrity Level (SIL) 1-4. Weitere Empfehlungen der DIN EN 61508, wie beispielsweise die der strukturierten Programmierung, können aus einzelnen Software-Metriken abgeleitet werden. © 2009   Download

Softwarefehler verursacht das teuerste "Feuerwerk" aller Zeiten

Lambertz, Klaus

Softwaretests können in Europa über 100 Milliarden Euro jährlich einsparen. © 2009   Download

Embedded Unit-Tests und Mocking mit CMock

Raffeiner, Simon

Softwareentwicklung für eingebettete Systeme hat sich in den vergangenen Jahren meist kaum verändert. Obwohl die Konzepte hinter Agiler Entwicklung, Test-Driven Development und Extreme Programming auch auf eingebettete Systeme übertragen wurden liegen die Potentiale in vielen Projekten brach. Unit Testing und Mocking werden weitestgehend ignoriert. Das Problem entsteht aus der Fehleinschätzung vieler Entwickler, dass Software für eingebettete Systeme ohne Betriebssystem schwer zu testen ist weil die notwendigen Angriffspunkte (Automatisierbarkeit, Frameworks) fehlen und die knapp bemessenen Ressourcen den Einsatz größerer Test-Frameworks unmöglich macht. Statt dessen beschränkt man sich meist auf Systemtests. Kernthema dieses Dokumentes ist die Einführung in das CMock Mocking Framework, das in Verbindung mit dem Unity Unit Test Framework genutzt werden kann um White-Box-Tests für C-Programme generieren. © 2009   Download

Classic Algorithms for Pairwise Testing

Rothmann, Andreas

This paper gives an overview on the most important classic algorithms for pairwise testing. All algorithms use combinatorial strategies to find a test set, which covers pairwise combinations of system parameters (for example system settings or inputs from the user). The idea of pairwise testing is already 20 years old but for the last five years its popularity has been rising extremely. The reason is that testers have to face more complex software projects with the same time target. © 2008   Download

Zentrale Fehlerbehandlung in verteilten eingebetteten Systemen

Spinner, Simon

Die Fehlerbehandlung ist ein wichtiger Teil bei der Implementierung von robusten und fehlertoleranten Systemen. In modernen Programmiersprachen gibt es meist bereits spezielle Konstrukte zur Fehlerbehandlung. Insbesondere in verteilten und nebenläfigen Szenarien sind die traditionellen, sequentiellen Fehlerbehandlungssysteme allerdings nicht ausreichend. Es werden mit Erlang, dem Guardian Modell und den CA Actions drei aktuellere Lösungsvorschläge für dieses Problem vorgestellt. Es wird dabei auch auf deren Einsetzbarkeit in eingebetteten Systemen eingegangen. Abschließend wird ein Vergleich der vorgestellten Systeme vorgenommen. © 2008   Download