NDepend, SonarQube ou pourquoi pas les int√©grer ensemble ūüėČ

NDepend, SonarQube ou pourquoi pas les int√©grer ensemble ūüėČ

2018-11-05 0 By Nordes

Préface

J’utilises depuis plusieurs ann√©es SonarQube (Ou sinon sur le ‚ėĀ¬†nuage¬†que sont les SaaS de ce monde,¬†SonarCloud‚ėĀ) afin d’avoir une id√©e g√©n√©rale de la qualit√© ou de la mise en application des lignes directives des d√©veloppeurs (guidelines).¬†Comme vous vous en doutez, d’autres produits peuvent soit le remplacer ou m√™me y ajouter une “plus value” (R# par exemple). Dans cet article, nous allons traiter de NDepend et de son int√©gration avec d’autres produits.

Notez que j’ai eu √† utiliser ce produit par le pass√© et j’avais vraiment eu une bonne exp√©rience. Mais qu’en est-il aujourd’hui, plusieurs ann√©es on pass√©s et de l’eau √† coul√© sous les ponts. Depuis quelques ann√©es, il est rare que j’aie un besoin essentiel de pousser ce type de produit dans l’entreprise dans laquelle je travaille ou lorsque je faisais de la consultation.

Si votre entreprise est en manque de qualit√©, o√Ļ que vous manquez de visibilit√© sur ce qui se passe du c√īt√© des d√©veloppeurs, ce produit s’adresse vraiment √† vous. Cependant, il y a quelques limitations que nous verrons plus loin.

D’ailleurs, ici j’essaierai de rester impartial tout en donnant mon opinion personnelle. C’est article est en partie possible gr√Ęce √† NDepend, qui m’offre les licences afin de tester la nouvelle version du produit.

Qu’est-ce que NDepend?

Ce que vous permet de faire NDepend est indiqué sur la page https://www.ndepend.com/features/. Voici tout de même un court résumé:

  • Permet de conna√ģtre l’√©tat de sant√© de votre application
  • Permet d’avoir une id√©e de la qualit√© de votre code entre les builds
  • L’estimation de dette technique en temps r√©el (m√™me lorsque vous codez sans faire vos commit/push)
  • Visibilit√© de la complexit√© de votre programme √† l’aide de graphique interactif et permet ainsi d’√©viter de la confusion entre d√©veloppeur et architecte.
  • Effectuer des requ√™tes sur votre code, un peu √† la mani√®re SQL (CQLinq)
  • Meilleur visibilit√© des d√©pendances

Quelles sont les technologies accessibles à NDepend?

Malgr√© que vous n’avez pas pos√© la question, il est important de le savoir de facto avant de continuer √† lire l’article. C’est d’ailleurs une question l√©gitime que tout d√©cideurs d’entreprise doivent se poser.

De nos jour, il est de plus en plus rare de rencontrer des √©quipes de d√©veloppement qui travaillent avec une seule technologie. O√Ļ je travaille en ce moment, nous avons list√© aujourd’hui les technologies utilis√©es par une √©quipe SCRUM afin de cr√©er une grille de comp√©tences. Un autre architecte et moi m√™me avons list√©s environs 30 connaissances de bases n√©cessaires si nous voulons des d√©veloppeurs versatiles sur toutes les parties de l’application couverte par l’√©quipe. Dans ce cas pr√©cis, ce n’est pas vraiment une application, mais environ 8 applications √† maintenir et √† d√©velopper et pas tous en m√™me temps.

Si on va vers quelque chose de plus concret, dans mon cas, je suis sp√©cialiste des technologies Microsoft. Cependant, je travaille avec √©norm√©ment d’autres langages, et ce, quotidiennement. Ces autres connaissances sont soient pour faire de la validation de code, faire des preuves de concepts (PoC), du d√©veloppement, du soutient ou encore effectuer des analyses pour les √©quipes de d√©veloppement. (Oui je fais un peu de tout, je suis tomb√© l√† dedans quand j’√©tais petit ūüėČ ) D’ailleurs, en ce moment, je dois travailler sur l’acquisition d’une certification TOGAF en tant qu’architecte d’entreprise. Si on nomme les langages dont je dois valider ou du moins comprendre quotidiennement sont par exemple: C#, Java, Python, JavaScript (NodeJs), TypeScript (Node), etc. Malgr√© le fait que je ne suis pas expert dans tous ces langages, je n’ai aucune difficult√© √† lire ou √† comprendre le code des autres. Il y a quelques ann√©es j’avais vu un plugin fait en Ruby et je trouvais qu’il n’en faisait pas assez, du coup j’avais fait un refactor complet et les gens de la communaut√© avait appr√©ci√© le changement, malgr√© que la stabilit√© n’√©tait pas √† 100% (√ßa y √©tait presque, seulement des probl√®mes de concurrence lors de grandes charges sur les serveurs).

Tout ceci est pour en venir au fait suivant: Les erreurs rencontrées dans un langage sont souvent les mêmes que dans les autres.

Pour en revenir au titre de la section, répondons à la question plus simplement:

  • C# (Quasi toutes les versions, dont, dotnet core 1.0, 1.1, 2.1 et 2.2 preview!)
  • VbNet
Notez que √ßa peut s’int√©grer au produit de JetBrains¬†– TeamCity dont je n’ai jamais eu la chance de tester.

Personnellement, j’adore travailler avec C# (TCP, UDP, etc.) et encore plus depuis l’arriv√©e de Dotnet Core 2+. Lorsque vous avez √† travailler sous TCP/UDP (incluant le web), vous devez avoir les bons outils afin d’√©viter d’introduire quoi que ce soit en dettes technique. Plus on attend pour les fixer, plus on le regrette du fait que √ßa devient quasi impossible √† corriger. Du coup, un produit comme NDepend peut venir √† la rescousse. Sa version d√©veloppeur s’int√®gre comme √©tant un plugin dans Visual Studio et sa license serveur peut s’int√©grer sur votre serveur de build (voir plus bas).

NDepend РLes builds automatisés

Lorsque mes builds automatis√©s sont sur des projets public, j’utilises presque toujours¬†AppVeyor en mode gratuit avec une connexion √† mes repos GitHub ou BitBucket. Cet outil vous offre une int√©gration de premier plan en autant que vous sachiez ce que vous faites. Les images utilis√©es sont compatible Windows, donc vous pouvez compiler vos projets sans probl√®me. En ce moment, o√Ļ je travaille, j’utilise soit Bamboo ou GitLab (int√©gration simple et continue). Par le pass√©, en mode priv√©, j’utilisais Jenkins, TFS, ainsi que d’autres outils. Derni√®rement, j’ai install√© un serveur priv√© GitLab afin de faire des projets R&D dans mon d√©partement. √áa permet de partager simplement notre code en interne et permet aux autres de pouvoir faire comme sur github et participer dans vos projets. Je dirais qu’aujourd’hui, √ßa correspond √† la plupart des besoins professionnels pour petites ou grandes entreprises. Je pr√©f√®re l’int√©gration avec AD ainsi que le tout inclus dans une seule application (Wiki, Build, Source, …). C’est d’ailleurs tr√®s simple d’utilisation avec les images dockers lors de builds en parall√®les. Tout √ßa pour dire qu’√† un certain point, tout ces outils ne sont qu’une question de go√Ľt. En ce qui concerne le Cloud, vous pouvez utiliser AppVeyor ou d’autres services Azure qui s’apparente au service TFS, GitLab online, Travis, etc..

En ce qui concerne la version NDepend, il peut s’utiliser officiellement avec TeamCity (JetBrains), Jenkins (ou anciennement Hudson), AppVeyor, Team Foundation Server (TFS), Azure DevOps (ex VSTS) ainsi que quelques autres. Aucune mention sur Bamboo est disponible sur le site, mais √©tant donn√© que l’agent Bamboo peut s’ex√©cuter sous Windows, je ne vois aucuns soucis √† l’horizon. Important: N’oubliez pas que vous devrez avoir une licence serveur pour ex√©cuter des Builds sur cette machine (Actuellement la¬†license est d√©taill√©e au prix de 799‚ā¨).

√Čtant donn√© qu’AppVeyor est d√©j√† trait√© dans un autre article de ce site, j’irai vers cette solution. Sinon, Jenkins¬†ou encore Bamboo seront de tout aussi excellents choix. Pour tester le produit en local, je vous dirais de tout simplement prendre une image Docker pour SonarQube et de m√™me que pour le serveur principal¬†Jenkins. Ensuite, vous pouvez configurer votre agent Windows sur votre machine m√™me et de le configurer sous Jenkins. Concernant Bamboo, je n’ai jamais eu la chance de cr√©er un agent, mais si c’est aussi simple que Jenkins, √ßa ne doit pas √™tre tr√®s loin d’un clic. L’id√©e derri√®re la virtualisation sous docker, c’est que vous pouvez √©viter de polluer trop votre environnement afin de tout tester.

De nos jours, je dirais qu’il est de plus en plus courant de rencontrer des environnements professionnels avec la stack Atlassian (Confluence, Bamboo, Jira, BitBucket/Stash). Tel qu’indiqu√© plus t√īt, le site NDepend ne traite aucunement de plugin pour Bamboo.¬†Je vous dirais dans ce cas de configurer comme si c’√©tait pour votre PC, sauf que vous ajoutez une capacit√© √† votre agent de build qui pointe sur le fichier EXE de NDepend. D’ailleurs, ceci pourrait √™tre sans doute le sujet d’un autre billet/blog (soit ici ou bien pourquoi pas sur le site de NDepend).

Dans la prochaine section, nous allons traiter l’int√©gration sous AppVeyor. Note √† part, si ce n’est pas d√©j√† dit plus t√īt, il est¬†imp√©ratif d’avoir un agent Windows afin d’ex√©cuter l’analyse et ainsi g√©n√©rer un “Site web” ou le build pour SonarQube. Le site web peut ensuite √™tre mis √† la disposition de votre √©quipe par le billet d’une automatisation (artifact + d√©ploiement sur votre serveur IIS, Apache ou autre car c’est un site en HTML pure).

Prise en main des outils [a-Z] ou du moins le minimum

Achat, ou essaie

Avant d’acheter ce type de produit, il est toujours conseill√© de tester et dans le cas de soucis ou incompr√©hension, communiquer directement avec le support. Ceci vous permettra de mieux comprendre le produit et ses possibilit√©s dans votre entreprise. Afin de tester, vous n’aurez qu’√† remplir un¬†formulaire¬†(14 jours d’essaie gratuit). Dans la plupart des cas, pour simplement tester, n’utilisez pas une licence officiel serveur pour faire que 2 Builds ;).

