Bon rapport entre les déclarations de capture et les lignes de code [fermé]

y a-t-il des règles empiriques sur le nombre de déclarations de capture que vous attendez par ligne de code source dans un gros logiciel?

par exemple, dans un morceau de logiciel écrit en C#, Visual Studio montre environ 350 lignes contenant le mot" catch", et cloc rapports que nous avons environ 160K SLOC, 30K lignes commentées, et 15K lignes vierges. 160k / 350 correspond à environ 467 lignes de code par déclaration de capture.

Mais prenez cela avec un grain de sel, parce que nous utilisons la norme C# formatage avec des supports sur leurs propres lignes, donc qui sait combien de lignes sont des supports simples sur les 160k, et que 160k compte certains fichiers dans l'arbre qui ne sont plus compilés dans l'application, etc. Je pourrais deviner le rapport "utile" pour être plus proche de 1 capture par 400 LOC.

au moins pas à ma surprise, nous manquions une exception semi-critique qui a été pris dans un bloc de capture vide, donc maintenant je passe en revue la base de code et au moins j'imprime l'exception à la console de débogage comme mesure temporaire, ou je deviens plus spécifique sur l'exception capturée. Cela va bien sûr augmenter le nombre de captures que nous avons dans l'ensemble de la demande, mais cela nous rapprochera-t-il un peu plus de la zone "acceptable"? Je n'ai aucune idée si une prise par 467 LOC est bonne, juste OK, ou même horrible.


Je suis bien conscient de pourquoi ne pas utiliser de blocs vides. Les autres / précédents responsables ont été paresseux. Et puisque la prochaine version de ce produit est critique, Je n'ai pas actuellement le temps d'y aller et de corriger correctement les 300(?) déclarations de captures insuffisantes et vérification du bon fonctionnement du logiciel (bien sûr, nous n'avons pratiquement aucun test automatisé pour faciliter cela :/ ).

je cherchais juste s'il y avait une sorte de "sensation d'instinct" quant à la fréquence à laquelle on devrait voir essayez-les captures. Il y a quelques réponses disant que c'est sensible au contexte, ce que je suspectais mais dont je n'étais pas sûr.

3
demandé sur Esteban Küber 2009-08-05 20:19:20
la source

4 ответов

il est très difficile de donner un chiffre général - cela dépendra vraiment de ce que l'application est censée faire et si elle doit effectuer des opérations qui peuvent très bien échouer d'une manière récupérable.

le point important à retenir est que les blocs vides sont une très, très mauvaise idée. C'est beaucoup plus important que des lignes de code par bloc de capture.

10
répondu Jon Skeet 2009-08-05 20:27:36
la source

vous ne devriez pas attraper des exceptions à moins que vous allez réellement manipuler eux. À moins que le gestionnaire ne puisse "annuler" l'exception, ou ajouter de la valeur d'une autre manière, vous devriez permettre à l'exception de rebondir jusqu'à quelqu'un qui peut la gérer.

13
répondu John Saunders 2009-08-05 20:26:25
la source

j'ignorerais complètement toute métrique comme celle-ci. Le comptage des lignes de code n'est pas nécessairement une mesure utile, surtout lorsqu'on cherche des rapports.

la vraie réponse ici dépendra entièrement du contexte. Le " bon " nombre d'énoncés de capture est la quantité de blocs d'essai/capture nécessaires pour gérer les exceptions qui peuvent se produire, que vous allez gérer correctement. Vous devriez avoir un bloc essayer/attraper autour de n'importe quelle exception qui est susceptible de se produire que vous pouvez gérer correctement. Si vous ne pouvez pas le manipuler (ou ne souhaitent pas gérer) correctement, laisser se propager vers le haut - de ne pas l'attraper.

la quantité de blocs de capture dépendra complètement du type de code que vous écrivez. Si vous écrivez du code réseau, par exemple, vous serez plus susceptible d'avoir plus de gestion des exceptions en place (puisque les réseaux sont, par nature, plus susceptibles d'avoir des problèmes qui doivent être traités).

6
répondu Reed Copsey 2009-08-05 20:29:07
la source

comme métrique très rugueuse, ma règle est d'avoir au moins un gestionnaire d'événements qui enregistre l'exception.

en ce qui concerne les autres méthodes, je préfère qu'elles soient sans erreur; cela étant dit, il y a plusieurs fois où j'ai ajouté des blocs d'erreur pour ajouter un État à des rapports d'erreur gênants ("Paramètre = Valeur") puis juste" jeter " au gestionnaire principal. Si vous êtes bon avec vos corrections de bugs, cette approche conduit à beaucoup de code mort.

2
répondu Austin Salonen 2009-08-05 20:47:17
la source

Autres questions sur