gnat pro innovations for high-integrity developmentgnat pro innovations for high-integrity...

44
GNAT Pro Innovations for High-Integrity Development José F. Ruiz <[email protected]> Senior Software Engineer Ada Europe 2010, Valencia 2010-06-15 www.adacore.com

Upload: others

Post on 13-Jul-2020

6 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: GNAT Pro Innovations for High-Integrity DevelopmentGNAT Pro Innovations for High-Integrity Development José F. Ruiz  Senior Software Engineer Ada Europe 2010,

GNAT Pro Innovations for High-Integrity Development

José F. Ruiz <[email protected]> Senior Software Engineer

Ada Europe 2010, Valencia

2010-06-15

www.adacore.com

Page 2: GNAT Pro Innovations for High-Integrity DevelopmentGNAT Pro Innovations for High-Integrity Development José F. Ruiz  Senior Software Engineer Ada Europe 2010,

Slide: 2 Copyright © 2009 AdaCore

Index

•  Development environment

•  Tools

–  Static analysis

–  Dynamic analysis

•  Research projects

•  Open initiatives

Page 3: GNAT Pro Innovations for High-Integrity DevelopmentGNAT Pro Innovations for High-Integrity Development José F. Ruiz  Senior Software Engineer Ada Europe 2010,

Framework for High-Integrity Development

Page 4: GNAT Pro Innovations for High-Integrity DevelopmentGNAT Pro Innovations for High-Integrity Development José F. Ruiz  Senior Software Engineer Ada Europe 2010,

Slide: 4 Copyright © 2009 AdaCore

GNAT Pro High-Integrity Edition Package Overview

•  For High-Integrity Development –  Reduced-Footprint & Certifiable Ada Run-Times

–  Ada Run-Time Customization Capability

–  Support & On-Line Consulting Adapted to the Requirements of Safety-Critical Application Development

–  Certified/qualified run times –  Certification Material (DO-178B, Level A) for the Cert Run-Time for Wind River PSC

ARINC653

–  Qualification Material (ECSS-E-ST-40C and ECSS-Q-ST-80C, Level B) for the Ravenscar Run-Time for ERC32, LEON2, LEON3 (in progress)

•  Tools for High-Integrity –  Coding Standard Analysis

–  Static Stack Analysis

–  Peer Review

–  Design by Contract

–  Code Coverage Analysis

–  Traceability Analysis Kit

Page 5: GNAT Pro Innovations for High-Integrity DevelopmentGNAT Pro Innovations for High-Integrity Development José F. Ruiz  Senior Software Engineer Ada Europe 2010,

Slide: 5 Copyright © 2009 AdaCore

Definition and Verification of the Software Code Standard

Page 6: GNAT Pro Innovations for High-Integrity DevelopmentGNAT Pro Innovations for High-Integrity Development José F. Ruiz  Senior Software Engineer Ada Europe 2010,

Slide: 6 Copyright © 2009 AdaCore

Code Standard: What the DO-178B Standard Says

4.5: SOFTWARE DEVELOPMENT STANDARDS … NOTE: … Constraints and rules on development, design and coding methods can be included to control complexity. Defensive programming practices may be considered to improve robustness.

11.8 SOFTWARE CODE STANDARDS … These standards should include: a. Programming language(s) to be used and/or defined subset(s)… b. Source Code presentation standards… c. Naming conventions for … subprograms, variables, and constants. d. Conditions and constraints imposed on permitted coding conventions… e. Constraints on the use of the coding tools.

Page 7: GNAT Pro Innovations for High-Integrity DevelopmentGNAT Pro Innovations for High-Integrity Development José F. Ruiz  Senior Software Engineer Ada Europe 2010,

Slide: 7 Copyright © 2009 AdaCore

Getting Maximum Leverage from GNAT Pro

Actors

The Ada Language

Configuration Pragmas

Static Checking

Tools

Code Standard Checker

Code Metric Tool

Page 8: GNAT Pro Innovations for High-Integrity DevelopmentGNAT Pro Innovations for High-Integrity Development José F. Ruiz  Senior Software Engineer Ada Europe 2010,

