» Embedded Testing Fundamentals
8 Principles of Testing Embedded Software.
Black Box Approaches: Equivalence Partitioning, Boundary Condition Testing.
White Box Approaches: Stubs and Drivers.
Code Coverage Levels.
High Payoff White, Gray, and Black Box Tests.
Unique Issues in Embedded Testing.
Real-Time Correctness: 'Liveness', Race Conditions.
Exercise
DO-178B "Modified Condition / Decision Coverage".
» Embedded Testing Techniques
Input Data Testing.
State Testing: State Transition Diagrams and Harel StateCharts.
Pairwise Testing and Orthogonal Arrays.
Fault Injection Testing.
Exercise
Backus-Naur Form of a Protocol. State Transitions of High-Availability Switchover. Pairwise Test Design.
» Life Cycle for Embedded Software Testing
Top-Down vs. Bottom-Up Integration: Embedded Testbeds.
System & Acceptance Testing.
Security Testing.
Stress Testing: Case Studies of NASA Spacecraft.
Cause-Effect Graphing & Decision Tables.
Independent Verification and Validation.
When to Stop Testing?
Exercise
Cause-Effect Test Design for a Temperature Display.
» Concepts for Debugging of Embedded / Real-Time Software
What is a Bug?
The Debugging "Cookbook".
9 Golden Guidelines for Debugging.
A Taxonomy of Real-Time / Embedded Bugs.
"Top 5" kinds of Real-Time Bugs that can be "project killers" or "product killers".
The "Top 5": Stack Overflows, Race Conditions, Deadlocks, Timing Problems, Re-entrancy Conditions.
Exercise
Bugs when Porting to New Hardware.
» Real-Time Debugging Tools and their Limitations
Where Traditional Debugging Techniques are Insufficient.
The Correctness Killers: Violations of Liveness.
Deadlock: 4 Ingredients, and 8 'Fixes'.
Task Lockouts and Starvations.
The 3 Classes of Real-Time Software Debuggers.
Cutting Edge Debuggers: Time-Reversal, SensorPoints.
Logic Analyzers.
Post-Mortem Debugging.
Exercise
Bug in a Real-Time Controller.
» Mindsets for Debugging Real-Time Software
Cause and Effect: The Scientific Method.
Assertions and Invariants.
Memory Allocation/De-allocation Bugs.
Proactive Debugging Techniques.
» Bugs in Multi-tasking and ISRs
Task Decomposition and Communication Defects.
Multi-tasking Debugging Techniques.
Interrupt Service Routine Design Defects.
RTOS Usage Defects.
Exercise
Bug in Interrupt Handling.
» Programming Bugs in Real-Time Software
C-Language Ambiguities and Coding Disciplines.
C-Language Code Analysis and Tools.
Static vs. Dynamic Code Analysis.
Metrics Predict Bugs.
Taxonomy of Embedded Testing Tools.
Update on Static Code Analysis.
The JPL "Power of 10" Coding Rules.
Exercise
C-Language Shenanigans. Cyclomatic Complexity.