Mesurer la qualité du code Java avec SonarQube, Eclipse et Maven

A l’occasion de la sortie de la version 4, je vous propose de découvrir SonarQube. Si vous travaillez régulièrement avec Eclipse et Maven et souhaitez avoir un aperçu technique de votre projet pour produire du code de qualité, ce qui suit peut vous intéresser.

Fonctionnalités

SonarQube (précédemment Sonar) est une solution basée sur un certain nombre d’outils existants (Checkstyle, PMD, FindBugs, JaCoCo, …) qui vise à fournir une analyse complète de la qualité du code via du reporting selon les axes suivants (source : Wikipédia) :

  • Identification des duplications de code
  • Mesure du niveau de documentation
  • Respect des règles de programmation
  • Détection de bugs potentiels
  • Evaluation de la couverture du code par les tests unitaires
  • Analyse de la répartition de la complexité

L’ensemble de ces statistiques/métriques permet d’avoir un feedback de manière ponctuelle ou dans la durée puisqu’un historique est disponible et permet de surveiller l’évolution d’un projet. Voyons maintenant ce qu’il est possible de faire en combinant cela à Eclipse et Maven.

Installation des pré-requis

Télécharger et installer les éléments suivants :
- Le JDK Java 7
- Eclipse IDE for Java EE Developers (à dézipper)
- SonarQube (à dézipper)

Une fois Eclipse lancé, deux méthodes s’offrent à vous pour installer le plugin SonarQube pour Eclipse :

- Via le menu Help > Eclipse Marketplace … en lançant une recherche avec le mot-clé Sonar
- Via le menu Help > Install New Software … avec l’URL suivante dans le champ Work with :
      http://dist.sonar-ide.codehaus.org/eclipse/

Si vous avez une version plus ancienne de Sonar ou d’Eclipse veuillez vous référer à ce tutoriel en anglais. Lors de l’installation, pensez bien à cocher les composants Java Analyser et m2e Connector :

Paramétrer et démarrer SonarQube

Placez-vous dans votre dossier SonarQube dézippé. Si vous n’avez pas installé de JRE, il vous faut modifier une ligne du fichier conf/wrapper.conf pour lui indiquer le chemin complet de l’exécutable Java, par exemple :
wrapper.java.command=C:/Program Files/Java/jdk1.7.0_45/bin/java

Vous pouvez ensuite aller dans le sous-dossier bin et utiliser le script de démarrage correspondant à votre environnement (StartSonar.bat ou sonar.sh). Une fois le démarrage effectué vous avez accès à l’interface web à l’adresse http://localhost:9000. Vous y trouverez via le menu Quality Profiles l’ensemble des règles qui vont être jouées sur votre code.

Analyser avec le plugin Eclipse

Cette première méthode va vous afficher le résultat d’analyse en local dans Eclipse. La première chose à vérifier est que le plugin pointe bien vers votre serveur SonarQube pour pouvoir y récupérer les règles à jouer sur le code. Pour cela, ouvrez le menu Window > Preferences > SonarQube > Servers. Vous y retrouverez votre serveur local par défaut et disposez de l’option d’en ajouter d’autres.

Vous devez ensuite activer la nature SonarQube sur votre projet Maven existant. Pour cela, utiliser sur le projet le menu Clic droit > Maven > Update Project … puis confirmez sur la fenêtre qui s’affiche. Si vous faites un nouveau clic droit sur le projet, vous constaterez que vous disposez maintenant d’un menu SonarQube pour lancer l’analyse :

Une fois l’analyse effectuée, les différents problèmes sont remontés dans un onglet contextuel dédié Sonar Issues, qui vous permet d’accéder rapidement au code correspondant pour effectuer les corrections nécessaires :

Analyser avec un goal Maven