Téléchargement

Une fois la licence achet√© ou le formulaire de 14 jours d’essaie rempli, vous devrez recevoir par e-mail un lien pour t√©l√©charger le produit (https://www.ndepend.com/download).

NDepend

Contenu du téléchargement

Vous venez de t√©l√©charger NDepend (~16 MO) et vous vous rendrez compte que l’archive est plut√īt simple. Car, oui, ce sera une archive et non un ex√©cutable “self-executable”/”extractable” qui feras l’installation dans un r√©pertoire pour vous. Vous aurez besoin de Unzip l’archive avec soit 7Zip ou l’outil qui vient avec Windows.

Voici le contenu de l’archive:

NDepend – Contenu du Zip

Si vous avez besoin de plus d’information, c’est disponible sur le site officiel ainsi que partiellement dans le fichier README.txt. Si vous n’avez pas trop de temps, voici ici ceux qui vous int√©resseront le plus. Dans le cas o√Ļ la lecture ne vous int√©resse pas vraiment, allez visionner la¬†vid√©o.

  • NDepend.VisualStudioExtension.Installer.exe
    • L’extension Visual Studio (pour les d√©veloppeurs¬†ūüéČ)
  • NDepend.Console.exe (Plus de d√©tails ici en anglais)
    • Ce qui vous servira lors des builds.
  • VisualNDepend.exe
    • Permet de visualiser le tout sans s’int√©grer dans Visual Studio. Dans ce cas, vous devrez avoir la cl√© de la licence sous la main, car ce sera demand√© d√®s l’ouverture du produit.
    • Exemple une fois ouvert
  • Integration/…
    • Contiens les extensions pour SonarQube, TFS, TeamCity, XLT -> * (transformation) ainsi¬†qu’un peu¬†de documentation.

Les autres fichiers, oui ils vous int√©resseront et ce sera du cas par cas. Ensuite, pour explorer tout le produit, je vous conseille d’ailleurs de prendre la version d√©mo 14 jours. Si vous aimez, vous achetez, sinon, vous arr√™tez.

Le projet NDepend.PowerTool.SourceCode (d√©tails ici¬†en anglais) vous montrera comment interagir avec l’API NDepend directement √† partir de votre code. Je recommande d’y jeter un coup d‚ÄôŇďil, mais plus afin de voir comment √ßa peut s’int√©grer avec vos produits existant. Vous pourrez ensuite prendre ce qui vous int√©resse de l’API et l’appliquer.

Votre quotidien vous appartient, n’oubliez pas!

Rapport de Build avec un de mes projets GitHub (VisualNDepend)

Je vais prendre ici un projet sur lequel j’ai cr√©√© et touch√© derni√®rement (badgeIt), mais que je doute que beaucoup de gens l’utiliseront. Le projet a √©t√© cr√©√© dans le cas sp√©cifique o√Ļ tout est bloqu√© par soit des proxy ou encore des comptes d’identification √† Sonar et o√Ļ on ne peut pas r√©cup√©rer les badges de Sonar sans que les utilisateurs soient connect√©s. Pour plus de d√©tails sur ce projet, veuillez suivre ce lien vers mon autre article¬†(SonarCloud + AppVeyor + etc.).

Donc ici, nous allons utiliser NDepend SANS l’int√©gration de l’extension Visual Studio 2017. Nous utiliserons que l’outil en ligne de commande (Console windows) ainsi que l’application VisualNDepend afin de nous “kick starter” √ßa.

  1. Clone du projet Github: > git clone https://github.com/Nordes/HoNoSoFt.BadgeIt.SonarQube.git
  2. S’assurer que tout build/s’ex√©cute normalement:¬†> dotnet run
    • Note: Le projet est en .NetCore 2.1 et NDepend peut analyser jusqu’√† 2.2 (preview en ce moment).
  3. Alternativement au point #2, vous pouvez ouvrir la solution sous Visual Studio 2017 et exécuter avec F5.
  4. √áa affichera une jolie page de test, c’est top. Maintenant, c’est le temps d’arr√™ter l’application et de pr√©parer le tout pour ex√©cuter NDepend.

Prise en main de VisualNDepend

Commen√ßons tout d’abord par l’application VisualNDepend o√Ļ un aper√ßu de l’√©cran de d√©marrage est visible dans la section pr√©c√©dente. Cet outil s’adresse √† un public plut√īt expert ou aux architectes de ce monde qui veulent faire des statistiques et un peu plus. C’est parfait pour faire un rapport qui serait visible en live lors d’une pr√©sentation √† une √©quipe agile. C’est aussi tr√®s utile afin de rep√©rer les points critique d’une application et ainsi savoir o√Ļ l’on devrait am√©liorer soit les d√©pendances ou bien la quantit√© de tests. Vous pouvez d’ailleurs, dans un premier temps, cr√©er une “baseline” qui vous servira par la suite de r√©f√©rence dans le temps.

Au cas o√Ļ vous auriez √† suivre l’√©volution d’un projet et montrer √† vos √©quipes si tout va dans la bonne direction, c’est parfait. Dans mon cas, je l’utilise √† la fin de chaque sprint lors de la r√©trospective afin de montrer ce que l’on √† fait de bien (ou de moins bien). Ce n’est en aucun cas afin de pointer quelqu’un du doigt. √áa permet d’aussi expliquer aux gens o√Ļ l’ont doit s’assurer d’une certaine qualit√© et comment la maintenir.

Voir la quantité de code couvert par vos tests (comme à la SonarQube)

Oui, c’est possible. Cependant vos tests devront g√©n√©rer un fichier de r√©sultat. (Je n’ai pas √©t√© en profondeur afin de v√©rifier avec XUnit ce qu’√©tait mon r√©sultat.) Sachez que c’est possible sans trop d’efforts. Il suffit de suivre les guides; soit sur le site de XUnit ou bien sur le site/blog de NDepend.

Si vous avez ces fichiers de r√©sultats, vous pouvez les int√©grer dans l’outil VisualNDepend.

Prise en main de NDepend.Console

Sans doute l’outil qui vous sera le plus utile pour des builds automatis√©s. Vous avez deux choix afin de vous guider. Soit utiliser l’outil de console afin de vous donner de l’aide, ou bien ouvrir votre navigateur web et aller tout simplement sur¬†https://www.ndepend.com/docs/ndepend-console. Lors de l’ex√©cution de l’application, vous noterez que si vous l’utiliser dans vos builds et que s’il y a une “Quality gate” qui ne passe pas, votre build sera marqu√© en route.

Afin de pouvoir l’utiliser, vous devrez imp√©rativement vous cr√©er un projet NDepend (votre_projet.ndproj ou votre_projet.xml) afin de g√©rer toutes les options et configurer sans avoir √† lire tout le fichier. Je vous conseille d’utiliser tout simplement VisualNDepend. L’√©cran de la configuration ressemblera alors √†:

Sauvegardez votre projet et ses options, ça vous sera utile pour la suite.

  1. Ouvrir votre console (CMD prompt)
    • WIN + R et taper cmd + la touche¬†entrer
  2. Allez dans votre r√©pertoire ou vous avez votre projet “mon_projet.ndproj”, mais ce n’est pas n√©cessaire, vous comprendrez √† la prochaine √©tape
  3. Entrer la commande suivante ou bien évidemment vous mettrez les répertoires que vous allez avoir utilisés
    • >¬†D:\Ndepend\NDepend_2018.2.1.9119\NDepend.Console.exe d:\Ndepend\Project\CognitiveServices.ndproj
    • Vous noterez les parties en caract√®re gras qui sont obligatoire. Oui, vous devrez absolument indiquer le chemin complet de votre fichier ndproj (c’est √©crit dans la doc, sinon √ßa ne fonctionnera pas). Par d√©faut le rapport sera en HTML, veuillez consulter l’aide afin d’obtenir un rapport sous diff√©rents formats.
  4. Pour un projet .Net Core 2.1 ça vous donnera quelque chose qui ressemblera plus ou moins à ce qui suit:
    • Sortie d’√©cran console

  5. Et voil√† c’est termin√©.

La sortie produira un site web, si l’on veut, qui vous indiquera les informations, ou plut√īt, vous permettra de partager les r√©sultats avec vos √©quipes de travail.

Site HTML NDepend

Je n’ai pas obtenu la note de A, mais ce n’est pas bien grave.

Visualisation du rapport autre format que HTML

Oui, c’est une possibilit√©, mais malheureusement je ne traiterai pas du sujet ici. Vous pouvez utiliser la technologie XSLT (XSL Transform). √áa fait un bon moment que je n’ai pas eu √† utiliser cette techno, mais √ßa vous permet de g√©n√©rer un rapport comme bon vous semblera. Vous pourriez, par exemple, cr√©er un rapport qu’avec ce qui vous plait sous un format CSV par exemple.

Intégration dans un projet sur GitHub

Pour int√©grer dans un projet GitHub, vous aurez besoin d’y ajouter un fichier .ndproj, car √ßa vous permet d’avoir les r√®gles pr√©d√©finies. Ensuite, l’ajout du scanner “NDepend.Console” peut soit √™tre ajout√© dans votre repository. Mais, vous pourriez tout aussi bien mettre le fichier EXE disponible au t√©l√©chargement dans l’un de vos dossiers google drive (archive zip par exemple) ou vous auriez un lien pour t√©l√©charger uniquement. Puisque que vous n’allez pas ex√©cuter votre build “si souvent”, surtout sur github, je crois que c’est une solution viable.

Dans mon cas, afin de tester, je ne mettrai pas le fichier dans mon r√©pertoire Github. Je vais plut√īt le t√©l√©charger au moment du build. Le fichier ne fait que 60kb.

Pour ce qui concerne le fichier de licence, ce sera couvert dans la prochaine section.

Intégration dans AppVeyor (Build)

Et voil√† nous y sommes. C’est le temps de faire un merveilleux build automatis√©. AppVeyor, si vous ne connaissez pas, vous permet de faire des builds pour les applications .Net ou .Net Core ;). √Čtant donn√©, que dans la section pr√©c√©dente vous ne vouliez pas mettre votre licence disponible au grand public. Qu’est-ce que vous avez comme autre option?

  1. Faire comme pour le fichier de console et avoir un lien spécial sur Google Doc, OneDrive, Azure storage, etc.
  2. Le fichier console… est-ce assez? je ne crois pas ūüôĀ … d’apr√®s l’article¬†https://www.ndepend.com/docs/appveyor-integration-ndepend on a besoin de plus de truc)

