Bilan Qualité Sonarqube French Science Ground Segment Bilan Qualité Sonarqube 03 et 04 Juillet 2019 GEPI – Meudon
Contexte de l’étude et Configurations Les métriques SOMMAIRE Contexte de l’étude et Configurations Les métriques Liste et statut des Composants Analysés Analyse macroscopique JAVA Python Conclusion Consignes de Déploiement – Rappel Page 2
ContextE de l’ETUDE SonarQube v7.7 sous Windows 7 En local : http://localhost:9000/sessions/new Quality Gate et Quality Profile par défaut Analyse du Code Java et du Code Python Pour le Java, les fichiers « .class » sont nécessaires, sinon SQ ne fait pas l’analyse. La couverture de Code, nécessite : Des fichiers de tests Les résultats de l’exécution de ces tests. Il n’a donc pas été possible de générer la couverture de tests. La démarche : Passage de SQ sur tout le code, puis uniquement sur le code source (sans les tests) L’outil du CNES – cnesreport est utilisé pour extraire les résultats obtenus en Excel et Word. Page 7
ContextE de l’ETUDE / CONFIGURATION NEXEYAC&F La configuration des outils sur le PC NEXEYAC&F Page 7
ELEMENTS DE CONFUGURATION– CEA/IRFU SonarQube v7.7 sous Linux URL : http://svom1.lal.in2p3.fr:20090 Quality Gate et Quality Profile par défaut Plug-ins pour les tests Java : Jacoco Python : Pytest Création d’un login administrateur pour Nexeya-C&F Il est possible d’y créer des projets, En revanche, il n’est pas possible (droits d’accès à la machine refusés) de scanner des projets. Page 7
Le SPAP est sous Documents & Pages/Quality Assurance Plan LES METRIQUES POLARION : https://dsm- polarion.cea.fr/polarion/#/project/Svom 2015/home Le SPAP est sous Documents & Pages/Quality Assurance Plan Les métriques sont définies au §9 Les normes de codage sont : PYTHON : PEP8 JAVA : Standard SUN Il est possible de configurer SQ pour prendre en compte ces exigences. Voir tableau ci- après. Page 7
LES METRIQUES SQ Métrique de code Seuil SQ QUALITY GATE QUALITY PROFILE Nombre cyclomatique McCabe V(g) <=25 NON OUI - Pour une valeur globale difficilement interprétable OUI - Pour l'avoir par méthode Nombre cyclomatique simplifié <=20 Complexité Cognitive? Nombre de lignes de code <=100 OUI Nombre d’imbrication <=7 OUI - S134 Taux de commentaires >20% Le taux de copier/coller <15% L’état de la dette technique <5% Page 11
Les composants ANALYSES Uniquement le périmètre des composants et sous-composants du CEA/Irfu 8 composants FSGS : crest, messaging, noaa-receiver, notices (alerts), orchestra, vhfmgr, vhfsimulator, xband-manager 7 Projets SQ Python crestdb-client, messaging, python-noaa, notices, orchestra_src, vhfmgr-client, vhf-simulator 7 Projets SQ Java crestdb-data, crestdb-web, noaa-receiver, vhfmgrApi-data, vhfmgrApi-web, BandxMgrData, BandxMgrWeb Remarque : le projet Java « vhfmgr /vhfmgrApi- client » n’a pas pu être analysé car les classes n’ont pas été fournies. Page 7
Les composants ANALYSES Description crest le serveur de gestion de configuration messaging le serveur de messagerie noaa-receiver l'application de réception des images NOAA notices la gestion des alertes orchestra Prototype d’une architecture orchestrée pour le segment sol SVOM vhfmgr la gestion des données VHF vhfsimulator Simulateur de messages venant de la station VHF xband-system le serveur de données bande X Page 7
DES composants AUX PROJETS SQ (Sans les Tests) Projet SQ LANG STATUT TAILLE en K TAILLENOTE crest crestdb-client python PASSED 5,2K S crestdb-data java 5K crestdb-web 454 XS messaging 367 noaa-receiver noaa-receiver-python 1,6K noaa-recever 1,1K notices 1,4k orchestra orchestra_src 4,3K vhfmgr vhfmgr-client 3,8K vhfmgrApi-data 3,2K vhfmgrApi-web 511 vhfsimulator vhf-simulator xband-manager BandxMgrData 1,8K BandxMgrWeb Page 7
Les composants vue SONARQUBE 1/3 Page 7
Les composants vue SONARQUBE 2/3 Page 7
Les composants vue SONARQUBE 3/3 Page 7
Analyse MACROSCOPIQUE JAVA 1/2 Les BUGS : 4 Gestion mémoire : Pointeur nul A "NullPointerException" could be thrown; "XXX" is nullable here. Sévérité : Majeur Les vulnérabilités : 3 component Rule Message Severity BandxMgrData squid:S2755 Disable XML external entity (XXE) processing. BLOCKER vhfmgrApi-web squid:ClassVariableVisibilityCheck Make username a static final constant or non-public and provide accessors if needed. MINOR Make role a static final constant or non-public and provide accessors if needed. Page 7
Analyse MACROSCOPIQUE JAVA 2/2 Code Smell JAVA : 221 Séverité :Critical : 25 exemples : squid:S1192 : Define a constant instead of duplicating this literal "XXX" N times. squid:S3776 : Refactor this method to reduce its Cognitive Complexity from XX to the 15 allowed. Séverité : Major : 124 common-java:DuplicatedBlocks Unused, code en commentaire, code dupliqué squid:S00107 Constructor has N parameters, which is greater than 7 authorized. Gestion d’exceptions Séverité : Minor : 66 Unused : local variables, import.. Modifications de code : Replace charset name argument with StandardCharsets.UTF_XX … Sévérité : info : 6 Exemples : Complete the task associated to this TODO comment. Page 7
Analyse MACROSCOPIQUE PYTHON 1 Code Smell : 68 Séverité :Critical : 8 exemples : squid:S1192 : Define a constant instead of duplicating this literal "XXX" N times. squid:S3776 : Refactor this method to reduce its Cognitive Complexity from XX to the 15 allowed. Séverité : Major : 37 Unused, code en commentaire, squid:S00107 Constructor has N parameters, which is greater than 7 authorized. (29) Séverité : Minor : 23 Unused : local variables, import… Convention de nommage Page 7
DIFFICULTES RENCONTREES CONCLUSION DIFFICULTES RENCONTREES Il n’est pour le moment pas possible de lancer un sonar-scanner sur la machine SVOM Les java doivent être livrés avec les Bytecodes correspondant. Ou alors, il faut les reconstruire. Il faut faire des tests Les tests doivent être livrés avec les résultats de tests. Il est impératif que toute la communauté respecte les mêmes conventions de nommage de façon à faciliter à terme l’automatisation de SQ. Il est impératif que toute la communauté respecte les consignes de déploiement. Page 7
DEPLOIEMENT - RAPPELS CE QUE VOUS DEVEZ FAIRE : Rédiger le paragraphe descriptif de vos applications dans https://drf- gitlab.cea.fr/svom/Tools/wikis/application- directory et y faire référence à la page d’instructions pour l’installation. Rédiger les instructions d’installation en suivant le modèle https://drf- gitlab.cea.fr/svom/Tools/wikis/instructions-template ou les instructions déjà en ligne. Compléter le fichier README.md de déploiement sur la page https://drf-gitlab.cea.fr/svom/svom-deployment Nommer le docker compose : docker-compose.yml Nommer le fichier de properties : configuration.properties ou configuration.yml Nommer le fichier de configuration : config.sh Mettre à jour et vérifier toutes vos pages de documentation sur gitlab. Page 5
DEPLOIEMENT - RAPPELS Mettre à jour et vérifier vos WI de tests dans Polarion (DC-0/DC-1 Spécification) Nettoyer la page https://drf-gitlab.cea.fr/svom / en supprimant ou en mettant au grenier les dossiers obsolètes. CONVENTIONS DE NOMMAGE DES TESTS: Le cadre à respecter est celui défini par la commande pytest Les test unitaires doivent être mis dans des répertoires nommés ‘tests’ (pas ‘test’, pas ‘mes_tests’, pas ‘svom_check’, etc.) CONVENTIONS POUR PYTHON : Les prérequis pour exécuter la commande ‘pytest’ doivent être définis clairement et facilement. Page 5
Des questions? Page 13