Automated Fault Tree Generation for Rust Programs
Dominic Zimmer, Andreas U. Schmidt · 2024
With software driving more and more of our world, dependability assurance becomes increasingly essential. While safe-by-design is desirable, there are always failure conditions that cannot be avoided and must be handled (or deemed acceptable in review). However, this requires awareness and explicitness of failure conditions as well as their impact on the overall system. Fault trees are commonly used in dependability assurance, up to the point that their creation and properties are mandated by safety standards. As of today, these documents are created manually by safety engineers—a process that lacks traceability between the software source code and associated fault trees.Recent advances in programming languages have led to stronger type systems and more modern ways to express failure conditions. One example is the Rust language, which uses monadic types to make potential failures explicit. In this paper, we present our tool craft, which uses static program analysis to generate fault trees of functions for a subset of the Rust language. We showcase both capabilities as well as limitations of our approach and give directions for future work.