Refactorisation de Code avec les 10 Règles de la NASA
J'ai affronté le chaos des calculs financiers: 'European interest rate option' & 'currency option' en appliquant ces règles. Voici comment elles ont transformé le code :
1. Option de Taux d’Intérêt Européen (C++ conforme aux règles de la NASA)
- Pas de mémoire dynamique (Règle 1)
- Portée des variables minimisée (Règle 5)
- Assertions pour valider les entrées (Règle 4)
- Constantes utilisées au lieu de macros (Règle 8)
- Pas de récursivité, complexité maîtrisée (Règles 3 et 9)
2. Option de Change (C++ conforme aux règles de la NASA)
• Respect des règles NASA :
- Validation stricte des entrées avec assert
(Règle 4)
- Utilisation de constexpr
pour éviter les macros (Règle 8)
- Portée des variables limitée au strict nécessaire (Règle 5)
- Aucune allocation dynamique (new
ou delete
interdit) (Règle 1)
- Code déterministe et testable (Règle 10)
En appliquant les règles de codage strictes de la NASA, nous avons obtenu des implémentations fiables, robustes et maintenables des options financières. Ces principes ne sont pas uniquement pertinents pour les logiciels spatiaux, mais aussi pour les applications critiques en finance, aéronautique, et systèmes embarqués.
- Contrôle strict des erreurs: des assertions sur toutes les entrées.
- Suppression des allocations dynamiques: garantir la stabilité mémoire.
- Utilisation des constexpr:
éviter les erreurs liées aux macros.
- Portée des variables réduite: limiter les effets de bord.
- Structures de contrôle explicites: opter pour lisibilité maximale.
Ces techniques garantissent une 'sécurité maximale et un contrôle précis des erreurs', assurant une 'maintenance réduite et prévisible' du code.
3. Perceptions sur les Règles de la NASA
La NASA interdit la récursivité dans son code. Pourquoi ? Parce que la récursivité peut facilement faire sauter la pile, ce qui est un risque inacceptable dans les systèmes critiques. Vous devez comprendre la récursivité juste assez pour l'aplatir et la transformer en une version itérative. C'est une pratique courante dans les systèmes embarqués critiques.
Les systèmes embarqués et les applications à durée limitée qui nécessitent un système d'exploitation en temps réel (RTOS) fonctionnent généralement sur du code C/C++. Ce choix est dû à la nécessité d'un contrôle précis de la mémoire, du timing et des interactions matérielles. Donc, ce n'est pas une surprise pour moi si la NASA déteste la récursivité.
Sinon, la vérification manuelle des fuites de mémoire et des problèmes de concurrence au lieu de l'automatisation construit le caractère et n'est certainement pas une perte de temps.
De plus, la NASA interdit l'allocation dynamique de mémoire (sauf dans un segment de code d'initialisation de programme), les boucles non limitées et une série d'autres modèles de programmation très courants. Ces restrictions visent à garantir que le code est prévisible, fiable et facile à déboguer. C'est fou, non ? Mais quand vous travaillez sur des systèmes où une erreur peut coûter des vies ou des milliards de francs, ces règles deviennent indispensables.
Le problème fondamental avec tous les styles de code obligatoires (même les miens) est qu’aucun d’entre eux n’est basé sur des données réelles. C’est toute la sagesse “tribale” qui dépend d’un mélange d’expérience personnelle, de préférence personnelle et de tous les outils dont vous disposez.
4. Gestion de la Mémoire dans les Systèmes Critiques
5. Rapports idiomatiques
Il est à noter que C++ gaspille +34 % d'énergie par rapport à C dans certains repères. Pour d’autres, C++ gaspille des cycles en faisant ou en accédant à des allocations de mémoire d'objet unique..
Dans cet univers où la moindre erreur peut être fatale, la simplicité est votre alliée. Apprenez de la NASA, ou restez à jamais vulnérable aux défaillances de votre propre création.
Qu'en pensez-vous ? Ces règles sont-elles utiles ?
P.s. 'Sauvez notre planète, utilisez C ou C++'.
Comments
Post a Comment