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

mercredi 24 août 2016

Outils de développement pour l'IoT

Vous cherchez comment développer pour l'Internet of Things, l'Internet des Objets et vous ne savez pas trop comment vous y prendre, cet article est pour vous. Comment démarrer en développement pour l'IoT.

Je suis parti de lecture de cet article dans un forum :

Open Source RTOS for IoT Gains Support from Linaro
Où l'on explique en gros que Linaro rejoint le projet Zephyr et que Linaro va aider Zephyr à conrétiser sa vision de devenir le premier multi-architecture open source RTOS pour l'IoT et là ça commence à devenir intéressant.
Linux Foundation's Projects
Et puis j'ai donc déroulé la pelote... Je suis arrivé sur le projet Zephyr de la Linux Foundation, Zephyr a small kernel for embedded environnemental sensors.

Zephyr project
Le kernel Zephyr supporte un tas de boards
Et parmi les boards supportées, on trouve pour les processeurs x86 : x86 Emulation (QEMU)

Me voici donc en train d'installer un QEMU sur mon PC afin de faire tourner Zephyr.

Qt pour l'embarqué

Sur la même base qu'un Linux Embedded, on trouve le Yocto Project :

yocto Project
It's not an embedded Linux distribution – it creates a custom one for you

https://blog.qt.io/blog/2016/07/01/aligning-with-the-yocto-project/

To Be Continued

lundi 4 juillet 2016

Tuto Git - Ultra rapide

En choisissant les articles concernés par le libellé Tuto Git vous trouverez quelques informations sur "comment bien démarrer avec GitHub" mais c'est un peu plus compliqué alors ici on va résumer tout cela très rapidement.

On a un un Repository sur GitHub, Git GUI et Git Bash d'installer.
Git Bash ne sert à rien tout est faisable à partir de Git UI.

Le principe pour faire une modification sur la branche "master" c'est de :
Checkouter la branche master :

Checkout de la branche "master"
Bon, lisez surtout le Tuto, à continuer ...





Outils Web de Gestion de projet

Voici un outil de gestion de projet qui semble bien au goût du jour, mon dernier article sur ce sujet s'était un peu perdu dans les différents outils de gestion de projets collaboratifs. Alors, et si Teamleader était le bon outil pour gérer vos projets sur le web?

Teamleader

http://www.teamleader.fr/fra/tour

Je lis rapidement le site et je trouve que l'on nous présente un bon outil de gestion du temps et de la  facturation associée aux clients et au temps passé.

Je ne pense pas que cet outil soit adapté à la gestion d'un projet de R&D, c'est à mon avis un outils de gestion adapté à un artisan.

Le Prix

En tous cas pour le prix c'est simple un formulaire très efficace :

Toutes options, pour une dizaine de personnes, il vous coûtera : 230 € / mois

jeudi 19 mai 2016

Tuto Git - Commiter calmement

Vous l'aurez compris Git est loin d'être intuitif pour ceux qui auraient l'habitude d'un autre outil de gestion de configuration c'est un peu... la panique. Pourtant on est toujours dans une logique Checkout / Commit.

Mais nous allons nous en sortir, la meilleure page de doc est la suivante à lire rapidement est :

Git.scm - 2.2 Les bases de Git - Enregistrer des modifications dans le dépôt

Notez le diagramme des états du fichier en gestion de configuration avec Git :

Git - Etats du fichier en gestion de configuration

Création de la "localisation" dans les fichiers ressources du projet

Je vais m'intéresser à la création de la "localisation" de mon application. Je souhaite que mon application parle plusieurs langues. Je vais donc créer automatiquement des fichiers de ressources.

Avec Visual Studio, je me positionne dans la partie Design du formulaire que je souhaite "localiser", ici il s'agit du formulaire de Login des utilisateurs qui se trouve dans le répertoire Member. Et je clique sur le menu Outil->Créer automatiquement des fichiers de ressources. Voilà le travail est fait, le fichier :
/Member/App_LocalResources/Login.aspx.resx est créé.

Je créé la langue "en" (English) en dupliquant le fichier Login.aspx.resx et en le renommant en Login.aspx.en.resx puis je traduis les labels.

Voilà, c'est terminé !

Vous pouvez retrouver ce travail sur le site GitHub du projet : ASP-NET-Survey-Online

Commiter ce travail de "localisation"

Je cherche maintenant à commiter ce travail dans mon GitHub. On me dit que la meilleur commande pour savoir ce qu'il se passe, c'est de vérifier l'état des fichiers par :

$git status

Command Git Status
Si je compare avec ce que j'obtiens dans Git UI :

Git UI
Pas de doutes, c'est sensiblement la même chose. Et maintenant comment commiter ?

Ignorer certains fichiers

C'est indispensable pour une bonne gestion du votre projet. En effet "mettre sous surveillance" des fichiers inutile peut être néfaste...

Posez, à la racine du répertoire un fichier .gitignore avec au moins une ligne (Visual Studio)  :
*.suo

