IdentifiantMot de passe
Loading...
Mot de passe oubli� ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les r�ponses en temps r�el, voter pour les messages, poser vos propres questions et recevoir la newsletter

Analyse de code Discussion :

V�rification statique de code


Sujet :

Analyse de code

Vue hybride

Message pr�c�dent Message pr�c�dent   Message suivant Message suivant
  1. #1
    R�dacteur

    Avatar de Davidbrcz
    Homme Profil pro
    Ing Supa�ro - Doctorant ONERA
    Inscrit en
    Juin 2006
    Messages
    2 307
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 33
    Localisation : Suisse

    Informations professionnelles :
    Activit� : Ing Supa�ro - Doctorant ONERA

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 307
    Par d�faut V�rification statique de code
    Bonjour � tous.

    Je travaille actuellement dans un projet de robotique et j'�cris du code plus ou moins bas niveau.

    A divers endroits du code, je manipule des entit�s qui sont existent physiquement sur ma carte. Par exemple, j'ai un �l�ment qui ne peut �tre branch� que sur les pins 2,3 18, 19, 20 ou 21 de ma carte et pas une autre.

    Je souhaiterait automatiser les v�rifications pour assurer qu'au moins, le code se base sur des pins "acceptables". Les classes se basant sur des template, je pensais faire un coup de m�ta prog pour v�rifier que l'entier est bien dans un vecteur de boost::mpl mais j'ai 1 souci principal : le poids du code mort. La carte n'a pas de la place illimit�e et j'ai peur que ca en mange pour rien. (par ailleurs, j'ai pas essay� boost avec avr-g++, pas s�r que ca passe)

    A la suite de cette discussion Je pensais donc me tourner vers un outil enti�rement externe. Sauf que l�, je s�che : je n'ai pas le moindre nom de logiciel en t�te qui soit gratuit et tourne sous linux.

    Si vous pouvez �clairer ma lanterne !
    Merci.
    "Never use brute force in fighting an exponential." (Andrei Alexandrescu)

    Mes articles dont Conseils divers sur le C++
    Une tr�s bonne doc sur le C++ (en) Why linux is better (fr)

  2. #2
    Expert �minent
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 644
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 53
    Localisation : Belgique

    Informations professionnelles :
    Activit� : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 644
    Par d�faut
    Salut,

    D�j�, normalement, si tu passes par la programmation g�n�rique et que tu restreins tes politiques aux seules valeur acceptable, tu devrais pouvoir �viter pas mal de probl�mes, pour un code qui, au final, ne devrait pas �tre particuli�rement plus gros, vu que les grosses v�rifications se font � la compilation.

    Par contre, wikipedia parle de lint sous linux.. L'as tu essay�?
    A m�diter: La solution la plus simple est toujours la moins compliqu�e
    Ce qui se con�oit bien s'�nonce clairement, et les mots pour le dire vous viennent ais�ment. Nicolas Boileau
    Compiler Gcc sous windows avec MinGW
    Coder efficacement en C++ : dans les bacs le 17 f�vrier 2014
    mon tout nouveau blog

  3. #3
    R�dacteur

    Avatar de Davidbrcz
    Homme Profil pro
    Ing Supa�ro - Doctorant ONERA
    Inscrit en
    Juin 2006
    Messages
    2 307
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 33
    Localisation : Suisse

    Informations professionnelles :
    Activit� : Ing Supa�ro - Doctorant ONERA

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 307
    Par d�faut
    et que tu restreins tes politiques aux seules valeur acceptable,
    Effectivement, j'avais oubli� qu'un static_assert accepte n'importe quelle expression logique valide .

    Probl�me r�solu
    "Never use brute force in fighting an exponential." (Andrei Alexandrescu)

    Mes articles dont Conseils divers sur le C++
    Une tr�s bonne doc sur le C++ (en) Why linux is better (fr)

  4. #4
    Expert �minent
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 644
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 53
    Localisation : Belgique

    Informations professionnelles :
    Activit� : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 644
    Par d�faut
    Ceci dit, apr�s avoir lu l'article en question, je ne peux m'emp�cher de penser que l'utilisation d'un bon outil d'analyse statique du code ne peut qu'apporter une qualit� non n�gligeable...

    Malheureusement, il semble que, encore une fois, linux fasse figure de parent pauvre en terme d'outils efficaces dans le domaine

    Ce qui est, quand on y pense, un comble �tant donn� le nombre de d�veloppements pour lesquels on utilise linux .

    Enfin, si tu trouves un outil efficace, n'h�sites pas � nous en faire part
    A m�diter: La solution la plus simple est toujours la moins compliqu�e
    Ce qui se con�oit bien s'�nonce clairement, et les mots pour le dire vous viennent ais�ment. Nicolas Boileau
    Compiler Gcc sous windows avec MinGW
    Coder efficacement en C++ : dans les bacs le 17 f�vrier 2014
    mon tout nouveau blog

  5. #5
    Inactif  


    Homme Profil pro
    Inscrit en
    Novembre 2008
    Messages
    5 288
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 49
    Localisation : France, Rh�ne (Rh�ne Alpes)

    Informations professionnelles :
    Secteur : Sant�

    Informations forums :
    Inscription : Novembre 2008
    Messages : 5 288
    Par d�faut
    Je connais pas les outils cit�s dans l'article, mais cpp check n'est pas un �quivalent ?
    De plus, sans avoir personnellement fait, je sais qu'il est possible dans cpp check d'ajouter ses propres r�gles

  6. #6
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ing�nieur d�veloppement logiciels
    Inscrit en
    Mai 2008
    Messages
    27 131
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activit� : Ing�nieur d�veloppement logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 27 131
    Billets dans le blog
    150
    Par d�faut
    Bonjour,

    Depuis un certains article de Carmack, j'ai fait un peu des recherches.
    Pour Linux (gratuit), j'ai trouv� les trois outils suivant :

    cppcheck
    oink
    flawfinder

    Malheureusement, je n'ai pas eu le temps de tester tout cela.
    Vous souhaitez participer � la rubrique 2D/3D/Jeux ? Contactez-moi

    Ma page sur DVP
    Mon Portfolio

    Qui conna�t l'erreur, conna�t la solution.

  7. #7
    Expert �minent
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 644
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 53
    Localisation : Belgique

    Informations professionnelles :
    Activit� : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 644
    Par d�faut
    Mais, ceci dit, pour rebondir sur
    Citation Envoy� par Davidbrcz Voir le message
    Effectivement, j'avais oubli� qu'un static_assert accepte n'importe quelle expression logique valide .

    Probl�me r�solu
    A vrai dire, je ne pensais m�me pas au static_assert, mais "juste" � une s�rie de traits correctement �tudi�s

    Je m'explique... : Tu parles d'�l�ments qui peuvent �tre branch�s sur les pins 2,3 18, 19, 20 ou 21.

    Cela signifie que si tu obtiens quelque chose sur "n'importe quel autre pin" (quel que soit son num�ro), tu ne dois pas l'accepter, et que si tu essaye d'acc�der � l'�tat de l'un de ces "n'importe quel autre" pin, il peut sembler correct de refuser la compilation...

    Je serais donc parti, assez benoitement, sur quelque chose comme
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    /* le template, sans la valeur énumérée, pour toute valeur non prévue*/
    template <int >
    struct PinTrait
    {
    };
    /* les spécialisations pour  2,3 18, 19, 20 et 21 */
    template <int>
    struct PinTrait<2>
    {
        enum{value = 2};
    };
    template <int>
    struct PinTrait<3>
    {
        enum{value = 3};
    };
    template <int>
    struct PinTrait<18>
    {
        enum{value = 18};
    };
    template <int>
    struct PinTrait<19>
    {
        enum{value = 19};
    };
    template <int>
    struct PinTrait<20>
    {
        enum{value = 20};
    };
    template <int>
    struct PinTrait<21>
    {
        enum{value = 21};
    };
    avec comme r�sultat le fait que PinTrait<8>::value; est accept�, alors que PinTrait<XXX>::value (o� XXX n'est pas une valeur utilisable) sera refus� � la compilation, m�me si c'est avec un message relativement cryptique

    Encore faut il voir si cela correspond � tes besoins, bien sur
    A m�diter: La solution la plus simple est toujours la moins compliqu�e
    Ce qui se con�oit bien s'�nonce clairement, et les mots pour le dire vous viennent ais�ment. Nicolas Boileau
    Compiler Gcc sous windows avec MinGW
    Coder efficacement en C++ : dans les bacs le 17 f�vrier 2014
    mon tout nouveau blog

  8. #8
    R�dacteur

    Avatar de Davidbrcz
    Homme Profil pro
    Ing Supa�ro - Doctorant ONERA
    Inscrit en
    Juin 2006
    Messages
    2 307
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 33
    Localisation : Suisse

    Informations professionnelles :
    Activit� : Ing Supa�ro - Doctorant ONERA

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 307
    Par d�faut
    koala01 >> Ca fait trop de classe. Je n'ai que 256Kb de flash. Et mon binaire p�se d�j� 15kb.

    LittleWhite >> merci pour les liens. Je connaissais Flawfinder et il traque plus des bugs de s�curit�.

    Cependant, le premier me semble correspondre � ce que je recherche ! A creuser
    "Never use brute force in fighting an exponential." (Andrei Alexandrescu)

    Mes articles dont Conseils divers sur le C++
    Une tr�s bonne doc sur le C++ (en) Why linux is better (fr)

  9. #9
    R�dacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Par d�faut
    Salut,
    En embarqu�, les outils d'analyse de code type lint, Qac ou polyspace, je les ai vu employer pour v�rifier des r�gles de codage (MISRA par expl et +), des r�gles de 'formattage' (nbr d'espace, retour � la ligne, etc.), mais jamais pour v�rifier l'utilisation des bonnes pins.

    @david : je ne comprends pas ta derni�re remarque. Ces classes ne g�n�rent pas de code comme en g�n�ral ce qui rel�ve de la m�ta-prog?

    Pour le support boost/Avr, il semblerait que d'autres aient tent� l'aventure : cf ici

+ R�pondre � la discussion
Cette discussion est r�solue.

Discussions similaires

  1. V�rification (statique) d'un type
    Par Julie++ dans le forum Langages de programmation
    R�ponses: 4
    Dernier message: 27/09/2008, 12h22
  2. Analyse statique de code
    Par Bayard dans le forum Analyse de code
    R�ponses: 6
    Dernier message: 22/10/2007, 11h07
  3. R�ponses: 1
    Dernier message: 22/07/2007, 08h58
  4. [RegEx] V�rification d'un code postal
    Par FRANCKYIV dans le forum Langage
    R�ponses: 3
    Dernier message: 15/04/2006, 23h53
  5. Outils d'analyse statique de code assembleur ?
    Par atomic dans le forum Assembleur
    R�ponses: 4
    Dernier message: 11/06/2004, 11h42

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo