45
Development and Formal Verification of a Flight Stack for a High-Altitude Micro Glider Emanuel Regnath Toulouse, 10.10.2017 Intro Approach Devel Results

Development and Formal Verification of a Flight Stack for a High …projects.laas.fr/IFSE/FMF/J8/slides/FMF8ERegnath.pdf · 2017-10-12 · Development and Formal Verification of a

  • Upload
    others

  • View
    4

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Development and Formal Verification of a Flight Stack for a High …projects.laas.fr/IFSE/FMF/J8/slides/FMF8ERegnath.pdf · 2017-10-12 · Development and Formal Verification of a

Development and FormalVerification of a Flight Stack for a

High-Altitude Micro Glider

Emanuel RegnathToulouse, 10.10.2017

Intro Approach Devel Results

Page 2: Development and Formal Verification of a Flight Stack for a High …projects.laas.fr/IFSE/FMF/J8/slides/FMF8ERegnath.pdf · 2017-10-12 · Development and Formal Verification of a

2

Motivation

Intro Approach Devel Results

https://www.brightwork.com/blog/project-failures-boeings-787-dreamliner

Page 3: Development and Formal Verification of a Flight Stack for a High …projects.laas.fr/IFSE/FMF/J8/slides/FMF8ERegnath.pdf · 2017-10-12 · Development and Formal Verification of a

3

Formal Verification

Rejected because considered to …

• require a lot of additional specification

• require user interaction; little automation

• require experts; results are difficult to understand ???

Intro Approach Devel Results

Page 4: Development and Formal Verification of a Flight Stack for a High …projects.laas.fr/IFSE/FMF/J8/slides/FMF8ERegnath.pdf · 2017-10-12 · Development and Formal Verification of a

4

Mission – Novel Weather Balloon

Intro Approach Devel Results

Page 5: Development and Formal Verification of a Flight Stack for a High …projects.laas.fr/IFSE/FMF/J8/slides/FMF8ERegnath.pdf · 2017-10-12 · Development and Formal Verification of a

5

Introduction to the Scenario

Elevon left

Servo left

Flight Controller

100mm

Sensors

IMUBaro MagGPS

Intro Approach Devel Results

Page 6: Development and Formal Verification of a Flight Stack for a High …projects.laas.fr/IFSE/FMF/J8/slides/FMF8ERegnath.pdf · 2017-10-12 · Development and Formal Verification of a

6

The Roll of System Testing

Intro Approach Devel Results

• Full system tests, including external effects (wind, etc..)• Risky and high effort (Time&Money) as little as possible⇒• Germany: Must not fy above 100m AGL limited⇒

Page 7: Development and Formal Verification of a Flight Stack for a High …projects.laas.fr/IFSE/FMF/J8/slides/FMF8ERegnath.pdf · 2017-10-12 · Development and Formal Verification of a

7

Development Process

Coding Static Analysis Lab Test Drop Test

Debugging

Next Iteration

Debugging

Design Phase Development Process Final Flight

1. Fast: before compiling2. Normal: Continuous Integration with git3. Nightly “deep” verification runs with long timeouts

Intro Approach Devel Results

Page 8: Development and Formal Verification of a Flight Stack for a High …projects.laas.fr/IFSE/FMF/J8/slides/FMF8ERegnath.pdf · 2017-10-12 · Development and Formal Verification of a

8

Finding Defects – Expectation

• most by static analysis (each developer & nightly runs)• replace unit testing• identify under-specification

• few by system testing• defects which were missed by static analysis• defects which require context beyond source code• logging of exceptions: no reproduction issues

• none during operation• nevertheless: logging of exceptions & in-air reset

Static Analysis System Testing Operation

Intro Approach Devel Results

Page 9: Development and Formal Verification of a Flight Stack for a High …projects.laas.fr/IFSE/FMF/J8/slides/FMF8ERegnath.pdf · 2017-10-12 · Development and Formal Verification of a

9

Ada 2012 Language

SPARK 2014 Language

Ada & SPARKISO-8652

GNAT compilerby Adacore

<compiles>

GNATproveby Adacore

<verifies>

<defines>

Intro Approach Devel Results

