youtube.com/watch?v=_rNmszfIvAw
4 juin 1996 Ariane 501 Vol 88 4 satellites
youtube.com/watch?v=fCnO-UYF3co
-
1981 Conception
-
1988 Vol inaugural
-
2003 15 ans de service
116 lancements
97% de succès
-
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)
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.
-
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.
-
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.
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)));
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.
-
Gérard Le Lann (INRIA) conclut
à un problème d'intégration système -
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
-
Le changement justifie le test
-
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...
Accélération inattendue du véhicule
-
**2010** Toyota rappelle à nouveau un million de véhicules
car ce n'est pas la mécanique qui est en cause
mais le code spaghetti bourré de négligences - Il a fallu attendre une centaine de morts, des milliers d'accidents et une poursuite en justice
-
**2013** [Barr](https://en.wikipedia.org/wiki/Michael_Barr_%28software_engineer%29) trouve [80000 violations](http://www.safetyresearch.net/Library/BarrSlides_FINAL_SCRUBBED.pdf) des règles [MISRA C 2004](https://en.wikipedia.org/wiki/MISRA_C#MISRA_C:2004).
(les dév. transgressent leurs règles sans se justifier)
-
Coût : Quelques milliards $ et image de la marque
« Rien n'arrête une Toyota, même pas ses freins. »
Knight Capital Group (2012)
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 $)
- **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;
}
Ce script peut effacer tout le $HOME
.
STEAMROOT="$(cd "${0%/*}" && echo $PWD)"
# Scary!
rm -rf "$STEAMROOT/"*
Le commentaire Scary!
est d'origine.
-
La non-qualité coûte plus cher
(qui pratique le quick and dirty ?) -
Gérer les erreurs
Refuser la négligence