1. Introduction

1.2. Safety Integrity Levels

A key concept in EN 50128 is the Safety Integrity Level (SIL) of a software component, which reflects the risk of a hazard occurring if the software fails. If there is no impact on safety, the level is referred to as "Basic Integrity" (earlier known as SIL 0). Otherwise the level has a value between 1 and 4, where 4 is the most critical; i.e., with the highest risk of a hazard in case of software failure.

EN 50128 defines the techniques/measures that need to be used at various software life cycle stages, based on the applicable SIL.

1.3. AdaCore technologies for railway software

AdaCore's technologies revolve around programming activities, as well as the closely related design and verification activities. This is the bottom of the "V" cycle as defined in EN 50128, sub-clause 5.3, Figure 4 (see Fig. 5 below). The company's tools exploit the features of the Ada language (highly recommended by table A.15) and its formally verifiable SPARK subset. In particular, the 2012 version of the Ada standard includes some significant capabilities in terms of specification and verification.

AdaCore's technologies bring two main benefits to the software life cycle processes defined by the CENELEC railway standards.

  • Expressing software interface specifications and software component specifications directly in the source code.

    Interfaces can be precisely expressed through standard syntax for features such as strong typing, parameter constraints, and subprogram contracts. These help to clarify interface documentation, to enforce program constraints and invariants, and to provide an extensive foundation for software component and integration verification.

  • Reducing the verification costs.

    Bringing additional specification at the language level allows verification activities to run earlier in the software life cycle, during the software component implementation itself. Tools provided by AdaCore support this effort and are designed to be equally usable by both the development team and the verification team. Allowing developers to use verification tools greatly reduces the number of defects found at the verification stage and thus reduces costs related to change requests identified in the ascending stages of the cycle.

AdaCore's technologies can be used at all Safety Integrity Levels, from Basic Integrity to SIL 4. At lower levels, the full Ada language is suitable, independent of platform. At higher levels, specific subsets will be needed, for example the Ravenscar Profile ([AlanBurnsBDaTVardanega04], [MC15b]) for concurrency support with analyzable semantics and a reduced footprint, or the Light Profile [Adac] for a subset with no run-time library requirements. At the highest level (SIL 4) the SPARK language ([MC15b], [AdaCore and Altran20]) and its verification toolsuite enable mathematical proof of properties including correct information flow, absence of run-time exceptions, and, for the most critical code, correctness of the implementation against a formally defined specification.

The following technologies will be presented:

  • Ada, a compilable programming language supporting imperative, object-oriented, and functional programming styles and offering strong specification and verification features. Unless otherwise indicated, "Ada" denotes the 2012 version of the Ada language standard.

  • SPARK, an Ada language subset and toolset supporting formal verification of program properties such as Absence of Run-Time Errors

  • GNAT Pro Assurance, a specialized edition of AdaCore's GNAT Pro language development environments that is oriented towards projects with long maintenance cycles or certification requirements

  • The GNAT Static Analysis Suite ("GNAT SAS"), comprising several tools:

    • A "bug finder" engine that identifies potential defects and vulnerabilities in Ada code

    • GNATmetric — a metric computation tool

    • GNATcheck — a coding standard checker

  • The GNAT Dynamic Analysis Suite ("GNAT DAS"), comprising several tools:

    • GNATtest — a unit testing framework generator

    • GNATemulator — a processor emulator

    • GNATcoverage — a structural code coverage analyzer

    • GNATfuzz — a fuzzing tool that helps uncover potential faults

    • TGen — an experimental run-time library for automating test case generation

  • GNAT Pro for Rust, a professionally supported complete development environment for the Rust programming language

  • Several Integrated Development Environments (IDEs):

    • GNAT Studio — a robust, flexible, and extensible IDE

    • VS Code support — extensions for Ada and SPARK

    • GNATbench — an Ada-knowlegeable Eclipse plug-in

    • GNATdashboard — a metric integration and management platform

../../../_images/fig-2.png

Fig. 5 Contributions of AdaCore technology to the "V" Cycle

Bibliography