Slide: 8 Copyright © 2009 AdaCore

Definition of a Code Standard (references to RTCA/DO-178B)

•  Compliance to a Source Code Presentation (11.8.b) –  Line length –  Indentation

•  Controlling complexity (6.3.4.d) –  Limit nesting level of control structures –  Measurement of expression complexity (e.g. McCabe)

•  Ease Control Flow Analysis (6.3.3.b – Reviews and Analyses of the Software Architecture) –  Forbid (see also ISO/IEC TR 15942 – 2.3.1):

–  goto statements –  improper returns –  exceptions as control flows –  exit statements exiting from an outer loop –  Recursions

•  Consistent Naming Conventions –  Suffix rules (e.g. _T for type, _C for constants, etc.)

Page 9: GNAT Pro Innovations for High-Integrity DevelopmentGNAT Pro Innovations for High-Integrity Development José F. Ruiz  Senior Software Engineer Ada Europe 2010,

Slide: 9 Copyright © 2009 AdaCore

Checking Code Standard

•  At the Tool Level

–  GNATcheck

-Rall

+RStyle_Checks: 3 -- indentation of 3 characters

+RStyle_Checks: M79 -- line length <= 79 characters

+ROverly_Nested_Control_Structure:3 -- nesting level <= 3

+RNo_Goto_Statements

+RImproper_Returns

+RMisnamed_Identifiers: Type_Suffix=_T, Constant_Suffix=_C

+RExceptions_As_Control_Flow

+ROuter_Loop_Exits GNATcheck being qualified (DO-178B) as a verification tool

Page 10: GNAT Pro Innovations for High-Integrity DevelopmentGNAT Pro Innovations for High-Integrity Development José F. Ruiz  Senior Software Engineer Ada Europe 2010,

Slide: 10 Copyright © 2009 AdaCore

Code Metrics

•  Tool support

–  GNATmetric Line metrics summed over 90 units code lines : 4186

Element metrics summed over 90 units

all statements : 737

all declarations : 2036

logical SLOC : 2773

134 public types in 30 units including

16 private types

166 type declarations in 38 units

246 public subprograms in 41 units

181 subprogram bodies in 32 units

Average cyclomatic complexity: 1.98

Page 11: GNAT Pro Innovations for High-Integrity DevelopmentGNAT Pro Innovations for High-Integrity Development José F. Ruiz  Senior Software Engineer Ada Europe 2010,

Static Stack Analysis

Page 12: GNAT Pro Innovations for High-Integrity DevelopmentGNAT Pro Innovations for High-Integrity Development José F. Ruiz  Senior Software Engineer Ada Europe 2010,

Slide: 12 Copyright © 2009 AdaCore

Why stack analysis?

6.3.4 Reviews and Analyses of the Source Code

[…]

f. Accuracy and consistency: The objective is to determine the correctness and consistency of the Source Code, including stack usage, fixed point arithmetic overflow and resolution, resource contention, worst-case execution timing, exception handling, use of uninitialized variables or constants, unused variables or constants, and data corruption due to task or interrupt conflicts.

Page 13: GNAT Pro Innovations for High-Integrity DevelopmentGNAT Pro Innovations for High-Integrity Development José F. Ruiz  Senior Software Engineer Ada Europe 2010,

Slide: 13 Copyright © 2009 AdaCore

The Static Approach - GNATstack

•  What it brings

–  Gives an upper Worst Case bound

–  Qualifiable Tool

–  A safe answer to the DO-178B requirement

•  To be aware of

–  Worst Case may be pessimistic – worst case on a path may never be taken

–  Coding rules (typical safety-critical standards will forbid them)

–  No cycles in the call graph

–  No recursions

–  No unbounded frame

–  User input may be needed

–  Indirect calls

–  External calls

⇒  Simplifies & automates worst-case stack usage analysis

Page 14: GNAT Pro Innovations for High-Integrity DevelopmentGNAT Pro Innovations for High-Integrity Development José F. Ruiz  Senior Software Engineer Ada Europe 2010,