Page 10: Development and Formal Verification of a Flight Stack for a High …projects.laas.fr/IFSE/FMF/J8/slides/FMF8ERegnath.pdf · 2017-10-12 · Development and Formal Verification of a

10

SW Architecture

Intro Approach Devel Results

Drivers

Modules

Manager MagBaro IMU Servo nvRAM SD Console

UbloxM8 HMC5883LMPU6000MS5611 PX4IO FM25V01 XBeeFAT32

Estimator LoggerController

Tasks

Kalman

BuzzerGPS

HAAInterface Lay.Abstraction Lay.Presentation Lay.

SPI UART I2C

Mission Logger

Profiler

Page 11: Development and Formal Verification of a Flight Stack for a High …projects.laas.fr/IFSE/FMF/J8/slides/FMF8ERegnath.pdf · 2017-10-12 · Development and Formal Verification of a

11

SW Architecture

Intro Approach Devel Results

Drivers

Modules

Manager MagBaro IMU Servo nvRAM SD Console

UbloxM8 HMC5883LMPU6000MS5611 PX4IO FM25V01 XBeeFAT32

Estimator LoggerController

Tasks

Kalman

BuzzerGPS

HAAInterface Lay.Abstraction Lay.Presentation Lay.

SPI UART I2C

Mission Logger

Profiler

SPARK

Ada (NON-SPARK)

Page 12: Development and Formal Verification of a Flight Stack for a High …projects.laas.fr/IFSE/FMF/J8/slides/FMF8ERegnath.pdf · 2017-10-12 · Development and Formal Verification of a

12

Verification GoalsWe want to formally verify

Absence of run-time errors

Division by zero, overfows

IntegrationCorrectness

Valid inputs and outputs

Information FlowGlobal variables,

Input to output dependencies

Functional Behavior

Input to output relation

Physical DimensionsCompliance with

physical laws

Intro Approach Devel Results

Page 13: Development and Formal Verification of a Flight Stack for a High …projects.laas.fr/IFSE/FMF/J8/slides/FMF8ERegnath.pdf · 2017-10-12 · Development and Formal Verification of a

13

Verification GoalsWe want to formally verify

Absence of run-time errors

Division by zero, overfows

IntegrationCorrectness

Valid inputs and outputs

Information FlowGlobal variables,

Input to output dependencies

Functional Behavior

Input to output relation

Physical DimensionsCompliance with

physical laws

Intro Approach Devel Results

Page 14: Development and Formal Verification of a Flight Stack for a High …projects.laas.fr/IFSE/FMF/J8/slides/FMF8ERegnath.pdf · 2017-10-12 · Development and Formal Verification of a

14

1 2 3 4 5 6 7 8 9101112

package MyPack with SPARK_Mode is

subtype Percentage is Natural;

Global_Ratio : Percentage;

procedure set_ratio( alt, maxalt : Integer ) is begin Global_Ratio := alt * 100 / maxalt; end set_ratio;

end MyPack;

Absence of Run-Time Errors

Intro Approach Devel Results

Page 15: Development and Formal Verification of a Flight Stack for a High …projects.laas.fr/IFSE/FMF/J8/slides/FMF8ERegnath.pdf · 2017-10-12 · Development and Formal Verification of a

15

1 2 3 4 5 6 7 8 9101112

package MyPack with SPARK_Mode is

subtype Percentage is Natural;

Global_Ratio : Percentage;

procedure set_ratio( alt, maxalt : Integer ) is begin Global_Ratio := alt * 100 / maxalt; end set_ratio;

end MyPack;

Absence of Run-Time Errors

Mypack:9:35 medium: overflow check might failMypack:9:41 medium: divide by zero might failMypack:9:41 medium: range check might fail

Intro Approach Devel Results

Page 16: Development and Formal Verification of a Flight Stack for a High …projects.laas.fr/IFSE/FMF/J8/slides/FMF8ERegnath.pdf · 2017-10-12 · Development and Formal Verification of a

16

1 2 3 4 5 6 7 8 91011121314

package MyPack with SPARK_Mode is

subtype Percentage is Natural;

Global_Ratio : Percentage;

procedure set_ratio( alt, maxalt : Integer ) with Pre => alt,maxalt > 0 and alt < Integer'Last/100 is begin Global_Ratio := alt * 100 / maxalt; end set_ratio;

