Découvrez comment la solution Parasoft Continuous Quality permet de contrôler et de gérer les environnements de test pour fournir des logiciels de haute qualité en toute confiance. Inscrivez-vous pour la démo >>
En utilisant mémoire allouée dynamiquement correctement est une question délicate. Dans de nombreux cas, les programmes continuent à bien fonctionner après une erreur de programmation corruption de mémoire; parfois ils ne plantent pas du tout. Dans cet article, nous examinons comment l'analyse dynamique peut détecter les problèmes de corruption de mémoire courants dans le code C.
Une erreur courante consiste à essayer de réutiliser un pointeur après qu'il a déjà été libéré. Considérez les lignes 22-26 dans le programme suivant qui désalloue les blocs de mémoire avant d'allouer les plus grands:
Si vous exécutez ce code via détection d'erreur de mémoire outil tel que Parasoft Insure ++, vous obtiendrez un message d'erreur concernant un «pointeur suspendu» à la ligne 24. Dans ce cas, le bloc pointé par string_so_far est libéré à la ligne 23 puis utilisé dans la ligne suivante.
Wikipédia définit un pointeur suspendu en tant que «pointeurs qui ne pointent pas vers un objet valide du type approprié. Ce sont des cas particuliers de violations de la sécurité de la mémoire. Plus généralement, les références pendantes et les références sauvages sont des références qui ne se résolvent pas vers une destination valide. » Il s'agit d'une classe d'erreurs liées au fait que «la suppression explicite d'un objet de la mémoire ou la destruction de la trame de la pile au retour n'altère pas les pointeurs associés. Le pointeur pointe toujours vers le même emplacement dans la mémoire, même s'il peut désormais être utilisé à d'autres fins. » C'est un problème courant qui passe souvent inaperçu car les programmes avec ces erreurs se compilent souvent sans avertissement et peuvent parfois s'exécuter correctement.
Dans l'exemple ci-dessus, la référence de la mémoire tampon par le pointeur string_so_far est explicitement libérée puis déréférencée. L'analyse dynamique détecte ces erreurs qui peuvent passer inaperçues pendant les tests et même pendant le fonctionnement normal de l'application jusqu'à ce que le mauvais morceau de mémoire soit mal accédé.
En plus de ce type de problème de mémoire dynamique du pointeur suspendu, détection d'erreur de mémoire outil tel que Parasoft Insure ++ détecte également les erreurs suivantes:
Insure ++ détecte les erreurs au moment de la compilation ainsi qu'au moment de l'exécution. Les erreurs de compilation détectées incluent:
L'utilisateur exécute ensuite ce programme dans le cadre des tests de cas d'utilisation, tout comme vous utiliseriez le programme d'origine, et Insure ++ signale tous les problèmes détectés. Les rapports Insure ++ incluent des informations détaillées, notamment: sur le type de bogue, le fichier source et le numéro de ligne, le contenu réel de la ligne de code source, l'expression à l'origine du problème, avec des rapports comprenant:
Crédit image: xithorien
Les outils de test de logiciels automatisés de pointe de Parasoft prennent en charge l'ensemble du processus de développement logiciel, depuis le moment où le développeur écrit la première ligne de code jusqu'aux tests unitaires et fonctionnels, jusqu'aux tests de performance et de sécurité, en exploitant des environnements de test simulés en cours de route.