Dealing with Edge Cases:
Some failures are neither random nor independent. Moreover, safety is typically more about dealing with unusual cases. This means that brute force testing is likely to miss important edge case safety issues.
A significant limitation to a field testing argument
is the assumption of random independent failures inherent in the statistical analysis.
Arguing that software failures are random and independent is clearly questionable,
since multiple instances of a system will have identical software defects.
Moreover,
arguing that the arrival of exceptional external events is random and
independent across a fleet is clearly incorrect in the general case. A few
simple examples of correlated events between vehicles in a fleet include:
·
Timekeeping
events (e.g. daylight savings time, leap second)
·
Extreme
weather (e.g. tornado, tsunami, flooding, blizzard white-out, wildfires) affecting
multiple systems in the same geographic area
·
Appearance
of novel-looking pedestrians occurring on holidays (e.g. Halloween, Mardi Gras)
·
Security
vulnerabilities being attacked in a coordinated way
For life-critical systems, proper operation in typical
situations needs to be validated. But this should be a given. Progressing from baseline
functionality (a vehicle that can operate acceptably in normal situations) to a
safe system (a vehicle that safely handles unusual situations and unexpected
situations) requires dealing with unusual cases that will inevitably occur in
the deployed fleet.
We define an edge
case as a rare situation that will occur only occasionally, but still needs
specific design attention to be dealt with in a reasonable and safe way. The
quantification of “rare” is relative, and generally refers to situations or
conditions that will occur often enough in a full-scale deployed fleet to be a
problem but have not been captured in the design or requirements process. (It
is understood that the process of identifying and handling edge cases makes
them – by definition – no longer edge cases. So in practice the term applies to
situations that would not have otherwise been handled had special attempts not
be made to identify them during the design and validation process.)
It is useful to distinguish edge cases from corner
cases. Corner cases are combinations of normal operational parameters. Not all
corner cases are edge cases, and the converse. An example of a corner case
could be a driving situation with an iced over road, low sun angle, heavy
traffic, and a pedestrian in the roadway. This is a corner case since each item
in that list ought to be an expected operational parameter, and it is the
combination that might be rare. This would be an edge case only if there is
some novelty to the combination that produces an emergent effect with system
behavior. If the system can handle the combination of factors in a corner case
without any special design work, then it’s not really an edge case by our
definition. In practice, even difficult-to-handle corner cases that occur
frequently will be identified during system design.
Only corner cases that are
both infrequent and present novelty due to the combination of conditions are
edge cases. It is worth noting that changing geographic location, season of
year, or other factors can result in different corner cases being identified
during design and test, and leave different sets of edge cases unresolved.
Thus, in practice, edge cases that remain after normal system design procedures
could differ depending upon the operational design domain of the vehicle, the
test plan, and even random chance occurrences of which corner cases happened to
appear in training data and field trials.
Classically an edge case refers to a type of boundary
condition that affects inputs or reveals gaps in requirements. More generally,
edge cases can be wholly unexpected events, such as the appearance of a unique
road sign, or an unexpected animal type on a highway. They can be a corner case
that was thought to be impossible, such as an icy road in a tropical climate.
They can also be an unremarkable (to a human), non-corner case that somehow
triggers an autonomy fault or stumbles upon a gap in training data, such as a
light haze that results in perception failure. The thing that makes something
an edge case is that it unexpectedly activates a requirements, design, or
implementation defect in the system.
There are two implications to the occurrence of such
edge cases in safety argumentation. One is that fixing edge cases as they
arrive might not improve safety appreciably if the population of edge cases is large
due to the heavy tail distribution problem (Koopman 2018c). This is because
removing even a large number of individual defects from an essentially
infinite-size pool of rarely activated defects does not materially improve
things. Another implication is that the arrival of edge cases might be
correlated by date, time, weather, societal events, micro-location, or
combinations of these triggers. Such a correlation can invalidate an assumption
that losses from activation of a safety defect will result in small losses
between the time the defect first activates and the time a fix can be produced.
(Such correlated mishaps can be thought of as the safety equivalent of a “zero
day attack” from the security world.)
It is helpful to identify edge cases to the degree
possible within the constraints of the budget and resources available to a
project. This can be partially accomplished via corner case testing (e.g. Ding
2017). The strategy here would be to test essentially all corner cases to flush
out any that happen to present special problems that make them edge cases. However,
some edge cases also require identifying likely novel situations beyond
combinations of ordinary and expected scenario components. And other edge cases
are exceptional to an autonomous system, but not obviously corner cases in the
eyes of a human test designer.
Ultimately, it is unclear if it can ever be shown that all edge cases have been identified and corresponding mitigations designed into the system. (Formal methods could help here, but the question would be whether any assumptions that needed to be made to support proofs were themselves vulnerable to edge cases.) Therefore, for immature systems it is important to be able to argue that inevitable edge cases will be dealt with in a safe way frequently enough to achieve an appropriate level of safety. One potential argumentation approach is to aggressively monitor and report unusual operational scenarios and proactively respond to near misses and incidents before a similar edge case can trigger a loss event, arguing that the probability of a loss event from unhandled edge cases is sufficiently low. Such an argument would have to address potential issues from correlated activation of edge cases.
(This is an excerpt of our SSS 2019 paper: Koopman, P., Kane, A. & Black, J., "Credible Autonomy Safety Argumentation," Safety-Critical Systems Symposium, Bristol UK, Feb. 2019. Read the full text here)
- Koopman, P. (2018c) "The Heavy Tail Safety Ceiling," Automated and Connected Vehicle Systems Testing Symposium, June 2018.
- Ding, Z., “Accelerated evaluation of automated vehicles,” http://www-personal.umich.edu/~zhaoding/accelerated-evaluation.html on 10/15/2017.