Slide: 14 Copyright © 2009 AdaCore

GNATstack Workflow

GNAT Pro Compiler

Ada C C++

S o u r c e C o d e

•  Max Stack

•  Cycles

•  Indirect calls

•  External calls

•  Unbounded

•  Frames

S t a c k U s a g e R e p o r t

.o

O b j e c t C o d e

•  Stack Usage •  Call Graph

P e r F u n c t i o n

GNATstack

•  Stack Usage •  Call Graph

U s e r E n t r y

Per-subprogram Stack Consumption

D e c o r a t e d C a l l G r a p h

Page 15: GNAT Pro Innovations for High-Integrity DevelopmentGNAT Pro Innovations for High-Integrity Development José F. Ruiz  Senior Software Engineer Ada Europe 2010,

Slide: 15 Copyright © 2008 AdaCore

Evolutions

•  Support for Ada, C, C++

•  Dispatching calls –  Extend the compiler to tell

–  Class hierarchies

–  Overloaded primitive operations

–  Root class/method at each dispatching call

–  Global analysis to select the set of possible target calls

–  May be refined manually or by tool doing data-flow analysis

•  Indirect calls –  The candidate subprograms for indirect calls are those

–  With compliant profile

–  For which a reference has been taken

Page 16: GNAT Pro Innovations for High-Integrity DevelopmentGNAT Pro Innovations for High-Integrity Development José F. Ruiz  Senior Software Engineer Ada Europe 2010,

Slide: 16 Copyright © 2009 AdaCore

Automatic Peer Review

Page 17: GNAT Pro Innovations for High-Integrity DevelopmentGNAT Pro Innovations for High-Integrity Development José F. Ruiz  Senior Software Engineer Ada Europe 2010,

Slide: 17 Copyright © 2009 AdaCore

Peer Review

6.3.4 Reviews and Analyses of the Source Code

[…]

f. Accuracy and consistency: The objective is to determine the correctness and consistency of the Source Code, including stack usage, fixed point arithmetic overflow and resolution, resource contention, worst-case execution timing, exception handling, use of uninitialized variables or constants, unused variables or constants, and data corruption due to task or interrupt conflicts.

Page 18: GNAT Pro Innovations for High-Integrity DevelopmentGNAT Pro Innovations for High-Integrity Development José F. Ruiz  Senior Software Engineer Ada Europe 2010,

Slide: 18 Copyright © 2008 AdaCore

CodePeer in Action

•  Static run-time errors detection

•  Test vectors generation

•  Pre/post conditions generation

•  Analysis results consolidation

C o d e P e e r

•  compile-time analysis •  local analysis

Day-to-day development

•  global change impact analysis

Software maintenance

•  global analysis •  test vectors leverage

Project quality assurance

Page 19: GNAT Pro Innovations for High-Integrity DevelopmentGNAT Pro Innovations for High-Integrity Development José F. Ruiz  Senior Software Engineer Ada Europe 2010,

Slide: 19 Copyright © 2008 AdaCore

CodePeer Area of Action

•  Uninitialized variables

•  Never ending subps/loops

•  Race conditions

•  Dead code

P r o g r a m m i n g E r r o r s

•  out-of-bound indexing

•  numeric overflow

•  division by zero

•  incorrect invariant

A d a R u n - T i m e C h e c k s

•  Assert statements

•  if … then … raise … control flow

U s e r C h e c k s

Page 20: GNAT Pro Innovations for High-Integrity DevelopmentGNAT Pro Innovations for High-Integrity Development José F. Ruiz  Senior Software Engineer Ada Europe 2010,

Design by Contract

Page 21: GNAT Pro Innovations for High-Integrity DevelopmentGNAT Pro Innovations for High-Integrity Development José F. Ruiz  Senior Software Engineer Ada Europe 2010,

Slide: 21 Copyright © 2009 AdaCore

Design by Contract

Encapsulation

Packages OOP

Invariants

Pre/Post Conditions

Ad

a

