Skip to content

Latest commit

 

History

History

02-studies

Folders and files

NameName
Last commit message
Last commit date

parent directory

..
 
 
 
 

Études de cas

Ariane 5

La théorie

youtube.com/watch?v=_rNmszfIvAw


Le vol d'inauguration

4 juin 1996   Ariane 501   Vol 88   4 satellites
youtube.com/watch?v=fCnO-UYF3co

Ariane 4

  • 1981 Conception

  • 1988 Vol inaugural

  • 2003 15 ans de service
        116 lancements
        97% de succès

Ariane 5

  • 1987 Conception

  • 199x Décision de réutiliser le
        Système de Référence Inertielle
        d'Ariane 4 (réputé fiable).
        Pour éviter de refaire des tests (800 kF)
        on garde la phase de calibration
        nécessaire pour Ariane 4 seulement.

  • 1996 Échec du vol inaugural

  • 1997 Réussite du second vol (16 mois)

Coût

C'était le bug le plus coûteux du monde.

3 milliards de francs (de l'époque)
pour les 4 satellites, le lancement,
les 16 mois de retard du projet...

Coût de l'image ternie de la marque.

Un petit bug...

  • L'accélération d'Ariane 5 est
    cinq fois plus élevée qu'Ariane 4.

  • La valeur accélération sur 32 bits et copiée
    dans un registre de 16 bits (trop petit)
    ce qui provoque une interruption matérielle.

  • Les deux Système de Référence Inertielle
    (même matériel, même logiciel)
    se désactivent simultanément (à 72 ms près).

  • 37 secondes après le décollage,
    le pilote automatique prend les commandes.

... un grand boum !

  • Le On Board Computer (OBC) détecte le SRI 1 en panne
    et bascule sur le SRI 2.

  • Le SRI 2 remonte une erreur, mais l'OBC la considère comme
    valeur de navigation et braque la trajectoire de la fusée.

  • Un des deux boosters est arraché à cause de la pression trop élevée
    et déclenche le système d'auto-destruction de la fusée.

  • Les débris de la fusée tombent dans la mangrove
    et sont récupérés dont l'EEPROM contenant les info de l'erreur.

Code source Ada

Scan du code source Ada du SRI

Le petit bug

Test des bornes -32768..32767 de la composante Verticale BV

L_M_BV_32 := TBD.T_ENTIER_32S ((1.0/C_M_LSB_BV) *
                              G_M_INFO_DERIVE(T_ALG.E_BV));

if L_M_BV_32 > 32767 then
   P_M_DERIVE(T_ALG.E_BV) := 16#7FFF#;
elsif L_M_BV_32 < -32768 then
   P_M_DERIVE(T_ALG.E_BV) := 16#8000#;
else
   P_M_DERIVE(T_ALG.E_BV) := UC_16S_EN_16NS(TDB.T_ENTIER_16S(L_M_BV_32));
end if;

Et pour l'Horizontale BH ?


P_M_DERIVE(T_ALG.E_BH) := UC_16S_EN_16NS (TDB.T_ENTIER_16S
                                   ((1.0/C_M_LSB_BH) *
                                   G_M_INFO_DERIVE(T_ALG.E_BH)));

Commission d'enquête

Rapport rendu un mois après l'incident

Les concepteurs du calculateur de la trajectoire
ont volontairement exclu la spécificité d'Ariane 5.

La commission (composée d'ingénieurs logiciel)
conclut à un problème logiciel.

Lire aussi : [Arnold][arnold] et [Bielefeld][bielefeld]

Enquêtes indépendantes

  1. Gérard Le Lann (INRIA) conclut
    à un problème d'intégration système

  2. Mark Dowson insiste sur l'environnement de travail

    • Pressions budgétaires
    • Pressions sur les délais
    • If it's not broken don't fix it
    • Carriérisme des managers, Politique

Que retenir du cas Ariane 501 ?

  1. Le changement justifie le test

  2. Ne pas laisser tomber la qualité face

    • aux contraintes budget
    • aux contraintes planning
    • au conservatisme (continuous refactoring)
    • à la politique...
  • 1980 NORAD alerte d'une attaque de missiles
        (le logiciel ne gérait pas la défaillance électrique)
  • 1983 Un satellite soviétique alerte d'une attaque de missiles
        (l'officier russe n'y croit pas)
  • 1983 Vancouver Stock Exchange corrige son index de 525 à 1099
        (erreurs d'arrondi)
  • 1985 La NASA ne détecte aucun trou d'ozone pendant 7 ans
        (grandes variations écartées)
  • 1993 Bug du Pentium sur les flottants
  • 1998 Désintégration Mars Climate Orbiter
        (unité pound/second au lieu de newton/second)
  • Médical : Surdose de rayons X...
  • Avion, hélicoptère...

Toyota

Accélération inattendue du véhicule

Comment perdre 440 millions $ en 45 minutes ?

  • La fonction de test *Power Peg* est codée dans un logiciel de Prod
  • Les développeurs gardent ce vieux code *Power Peg* (non utilisé)
  • Un technicien oublie d'installer la nouvelle version sur un des huit serveurs SMARS (automate de trading)
  • La config active le *Power Peg* qui fait dévier à la hausse et à la baisse les cours de la bourse
  • *Power Peg* achète et vend 397 millions d'actions sur 154 titres (NYSE)
  • 4 millions d'ordres exécutés perturbent 148 titres (ex: 3.50 $ <-> 14.76 $)

(qu'est devenu KCG ?)

  • **2012** Baisse de la capitalisation (350 millions $) de 75% dès le lendemain
  • 4 jours après, KCG lève 400 millions $
  • **2015** Vente des logiciels *KCG Hotspot* à BATS pour 365 millions $
  • **2017** Virtu Financial achète *KCG Holdings* pour 1,4 milliard $

Apple (2014)

OSStatus SSLVerifySignedServerKeyExchange(...)
{
  OSStatus err;
  ...
  if ((err = SSLHashSHA1.update(&hashCtx, &serverRandom)) != 0)
    goto fail;
  if ((err = SSLHashSHA1.update(&hashCtx, &signedParams)) != 0)
    goto fail;
    goto fail;
  if ((err = SSLHashSHA1.final(&hashCtx, &hashOut)) != 0)
    goto fail;
  ...
fail:
  SSLFreeBuffer(&signedHashes);
  SSLFreeBuffer(&hashCtx);
  return err;
}
**2016** => Nouvelle option [GCC 6 `-Wmisleading-indentation` ](https://developers.redhat.com/blog/2016/02/26/gcc-6-wmisleading-indentation-vs-goto-fail/)

Valve Steam (2015)

Ce script peut effacer tout le $HOME.

STEAMROOT="$(cd "${0%/*}" && echo $PWD)"

# Scary!
rm -rf "$STEAMROOT/"*

Le commentaire Scary! est d'origine.

Que retenir de ces études de cas ?

  • La non-qualité coûte plus cher
    (qui pratique le quick and dirty ?)

  • Gérer les erreurs
    Refuser la négligence