Intégration de SonarQube et AppVeyor (Build/Publication)

C’est quelque chose de tout √† fait possible. Ensuite, tout d√©pend si votre SonarQube est accessible par le web ou seulement en intranet. Dans le cas o√Ļ vous auriez votre SonarQube sur Azure ou autre, vous pourrez bien √©videmment tout configurer afin de laisser AppVeyor envoyer les donn√©es vers votre serveur. N’oubliez pas de cr√©er une cl√©e API afin de pouvoir soumettre les rapports.

Petit rappel: La version gratuite de SonarQube ne permet pas de g√©rer les branches. Ce n’est pas un probl√®me dans notre cas ici, mais dans le cas o√Ļ vous voudriez avoir un semblant de branche, veuillez seulement faire vos builds avec le nom de branche qui suit le nom de votre projet (projet:nombranche). √áa permet au moins de ne pas avoir trop de pollution. La seule chose, si vous effacez la branche, vous devrez effacer manuellement votre “branche” SonarQube. Dans le cas o√Ļ vous √™tes fut√©, vous opterez pour un script qui synchronise vos branches existantes avec celles visibles sur SonarQube.

NDepend et SonarQube, ça pourrait vous sembler faire le même boulot, mais au final, non. Ces deux outils sont complémentaires. Pour plus de détails sur les règles NDepend, veuillez suivre ce lien.

