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

  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 : 28
    Localisation : Suisse

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

    Informations forums :
    Inscription : juin 2006
    Messages : 2 307
    Points : 5 103
    Points
    5 103
    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 sénior
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    octobre 2004
    Messages
    11 448
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : octobre 2004
    Messages : 11 448
    Points : 29 614
    Points
    29 614
    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 : 28
    Localisation : Suisse

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

    Informations forums :
    Inscription : juin 2006
    Messages : 2 307
    Points : 5 103
    Points
    5 103
    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 sénior
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    octobre 2004
    Messages
    11 448
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : octobre 2004
    Messages : 11 448
    Points : 29 614
    Points
    29 614
    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 295
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Secteur : Santé

    Informations forums :
    Inscription : novembre 2008
    Messages : 5 295
    Points : 15 671
    Points
    15 671
    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
    25 587
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : mai 2008
    Messages : 25 587
    Points : 199 300
    Points
    199 300
    Billets dans le blog
    78
    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 sénior
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    octobre 2004
    Messages
    11 448
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : octobre 2004
    Messages : 11 448
    Points : 29 614
    Points
    29 614
    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 : 28
    Localisation : Suisse

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

    Informations forums :
    Inscription : juin 2006
    Messages : 2 307
    Points : 5 103
    Points
    5 103
    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
    Points : 13 485
    Points
    13 485
    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

  10. #10
    screetch
    Invité(e)
    Par défaut
    d'apres mes tests, avoir les structs en template ou le nombre directement n'affecte pas la taille du binaire, meme en version debug. Ca affecte la taille des informations de debug mais elles doivent etre strippees pour gagner de la place je pense

+ 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, 13h22
  2. Analyse statique de code
    Par Bayard dans le forum Analyse de code
    Réponses: 6
    Dernier message: 22/10/2007, 12h07
  3. Création et utilisation de librairies statiques avec Code::Blocks
    Par somberlord dans le forum Code::Blocks
    Réponses: 1
    Dernier message: 22/07/2007, 09h58
  4. [RegEx] Vérification d'un code postal
    Par FRANCKYIV dans le forum Langage
    Réponses: 3
    Dernier message: 16/04/2006, 00h53
  5. Outils d'analyse statique de code assembleur ?
    Par atomic dans le forum Assembleur
    Réponses: 4
    Dernier message: 11/06/2004, 12h42

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