Cette seconde méthode ne vous affichera rien en local (à part la sortie console Maven) mais va publier le résultat d’analyse directement sur le serveur SonarQube. Notez que c’est en général un serveur d’intégration continue qui s’acquitte de cette tâche, mais nous allons ici utiliser une configuration de lancement Maven intégrée à Eclipse. Ouvir tout d’abord sur votre projet le menu Clic droit > Run As > Run Configurations … sélectionner Maven Build dans la liste puis faire Clic Droit > New et renseigner les 3 paramètres suivants :

- Name : Maven Sonar
- Base directory : ${project_loc}
- Goals : clean install sonar:sonar

Cette tâche sera ensuite réutilisable pour vos autres projets Maven sans devoir rééditer la configuration. Vous pouvez maintenant la lancer en cliquant sur le bouton Run. Une fois le traitement terminé (build success dans la console), rafraichissez la page http://localhost:9000 de votre serveur SonarQube pour y consulter un tableau de bord de votre projet :

Pour aller plus loin

Après cette première introduction, vous souhaiterez peut-être utiliser SonarQube en production avec une équipe de développeurs disposant du plugin Eclipse, et des serveurs SonarQube et d’intégration continue dédiés. Je vous invite pour cela à consulter la documentation, notamment les guides d’installation et mise à jour, ainsi que les différents plugins pour serveurs d’intégration continue.

Des remarques ou questions ? N’hésitez pas à Partager cet article dans le menu de droite ou à laisser un commentaire ci-dessous !

Publié dans Java/JEE | Marqué avec , , | Laisser un commentaire

Installer CyanogenMod sur HTC Legend

Si vous disposez comme moi d’un vieux smartphone HTC resté bloqué à la version 2.2 d’Android (Froyo) vous pouvez lui donner une seconde jeunesse en installant CyanogenMod, un système d’exploitation de remplacement basé sur Android et disponible sur plus de 70 smartphones et tablettes. Il offre des fonctionnalités et des options indisponibles sur les versions d’Android distribuées par les vendeurs sur leurs appareils (source : Wikipédia).
Logo CyanogenMod
Nous allons ici détailler les étapes nécessaires à l’installation de CyanogenMod sur un HTC Legend. Notez que les informations fournies sont basées sur un article du Wiki de CyanogenMod disponible en anglais à cette adresse. Les mêmes conditions s’appliquent donc : cette opération peut faire sauter la garantie de votre appareil, causer une perte de données, etc. Si vous décidez de continuer, vous le faites donc en toute connaissance de cause et êtes responsables de vos actions.

Déverrouiller le bootloader et rooter le téléphone

Certains constructeurs fournissent désormais les outils nécessaires pour déverouiller le bootloader de leurs téléphones. HTC en fait partie, vous pouvez donc aller sur le site HTCDev, créer un compte (avec une adresse email valide) puis aller à la page Bootloader Unlock et choisir votre modèle de téléphone dans la liste. Cliquez enfin sur le bouton « Begin Unlock Bootloader » et suivez les instructions. Pré-requis : HTC Sync, Android SDK et Java.

Notez que si votre Legend a été acheté chez SFR, vous devrez au préalable mettre à jour le bootloader (HBOOT) de la version 1.00 à la version 1.02. Pour cela choisissez le RUU Vodafone FRA. Pour le bon déroulement de l’opération, vérifiez que votre téléphone est branché en USB en mode « HTC Sync » et que l’icône de débogage USB est active dans la barre de notification de votre téléphone.

Si vous avez téléchargé le ADT Bundle du SDK Android, vous pouvez ignorer l’étape 5 du processus de déverrouillage et vous placer directement à l’étape 6 en invite de commande dans le dossier platform-tools du SDK Android (vous devriez y retrouver adb, fastboot ainsi que les DLL). Une fois reçu votre code de déverrouillage par mail, collez-le dans ce même dossier platform-tools et suivez les instructions jusqu’à la fin. Votre téléphone est maintenant déverouillé, il ne vous reste plus qu’à le rooter. La procédure est assez simple : Autoriser l’installation d’applications non market (Menu > Paramètres > Applications > Sources inconnues), puis télécharger HTC Super Tool v3 sur le site xda developers, exécuter le programme et sélectionner l’option 1 puis l’option 3. Vous devriez maintenant avoir l’accès root.