set_ratio( 42, 62 );end MyPack;

Absence of Run-Time Errors

Intro Approach Devel Results

Page 17: Development and Formal Verification of a Flight Stack for a High …projects.laas.fr/IFSE/FMF/J8/slides/FMF8ERegnath.pdf · 2017-10-12 · Development and Formal Verification of a

17

1 2 3 4 5 6 7 8 91011121314

package MyPack with SPARK_Mode is

subtype Percentage is Natural;

Global_Ratio : Percentage;

procedure set_ratio( alt, maxalt : Integer ) with Pre => alt,maxalt > 0 and alt < Integer'Last/100 is begin Global_Ratio := alt * 100 / maxalt; end set_ratio;

set_ratio( 42, 62 );end MyPack;

Absence of Run-Time Errors

Mypack:10:35 info: overflow check provedMypack:10:41 info: division check provedMypack:10:41 info: range check provedMypack:13:3 info: Precondition proved

Intro Approach Devel Results

Page 18: Development and Formal Verification of a Flight Stack for a High …projects.laas.fr/IFSE/FMF/J8/slides/FMF8ERegnath.pdf · 2017-10-12 · Development and Formal Verification of a

18

1 2 3 4 5 6 7 8 91011121314

package MyPack with SPARK_Mode is

subtype Tar_Alt is Integer range 10 .. 10_000; subtype Alt is Integer range 0 .. 100_000; subtype Percentage is Natural;

Global_Ratio : Percentage;

procedure set_ratio( val : Alt; max : Tar_Alt ) is begin Global_Ratio := val * 100 / max; end set_ratio;

end MyPack;

Absence of Run-Time Errors

Intro Approach Devel Results

Page 19: Development and Formal Verification of a Flight Stack for a High …projects.laas.fr/IFSE/FMF/J8/slides/FMF8ERegnath.pdf · 2017-10-12 · Development and Formal Verification of a

19

1 2 3 4 5 6 7 8 91011121314

package MyPack with SPARK_Mode is

subtype Tar_Alt is Integer range 10 .. 10_000; subtype Alt is Integer range 0 .. 100_000; subtype Percentage is Natural;

Global_Ratio : Percentage;

procedure set_ratio( val : Alt; max : Tar_Alt ) is begin Global_Ratio := val * 100 / max; end set_ratio;

end MyPack;

Absence of Run-Time Errors

Mypack:11:35 info: overflow check provedMypack:11:41 info: division check provedMypack:11:41 info: range check proved

Intro Approach Devel Results

Page 20: Development and Formal Verification of a Flight Stack for a High …projects.laas.fr/IFSE/FMF/J8/slides/FMF8ERegnath.pdf · 2017-10-12 · Development and Formal Verification of a

20

Verification GoalsWe want to formally verify

Absence of run-time errors

Division by zero, overfows

IntegrationCorrectness

Valid inputs and outputs

Information FlowGlobal variables,

Input to output dependencies

Functional Behavior

Input to output relation

Physical DimensionsCompliance with

physical laws

Intro Approach Devel Results

Page 21: Development and Formal Verification of a Flight Stack for a High …projects.laas.fr/IFSE/FMF/J8/slides/FMF8ERegnath.pdf · 2017-10-12 · Development and Formal Verification of a

21

Verification GoalsWe want to formally verify

Absence of run-time errors

Division by zero, overfows

IntegrationCorrectness

Valid inputs and outputs

Information FlowGlobal variables,

Input to output dependencies

Functional Behavior

Input to output relation

Physical DimensionsCompliance with

physical laws

Intro Approach Devel Results

Page 22: Development and Formal Verification of a Flight Stack for a High …projects.laas.fr/IFSE/FMF/J8/slides/FMF8ERegnath.pdf · 2017-10-12 · Development and Formal Verification of a

22

1 2 3 4 5 6 7 8 9101112

package MyPack with SPARK_Mode is

subtype Percentage is Natural;

Global_Ratio : Percentage;

procedure set_ratio( alt, maxalt : Integer ) is begin Global_Ratio := alt * 100 / maxalt; end set_ratio;

end MyPack;

