Écriture de code de BUGS C Comprendre pourquoi Bugs Exist
Pourquoi les insectes existent et où dans le cycle de développement ont-ils fluage? Passer du temps et des efforts sur le problème de comprendre pourquoi les bugs existent est la première étape pour l'écriture de code sans bug. La deuxième étape consiste à prendre des politiques d'action et de l'institut qui éliminent le problème ou aider à détecter le problème. Le plus important, assurez-vous que le personnel de programmation connaît et comprend les nouvelles politiques.
La première étape dans l'écriture de code sans bug est de comprendre pourquoi il existe des bugs. La deuxième étape consiste à prendre des mesures.
Ceci est un exemple extrême, mais il démontre que tout le monde impliqué dans un projet doit bien comprendre de nouvelles méthodologies de programmation instituées au milieu d'un projet de programmation.
1.1 dans les petites et les grands projets
Que faire si vous avez besoin d'écrire un utilitaire de vidage hexadécimal être appelé DUMP? Le programme prend comme argument sur la ligne de commande le nom du fichier que vous souhaitez afficher en hexadécimal. Serait-il écrit sans un seul bug? Oui, sans doute, mais pourquoi? Parce que la tâche est faible, bien défini et isolé.
Alors qu'est-ce qui se passe lorsque vous êtes invité à travailler sur le projet ALPHA, un projet de programmation du contrat de votre entreprise travaille pour une autre entreprise? Le projet est de plusieurs centaines de milliers de lignes de long et dix programmeurs qui travaillent déjà sur le projet. Les délais approchent et l'entreprise a besoin de votre talent de programmation. Pensez-vous que vous pourriez sauter à droite et à écrire un nouveau code sans introduire des bugs dans le projet? Je ne pouvais pas, du moins pas sans les méthodes de programmation appropriées en place pour attraper les erreurs de programmation tout débutant sur le projet est lié à faire.
Pensez au plus grand projet que vous avez travaillé. Combien d'inclure des fichiers, il y avait et qu'est-ce que les fichiers inclus contiennent? Combien de fichiers sources, il y avait et qu'est-ce qu'ils contiennent? Vous avez eu aucun problème à travailler sur le DUMP utilitaire, donc ce qui rend le grand projet si difficile de travailler? Pourquoi le grand projet tout simplement pas envie de travailler sur dix ou cent petits projets?
méthodologies de programmation doivent le rendre facile pour les nouveaux programmeurs de sauter dans un projet sans introduire une série de nouveaux bugs.
Vous avez trop d'informations dans les fichiers inclus pour gérer et maintenant le projet est à la traîne, de sorte que vous ajoutez plus de gens au projet pour l'obtenir plus rapidement terminé. Ce que les composés du problème, parce que maintenant vous avez encore plus de gens à ajouter des informations à la piscine de l'information que tout le monde a besoin d'autre pour apprendre et connaître. Il est un cercle vicieux que tous tombent trop de projets en.
1.2 Trop de structures de données dans les fichiers d'inclusion
Nous pouvons tous convenir qu'un problème majeur dans de grands projets est qu'il ya trop d'informations pour se familiariser avec dans un court laps de temps. Si vous pouviez éliminer certaines informations, ce serait plus facile, car il y aurait moins d'informations pour se familiariser avec.
Une technique qui permet d'éliminer les structures de données à partir d'inclure des fichiers doit être trouvé.
La méthodologie de la classe §4 résout ce problème de structure de données.
1.3 Utilisation des techniques qui ne prennent pas Echelle
Comme vous venez de voir, de grands projets ont des problèmes qui leur est propre. En raison de cela, vous devez être prudent dans le choix des méthodes de programmation qui fonctionnent bien dans les petits projets, ainsi que dans les grands projets de programmation. En d'autres termes, une méthode de programmation doit évoluer ou travailler avec toute taille de projet.
méthodologies de programmation doivent travailler aussi bien pour les petits et les grands projets.
Assurez-vous que les méthodes de programmation que vous développez aussi bien pour les petits et les grands projets.
1.4 Trop d'information mondiale
Les variables globales (variables connues à plus d'un fichier source) doit être évitée. Leur utilisation ne pas bien à l'échelle de grandes applications. Il suffit de penser ce qui se passe par la suite dans une grande application lorsque le nombre de variables globales devient plus grande et plus grande. Avant de vous le savez, il y a tellement d'entre eux que les variables deviennent impossibles à gérer.
Chaque fois que vous êtes sur le point d'utiliser une variable globale, demandez-vous pourquoi vous avez besoin d'un accès direct à la variable. Est-ce qu'un appel de fonction au module où la variable travail est définie aussi bien? La plupart du temps, la réponse est oui. Si la variable globale est modifiée (lecture et écriture), alors vous devriez vous demander comment la variable globale est sollicitée et s'il est préférable de préciser ce qu'il faut faire à travers un appel de fonction, laissant la façon dont la fonction.
Variables connues à plus d'un fichier source doit être évitée.
Certaines variables globales sont OK, mais mon expérience a été que seule une poignée sont toujours nécessaires, peu importe la taille d'un projet obtient.
1.5 En se fondant sur débogueurs
Débogueurs sont d'excellents outils, mais ils ne remplacent pas les méthodes de bonne programmation qui aident à éliminer les bugs en premier lieu.
Débogueurs font certainement trouver des bugs plus facile, mais à quel prix? Ne sachant qu'il ya un puissant débogueur là pour vous aider lorsque vous causer des ennuis parce que vous de concevoir et d'écrire un code plus rapide et le tester plus tôt que vous devriez avoir, ce qui provoque un bug qui vous oblige à utiliser le débogueur? Un bug qui ne serait pas là, vous aviez passé le temps dans la conception et les phases de codage du projet.
Personnellement, je pense que les programmeurs dont le premier plan d'action contre un bogue est d'utiliser un débogueur commencer à compter de plus en plus sur un débogueur au fil du temps. Les programmeurs qui utilisent un débogueur seulement après toutes les autres options ont été exercées commencent à compter de moins en moins sur un débogueur au fil du temps.
Au lieu d'un débogueur, pourquoi ne pas le code et faire une revue de code rapide, en utilisant les données disponibles à partir du plantage du programme ou un problème? Souvent, la preuve en plus regardant le code met en évidence le problème plus rapidement que le temps qu'il faut pour démarrer le programme dans le débogueur.
Utilisez un débogueur en dernier recours. Avoir recours à un débogueur signifie que vos méthodes de programmation ont échoué.
A présent, vous vous demandez probablement combien de fois j'utiliser le débogueur dans mon environnement de programmation. En raison de toutes les méthodes de programmation que j'ai dans mon sac de techniques, pas très souvent.
Votre objectif devrait être de développer et d'utiliser des techniques de programmation qui attrapent vos bugs pour vous. Ne comptez pas sur un débogueur pour attraper vos bugs.
1.6 Fixation du symptôme et non le problème
Disons que vous rencontrez un bug dans votre code. Comment allez-vous régler le problème? Avant de vous répondre, quel est le problème? Le problème est le bug lui-même, ou est-ce ce qui a causé le bug de se produire?
Trop souvent, le bogue ou le symptôme est en cours fixe et pas le problème réel qui a causé le bug en premier lieu. Un test simple est de penser combien de fois vous avez rencontré essentiellement le même bug. Si jamais, alors grand, vous êtes déjà régler le problème et non le symptôme. Dans le cas contraire, donner une réflexion à ce que vous fixons. Vous voulez sans doute trouver une nouvelle méthode de programmation qui aide à résoudre le problème une fois pour toutes.
Lors de la fixation d'un bug, résoudre le problème sous-jacent ou cause du bug et non pas seulement le bug lui-même.
Un premier exemple est des fuites de stockage. Une fuite de stockage est défini comme un objet de mémoire allouée, mais jamais libéré par votre programme. Dans la plupart des cas, la fuite de stockage ne cause pas directement les problèmes, mais si cela se produit sur un objet qui est alloué et (non) a libéré beaucoup? Vous manquez de mémoire à un moment donné.
L'exécution de mémoire est ce que vous a fait commencer à chercher le problème. Vous trouverez finalement la ligne manquante du code qui aurait dû deallocated l'objet de mémoire et d'ajouter la mémoire dans désaffectation du programme. Correction d'un bug, non?
Faux! Le problème sous-jacent de fuites de stockage passent inaperçues est encore dans le programme. En fait, si le gestionnaire de tas vous a dit où il y avait une fuite de stockage dans votre programme, vous n'auriez pas perdu votre temps traquer la fuite de stockage. Pour résoudre le problème une fois pour toutes, le gestionnaire de tas dois vous dire qu'il ya une fuite de stockage. Cette méthodologie de programmation est abordée au chapitre 5.
1.7 Code de inmaintenable
Nous avons tous eu l'expérience de la modification du code que quelqu'un d'autre a écrit, soit d'ajouter une nouvelle fonctionnalité ou pour résoudre un problème dans un module. Je ne sais pas pour vous, mais pour moi il est généralement pas une expérience agréable, car le code est souvent si difficile à comprendre que je finis par passer la majorité de mon temps à déterminer ce qui se passe.
Efforcez-vous d'écrire un code qui est compréhensible par d'autres programmeurs.
Bon code fonctionne. le code grand court et est facilement maintenable. Dans vos revues de code, vous devez rechercher le code qui fonctionne non seulement, mais aussi pour le code qui est simple dans la façon dont cela fonctionne. A quoi bon est une technique de codage si elle ne peut pas être compris? Considérer ce qui suit.
Est-ce fragment de code difficile pour vous de comprendre? Si le savez pas, vous la technique utilisée. Si vous ne connaissez pas la technique, alors il est sûr frustrant de comprendre. Ce code est un moyen de mettre en œuvre la fonction ceil sur la valeur nTotal / Nx.
1.8 Non Utiliser Windows débogage du noyau
Utilisez le noyau de débogage de votre environnement de développement.
Le SDK Windows fournit D2N.BAT (débogage à la non-debug) et N2D.BAT (non-débogage pour le débogage) fichiers batch dans le répertoire BIN pour basculer entre le débogage et non-débogage de Windows. Il est facile de laisser accidentellement votre version de Windows en mode non-debug. Il me est arrivé deux ou trois fois. Pour détecter cette situation, j'ai finalement imprimé un symbole spécial dans la ligne d'état de ma demande pour signifier qu'il est en cours d'exécution sous le débogage de Windows. Je vous suggère de faire quelque chose de semblable dans un endroit qui est facile à repérer dans votre application Windows. Pour détecter si vous êtes sous débogage Windows, utilisez le GetSystemMetrics (SM_DEBUG) appel. Il retourne zéro sous Windows et une valeur au détail de zéro sous le débogage de Windows.