Changer l’outil de recovery

L’outil de recovery standard est assez limité et pour installer CyanogenMod nous allons devoir le remplacer par un autre outil plus évolué :

  1. Télécharger ClockworkMod Recovery en version 5.0.2.0
  2. Le déposer dans le dossier platform-tools du SDK Android
  3. Connecter votre téléphone en USB avec le débogage activé
  4. Ouvrir une invite de commandes dans le dossier platform-tools, et taper les commandes suivantes :
    adb reboot bootloader
    fastboot flash recovery recovery-clockwork-5.0.2.0-legend.img

ClockworkMod Recovery est maintenant installé, vous pouvez redémarrer votre téléphone.

Installer CyanogenMod

La suite du processus d’installation est pilotée par l’application ROM Manager de ClockwordMod disponible sur le Play Store. Vous pouvez donc d’ores et déjà la télécharger et l’installer sur votre smartphone. Une fois l’application lancée, vérifiez que l’encart Recovery Setup indique comme recovery actuel ClockwordMod 5.0.2.0. Vous pouvez ensuite effectuer les opérations suivantes :

  1. Cliquer sur le menu Télécharger une ROM
  2. Dans le panneau Gratuit, cliquer sur CyanogenMod
  3. Confirmer le modèle de votre téléphone
  4. Choisissez CyanogenMod 7.2.0, puis cliquez sur le bouton Download
  5. Cocher la case Google Apps car elles ne sont pas incluses par défaut
  6. Une fois le téléchargement terminé, éteignez le téléphone

Sur mon téléphone, l’application ne semble pas vouloir gérer automatiquement la suite du processus d’installation, c’est pourquoi je vous ai indiqué d’éteindre le téléphone plutôt que de sélectionner des options sur l’écran qui s’affiche à la fin du téléchargement. Voici donc la suite de la procédure manuelle :

  1. Appuyer sur le bouton Volume bas de votre téléphone, puis en même temps sur le bouton Power
  2. Le menu de boot s’affiche, naviguez avec les boutons de volume pour vous placer sur le menu Recovery
  3. Appuyer sur le bouton Power pour valider, votre téléphone redémarre sur ClockworkMod Recovery
  4. Vous pouvez utiliser le trackball pour sélectionner le menu Backup and restore et valider
  5. Choisissez à nouveau backup pour faire une sauvegarde de votre système d’origine HTC
  6. Une fois le backup terminé, choisissez l’option wipe data/factory reset
  7. Choisissez install zip from sdcard, puis choose zip from sdcard
  8. Installez le fichier clockworkmod/download/get.cm/get/jenkins/2844/cm-7.2.0-legend.zip
  9. Installer le fichier cloclworkmod/download/download2.clockwordmod.com/gapps/gapps-gb-20110828-signed.zip
  10. Une fois l’installation terminée, retourner au menu principal et choisir l’option Reboot system now

Votre téléphone devrait maintenant démarrer sous CyanogenMod 7. Uniquement les données stockées sur le téléphone ont été effacées, vous retrouverez vos fichiers habituels sur la carte SD. Il ne vous reste plus qu’à configurer votre compte Google et réinstaller vos applications préférées, bienvenue dans CyanogenMod !

Publié dans Mobile | Marqué avec , , , | Laisser un commentaire

Dynamics AX : Personnaliser un lookup dans une Dialog

