Le 15/09/2023 à 10:31, DrPi a écrit :
> Bonjour,
>
> J'ai été biberonné au C. Pour gérer les erreurs, pas le choix : retour
> de code d'erreur à chaque fonction.
>
> En Ada, il y a les exceptions.
> Y a t-il des règles Ada à respecter/recommandées pour la gestion des
> erreurs ?
Les exceptions sont le meilleur moyen de traiter les situations...
exceptionnelles, i.e. celles qui obligent à sortir du traitement normal.
En particulier:
- On ne peut pas ignorer une exception. Si elle n'est pas traitée, elle
arrête le programme. Si un code d'erreur n'est pas testé, on continue
avec des données fausses (et C facilite ça en autorisant d'ignorer le
résultat d'une fonction). Grand principe: "il n'y a qu'une chose pire
qu'un programme qui se plante, c'est un programme qui donne des
résultats faux mais vraisemblables"
- Il y a souvent plusieurs niveaux d'appel entre celui qui diagnostique
un problème et celui capable de le traiter. Les exceptions propagent
toutes seules. Avec les codes d'erreur, chaque niveau recevant une
erreur du dessus doit recréer un code d'erreur pour le niveau du dessous
> Par exemple, si j'ai bien compris, pour pouvoir prouver un programme,
> les exceptions sont interdites.
>
Dans les codes sécuritaires, les exceptions posent problème parce
qu'elles causent des débranchements cachés, d'où problème pour calculer
le nombre cyclomatique ou prouver une couverture totale. De plus, on y a
les moyens (humains, techniques et financiers) pour prouver que tous les
codes de retour sont effectivement testés.
Mais pour ceux qui n'ont ni les contraintes, ni les moyens financiers du
SIL4, je pense que les exceptions sont préférables (et à mon avis
sous-utilisées).
Exemple d'utilisation hors cas d'erreur: une procédure de recherche
récursive dans une structure. Quand on a trouvé, on lève une exception
que l'on récupère au premier niveau. Cela évite une tonne de tests du
type "si le niveau du dessus a la réponse, alors on retourne au niveau
du dessous".
--
J-P. Rosen
Adalog
2 rue du Docteur Lombard, 92441 Issy-les-Moulineaux CEDEX
https://www.adalog.fr https://www.adacontrol.fr