Configuration AppVeyor

Pour la configuration AppVeyor, vous pouvez suivre le lien qui suit: https://www.ndepend.com/docs/appveyor-integration-ndepend

Configuration SonarQube

Pour la configuration SonarQube, vous pouvez suivre ce lien: https://www.ndepend.com/docs/sonarqube-integration-ndepend

Configuration des deux outils ensemble si vous n’avez rien sur le cloud ou d√©ploy√©

Parlons maintenant de la configuration du pauvre ;). Vous voulez tout de m√™me tester AppVeyor avec SonarQube, mais vous n’avez pas d’instance SonarQube o√Ļ que ce soit. Ce n’est pas le plus facile, mais c’est possible. Pour ce faire vous aurez 2 choix que je consid√®re “simple” en utilisant une image Docker:

Choix #1: Utiliser l’image SonarQube avec votre compte Heroku ūüėČ

Choix #2: Utiliser l’image SonarQube en locale

Attardons-nous sur le choix #2. Il est possible en utilisant simplement NGrok (~5 mo) ou alternativement Localhost.run. Une fois configuré, vous pourrez ensuite tester rapidement sans utiliser AppVeyor afin de voir si votre configuration fonctionne. Ensuite, simplement configurer votre build avec AppVeyor.

Concernant SonarQube, n’oubliez pas qu’il vous faudra ajouter le plugin NDepend, sinon vous n’aurez pas acc√®s √† la “plus value” de NDepend. Du coup, √ßa ressemblera √† un semblant de ce qui suit si vous n’√™tes pas derri√®re un proxy qui bloque tout.