Flow Analysis

Intro Approach Devel Results

Mypack:9:19 info: initialization of "Global_Ratio" proved

Page 23: Development and Formal Verification of a Flight Stack for a High …projects.laas.fr/IFSE/FMF/J8/slides/FMF8ERegnath.pdf · 2017-10-12 · Development and Formal Verification of a

23

Verification GoalsWe want to formally verify

Absence of run-time errors

Division by zero, overfows

IntegrationCorrectness

Valid inputs and outputs

Information FlowGlobal variables,

Input to output dependencies

Functional Behavior

Input to output relation

Physical DimensionsCompliance with

physical laws

Intro Approach Devel Results

Page 24: Development and Formal Verification of a Flight Stack for a High …projects.laas.fr/IFSE/FMF/J8/slides/FMF8ERegnath.pdf · 2017-10-12 · Development and Formal Verification of a

24

Verification GoalsWe want to formally verify

Absence of run-time errors

Division by zero, overfows

IntegrationCorrectness

Valid inputs and outputs

Information FlowGlobal variables,

Input to output dependencies

Functional Behavior

Input to output relation

Physical DimensionsCompliance with

physical laws

Intro Approach Devel Results

Page 25: Development and Formal Verification of a Flight Stack for a High …projects.laas.fr/IFSE/FMF/J8/slides/FMF8ERegnath.pdf · 2017-10-12 · Development and Formal Verification of a

25

Dimension CheckingScientific: angular rate = 20 deg / 100 ms = 200 deg/s

C Program: 1 2 3 4

Float angle = 20;Float dt = 0.1;

Float rate = dt / angle;

Intro Approach Devel Results

1 2 3 4 5

angle : Angle_Type := 20.0 * Degree; -- Value: 0.524dt : Time_Type := 100.0 * Milli * Second; -- Value: 0.100rate : Angular_Velocity_Type := dt / angle;

yaw : Angle_Type := 20.0;

SPARK Program:

Page 26: Development and Formal Verification of a Flight Stack for a High …projects.laas.fr/IFSE/FMF/J8/slides/FMF8ERegnath.pdf · 2017-10-12 · Development and Formal Verification of a

26

Dimension CheckingScientific: angular rate = 20 deg / 100 ms = 200 deg/s

C Program: 1 2 3 4

Float angle = 20;Float dt = 0.1;

Float rate = dt / angle;

Intro Approach Devel Results

1 2 3 4 5

angle : Angle_Type := 20.0 * Degree; -- Value: 0.524dt : Time_Type := 100.0 * Milli * Second; -- Value: 0.100rate : Angular_Velocity_Type := dt / angle;

yaw : Angle_Type := 20.0;

SPARK Program:

Mypack:3:17 dimensions mismatch in assignmentMypack:3:17 expected dimension [A.T**(-1)], found [T.A**(-1)]Mypack:5:17 warning: assumed to be "20.0 Rad"

Page 27: Development and Formal Verification of a Flight Stack for a High …projects.laas.fr/IFSE/FMF/J8/slides/FMF8ERegnath.pdf · 2017-10-12 · Development and Formal Verification of a

27

Verification GoalsWe want to formally verify

Absence of run-time errors

Division by zero, overfows

IntegrationCorrectness

Valid inputs and outputs

Information FlowGlobal variables,

Input to output dependencies

Functional Behavior

Input to output relation

Physical DimensionsCompliance with

physical laws

Intro Approach Devel Results

Page 28: Development and Formal Verification of a Flight Stack for a High …projects.laas.fr/IFSE/FMF/J8/slides/FMF8ERegnath.pdf · 2017-10-12 · Development and Formal Verification of a

28

Verification GoalsWe want to formally verify

Absence of run-time errors

Division by zero, overfows

IntegrationCorrectness

Valid inputs and outputs

Information FlowGlobal variables,

Input to output dependencies

Functional Behavior

Input to output relation

Physical DimensionsCompliance with

physical laws

Intro Approach Devel Results

Page 29: Development and Formal Verification of a Flight Stack for a High …projects.laas.fr/IFSE/FMF/J8/slides/FMF8ERegnath.pdf · 2017-10-12 · Development and Formal Verification of a

29

Functional Requirements 1 2 3 4 5 6 7 8 9101112131415161718

-- Functional Requirementfunction FR_poshold_iff_no_course() return Boolean is ( (Have_Course and G_state.mode /= MODE_POSHOLD) or (not Have_Course and G_state.mode = MODE_POSHOLD) ) with Ghost;

-- Functional Requirementfunction FR_arrive_iff_near_target() return Boolean is ( if (Have_Home_Position and Have_My_Position) then (dist2home < TARGET_R and G_state.mode = MODE_ARRIVED) or (dist2home >= TARGET_R and dist2home <= 2.0*TARGET_R) or (dist2home > 2.0*TARGET_R and G_state.mode /= MODE_ARRIVED) else G_state.mode /= MODE_ARRIVED) with Ghost;

-- Update the controller mode, depending on stateprocedure Update_Homing() with Post => FR_poshold_iff_no_course and FR_arrive_iff_near_target;

Intro Approach Devel Results

Page 30: Development and Formal Verification of a Flight Stack for a High …projects.laas.fr/IFSE/FMF/J8/slides/FMF8ERegnath.pdf · 2017-10-12 · Development and Formal Verification of a

30

Verification GoalsWe want to formally verify

Absence of run-time errors

Division by zero, overfows

IntegrationCorrectness

Valid inputs and outputs

Information FlowGlobal variables,

Input to output dependencies

Functional Behavior

Input to output relation

Physical DimensionsCompliance with

physical laws

Intro Approach Devel Results

Page 31: Development and Formal Verification of a Flight Stack for a High …projects.laas.fr/IFSE/FMF/J8/slides/FMF8ERegnath.pdf · 2017-10-12 · Development and Formal Verification of a

31

Final GNATprove Results

Intro Approach Devel Results

• SPARK subprogram coverage: 82%

Page 32: Development and Formal Verification of a Flight Stack for a High …projects.laas.fr/IFSE/FMF/J8/slides/FMF8ERegnath.pdf · 2017-10-12 · Development and Formal Verification of a

32

Final GNATprove Results

Intro Approach Devel Results

Page 33: Development and Formal Verification of a Flight Stack for a High …projects.laas.fr/IFSE/FMF/J8/slides/FMF8ERegnath.pdf · 2017-10-12 · Development and Formal Verification of a

33

Final GNATprove ResultsTotals of verified properties

Absence of run-time errors

1487 / 1711 (86.9%)

IntegrationCorrectness

277 / 282 (98.2%)

Information Flow1539 / 1540 (99.9%)

Functional Requirements2 / 2 (100%)

Physical Dimensions?/? (100%)

Intro Approach Devel Results

Page 34: Development and Formal Verification of a Flight Stack for a High …projects.laas.fr/IFSE/FMF/J8/slides/FMF8ERegnath.pdf · 2017-10-12 · Development and Formal Verification of a

34

Final GNATprove Results

Intro Approach Devel Results

Page 35: Development and Formal Verification of a Flight Stack for a High …projects.laas.fr/IFSE/FMF/J8/slides/FMF8ERegnath.pdf · 2017-10-12 · Development and Formal Verification of a

35

Final Flight on 2016-09-14Target Altitude: 6100 m AGL

Intro Approach Devel Results

Page 36: Development and Formal Verification of a Flight Stack for a High …projects.laas.fr/IFSE/FMF/J8/slides/FMF8ERegnath.pdf · 2017-10-12 · Development and Formal Verification of a

36

Final Flight on 2016-09-14

Intro Approach Devel Results

Page 37: Development and Formal Verification of a Flight Stack for a High …projects.laas.fr/IFSE/FMF/J8/slides/FMF8ERegnath.pdf · 2017-10-12 · Development and Formal Verification of a

37

Finding Defects – Reality

• most by static analysis (each developer & nightly runs)• removed all stupid bugs• identified under-specification

• few by system testing• masking defects during analysis• ignoring failed proofs• incomplete specification

• one during operation• faulty but non-crashing behavior• missed during system testing• unverified assumptions about sensor data (beyond code)

Intro Approach Devel Results

Static Analysis System Testing Operation