Surcharger la méthode lookup d’un champ ou d’un contrôle n’a rien de compliqué lorsque que l’on se situe sur un formulaire classique AX. Cependant, lorsque l’on se trouve sur une dialogue créée par code (par exemple un lancement de batch), une petite astuce est nécessaire. Nous prendrons ci-dessous l’exemple d’une dialogue de sélection d’un compte à partir de la table du plan de comptes (LedgerTable). Nous ne filtrerons que les comptes qui ne sont pas bloqués dans les journaux.

  1. Dans la définition de la classe, on déclare simplement le contrôle sur lequel on fera un lookup :

    class TestDialog extends RunBase
    {
       FormStringControl ledgerAccountCtrl;
    }

  2. Dans la méthode dialog(), le nom du contrôle est important car il sera utilisé pour la définition de la méthode lookup :

    protected Object dialog(DialogRunbase dialog, boolean forceOnClient)
    {
       DialogRunBase ret;
       ;
       ret = super(dialog, forceOnClient);
       ledgerAccountCtrl = ret.formBuildDesign().addControl(FormControlType::String, 'LedgerAccount');
       ledgerAccountCtrl.extendedDataType(extendedTypeNum(LedgerAccount));
       return ret;
    }

  3. Dans la méthode dialogPostRun(), on déclare le controlMethodOverload pour que notre lookup soit appelé :

    public void dialogPostRun(DialogRunbase dialog)
    {
       ;
       super(dialog);
       dialog.dialogForm().formRun().controlMethodOverload(true);
       dialog.dialogForm().formRun().controlMethodOverloadObject(this);
       ledgerAccountCtrl = dialog.dialogForm().formRun().design().controlName('LedgerAccount');
    }

  4. Et enfin on définit la méthode lookup, avec la règle de nommage « nom du contrôle » + _lookup :

    void LedgerAccount_lookup()
    {
       SysTableLookup sysTableLookup;
       Query query = new Query();
       QueryBuildDataSource qbds;
       ;
       sysTableLookup = SysTableLookup::newParameters(tablenum(LedgerTable), ledgerAccountCtrl);
       qbds = query.addDataSource(tablenum(LedgerTable));
       qbds.addRange(fieldnum(LedgerTable, BlockedInJournal)).value(strfmt("%1", NoYes::No));
       // choix des colonnes à afficher dans le lookup
       sysTableLookup.addLookupfield(fieldnum(LedgerTable, AccountNum));
       sysTableLookup.addLookupfield(fieldnum(LedgerTable, AccountName));

       sysTableLookup.parmQuery(query);
       sysTableLookup.performFormLookup();
    }
Publié dans Dynamics AX | Marqué avec , , , | Laisser un commentaire

Dynamics AX : Créer un enregistrement dans PurchTable

L’exemple de code X++ ci-dessous décrit comment créer un enregistrement dans la table des commandes fournisseurs (PurchTable).

NumberSeq numberSeq;
PurchTable purchTable;

ttsbegin;
numberSeq = NumberSeq::newGetNumFromCode(PurchParameters::numRefPurchId().NumberSequence, true);

purchTable.clear();
purchTable.initValue();
purchTable.PurchId = numberSeq.num();
// remplacer dans la ligne suivante par le n° de compte fournisseur voulu
purchTable.OrderAccount = "20000";
purchTable.initFromVendTable();
if (!purchTable.validateWrite()) {
   throw Exception::Error;
}
purchTable.insert();

numberSeq.used();
ttscommit;

Publié dans Dynamics AX | Marqué avec , , | Laisser un commentaire

Disponibilité du Galaxy Nexus

Annoncé mi-octobre par Google et Samsung, le Galaxy Nexus devrait être disponible mi-décembre, en exclusivité chez SFR dans un premier temps (source : SFR). Il dispose des caractéristiques suivantes :

- Android 4.0 (Ice Cream Sandwich)
- Ecran 4,65 pouces (11,8 cm) Super Amoled HD
- Résolution de 1280 x 720 pixels
- Processeur Dual Core 1,2 Ghz ARM
- 1024 MB de RAM
- Mémoire disponible 16 Go
- Appareil photo 5 Mégapixels avec flash
- Caméra full HD 1080p
- Connectivité complète : 3G+, WiFi, Bluetooth, A-GPS
- Puce NFC et baromètre intégré
- Batterie 1750 mAh
- Valeur DAS : 0,303 W/Kg