Pour ignorer les fichiers de Visual Studio, whaou mais .gitignore n'est pas un nom de fichier ! ... ma ma ma poua grrrrr ! Donc la seule façon de créer un fichier .gitignore, c'est avec la console Git Bash et la commande :

$ echo "*.suo" > .girignore

Et oui, pensons Linux !

Checkout master

Voici, ici expliquée la philosophie du truc. Dans le Tuto Git précédent on est coincé, on va donc chercher à "Brancher" à "Merger" pour se retrouver sur la branche master. Car une branche HEAD à été crée pour réaliser cette nouvelle fonctionnalité et l'on en a plus besoin.

https://git-scm.com/book/fr/v1/Les-branches-avec-Git-Brancher-et-fusionner%C2%A0%3A-les-bases

On ouvre "Visualize All Branch history" de Git UI menu "Repository" et l'on obtient "après opération", le résultat suivant :

gitk
J'ai donc checkouté la branche master. Je veux essayer de Merger Head avec master. Je retourne dans Git UI. Je Merge->Local Merge... Et je peux alors pusher sur le serveur.

Je pushe pour mettre mon travail sur le serveur :

Git me laisse Pusher ma branche mergée
Je vérifie et ça fonctionne, j'ai bien la Localization dans mon GitHub :

Résultat du Push je retrouve mon travail sur le serveur GitHub
C'est un peu empirique mais bon ...

Pour aller plus loin je vous propose une vidéo :

https://www.grafikart.fr/formations/git/fork-pull-request
Ca part d'un peu trop loin, en plus il mélange GitHub et Bitbucket mais c'est intéressant sur les notions de Fork et de PullRequest.

Comprendre la philo de Git

C'est une différence essentielle entre Git et TFS avec TFs vous travailler sur la branche principale, le tronc. Vos modifications sont en différence par rapport au tronc et c'est elles qui constituent le "commit" ou le "checkin".

Avec Git, dès que vous avez une modification à faire, vous devez créer une branche et c'est la branche que vous commitez. Sans branche point de commit !

Have fun !

Tuto Git - Pourquoi on ne peut pas Pusher ?

C'est délicat, vous avez fait un peu de travail dans GitHub par exemple vous avez complété le fichier README.md directement dans l'interface Web et donc :

Tuto Git - pourquoi je ne peux plus pusher ?

Bon, ce n'est pas grave vous checktoutez : Branch->Checkout. Puis vous faites un peu de travail en local et vous tentez de pusher et là :

Tuto Git - pourquoi je ne peux plus pusher ?

Ah, ce n'est tout à fait le même message... On va peut être finir par y arriver.

Tuto Git

Clique sur le bouton "Commit" :

Git - Commit potentially dangerous

En effet c'est dangereux si vous procédez ainsi, les fichiers de votre copie locale seront vu comme étant archivés alors qu'ils ne le sont pas.

On se retrouve dans une situation où l'on ne peut pas "pusher" mais on peut "commiter" ! 

What the fuck !

mardi 17 mai 2016

Tuto Git - Comment créer un fichier sur GitHub et le conserver dans Git UI

Vous venez d'effacer le fichier README.md, et bien oui Git a tout effacé. En effet lors de votre dernier commit vous en aviez marre de voir le message "Impossible de commit" bla bla bla... en fait vous aviez créé un fichier sur GitHub et vous ne l'aviez pas rapatrié sur votre disque dur.

Et oui, GitHub va vous harceler afin de créer un fichier README.md et c'est bien normal car c'est le fichier de présentation de votre solution dans GitHub. Vous cliquez donc "Create README.md" et lors du prochain Commit ce fichier sera effacé.

GiHub Création du fichier README.md

Retrouver le fichier README.md sur votre Disque Dur

Vous me direz c'est super simple il suffit de faire un Get Lateste Version sur le fichier README.md dans Git cela donne ceci :

Merge Into master
Et vous retrouvez votre fichier, créé avec GitHub sur votre disque dur :



Have fun !

mercredi 27 avril 2016

Tuto Git - Bien démarrer avec Git GUI sous Windows

Les tutos sur Git GUI sont rares, Linux oblige et comme on est sous Windows, ils sont difficilement accessibles. En général on tombe sur Gui Bash et des lignes de commandes. Essayons de nous en sortir quand même avec Git GUI sous Windows.

Git Gui Windows
Download - Git GUI pour Windows

Mais pour ceux qui utilisent Git sous Windows, il est quand même plus simple et plus intuitif d'avoir des écrans que la console en mode prompteur :

Git Bash en ligne de commandes

Je prends ici quelques notes, je compléterai par la suite... Voici donc Git GUI :

Git Gui Windows
Git GUI pour Windows - en finir avec les lignes de commandes