GN

AT

P

ro

Page 22: GNAT Pro Innovations for High-Integrity DevelopmentGNAT Pro Innovations for High-Integrity Development José F. Ruiz  Senior Software Engineer Ada Europe 2010,

Slide: 22 Copyright © 2009 AdaCore

Assertions

•  Part of Ada 2005

procedure Update_Speed_Counter is

Speed : Speed_T; -- km/h

begin

Speed := Get_Speed;

pragma Assert (Speed <= 280); -- Max theoretical speed = 261 km/h

end Update_Speed_Counter;

•  Activated During Verifications/Tests

=> Robustness testing

•  Configuration Pragma Assert_Policy to enable/disable

assertions

Page 23: GNAT Pro Innovations for High-Integrity DevelopmentGNAT Pro Innovations for High-Integrity Development José F. Ruiz  Senior Software Engineer Ada Europe 2010,

Slide: 23 Copyright © 2009 AdaCore

Pre/Post Conditions with GNAT Pro

•  Tightens the Contract between Caller and Callee

•  Additional Semantic Information

–  Can be used for extra checks

•  Checks that the Contract is Respected

–  At run time

–  Statically

Page 24: GNAT Pro Innovations for High-Integrity DevelopmentGNAT Pro Innovations for High-Integrity Development José F. Ruiz  Senior Software Engineer Ada Europe 2010,

Slide: 24 Copyright © 2009 AdaCore

Various Uses of Pre/Post Conditions

SPARK GNAT Pre/

Post Conditions

CodePeer Pre

/P

ost

Co

nd

itio

ns

Ex

pli

cit

Im

pli

cit

Analysis

Static Dynamic

Page 25: GNAT Pro Innovations for High-Integrity DevelopmentGNAT Pro Innovations for High-Integrity Development José F. Ruiz  Senior Software Engineer Ada Europe 2010,

Slide: 25 Copyright © 2009 AdaCore

Pre/Post Conditions with GNAT Pro

package Data_Processing is

type Data_T is private;

type Data_A is access Data_T;

type Links_T is record

Link1 : Data_A;

Link2 : Data_A; end record;

function Processing (Param : Data_T) return Links_T;

pragma Precondition (Param.Link1 not null or else Param.Link2 not null); pragma Postcondition (Processing’Result.Link1 not null or else Processing’Result.Link2 not null);

end Data_Processing;

Page 26: GNAT Pro Innovations for High-Integrity DevelopmentGNAT Pro Innovations for High-Integrity Development José F. Ruiz  Senior Software Engineer Ada Europe 2010,

Slide: 26 Copyright © 2009 AdaCore

SPARK

•  The Correctness-by-Construction approach

•  … more after the coffee

Page 27: GNAT Pro Innovations for High-Integrity DevelopmentGNAT Pro Innovations for High-Integrity Development José F. Ruiz  Senior Software Engineer Ada Europe 2010,

Slide: 27 Copyright © 2009 AdaCore

Hi-Lite

•  New research project –  AdaCore with Altran Praxis, Astrium Space Transportation, CEA-LIST, the

ProVal team of INRIA and Thales Communications

•  Goal –  Simplify the use of formal methods

•  How –  Loose integration of formal proofs with testing and static analysis

–  Modular –  Divide-and-conquer approach

–  Early adoption by all programmers in the software life cycle

–  Mixed Ada/C

http://www.open-do.org/projects/hi-lite

Page 28: GNAT Pro Innovations for High-Integrity DevelopmentGNAT Pro Innovations for High-Integrity Development José F. Ruiz  Senior Software Engineer Ada Europe 2010,

Slide: 28 Copyright © 2009 AdaCore

Hi-Lite: Common Language for Properties

Page 29: GNAT Pro Innovations for High-Integrity DevelopmentGNAT Pro Innovations for High-Integrity Development José F. Ruiz  Senior Software Engineer Ada Europe 2010,

Slide: 29 Copyright © 2009 AdaCore

Code Coverage Analysis