Prenons par exemple l’image Alpine 7.1 de SonarQube Docker

> docker pull sonarqube:7.1-alpine
> docker run -d --name sonarqube -p 9000:9000 -p 9092:9092 sonarqube:7.1-alpine

Du coup, vous aurez le port 9000 et 9092 expos√© en local. Testez avant de continuer, car le serveur prend un peu de temps a d√©marrer gracieuset√© de Maven ou Java, votre choix. Dans mon cas, √ßa a pris environs 5 minutes. Le port qui vous int√©resse le plus sera le 9000. C’est d’ailleurs celui qui sera expos√© avec NGrok. Et concernant ce dernier, n’oubliez pas de r√©cup√©rer votre Token sur¬†https://dashboard.ngrok.com/auth¬†;).

  • Une fois SonarQube accessible, veuillez vous connecter en utilisant le compte admin cr√©√© par d√©faut (admin/admin).
  • Cr√©ez un token (donnez un nom, du genre AppVeyor) et continuez
  • Choisissez le langage C#/Vb.Net (√©videmment)
  • Inscrivez comme clef de projet: MyProject
  • Vous aurez ensuite une commande g√©n√©r√© qui ressemblera √†:
    • Avant le build: SonarQube.Scanner.MSBuild.exe begin /k:"MyProject" /d:sonar.host.url="http://localhost:9000" /d:sonar.login="686d032bda5d6d5fa204ba5ca21d691179c3e502"
    • Le build en soit:¬†MsBuild.exe /t:Rebuild
    • Une fois le build termin√©:¬†SonarQube.Scanner.MSBuild.exe end /d:sonar.login="686d032bda5d6d5fa204ba5ca21d691179c3e502"
  • Vous pouvez exercer la commande en local, pour simple test, mais ce n’est pas n√©cessaire.
  • Normalement ici, je vous aurais simplement dit d’aller dans l’Administration, la Marketplace et pour terminer chercher le plugin NDepend, mais ce ne sera pas le cas. Le plugin ne fait pas partie de la Marketplace.
    • Du coup, si vous avez ouvert le tutoriel SonarQube sur NDepend, vous aurez vu qu’il faudra installer le plugin manuellement. Le plugin sera disponible √† partir du dossier “Integration\SonarQube” de l’archive t√©l√©charg√©e. (sonar-ndepend-plugin-1.1.jar)
      • Note que vous avez acc√®s au bash en effectuant¬†> docker exec -it 70e3d40ba8ea /bin/bash¬†o√Ļ 70… signifie votre id de conteneur.
    • Copier le fichier plugin NDepend (dans mon cas, windows > Docker)¬†> docker cp d:\Ndepend\NDepend_2018.2.1.9119\Integration\SonarQube\sonar-ndepend-plugin-1.1.jar sonarqube:/opt/sonarqube/extensions/plugins
      • Changez les permissions (sonarqube/sonarqube) du fichier et red√©marrer le serveur
    • Vous devriez d√©sormais avoir la section NDepend dans votre SonarQube¬†
    • On va aller en mode “par d√©faut”, mais sinon vous pourriez configurer le tout tel qu’indiqu√© sur le tutoriel. √Ä priori, ce n’est pas n√©cessaire si vous effectuez votre build proprement avec votre propre fichier ndproj (projet NDepend). N’oubliez simplement pas d’activer les r√®gles (Rules=>C# Language=>NDepend repository¬†=> S√©lectionnez et configurez)

Maintenant que ça roule, il est désormais le temps de passer aux choses sérieuses. Le configuration NGrok avant le test ultime de Build + Ngrok + SonarQube

> ngrok authtoken 4wUZ8A.................
> ngrok http 9000

ngrok http 9000

C’est bon, votre NGrok est utilisable! L’identit√© de la redirection n’est pas permanente, donc, √ßa ne me d√©range pas trop de vous montrer les donn√©es finales.

Exemple Ngrok + SonarQube

En esp√©rant que vous n’√™tes pas trop perdu. Maintenant vous pourrez ajouter √† votre build AppVeyor les indications du tutoriel AppVeyor. Except√© que lors de l’ex√©cution du build, vous n’allez pas ex√©cuter la commande¬†NDepend.Console.exe, mais celle du fichier ex√©cutable¬†NDepend.SonarQube.RuleRunner.exe qui se retrouvait l√† ou vous aviez votre plugin SonarQube. Notez qu’ici vous pouvez aussi garder NDepend.Console.Exe et g√©n√©rer un Artifact, mais cette partie est d√©j√† couverte sous le tuto ;).