L’interface a été retravaillée avec l’ajout de nouvelles fonctionnalités intéressantes, présentées dans la vidéo ci-dessous :

J’attends de voir les nouveautés du premier trimestre 2012 et surtout la sortie des forfaits Free Mobile avant de me décider à changer mon HTC Legend, mais je pourrais bien craquer pour ce modèle :)

Publié dans Mobile | Marqué avec , , , , | Laisser un commentaire

Configurer un projet web avec Eclipse WTP et Maven

Maven est un outil logiciel libre pour la gestion et l’automatisation de production des projets logiciels Java (source : Wikipédia). Nous allons ici nous intéresser à son intégration avec Eclipse Indigo. La version pour les développeurs Java EE n’inclut pas le support de Maven. Nous allons voir comment l’installer et l’utiliser pour configurer notre premier projet web.

Installation des pré-requis

Télécharger et installer les éléments suivants :
- Le JDK/JRE Java 6 ou 7 : lien
- Eclipse IDE for Java EE Developers : lien
- Tomcat 7.0 : lien

Installation du plugin Maven pour Eclipse WTP

Une fois Eclipse lancé, ouvrir le menu Help > Eclipse Marketplace… et lancer une recherche avec le mot-clé Maven. Les deux composants suivants doivent apparaître dans la liste :

- Maven Integration for Eclipse : inclut le support de Maven pour les projets Eclipse classiques
- Maven Integration for Eclipse WTP : inclut le support de Maven pour les projets web

Installer le composant Maven Integration for Eclipse WTP et redémarrer Eclipse.

Création d’un projet web basique

Dans Eclipse, ouvrir le menu File > New > Project…
- Sélectionner Maven > Maven Project
- Vous pouvez conserver l’option Use default Workspace location, et cliquer sur le bouton Next
- Sélectionner l’archetype maven-archetype-webapp comme ci-dessous :

- Entrez un Group Id (ex: com.mycompany) et un Artifact Id correspondant à votre application (ex: myapp) :

- Cliquez sur le bouton Finish.

Paramétrage du serveur Tomcat

Dans Eclipse, ouvrir le menu Window > Show View > Servers.

- Faire un clic droit dans l’onglet Servers > New > Server
- Sélectionner le type de serveur Apache > Tomcat v7.0 Server
- Poursuivre et sélectionner le répertoire d’installation de Tomcat, puis cliquer sur le bouton Next.
- Sélectionner votre projet web créé précédemment, puis cliquer sur le bouton Add.
- Cliquez sur le bouton Finish, votre projet est maintenant paramétré pour être déployé automatiquement sur le serveur.

Vous pouvez maintenant démarrer le serveur (Clic droit > Start) et afficher votre application à l’adresse http://localhost:8080/myapp/.

Votre premier projet Eclipse WTP avec Maven est maintenant configuré !

Publié dans Java/JEE | Marqué avec , , , | Laisser un commentaire

Bienvenue

Ancien étudiant de l’IUP d’Avignon, je suis titulaire d’un Master en Génie Informatique et Mathématiques, avec une spécialité en Innovation et E-Commerce. J’ai réalisé ce site dans le but de parler d’informatique, mais aussi pour vous présenter mon CV, ainsi que certains projets réalisés au cours de mes études ou à titre personnel.

Vous trouverez dans la rubrique CV :

  • Compétences
  • Expérience professionnelle
  • Formations et langues
  • Loisirs et centres d’intérêt

Dans la rubrique Créations seront présentés :

  • Blog informatique et CV en ligne
  • Les Copains d’Abord

N’hésitez pas à me contacter pour plus d’informations.

Publié dans Non classé | Un commentaire