Page 30: GNAT Pro Innovations for High-Integrity DevelopmentGNAT Pro Innovations for High-Integrity Development José F. Ruiz  Senior Software Engineer Ada Europe 2010,

Slide: 30 Copyright © 2009 AdaCore

References to the Standard

Table A-7

Verification Of Verification Process Results

Objective Applicability by SW Level

Description Ref. A B C D

5 Test coverage of software structure (modified condition/decision) is achieved.

6.4.4.2

6 Test coverage of software structure (decision coverage) is achieved.

6.4.4.2a 6.4.4.2b

7 Test coverage of software structure (statement coverage) is achieved.

6.4.4.2c

Page 31: GNAT Pro Innovations for High-Integrity DevelopmentGNAT Pro Innovations for High-Integrity Development José F. Ruiz  Senior Software Engineer Ada Europe 2010,

Slide: 31 Copyright © 2009 AdaCore

Bridging the Gap between Source and Object Code Coverage

HOST

TARGET

Pure Functional Test

Instrumented Functional Test

Instrumented Executable

Sources

Approach by Instrumentation

Executable

Compilation Link

Compilation Link

Instrumentation

Coverage Data

Coverage Information

Compilation Link

Sources

Pure Functional Test

Pure Functional Test

Instrumented Environment

Execution Trace

Executable

Coverage Information

Approach by Virtualization

http://www.open-do.org/projects/couverture

Page 32: GNAT Pro Innovations for High-Integrity DevelopmentGNAT Pro Innovations for High-Integrity Development José F. Ruiz  Senior Software Engineer Ada Europe 2010,

Slide: 32 Copyright © 2009 AdaCore

Achievements of the Project “Couverture”

Coverage Levels

•  Object:

–  Instruction

–  Object branch

•  Source

–  Statement

–  Decision

–  Modified Condition/Decision

Aggregated Coverage

•  Capitalization: multiple

executions

•  Consolidation: different

executables exercising the

same function

Tool Qualification

•  For use in DO-178B Level A certification activities

Page 33: GNAT Pro Innovations for High-Integrity DevelopmentGNAT Pro Innovations for High-Integrity Development José F. Ruiz  Senior Software Engineer Ada Europe 2010,

Slide: 33 Copyright © 2009 AdaCore

Emulator

•  Open-Source simulation solution: QEMU

•  Efficient Simulation Technology

•  Development platform close to the final HW platform

–  PowerPC / LEON

•  Code tested can be the code running on the final target

•  Avoids endianness issues

•  Eases functional testing

Page 34: GNAT Pro Innovations for High-Integrity DevelopmentGNAT Pro Innovations for High-Integrity Development José F. Ruiz  Senior Software Engineer Ada Europe 2010,

Traceability Analysis Kit

Page 35: GNAT Pro Innovations for High-Integrity DevelopmentGNAT Pro Innovations for High-Integrity Development José F. Ruiz  Senior Software Engineer Ada Europe 2010,

Slide: 35 Copyright © 2009 AdaCore

From Source Code to Object Code

•  Option 1 –  Code coverage at the source level

–  Traceability analysis on the application source code

•  Option 2 –  Code Coverage at the object level

–  Bypass of the source to object code traceability analysis

•  Option 3 –  Code coverage at the source level

–  Traceability analysis on a representative testsuite

6.4.4.2 Structural Coverage Analysis […] The structural coverage analysis may be performed on the Source Code, unless the software level is A and the compiler generates object code that is not directly traceable to Source Code statements….

Page 36: GNAT Pro Innovations for High-Integrity DevelopmentGNAT Pro Innovations for High-Integrity Development José F. Ruiz  Senior Software Engineer Ada Europe 2010,

Slide: 36 Copyright © 2009 AdaCore

Traceability Package

Code Standard

User Source Code

Object Code

Testsuite

Object Code

Follows

Representative of

Covers & Follows

Traceability Analysis

Page 37: GNAT Pro Innovations for High-Integrity DevelopmentGNAT Pro Innovations for High-Integrity Development José F. Ruiz  Senior Software Engineer Ada Europe 2010,

