2009-08-15 3 views
1

Par exemple:Comment prévenir le "syndrome des gros doigts" en l'absence de req. prédécloration?

on rising edge (reset): 
sync = defaultValue; 
... 
... various processing constructs ... 
... 
if (event == someEvent) // Back at the Batcave 
    // The vilianous Fat finger Syndrome 
    // strikes again! 
    synch = someEventProcessing() 
... 
... various processing constructs ... 
... 
someSyncProcessing(sync) // Foiled again! 

toutes les occurences du varible "sync" aurait dû être orthographié "synchronisation" au lieu de "synch." Je lis même la ligne avec l'orthographe incorrecte et mon cerveau «tokenisé» c'est la signification symbolique.

J'ai regardé le code pendant quelques jours avant de trouver la faute de frappe. Comment empêchez-vous cela lorsque la langue ne génère aucune erreur? Il y avait un travail autour dans le code parce que quelqu'un ne pouvait pas trouver la source de la "magie noire" causant le comportement errant du programme. Cela a obscurci le problème encore plus. (Ce code était en fait paraphrasé à partir d'un programme verilog, mais il semble que cela puisse poser un problème dans n'importe quel langage autorisant ce type de problème.)

+0

Qu'est-ce que vous essayez de montrer ici? –

+0

@Andrew: que certains langages mal ne signalent pas les identifiants mal typés et continuent à la place avec des données aléatoires ou non initialisées comme si rien ne s'était passé. Vu en perl, fortran, javascript. –

+0

@NoMoreZealots: Obtenez plus de globes oculaires. J'ai attrapé la faute de frappe immédiatement. –

Répondre

3

Si votre compilateur ne fournit pas d'outil permettant de détecter ce type de problème, tu n'as pas grand chose à espérer. Je recommanderais une politique de tests unitaires très stricte. Au moins, il sera plus facile de localiser l'apparition du syndrome.

Une stratégie possible (NB: possible) est de prendre tous les identifiants uniques, un par ligne (par exemple, remplacer tous les espaces par des retours), puis les filtrer à travers un tri | uniq. Il vous permettra, espérons-le, d'avoir une meilleure vue des identifiants étrangement typés.

Vous pouvez également réduire une telle occurrence en utilisant l'option de tabulation dans votre éditeur. vim, par exemple, a une fonction très utile (Mosh_tab_or_complete) pour effectuer une auto-complétion.

+0

Ajout d'un script pour faire quelque chose comme tri | uniq sonne comme une bonne idée. Aucun identifiant ne devrait apparaître qu'une seule fois dans votre code normalement. Que voulez-vous dire "(NB: possible)"? L'achèvement de l'onglet semble aussi une bonne idée, même si je ne suis pas fan de vim. (Je finis par abandonner la plupart du temps, car j'oublie les frappes.) – NoMoreZealots

+0

Je vous suggère d'ajouter le commutateur -n à uniq, donc d'ajouter le nombre d'occurrences. Le NB fait référence au fait que si vous avez quelque chose comme bonjour = 5 au lieu de bonjour = 5 vous obtiendrez deux identifiants "bonjour =" et "bonjour". Ce n'est pas un gros problème, vous devez jouer un peu avec les regexps, mais pour une base de code importante, et les langues sans distinction de mot-clé de l'identifiant (par exemple fortran) vous ne pouvez pas être sûr à 100%. Fortran, cependant, a la directive IMPLICIT NONE, donc ce n'est pas un problème, à moins que vous ayez de très vieux codes avec autant de déclarations implicites pour rendre l'utilisation de IMPLICIT NONE trop exigeante. –

0

Tests unitaires. En utilisant TDD, vous écrivez des tests pour définir le comportement attendu, puis écrivez le code pour implémenter le comportement. Configurez vos attentes et simulez les objets, puis testez que les objets simulés ont les bonnes méthodes appelées. Vérifiez que vos données ont maintenant les bonnes valeurs.

+0

Les HDL ont une longueur d'avance sur les logiciels.Vous ne compilez presque jamais avant de tester avec la simulation. (Vous ne pouvez pas exactement intégrer printfs dans la logique.) – NoMoreZealots

0

N'oubliez pas de ralentir. Trop de programmeurs se précipitent et font des erreurs comme celle-ci. Je sais que l'écriture dans Verilog n'est pas très conviviale, donc il faut être très prudent dans ce cas.

+0

Ouais vrai. J'aime mieux la syntaxe que le VHDL, mais notre expert HDL se tourne vers le VHDL parce qu'il place et route de manière plus cohérente. Mon opinion est que les deux langues ont encore besoin de travail. – NoMoreZealots

Questions connexes