Comme SonarQube vous le disait √† l’ouverture, vous devrez configurer le pr√©-build, le build ainsi que le post-build. √Ä partir de ce moment l√†, vous n’avez qu’√† int√©grer vos commandes tels qu’indiqu√©s dans le tutoriel SonarQube.

Ajout de l’extension Visual Studio et appr√©ciation

Ce sera l’option la plus simple, et sans doute la plus utilis√© par un d√©veloppeur. Cette option n’est pas toujours possible pour tous les d√©veloppeurs √† cause du co√Ľt. Mais ceci-dit,¬† voici les parties int√©ressantes de l’extension (Information du site web ou sur le site Microsoft):

  • Dire au d√©veloppeur avant m√™me de faire ses commit la quantit√© de dette technique ajout√©e
  • Affichage facile des d√©pendances en utilisant des graph
  • Possibilit√© de faire des requ√™tes en live sur le code (CQLinq) pour les passionn√© de Linq tout particuli√®rement sur de gros projets
  • Int√©gration avec VSTS (Team Service)
  • Affichage des trends LoC et bugs en autres
  • Diff√©rent affichage lors de diff√©rence entre versions (History diff) ou des dettes, etc.

Les promesses:

  • R√©duire la dette technique ainsi qu’augmenter les comp√©tences des d√©vs
  • Rendre le code plus simple √† maintenir
  • Analyse des impacts plus simple pour les architectes
  • Plus facile de conna√ģtre les co√Ľts lors des demandes de changement (Car les d√©pendances sont bien visible et clair dans les graphs)

