jeudi 29 septembre 2016

Outils d'analyse statique de code

Vous vous demandez à quoi peut bien servir l'analyse statique de codes sources, l'analyse statique de programmes ? Vous avez utilisé les outils classiques de Visual Studio comme le profiling alors l'analyse statique de code, c'est quoi ?


Vous avez d'un côté le code de l'autre l'outil d'analyse statique. Celui-ci, au regard d'une liste de recettes définies au préalable, va analyser le code afin de vérifier que vous avez respecté l'ensemble de ces "bonnes recettes".

Voici des exemples de recettes à respecter dans les langages C/C++/Objective-C :
  • Improper Restriction of Operations within the bounds of a Memory Buffer
  • Buffer Copy without Checking Size of Input (‘Classic Buffer Overflow’)
  • Out-of-bounds Read
  • Improper Validation of Array Index
  • Incorrect Calculation of Buffer Size
  • Uncontrolled Format String
On n'accorde jamais assez d'importance à l'écriture du code et aux recettes qu'il faut s'efforcer d'appliquer, de respecter. Il faudrait mettre en place des revues de code et un coding guidelines dès le début d'un projet. Il faut appliquer les bonnes recettes dès le début mais ce n'est pas toujours possible.

Donc si vous n'avez pas toute la confiance souhaitée dans un projet logiciel, il peut s'avérer utile de passer le code à la moulinette d'un outil d'analyse statique pour faire un état des lieux le plus précis possible. On pourrait dire que c'est du "reverse engineering" mais en reverse il est très tard pour se rendre compte de la mauvaise qualité d'un logiciel.

Outils d'analyse statique

La liste des outils proposés sur le marché est bien longue ...
Liste des outils d'analyse statique
Liste des outils d'analyse statique
En regardant de plus prêt cette longue liste qui nous est fournit par Wikipedia Analyse statique de programmes une première remarque la plus part de ces outils sont payant et pas qu'un peu : Le plugin C/C++ de SonarQube Pro est à 7000 $.

Comparaison des outils d'analyse statique

Que peut-on dire par exemple de Coverity et de SonarQube. Autres éléments de comparaison par exemple je souhaite faire de la retro-ingénierie, lequel de ces outils seraient le plus adapté.

Coverity

Prenons le premier, Coverity, le site est abscons c'est le moins qu'on puisse dire. Et la vidéo sur Improving Scientific Research: CERN and Coverity(R) Static Analysis vous projette dans l'espace à travers l'accélérateur de particules du CERN, rien de moins. Un beau voyage dans l'espace mais vous vous vous retrouvez avec votre code.

On aura accès à la liste des recettes appliquées par l'outil d'analyse, par exemple en C/C++ et Objective-C.
Pour le reste il ne vous reste plus qu'à appeler :

To purchase Synopsys Software Integrity products or services, please call (800) 873-8193

Ce n'est pas très engageant !

Et sinon enregistrez vous pour un essai ...

SonarQube

On dirait plutôt un "all in one" plutôt qu'un outil purement d'analyse statique de code source.
SonarQube - All in One
SonarQube - All in One
Les modules sont payant en tous cas pour ce qui concerne le C/C++ :

SonarQube Plugin C/C++
SonarQube Plugin C/C++ à 7000 $
Et sinon SonarQube, ils passent leur temps à analyser les logiciels, voici le résultat :
SonarQube Analyse Static
SonarQube Analyse Static - Apache HTTP Server en langage C - Bash - Git - PHP
Ils ne se la pête pas un peu !? Je ne suis pas certain de vouloir que mon logiciel soit étalé de cette façon avec ses bugs ses failles de sécurité.

Git est en mode "A" pour la sécurité, il va être content Linus Torvalds. Cliquons sur le projet Git pour voir les détails fournit par SonarQube :
SoanrQube - Analyse Statique de code - Projet Git
No Vulnerabilities
At least one blocker bug
Code Smells : ça sent bon le code ? mdr.

Cliquons sur Bugs pour voir :
SonarQube
SonarQube Analyse des Bugs de Git
Quel joli graphique, en fait l'état du logiciel Git est affiché là ouvert au publique. C'est incroyable la transparence de nos jours.

