Safety assurance of software systems has never been as imminent a problem as it is today. Practitioners and researchers who work on the problem face a challenge unique to modern software systems: uncertainties. For one, the cyber-physical nature of modern software systems as exemplified by automated driving systems mandates environmental uncertainties to be addressed and the resulting hazards to be mitigated. Besides, the abundance of statistical machine-learning components massive numerical computing units for statistical reasoning such as deep neural networks make systems hard to explain, understand, analyze, or verify.
The book is the first to provide a comprehensive overview of such united and interdisciplinary efforts. Driven by automated driving systems as a leading example, the book describes diverse techniques to specify, model, test, analyze, and verify modern software systems. Coming out of a collaboration between industry and basic academic research, the book covers both practical analysis techniques (readily applicable to existing systems) and more long-range design techniques (that call for new designs but bring a greater degree of assurance).
The book provides high-level intuitions and use-cases of each technique, rather than technical details, with plenty of pointers for interested readers.