Slide: 37 Copyright © 2009 AdaCore

Traceability Package

Code Standard

User Source Code

Object Code

Testsuite

Object Code

Traceability Analysis

Additional verification to

produce structural coverage

Page 38: GNAT Pro Innovations for High-Integrity DevelopmentGNAT Pro Innovations for High-Integrity Development José F. Ruiz  Senior Software Engineer Ada Europe 2010,

Slide: 38 Copyright © 2009 AdaCore

Validity of a Traceability Analysis Package

•  The answer comes from the “Final Report for Clarification of DO-178B […]” (RTCA/DO-248B)

4.12.2.2 Approach to the Traceability Analysis […] One approach to this analysis is to produce some code with fully representative language constructs of the application (e.g., case statements, if-then-else statements, loops) and to analyze the resultant object code. Also, it is important that the individual constructs are completely representative of the constructs used in the target object code build, including complex structures (e.g., nested routines). […] The choice of the representative code constructs should be agreed with the appropriate certification authority. […]

Page 39: GNAT Pro Innovations for High-Integrity DevelopmentGNAT Pro Innovations for High-Integrity Development José F. Ruiz  Senior Software Engineer Ada Europe 2010,

Slide: 39 Copyright © 2009 AdaCore

Safer Programming: the AdaCore Answer

CodePeer

Solutions for Standard

Development

GNAT Pro

Static Checking Tools

Code Standard Checker

Advanced Compiler Warnings

Code Standard Checker

Advanced Compiler Warnings

Dynamic Checks

Pre/post Conditions

Uninitialized Variables

Uninitialized Variables

Pre/post Conditions

CodePeer

Page 40: GNAT Pro Innovations for High-Integrity DevelopmentGNAT Pro Innovations for High-Integrity Development José F. Ruiz  Senior Software Engineer Ada Europe 2010,

Slide: 40 Copyright © 2009 AdaCore

Safer Programming: the AdaCore Answer

Solutions for Safety-Critical Development

Traceability Study

MD/CD Code Coverage

GNAT Pro High-Integrity

Edition

Static Checking Tools

Code Standard Checker

Advanced Compiler Warnings

Stack Checking

Traceability Study

MD/CD Code Coverage

Stack Checking

SPARK Pro SPARK Pro Qualification Material

Qualification Material

Page 41: GNAT Pro Innovations for High-Integrity DevelopmentGNAT Pro Innovations for High-Integrity Development José F. Ruiz  Senior Software Engineer Ada Europe 2010,

Slide: 41 Copyright © 2009 AdaCore

Executable Requirements (XReq)

Page 42: GNAT Pro Innovations for High-Integrity DevelopmentGNAT Pro Innovations for High-Integrity Development José F. Ruiz  Senior Software Engineer Ada Europe 2010,

Slide: 42 Copyright © 2009 AdaCore

XReq for DO-178B

•  Executable Requirements for Ada, C and C++ –  Put together the requirements

and the tests –  Tests written in English –  HLT and LLT automatically

generated in Ada, C or C++

•  Help to bring agile to critical projects using Behavior Driven Development (BDD)

•  Open Sourced by SOGILIS in the Open-DO forge http://www.open-do.org/projects/xreq

Page 43: GNAT Pro Innovations for High-Integrity DevelopmentGNAT Pro Innovations for High-Integrity Development José F. Ruiz  Senior Software Engineer Ada Europe 2010,

Slide: 43 Copyright © 2009 AdaCore

Conclusions

Page 44: GNAT Pro Innovations for High-Integrity DevelopmentGNAT Pro Innovations for High-Integrity Development José F. Ruiz  Senior Software Engineer Ada Europe 2010,

Slide: 44 Copyright © 2009 AdaCore

Conclusions

•  AdaCore committed to –  Safety high-integrity development

–  Open development

–  Looking for new ways of helping Ada and safety-critical developers

•  Open-DO –  Lean and Agile methodologies

–  For safety-critical development

–  Open source tools and material –  Including certification/qualification material

www.open-do.org