Information importante: Le site de Microsoft n’a pas la derni√®re mise √† jour, mais vous aurez l’extension dans votre archive.

En tant qu’architecte, est-ce que je consid√®re cela utile?

Oui, tout √† fait. J’ai souvent √† faire du “Reverse Engineering” et cet outil m’aurait sauv√© bien des heures √† essayer de comprendre comment l’application interagit. Dans un premier temps vous pouvez vous demander pourquoi j’ai eu √† faire √ßa. Je dirais que les applications bien document√©s √ßa va et elle sont rare, cependant, lorsqu’elles ne le sont pas ou du moins personne ne sait vraiment d√Ľ √† taux de roulement √©lev√© ou lors de d√©veloppements externes, vous verrez rapidement les b√©n√©fices d’un tel outil. Souvent, on est emmen√© √† sauter dans le code et analyser rapidement ce qui se passe afin de faire un choix strat√©gique d’architecture et ce n’est pas toujours √©vident. Si un peu de temps peut √™tre gagn√©, √ßa fait d√©j√† √ßa de gagn√© afin d’avoir une meilleure analyse.

Un autre cas o√Ļ √ßa peut vous √™tre utile sera le suivant. Si vous √™tes consultant en .Net (C#), √ßa peut vous sauver des heures et vous aider √† accomplir votre mandat √† vitesse grand V. Vous comprendrez rapidement comment l’application s’interconnecte en plus de la qualit√© g√©n√©rale de l’application. Donc m√™me si le produit n’est pas gratuit, il se repaiera tr√®s rapidement. D’ailleurs, en tant que consultant des fois on doit √©crire du code rapidement, et il n’y a rien de plus frustrant pour le client si votre code ajoute de la dettes technique. Pensez-y ;).

Performances

Vous avez un PC qui date un peu, est-ce que √ßa fonctionnera dans Visual Studio sans d√©truire votre vie, o√Ļ l’attente est interminable? D’ailleurs c’est un des soucis que j’ai avec Resharper (JetBrains) √† l’ouverture de gros projets. Le temps d’analyse est long, et m√™me sur une bonne machine, je r√©ussi √† obtenir un message de d√©sactiver des plugins ou de changer les options R#.

√Ä priori, l’extension ne peut pas √™tre pire que celle de JetBrains (R#) en terme de consommation ou lenteur. R# s’est vraiment am√©lior√© avec le temps, mais c’est encore un soucis sur mon vieux laptop. Je dirais ici que NDepend s’int√®gre plus simplement (moins d’options cach√©e) et est moins gourmand (Facteur 10x).

La question qui tue, est-ce que ça vaut la peine?

√Ä l’√©poque j’avais ador√©, et je crois que √ßa vaut toujours la peine d’avoir au moins une licence serveur si ce n’est que de connecter √† SonarQube. Malgr√© la version d√©veloppeur int√©ressante, je ne crois pas que √ßa s’applique √† tous. Je vois plus soit les seniors qui doivent faire des √©tudes d’impacts, soit les juniors qui doivent s’am√©liorer √† l’aide d’un tel outil. Ensuite, pour ceux qui sont dans le “m√©dian”, ce n’est pas n√©cessairement int√©ressant, car ils n’utiliseront pas l’outil, ou du moins pas assez pour que ce soit int√©ressant par rapport au prix.

Les choses qui rendrait √ßa encore plus int√©ressant et qui sait, existeront peut-√™tre bient√īt

Ici, je vais tout simplement faire une liste de ce que j’aimerais.

  • Cr√©ation d’un plugin list√© dans SonarQube Marketplace qui permettrait des mises √† jours ou une installation plus simple
  • Pouvoir ex√©cuter NDepend √† l’int√©rieur d’un environnement Linux ou pas trop loin (Mac OS √† d√©sormais aussi Visual Studio professionnel et √ßa serait un +). Avec l’arriv√©e de dotnet core, je vois bien un sonar-runner sous linux pour du code c#.
  • Int√©gration avec SonarCloud (si c’est possible dans le futur, mais √©tant donn√© qu’il faut installer un plugin, ce ne sera pas possible. Par contre, j’ai vu derni√®rement qu’il y avait moyen de pousser des erreurs dans SonarQube qui ne viennent pas des QualityGate officielles)
  • Possibilit√© de corriger les erreurs banales √† partir de “VisualNDepend” (Un peu comme si l’on effectuait eslint –fix qui corrige automatiquement les espacements erron√©es, les accolades manquantes, les lignes trop longues d√©coup√©es sur plusieurs lignes, etc.)
  • Possibilit√© d’inclure facilement dans un build GibLab (de plus en plus populaire) ou Bamboo (tr√®s utilis√© dans l’industrie de nos jours)
  • √Ä partir de VisualNDepend, avoir une capacit√© de s’int√©grer √† Git et √† reculer dans le temps (machine √† voyager dans le temps). Par exemple, de dire je veux une baseline √† partir du mois de Janvier 2015 et j’aimerais avoir les statistiques par mois jusqu’√† aujourd’hui. √áa prendrait du temps, cependant, √ßa permettrait de voir dans quel direction les d√©veloppements s’en vont et √† quel moment certains points critiques (plusieurs d√©pendances) se sont d√©velopp√©es. Ce serait vraiment une superbe fonctionnalit√© √† avoir. Le plugin Visual Studio permet d’avoir une id√©e g√©n√©rale, mais √ßa, √ßa pousserait l’id√©e plus loin.

Article Sponsorisé

Merci √† l’√©quipe NDepend de m’avoir approch√© afin d’√©crire un article sur leur produit. Je n’avais pas eu l’opportunit√© d’utiliser leur produit depuis un moment et je suis bien heureux de voir les progr√®s fait par ce logiciel.