Page 38: Development and Formal Verification of a Flight Stack for a High …projects.laas.fr/IFSE/FMF/J8/slides/FMF8ERegnath.pdf · 2017-10-12 · Development and Formal Verification of a

38

Conclusion

Intro Approach Devel Results

• Very little debugging work• Practically no exceptions during system testing• No issues with reproduction and isolation of failures

• SPARK tools work very well• Defect detection with almost no additional effort• Results are precise: Mypack:9:35: overflow check might fail • Effective multi-threading: separation of critical tasks• Verification automation as continuous integration with git• Verification of physical dimensions• Floats are difficult but possible• Verification of high-level behavior is difficult but possible

code released to open source: https://github.com/tum-ei-rcs/StratoX

Page 39: Development and Formal Verification of a Flight Stack for a High …projects.laas.fr/IFSE/FMF/J8/slides/FMF8ERegnath.pdf · 2017-10-12 · Development and Formal Verification of a

39

Questions

Page 40: Development and Formal Verification of a Flight Stack for a High …projects.laas.fr/IFSE/FMF/J8/slides/FMF8ERegnath.pdf · 2017-10-12 · Development and Formal Verification of a

40

References• M. Becker, E. Regnath, Samarjit Chakraborty “Development and Verification of a Flight Stack for a

High-Altitude Glider in Ada/SPARK 2014”, In 36th International Conference on Computer Safety, Reliability and Security (SAFECOMP), Trento, IT.

• “Airworthiness directives; the boeing company airplanes”, Federal Aviation Administration, Tech. Rep. 2015-10066, May 1, 2015.

• Adacore, SPARK 2014 reference manual.• Adacore, SPARK 2014 user guide, version 18.0.• Ada reference manual, ISO/IEC Std. 8652, 2012

Page 41: Development and Formal Verification of a Flight Stack for a High …projects.laas.fr/IFSE/FMF/J8/slides/FMF8ERegnath.pdf · 2017-10-12 · Development and Formal Verification of a

41

Formal Verification

Page 42: Development and Formal Verification of a Flight Stack for a High …projects.laas.fr/IFSE/FMF/J8/slides/FMF8ERegnath.pdf · 2017-10-12 · Development and Formal Verification of a

42

GNATprove internal

GNATprove gnat2why

Alt-Ergo

CVC4

Z3

gnatwhy3

WhyML .wml

SPARK .adb/.ads

AdaLib Info .ali

SMTLIB

.why

Result .spark

Frontend Verification Platform Solver Backends

Page 43: Development and Formal Verification of a Flight Stack for a High …projects.laas.fr/IFSE/FMF/J8/slides/FMF8ERegnath.pdf · 2017-10-12 · Development and Formal Verification of a

43

GNATprove internal

my_sub(a : Integer) isbegin add(a);

sub(a);

end my_sub;

preconditions

postconditions

preconditionadd(x : Integer) isbegin ...end add;

preconditionsub(x : Integer) isbegin ...end sub;

postcondition

postcondition

Page 44: Development and Formal Verification of a Flight Stack for a High …projects.laas.fr/IFSE/FMF/J8/slides/FMF8ERegnath.pdf · 2017-10-12 · Development and Formal Verification of a

44

FP Underflow

1 2 3 4 5

-- Float Underflowfunction Sin ( x : Float ) return Float with Post => Sin'Result in -1.0 .. 1.0; -- OK

pragma Assert ( ( Sin(x) )**2 in -1.0 .. 1.0 ); -- Might fail

Page 45: Development and Formal Verification of a Flight Stack for a High …projects.laas.fr/IFSE/FMF/J8/slides/FMF8ERegnath.pdf · 2017-10-12 · Development and Formal Verification of a

45

Final GNATprove ResultsSPARK Analysis Total Flow Interval Proved Justified UnprovenData DependenciesFlow DependenciesInitialization 1540 1510 29 1Non Aliasing 16 16Run-Time Checks 1711 366 1117 4 224Assertions 15 15Functional Contracts 282 277 5LSP VerificationTotal 3564 1526 366 1409 33 230

Subprogram Coverage : 538 / 1227 (43.8%) 538 / 654 (82%) Proven Properties: 3334 / 3564 (93.5%)Proven Run-Time Errors: 1487 / 1711 (86.9%)