1 127 Bugs
205 New Bugs

Cppcheck

Online demo c'est amusant plutôt ludique. 

void f()
{
    char *p;
    *p = 0;
}

Check :

Cppcheck 1.75

[test.cpp:3]: (style) Variable 'p' is not assigned a value.
[test.cpp:4]: (error) Uninitialized variable: p

Done!
Detect various kinds of bugs in your code:

Out of bounds checking
Memory leaks checking
Detect possible null pointer dereferences
Check for uninitialized variables
Check for invalid usage of STL
Checking exception safety
Warn if obsolete or unsafe functions are used
Warn about unused or redundant code
Detect various suspicious code indicating bugs

List of all checks

Plugin for Visual Studio

Conclusion

Je ne vous ai certainement pas donné assez l'envie d'utiliser ces outils ... Mais je vais certainement devoir en choisir un pour travailler avec, le mois prochain ... alors je vous tiendrais au courant.

Nous avons compris maintenant que la qualité logicielle se conçoit dès le début d'un projet en mettant en place les bons outils et les bonnes pratiques de développement.

Alors aimez-nous, sinon ... champignon !

jeudi 22 septembre 2016

JIRA Software - Outils de suivi de problèmes pour vos équipes de développement

Vous avez déjà entendu parler de JIRA, vous souhaitez en savoir plus sur les outils proposés par Atlassian ? Suivez-moi, on va voir de quoi il retourne. Aujourd'hui Atlassian fait de la pub et curieusement la pub c'est plus claire que le site lui même :
JIRA Software c'est quoi ?
On comprend que pour essayer gratuitement, il faut une base Jira Software obligatoire plus au choix deux modules Confluence et/ou JIRA Service Desk à 10 € chacun, le tout pour 30€/mois.

C'est claire non ?

Pour ma part, j'ai tout coché, après avoir cliqué sur le bouton "Essayer gratuitement" je me retrouve devant le formulaire d'inscription suivant :
Atlassian Confluence et JIRA Service
Sur la partie gauche on a le choix de télécharger les modules et de les installer sur "son serveur". Sur la partie droite il faut choisir un nom de sous-domaine qui servira à accéder à vos outils.

La prochaine séance, on verra ce que l'on peut faire avec tout ça.

JIRA Software Rapide Tour

Connexion :
Ecran de connexion JIRA - Software
Premiers pas, choisir une langue :

Choisir une langue
Choisir un avatar :
Choisir un avatar
Les trois choix pour démarrer :
Trois choix pour démarrer 
Afficher les données d'échantillon : est un choix avec des données qui vont vivres, ceci afin de découvrir les possibilités de la suite logicielles.

Créer un nouveau projet : pour ceux qui connaissent déjà JIRA créer un projet vide.

Importer un autre outil : possibilité d'importation ? à découvrir.

Je vais faire le choix du premier type pour découvrir et créer un "Centre d'assistance informatique" :

Création d'un centre d'assistance informatique
A la suite de la création de mon Centre d'assistance informatique, je parcours rapidement le petit didacticiel.

Didacticiel sur le Centre d'assistance informatique

Didacticiel sur la création du centre d'assistance
Voir et Travailler sur les problèmes
Comment se porte votre équipe
Connaissez vos clients
Je comprends qu'il s'agit d'une sorte de CRM (Customer Relationship Management). A la sortie du didacticiel, c'est très rapide me voici de retrour sur le tableau de bord de mon Centre d'assistance indormatique

Tableau de bord du Centre d'assistance de JIRA

De retour sur le tableau de bord de mon Centre d'assistance informatique que je viens de créer :
Centre d'assistance, je suis génial et j'ai appris les concepts clés du service
Par la suite, je vais faire autre chose ... le temps passe. De retour sur le site JIRA voici l'écran tableaux de bord, c'est un peu déroutant mais mon centre d'assistance est bien là dans le menu Projets :
JIRA Software - Centre d'assistance
Les données ont vécues, des tâches m'ont été attribuées.

J'estime que le sujet est assez important et assez intéressant pour continuer dans un Blog à part. Voici donc JIRA Software Exploration