Pour "Gitter" un projet (c'est à dire le mettre en gestion des configurations avec Git dans GitHub), cela se passe en trois temps...

1 - Référencer les sources à gitter dans Git
Dans le répertoire que l'on veut "Gitter" faire : bouton droit->Git GUI Here
Choisir le répertoire à Gitter. un répertoire ".git" caché est alors créé. Attention cochez "afficher les fichiers cachés".
La liste des fichiers "Gitter" apparait "en haut" de Git GUI dans "Unstage Changes".

2 - Commiter les sources en cliquant sur le bouton "Commit"
Si on est sous windows alors il faut traiter les CRLF...
La liste des sources à gitter se trouve maintenant en bas dans "Staged Changes".

3 - Uploader sur le "remote repository"
On a créé un repository dans GitHub. Il faut alors faire un "Push" avec les bonnes coordonnées du repositorie distant pour que les sources alors apparaissent en ligne...

Miraculus !

Git GUI - Installation sous Windows

Une fois que vous avez téléchargé l'exécutable Git-2.9.0-64-bit.exe et que vous cliquez dessus, voici quelques copies d'écrans des éléments qu'il vous faudra configurer.

Git Gui - Installation Windows
Git GUI - Installation sous Windows - Choix de l'interface

Franchement, je ne vois pas l'utilité ici de choisir "Use Git from Git Bash only". Nous n'aurions alors que la console Bash à notre disposition.

Git GUI - Installation sous Windows - Choix du mode CRLF ou LF

Il vaut certainement mieux choisir l'option "Checkout Windows-style, commit Unix-style line endings" pour être un peu sympa avec les linuxiens. "as-is" est la meilleure option, c'est à l'utilisateur final de contrôler ce qu'il fait...

Git GUI - Installation Windows - 1
Git GUI - Installation sous Windows - Choisir MinTTY ou default console Windows

Encore quelques efforts ...

Git GUI - Installation sous Windows
Git GUI - Installation sous Windows - Encore des options pfff...

Je choisie cs options pourquoi pas ...

Git GUI - Installation sous Windows
Git - Installation sous Windows - Exécution de l'installation

Ca y est l'installation a démarrée ...

Git GUI - Installation sous Windows
Git - Installation sous Windows - Exécution terminée

Pfff c'est pas trop tôt, j'espère que je pourrais changer l'option "choix du mode CRLF/LF" ... que j'ai choisie peut être un peu vite lors de cette Installation de Git GUI.

Une fois l'installation terminée, vous vous placez dans le répertoire que vous souhaitez Gitter en suite vous cliquez "bouton droit" vous avez l'option Git GUI Here :

Git GUI - Installation Windows
Git GUI - Installation sous Windows - Guitter votre répertoire

Vous venez de créer votre premier Repositorie Git pour Gitter dans GitHub. Pour cela, il vous faut :


Voilà c'est terminé ! Nous avons maintenant à porté de cliquer la puissance du gestionnaire de codes sources Git GUI sous Windows.

Have Fun with Git, don't forget it's only software !

mardi 26 avril 2016

Vous souhaitez savoir à quoi sert Git & GitHub par rapport à TFS & Codeplexe

Vous êtes au bon endroit. Git, ou GitHub si on parle du site en ligne, est un gestionnaire de codes sources. Alors pourquoi après CSV, SNV, ClearCase, TFS et bien d'autres un nouveau gestionnaire de codes sources ?

Franchement, je ne sais pas !

Je ne vais pas décrire Team Foundation Server, je présuppose que l'on connait.

Git est encore un de ces outils Linuxien... comment dire, comment dire sans les vexer... un outil console quoi. Si vous n'avez pas les commandes en tête rien n'est intuitif. Voici la belle console MinGW64 de GitHub :

Git - Console command
Ah, il y a aussi une IHM :

Git GUI - IHM
Et plein de problèmes... au moment de commiter.

Git problem with CRLF
Oh la la, ça recommence, ah oui Linux, le truc qui n'aime pas les CRLF, à moins que se soit Windows qui n'aime pas les LF... bref une prise en main bien dificile.

Et ça continue...

Compress the database now? - Non merci sans façon...
En essayant d'aller un peu plus loin :

Git - Push command
Etant donné le côté ultra-intuitif de cet outil, il faudra maintenant parcourir un bon tuto. Celui-ci n'est pas mal...

https://matthew-brett.github.io/pydagogue/git_gui_windows.html
Mais il est en anglais

Conclusion sur Git Hub

La rapidité est excellente avec Git, c'est vrai. Mais les outils sont du type console, même s'il y a une interface la plus part de l'aide est en lignes de commandes. Il va falloir beaucoup d'investissement pour prendre en main ce gestionnaire de configuration.

Avantage : Vous n'avez pas à installer de serveur, tout se fait dans le cloud en créant un compte Git Hub et les repositories pour y placer vos projets.

Inconvénient majeur de Git Hub

L'inconvénient majeur c'est le référencement. Les pages des Wikis de GitHub ne sont pas faites pour être référencées.

J'ai créé un projet ASP-NET-Survey-Online sur Git hub et quand j'effectue une recherche avec google voici le résultat :
Référencement de mon projet dans Git Hub

On voit très clairement que ce n'est pas mon projet qui est mis en avant mais Git Hub, c'est idiot.

D'abord vous avez ce "GitHub-" qui est mis en avant. En suite : "contribute to " nom du projet "development by creating an account on GitHub.

Ce n'est pas moi qui ai écrit cela mais GitHub qui fagocite mon projet.