Timing Analysis of Event-Driven Programs with Directed Testing
Timing Analysis of Event-Driven Programs with
Directed Testing
Mahdi Eslamimehr and Hesam Samimi
Communications Design Group, SAP Labs, Los Angeles, USA
{eslamimehr,hesam@ucla}@ucla.edu
Abstract
Accurately estimating the worst-case execution time (WCET) of real-time event-driven software is
crucial. For example, NASA’s study of unintended acceleration in Toyota vehicles highlights poor
support in timing analysis for event-driven code, which could put human life in danger. WCET
occurs during the longest possible execution path in a program. Static analysis produces safe
but overestimated measurements. Dynamic analysis, on other hand, measures actual execution
times of code under a test suite. Its performance depends on the branch coverage, which itself
is sensitive to scheduling of events. Thus dynamic analysis often underestimates the WCET. We
present a new dynamic approach called event-driven directed testing. Our approach combines
aspects of prior random-testing techniques devised for event-driven code with the directed testing
method applied to sequential code. The aim is to come up with complex event sequences and
choices of parameters for individual events that might result in execution times closer to the
true WCET. Our experiments show that, compared to random testing, genetic algorithms, and
traditional directed testing, we achieve significantly better branch coverage and longer WCET.
1998 ACM Subject Classification B.2.2 Performance Analysis and Design Aids, D.2.5 Testing
and Debugging
Keywords and phrases worst-case execution time, timing analysis, event-driven, directed testing
Digital Object Identifier 10.4230/OASIcs.WCET.2015.21
1
Introduction
Real-time event-driven systems have become ubiquitous, from high performance servers to
smart devices. The correctness of such systems becomes of utmost importance when human
safety is concerned. Testing and analyzing real-time event-driven programs is notoriously hard,
mainly due to the non-linear control flow in the execution of event handlers. Dependencies
are complicated to track in event-driven code, leading to subtle bugs that can go unnoticed
with traditional event-driven testing. For example, since 2002 more than 89 people have
been killed and 60 injured, due to the unintended acceleration of Toyota cars, which has
made the corporation recall more than 1 million cars due to safety issues. The 2011 NASA
study of unintended acceleration in Toyota vehicles [12] highlights poor support in timing
analysis for event driven code as a contributor to the safety holes.
Thus a precise calculation of the worst-case execution time (WCET) of real-time eventdriven software is crucial. WCET is a much studied problem for event-driven software. For
time-critical embedded systems, designers must avoid excessive over-provisioning of task
deadlines, because it wastes processor’s availability that could otherwise be used for other
functions. Designers shall also avoid under-provisioning as it can undermine the validity of
the computation or lead to partial or complete loss of functionality.
The exact WCET in a program happens during the longest possible execution path
© Mahdi Eslamimehr and Hesam Samimi;
licensed under Creative Commons License CC-BY
15th International Workshop on Worst-Case Execution Time Analysis (WCET 2015).
Editor: Francisco J. Cazorla; pp. 21–31
OpenAccess Series in Informatics
Schloss Dagstuhl – Leibniz-Zentrum für Informatik, Dagstuhl Publishing, Germany
22
Timing Analysis of Event-Driven Programs with Directed Testing
among all processes.1 In an event-driven code events can be fired at arbitrary times and
a scheduler may interrupt the execution of one event handler to yield to another new or
unfinished event handler. The choice of scheduling for the execution of handler codes affects
the executed paths, since there can be shared state and exclusivity requirements among
events. Thus WCET can only be precisely computed by checking the execution times of
all possible execution paths over every possible schedule for the execution of every possible
combination of triggered event handlers.
Static analysis can find an upper-bound on the true WCET [18] without executing the
program, yet it is necessarily conservative and can be difficult or currently impossible to
perform on arbitrary code. Dynamic approaches [18], on the other hand, are easier to perform
since they measure a program’s WCET by executing it on a test suite and tracking the
longest execution time. Thus the accuracy of dynamic WCET calculation depends on the
percentage of all possible execution paths covered. A straightforward way to estimate a
program’s WCET is to sum up the WCET calculations of individual handlers when executed
in isolation. Yet this estimate will necessarily be conservative and an upper-bound for the
true WCET. This is because the WCET of one event may not occur on conditions that
would cause the WCET of another event due to intra-dependencies among event handlers.
The tested WCET is a lower-bound on the true WCET that occurs during some run of the
program. In slogan form:
tested WCET ≤ true WCET ≤ static WCET
Therefore the success of a dynamic approach is closely tied to the branch coverage of the
test suite used. Building a test suite with high coverage is a known challenge, and is even
harder for event-driven software. Not only a tester must choose appropriate inputs to guide
the execution to unexplored paths, she must devise a suite of event sequences (schedule of
events fired) that dictate the execution context switches between concurrent processes. For
creating an event sequence, a tester must decide on the number of events, the types of events,
the argument values for each event, as well as a concrete timing schedule for the interrupts.
Previous work on testing event-driven software uses event sequences that are generated
randomly [2] or by genetic algorithms [1]. In the domain of sequential software, the idea of
directed testing with concolic execution (hybrid concrete and symbolic) has been receiving
much attention in both research and practice. The idea is to execute the code concretely to
explore one possible execution path, yet simultaneously employ symbolic execution to collect
path constraints from each condition on the control-flow. Those constraints will be modified
and solved iteratively, in order to find input values for subsequent runs, aiming to force
the execution to unseen paths and increase the coverage. However, we showed previously
[4, 5] that using the classical directed testing on concurrent and event-driven programming
paradigms is not as successful, because the scheduling of concurrent processes is a factor.
The challenge. Improve the accuracy of WCET measurement of dynamic test-based approaches by devising a method that achieves higher branch coverages.
Our approach. We present a new technique called event-based directed testing for testing
of event-driven software. Our technique combines good (...truncated)