Software-Test für Embedded Systems

Book description

  • Testen wird im Embedded-Bereich genauso wichtig wie schon vor einigen Jahren im Bereich betrieblicher Anwendungen+ Autor ist durch Schulungen in der Szene sehr bekannt+ Sehr guter, verständlicher Stil+ Viele Beispiele aus der Praxis des Autors

Table of contents

  1. Cover
  2. Titel
  3. Impressum
  4. Vorwort
    1. Praxisbezug des Buchs
    2. Wie man dieses Buch liest
  5. Danksagung
  6. Inhaltsverzeichnis
  7. 1 Einleitung
    1. 1.1 Motivation
    2. 1.2 Abgrenzung des Buchs zu ISTQB-Lehrplänen
    3. 1.3 Zur Gliederung dieses Buchs
    4. 1.4 Die wichtigsten Begriffe kurz erklärt
      1. 1.4.1 Definition von Fachbegriffen
      2. 1.4.2 Zu Definitionen und TesternInnen
    5. 1.5 Ein Überblick über das Umfeld des Software-Testing
      1. 1.5.1 Ursachen von Softwarefehlern
      2. 1.5.2 Warum Programmfehler nicht entdeckt werden
      3. 1.5.3 Angebrachter Testaufwand
      4. 1.5.4 Der Tester und der Testprozess
      5. 1.5.5 Modellieren der Software-Umgebung
      6. 1.5.6 Erstellen von Testfällen
      7. 1.5.7 Ausführen und Evaluieren der Tests
      8. 1.5.8 Messen des Testfortschritts
      9. 1.5.9 Testdesign und Testdokumentation im Software-Entwicklungsprozess
      10. 1.5.10 Verschiedene Teststufen und deren Zusammenspiel
      11. 1.5.11 Andere Verifikationsmethoden als Ergänzung zum Test
      12. 1.5.12 Agile Prozessmodelle
      13. 1.5.13 Der Softwaretest in agilen Vorgehensmodellen
      14. 1.5.14 Wer testet die Tester?
  8. 2 Anforderungen und Test
    1. 2.1 Die Bedeutung textueller Anforderungen
    2. 2.2 Requirements Engineering im Projekt
    3. 2.3 Arten und Quellen von Anforderungen
    4. 2.4 Warum Anforderungen dokumentiert werden sollen
    5. 2.5 Die Review von Anforderungen
      1. 2.5.1 Testbarkeit von Anforderungen
      2. 2.5.2 Modifizierbarkeit und Erweiterbarkeit
      3. 2.5.3 Relevanz von Anforderungen
    6. 2.6 Der Umgang mit natürlicher Sprache
      1. 2.6.1 Einfache Sprache gegen Missverständnisse
      2. 2.6.2 Gelenkte Sprache
    7. 2.7 Hinweise zur Dokumentenform
    8. 2.8 Die Spezifikation an der Schnittstelle zum Test-Team
      1. 2.8.1 Konfiguration von Testdesigns
      2. 2.8.2 Vollständigkeit von Spezifikationen
    9. 2.9 Werkzeuge zur Review von Anforderungen
    10. 2.10 Diskussion
      1. 2.10.1 Verifikation beim Requirements Engineering mit Augenmaß
      2. 2.10.2 Bewertung der Rolle des Requirements Engineering für den Testprozess
    11. 2.11 Fragen und Übungsaufgaben
  9. 3 Review des Designs
    1. 3.1 Ziele der Review des Architekturdesigns
    2. 3.2 Ziele der Review des Detaildesigns
    3. 3.3 Eigenschaften von gutem Software-Design
    4. 3.4 Hinweise zur Architekturdesignreview
      1. Kohäsion
      2. Coupling
      3. Nebenläufigkeit
      4. Werkzeuge
      5. Vollständigkeit des Designs
      6. Formen von Design-Reviews
    5. 3.5 Embedded Design
      1. 3.5.1 Sicherheit, Verfügbarkeit & Co
      2. 3.5.2 Wartbarkeit des Geräts
      3. 3.5.3 Ressourcenverbrauch
      4. 3.5.4 Design von Echtzeitsystemen
    6. 3.6 Diskussion
    7. 3.7 Fragen und Übungsaufgaben
  10. 4 Automatische statische Code-Analyse
    1. 4.1 Motivation zum Einsatz von Analyse-Werkzeugen
    2. 4.2 Techniken von Analyse-Werkzeugen im unteren Preissegment
      1. 4.2.1 Sprachspezifische Fallstricke
      2. 4.2.2 Kontrollflussanalyse
      3. 4.2.3 Datenflussanalyse, Initialisation Tracking
      4. 4.2.4 Datenflussanalyse, Value Tracking
      5. 4.2.5 Semantische Analyse
      6. 4.2.6 Starke Typenprüfung
    3. 4.3 Techniken von Analysewerkzeugen im oberen Preissegment
      1. 4.3.1 Größerer Komfort für den Benutzer
      2. 4.3.2 Concurrency Checks
      3. 4.3.3 Stack-Analyse und erweiterte Kontrollflussanalyse
      4. 4.3.4 Erschöpfende Analyse des Zustandsbaums
    4. 4.4 Statische Security-Analyse (SSA)
    5. 4.5 Code-Metriken
    6. 4.6 Werkzeuge für die Automatische Code-Analyse
    7. 4.7 Diskussion
    8. 4.8 Fragen und Übungsaufgaben
  11. 5 Code-Reviews
    1. 5.1 Review-Arten
      1. 5.1.1 Code-Inspektionen
      2. 5.1.2 Walkthrough
      3. 5.1.3 Peer-Review
    2. 5.2 Pair Programming
    3. 5.3 Werkzeuge zur Code-Review
    4. 5.4 Diskussion
    5. 5.5 Fragen und Übungsaufgaben
  12. 6 Unit-Tests
    1. 6.1 Der Unit-Test im Entwicklungsprozess
    2. 6.2 Zur Definition von Unit-Test und Modultest
    3. 6.3 Black-Box-Testfälle beim White-Box-Test
      1. 6.3.1 Äquivalenzklassenbildung
      2. 6.3.2 Grenzwertanalyse
      3. 6.3.3 Andere Methoden
    4. 6.4 Stubs und Treiber
    5. 6.5 Verschiedene Typen von Werkzeugen beim White-Box-Test
      1. 6.5.1 Unit-Test-Frameworks
      2. 6.5.2 Werkzeuge zur Testerstellung
      3. 6.5.3 Werkzeuge zur Messung der Testabdeckung
    6. 6.6 Testabdeckung
      1. 6.6.1 Statement Coverage
      2. 6.6.2 Branch Coverage und Decision Coverage
      3. 6.6.3 Decision/Condition Coverage
      4. 6.6.4 Modified Condition/Decision Coverage
      5. 6.6.5 Andere Testabdeckungen
      6. 6.6.6 Testabdeckung bei modellbasierter Entwicklung
      7. 6.6.7 Messung der Testabdeckung
    7. 6.7 Basis Path Testing
    8. 6.8 Host oder Target Testing?
    9. 6.9 Den Code immer unverändert testen?
    10. 6.10 Unit-Tests bei objektorientierten Sprachen
    11. 6.11 Grenzen des Unit-Tests
    12. 6.12 Werkzeuge für den Unit-Test
      1. 6.12.1 Unit-Test-Frameworks
      2. 6.12.2 Werkzeuge zur Testerstellung
      3. 6.12.3 Coverage-Analyse
    13. 6.13 Diskussion
      1. 6.13.1 Testabdeckung
      2. 6.13.2 Organisation von Unit-Tests
    14. 6.14 Fragen und Übungsaufgaben
  13. 7 Integrationstests
    1. 7.1 Software/Software-Integrationstest
      1. 7.1.1 Bottom-up-Unit-Tests als Integrationstest
      2. 7.1.2 Strukturierter Integrationstest
      3. 7.1.3 Testabdeckung der Aufrufe von Unterprogrammen
      4. 7.1.4 Vergleich der Teststrategien
        1. Effizienz & Management
        2. Einfluss unsauberer Software-Architektur
        3. Testschärfe
      5. 7.1.5 Grenzen des Software/Software-Integrationstests
      6. 7.1.6 Diskussion des Software/Software-Integrationstests
    2. 7.2 Ressourcentests
      1. 7.2.1 Statischer Ressourcentest
        1. CPU-Last
        2. Dynamischer Speicher
        3. Statischer Speicher
      2. 7.2.2 Dynamischer Ressourcentest
        1. CPU-Last
        2. Dynamischer Speicher
    3. 7.3 Hardware/Software-Integrationstest
      1. 7.3.1 Bottom-up-Verfahren
      2. 7.3.2 Regressionsverfahren
      3. 7.3.3 Black-Box-Verfahren
      4. 7.3.4 Test und Analysen bei Sicherheitsrelevanz
      5. 7.3.5 Diskussion des Hardware/Software-Integrationstests
    4. 7.4 Systemintegrationstest
    5. 7.5 Werkzeuge für den Integrationstest
    6. 7.6 Fragen und Übungsaufgaben
  14. 8 Systemtests
    1. 8.1 Funktionale Systemtests
      1. 8.1.1 Zuordnung funktionaler Systemtests zu Anforderungen
      2. 8.1.2 Äquivalenzklassen und Grenzwerte im Black-Box-Test
        1. Beispiel
      3. 8.1.3 Zustandsbasierter Test
      4. 8.1.4 Ursache-Wirkungs-Analyse
      5. 8.1.5 CECIL-Methode
      6. 8.1.6 Entscheidungstabellentechnik
      7. 8.1.7 Paarweises Testen und Klassifikationsbaum-Methode
      8. 8.1.8 Back To Back Testing
      9. 8.1.9 Erfahrungsbasierter Test
      10. 8.1.10 Diskussion des Black-Box-Tests
      11. 8.1.11 Auswahl eines Black-Box-Testverfahrens für eine Aufgabe
      12. 8.1.12 Werkzeuge für Funktionstests
    2. 8.2 Test der Benutzerschnittstelle
      1. 8.2.1 Grafische Benutzerschnittstelle
      2. 8.2.2 Werkzeuge für GUI-Tests
      3. 8.2.3 Eingebettete Benutzerschnittstellen
      4. 8.2.4 Werkzeuge für den Test von eingebetteten Benutzerschnittstellen
    3. 8.3 Performanztest und Lasttest
    4. 8.4 Stresstest
    5. 8.5 Volumentest
    6. 8.6 Failover und Recovery Testing
    7. 8.7 Ressourcentests
    8. 8.8 Installationstests
    9. 8.9 Konfigurationstests
    10. 8.10 Security-Tests
    11. 8.11 Dokumententests
    12. 8.12 Testumgebung und Testdaten
    13. 8.13 Formale Methoden
      1. 8.13.1 Symbolischer Test
      2. 8.13.2 Deduktive Verifikation von funktionalen Anforderungen
      3. 8.13.3 Model Checking
    14. 8.14 Automation von Systemtests
      1. 8.14.1 Vor- und Nachteile der Testautomation
      2. 8.14.2 Tipps zur Automation von Systemtests
        1. Review des High-Level-Test-Designs
        2. Kapselung von Testaufgaben
        3. Traceability vom Design zum Code des Testskripts
        4. Wechselseitige Unabhängigkeit von Tests
        5. Schlüsselworte und wichtige Information im Testlog
        6. Ereignisgesteuertes Design der Testskripts
        7. Halbautomatische Tests
    15. 8.15 Dokumentation des Testdesigns und der Testergebnisse
    16. 8.16 Grenzen des Systemtests
    17. 8.17 Fragen und Übungsaufgaben
  15. 9 Testen von RTOS und Middleware
    1. 9.1 Definition und Motivation
    2. 9.2 White-Box-Requirements-Test
    3. 9.3 Test eines Interrupt-Managers
    4. 9.4 Test eines Schedulers
    5. 9.5 Fragen und Übungsaufgaben
  16. 10 Race Conditions
    1. 10.1 Definition von Data Races
      1. Beispiele zu Data Races
        1. Locking von kritischen Code-Passagen
    2. 10.2 Dynamische Data-Race-Analyse
      1. 10.2.1 Eraser
        1. Algorithmus
        2. Harmlose Szenarien erkennen
        3. Bewertung von Eraser
      2. 10.2.2 Lamports Happens-Before-Relation
        1. Bewertung der Happens-Before-Relation
    3. 10.3 Statische Data-Race-Analyse
      1. 10.3.1 Ansätze zur statischen Data-Race-Analyse
      2. 10.3.2 Vergleich zur dynamischen Data-Race-Analyse
    4. 10.4 Werkzeuge für die Data-Race-Analyse
    5. 10.5 Diskussion
    6. 10.6 Fragen und Übungsaufgaben
  17. 11 Deadlocks
    1. 11.1 Über die Entstehung von Deadlocks
    2. 11.2 Verschiedene Arten der Deadlock-Analyse
    3. 11.3 Dynamische Deadlock-Analyse
    4. 11.4 Statische Deadlock-Analyse
      1. Vergleich zur dynamischen Analyse
    5. 11.5 Werkzeuge zur Deadlockdetektion
    6. 11.6 Diskussion
    7. 11.7 Fragen und Übungsaufgaben
  18. 12 Echtzeit-Verifikation
    1. 12.1 Antwortzeiten bei funktionalen Tests
    2. 12.2 WCET-Analyse
      1. 12.2.1 Problemstellung
      2. 12.2.2 Laufzeitanalyse
    3. 12.3 Werkzeuge für die WCET-Analyse
    4. 12.4 Diskussion
    5. 12.5 Fragen und Übungsaufgaben
  19. 13 Schedulability-Analyse
    1. 13.1 Aufgaben der Schedulability-Analyse
    2. 13.2 Definitionen
    3. 13.3 Diskussion der Scheduling-Strategien
      1. 13.3.1 Statisches Scheduling
      2. 13.3.2 Dynamisches Scheduling
        1. Scheduling-Strategien
        2. Präemption
        3. Forschungsarbeiten und industrieller Einsatz
    4. 13.4 Analyse bei Fixed-Priority-Single-CPU-Systemen
      1. 13.4.1 Optimale Prioritätsvergabe
      2. 13.4.2 Rate Monotonic Analysis
      3. 13.4.3 Exakte Antwortzeitenanalyse
        1. Algorithmische Vorgehensweise
        2. Einsatz des Algorithmus
        3. 13.4.3.1 Antwortzeitenanalyse mit MAST
        4. 13.4.3.2 Restricted Deadlines (D≤T)
        5. 13.4.3.3 Beliebige Deadlines
      4. 13.4.4 Gegenseitiger Ausschluss
      5. 13.4.5 Aperiodische Aufgaben
      6. 13.4.6 Kontextwechsel
      7. 13.4.7 Cache und Out Of Order Execution
      8. 13.4.8 Input-Jitter
      9. 13.4.9 Interrupts
    5. 13.5 Multi-CPU-Systeme
      1. 13.5.1 Multicore- und Multiprozessor-Systeme
      2. 13.5.2 Verteilte Systeme
        1. Echtzeitnetzwerke
        2. Analysetechniken
    6. 13.6 Scheduling-Analyse für CAN
      1. Non-Preemptible Fixed-Priority Scheduling
        1. Anwendung der Analyse für CAN
    7. 13.7 Werkzeuge
    8. 13.8 Diskussion
    9. 13.9 Fragen und Übungsaufgaben
  20. 14 Hardware/Software-Interaktionsanalyse
    1. 14.1 Die FMEA als Grundlage der HSIA
      1. FMEA-Grundlagen
        1. Beispiel einer FMEA mit Relevanz für das Software-Design
        2. Die FMEA im Entwicklungsprozess
    2. 14.2 Die HSIA als Quelle für Software-Anforderungen
    3. 14.3 Software-Kritikalitätsanalyse
    4. 14.4 Software-FMEA
    5. 14.5 Werkzeuge
    6. 14.6 Diskussion
    7. 14.7 Fragen und Übungsaufgaben
  21. 15 Modellbasierter Test
    1. 15.1 Begriffsdefinition
    2. 15.2 MBT und Testautomation
    3. 15.3 Modelle
      1. 15.3.1 Statecharts
      2. 15.3.2 SDL
      3. 15.3.3 Message Sequence Charts
      4. 15.3.4 UML Version 2
      5. 15.3.5 SysML
      6. 15.3.6 Funktions-Modellierung
    4. 15.4 Testmodell vs. Implementierungsmodell
    5. 15.5 Werkzeuge
    6. 15.6 Diskussion
    7. 15.7 Fragen und Übungsaufgaben
  22. 16 Testmanagement
    1. 16.1 Testplanung
    2. 16.2 Teststeuerung
    3. 16.3 Abweichungsmanagement
    4. 16.4 Bewertung und Anpassung des Testprozesses
      1. 16.4.1 Formale Reifegradmodelle für den Software-Test
      2. 16.4.2 Prozessbewertung in agilen Projekten
      3. 16.4.3 Mit Augenmaß ins Kostenoptimum
        1. Prozessfaktenerhebung
        2. Fehlerursachenanalyse
        3. Umsetzung von Verbesserungsmaßnahmen
    5. 16.5 Risikobasierter Test
    6. 16.6 Werkzeuge
    7. 16.7 Diskussion
    8. 16.8 Fragen und Übungsaufgaben
  23. 17 Qualitätsmanagement
    1. 17.1 Definition
    2. 17.2 Qualitätsmanagement-Standards
      1. ISO 9001 – Papiertiger oder Quelle von nützlichen Hinweisen?
        1. Die ISO 9001, angewandt auf den Testprozess und die Testdurchführung
    3. 17.3 Kosten und Haftungsrelevanz des QM
    4. 17.4 Umsetzung des Qualitätsmanagements
    5. 17.5 Die Rolle des Qualitätsmanagers
    6. 17.6 Mit Metriken die Qualität steuern
      1. Praxisbeispiel für die Definition von Prozess- und Projektmetriken
    7. 17.7 Die Wirtschaftlichkeit von QM
    8. 17.8 Werkzeuge
    9. 17.9 Diskussion
    10. 17.10 Fragen und Übungsaufgaben
  24. 18 Softwaretest und Haftungsrisiko
    1. 18.1 Ein Softwarefehler im Sinne des Gesetzes
    2. 18.2 Vertragliche Gewährleistung und Haftung
    3. 18.3 Vertragliche Beschränkung der Haftung
    4. 18.4 Produzentenhaftung bei Software
    5. 18.5 Produkthaftung
    6. 18.6 Sorgfaltspflicht des Software-Herstellers
    7. 18.7 Technische Normen mit Bezug zum Softwaretest
      1. 18.7.1 DIN IEC 56/575/CD
      2. 18.7.2 IEEE Std 1012
      3. 18.7.3 IEEE Std 829
      4. 18.7.4 IEEE Std 1008-1987
      5. 18.7.5 ISO/IEC 29119
      6. 18.7.6 IEC/EN 61508
      7. 18.7.7 ISO 26262
      8. 18.7.8 Normenreihe 250XX
    8. 18.8 Tipps vom Rechtsanwalt und vom Techniker
      1. Wiederverwendung von Software
        1. Regressionstests
        2. Testpersonen
        3. Offenlegung von Systemtestdesigns
        4. Nichtbeachtung der applikablen Normen
    9. 18.9 Fragen und Übungsaufgaben
  25. Nachwort
  26. Anhang
    1. Anhang A – Lösungen zu Übungsaufgaben
    2. Anhang B – Dokumentation des Testdesigns
      1. ST-COM-FT05 – Test der Audio-Transportlatenzzeit
        1. Testzweck
          1. Beschreibung
          2. Testaufbau
          3. Szenario
          4. Testprozedur
    3. Anhang C – Software-Verifikationsplan
    4. Anhang D –Software-Verifikations-Report
    5. Quellenverzeichnis
      1. Normen, Standards, Bücher, Zeitschriftenartikel und Technical Reports
        1. WWW-Seiten
    6. Index
  27. Fußnoten
    1. 2 Anforderungen und Test
    2. 4 Automatische statische Code-Analyse
    3. 5 Code-Reviews
    4. 6 Unit-Tests
    5. 7 Integrationstests
    6. 8 Systemtests
    7. 10 Race Conditions
    8. 12 Echtzeit-Verifikation
    9. 13 Schedulability-Analyse
    10. 14 Hardware/Software-Interaktionsanalyse
    11. 15 Modellbasierter Test
    12. 17 Qualitätsmanagement
    13. 18 Softwaretest und Haftungsrisiko

Product information

  • Title: Software-Test für Embedded Systems
  • Author(s): Stephan Grünfelder
  • Release date: August 2013
  • Publisher(s): dpunkt
  • ISBN: 97833864900488