OVH Cloud OVH Cloud

Analyseur de code C++

16 réponses
Avatar
Yannick
Bonjour =E0 tous,

nouveau dans les NewsGroups Google, je me r=E9jouis de trouver des
TCLeurs, Pythoniens et autres C++eurs :o)

Je suis =E0 la recherche d'un bon alalyseur de code C++ (genre PC Lint)
afin d'int=E9grer un bon vieux contr=F4le de mon code avant de le
compiler... une =E9tourderie =E9tant si vite arriv=E9e O:-}

Merci d'avance pour votre aide !

Yannick.

PS : si c'est gratuit, c'est encore mieux pour mon portefeuille...

6 réponses

1 2
Avatar
Michel Decima
In news:,
Fabien LE LEZ typed:
On Tue, 4 Jul 2006 13:49:38 +0200, "Michel Decima"
:

void maClasse::MetAjourTableauOctets()
{
m_MonTableauDoctets[m_MaLongueurDeTableauDoctet - 1] = '';
}


J'ai du mal a voir l'utilité de ce type d'avertissement dans le
cadre du bout de code ci-dessus (avec une longueur que je suppose
membre de
la classe).


Si la classe en question n'est pas triviale, elle risque d'évoluer, et
la valeur de "m_MaLongueurDeTableauDoctet" pourrait très bien, un
jour, se retrouver égale à 0, ou supérieure à la taille de
"m_MonTableauDoctets".


Pour la valeur 0, je suis d'accord. Mais si la valeur de
m_MaLongueurDeTableauDoctet venait a devenir un jour superieure
a la taille de MonTableauDoctets, et ceci sans changer le nom de la
variable, la maintenance de la classe non triviale va devenir un plaisir.

Ce code me paraît effectivement incorrect :

- Si on est absolument sûr que la valeur de
"m_MaLongueurDeTableauDoctet" est forcément correcte, il faut
expliquer pourquoi dans un commentaire.


ok, mais est-ce suffisant pour faire taire l'outil d'analyse (j'en doute).

- Un assert() ne serait pas inutile -- ne serait-ce que
assert (m_MaLongueurDeTableauDoctet>0)


ok, et ca devrait suffire a faire taire l'outil s'il n'est pas trop stupide
(je ne connais pas le fonctionnement de ce genre d'outil).

- On a deux variables qui me semblent liées : m_MonTableauDoctets et
m_MaLongueurDeTableauDoctet. Elles devraient AMHA être regroupées dans
une classe :

class TableauOctets
{
public:
// l'interface
private:
un_type_quelconque data;
size_t longueur;
};

Ainsi, le nombre réduit de fonctions permettrait de s'assurer que
"longueur" a toujours une valeur correcte.


C'est la meilleure solution. Mais alors il faudrait fournir une fonction
equivalente a celle de depart dans l'interface, disons

void TableauOctets::MetAJour()
{
data[longueur-1] = '';
}

Et ca doit (devrait?) déclencher encore l'avertissement de l'outil d'analyse
(et ca semble inutile).

J'ai l'impression que dans une classe triviale, on va vouloir faire taire
l'outil
parce que dans ce cas on s'est deja assuré que 'longueur' est bien correcte,
et dans une classe non-triviale, il faudra revoir le design pour limiter la
complexité, et c'est assez éloigné de la premiere correction valide (assert)
pour faire
taire le message.

Bref, mon opinion vu de loin, sans connaitre l'outil, était qu'on allait
faire face
a une avalanche de warnings pas forcement pertinents. Mais bon, je veux
bien remedier a mon ignorance s'il y a une documentation sur les capacites
de ces analyseurs quelque part... un lien ? merci.



Avatar
kanze
Chanclou wrote:
Cela m'intéresse aussi. Actuellement, je travaille sur de la
génération de code. Et l'intérêt d'avoir une analyse du code
(comme java c'est le faire me semble-t-il !) est de pouvoir
analyser ce que l'utilisateur souhaite garder (ce qu'il a
modifié) et ce qui est à regénérer (tout le reste).


Ce qu'on garde, c'est ce qu'on n'a pas généré, non ? Rational
Rose sait faire la distinction, et je ne vois pas pourquoi la
technique qu'il utilise (des commentaires spéciaux) ne
marcherait pas ailleurs.

Exemple pratique je génère une classe de base et une dérivée
d'implémentation. Via mon modèle je rajoute une nouvelle
méthode à ma classe. La classe de base est regénérée de A à Z,
elle intègre facilement l'ajout. En revanche, dans la classe
d'implémentation, si je n'ai pas d'analyse de code, je suis
incapable d'insérer la déclaration et l'implémentation
minimale de la méthode au bon endroit sans risquer d'altérer
quelquechose.


Oui et non. Tout dépend d'où et de comment l'utilisateur a
inséré l'implémentation et les extensions. Dans le cas de
Rational Rose, on prévoit les endroits, au moyen des
commentaires bien précis ; si l'utilisateur respecte les
règles, ses ajoutes se trouveront tous aux endroits prévus, et
ne se perdront pas.

--
James Kanze GABI Software
Conseils en informatique orientée objet/
Beratung in objektorientierter Datenverarbeitung
9 place Sémard, 78210 St.-Cyr-l'École, France, +33 (0)1 30 23 00 34

Avatar
Fabien LE LEZ
On Tue, 4 Jul 2006 15:48:21 +0200, "Michel Decima"
:

la maintenance de la classe non triviale va devenir un plaisir.


Yep. C'est pour ça que je dis que le code est incorrect.

- Si on est absolument sûr que la valeur de
"m_MaLongueurDeTableauDoctet" est forcément correcte, il faut
expliquer pourquoi dans un commentaire.


ok, mais est-ce suffisant pour faire taire l'outil d'analyse (j'en doute).


Non. Il faut que le commentaire ait une forme spéciale, pour dire à
l'outil d'analyse de se taire.

Bref, mon opinion vu de loin, sans connaitre l'outil, était qu'on allait
faire face a une avalanche de warnings pas forcement pertinents.


Effectivement...


Avatar
Sylvain
Chanclou wrote on 04/07/2006 12:14:
comme java c'est le
faire me semble-t-il


si tu penses au 'refactor' de Eclipse, c'est un tool d'Eclipse, pas une
fonctionnalité du langage (on pourrait implémenter le même type d'outil
pour tout langage objet).

Sylvain.

Avatar
Guillaume Leroi
Olivier Miakinen <om+ writes:


nouveau dans les NewsGroups Google,


Qu'est-ce que c'est ? ©

je me réjouis de trouver des
TCLeurs, Pythoniens et autres C++eurs :o)

Je suis à la recherche d'un bon analyseur de code C++ (genre PC Lint)
afin d'intégrer un bon vieux contrôle de mon code avant de le
compiler... une étourderie étant si vite arrivée O:-}




http://en.wikipedia.org/wiki/List_of_tools_for_static_code_analysis

J'espere que tu y trouveras ton bonheur.

--
Leroi Guillaume


Avatar
Loïc Joly
Bonjour à tous,

nouveau dans les NewsGroups Google, je me réjouis de trouver des
TCLeurs, Pythoniens et autres C++eurs :o)

Je suis à la recherche d'un bon alalyseur de code C++ (genre PC Lint)


Bin, je propose PC-Lint...

--
Loïc

1 2