Conférence sur les Bugs Informatiques et la Fiabilité du Code

Jul 2, 2024

Conférence sur les Bugs Informatiques et la Fiabilité du Code

Introduction

  • Importance des bugs : Différence d'impact selon le domaine (ex. Arianespace)
  • Erreur dans Ariane 5 :
    • Réutilisation du logiciel d'Ariane 4
    • Variable d'accélération horizontale codée sur 8 bits (dépassement avec Ariane 5)
    • Conséquences : Perte de 500 millions de dollars
  • Impossibilité de créer un programme parfait (influence de facteurs externes comme les rayons cosmiques)

Problématiques des Bugs

  • Interconnexion des composants : Plus il y a de composants, plus la probabilité d'erreur augmente
  • Probabilité d'erreur : Démonstration avec l'analyse de Dijkstra (
    • Si p est la probabilité qu'un composant soit correct, la probabilité que tout le programme soit correct est P^N

Méthodes de prévention des bugs

  • Unit tests :
    • Test de chaque fonctionnalité individuellement
    • Addition de nouveaux tests pour chaque bug identifié
    • Ne peut prouver l'absence de bugs (Théorème de Rice)

Règles de la NASA pour un logiciel fiable

  1. Éviter les structures de codes complexes ( n - goto, setjmp, longjmp, récursivité
  • Faciliter l'analyse du code
  1. Limiter les boucles : Toujours fixer une limite d'itérations pour éviter les boucles infinies
  2. Éviter l'allocation de mémoire sur le heap :
  • Utiliser la stack
  • La stack est plus fiable (gérée par le compilateur)
  1. Limiter la taille des fonctions :
  • Moins de 60 lignes
  • Une fonction doit faire une seule chose
  1. Utiliser au moins deux assertions par fonction :
  • Vérification des variables et des résultats
  1. Déclarer les variables dans le plus petit scope possible :
  • Limiter l'accessibilité pour faciliter le débogage
  1. Vérifier la valeur retour et les paramètres des fonctions
  • Redondant avec la règle 5
  1. Utiliser le préprocesseur avec parcimonie :
  • Éviter les compilations conditionnelles
  • Réduire les risques de confusion et d'erreurs
  1. Éviter les pointeurs :
  • Difficile à analyser automatiquement (risque de bugs)
  1. Compiler avec tous les avertissements :
  • Réception de toutes les informations possibles

Conclusion

  • Importance des tests et des règles strictes :
    • Éviter les erreurs potentiellement catastrophiques (ex. NASA)
  • Outils modernes :
    • Ex. Hostinger pour la création de sites web sans code