ENVOL 2023
1. Plan
-
Introduction au refactoring
-
Bref rappel sur le test
-
Voyage à l’intérieur du cerveau
-
Améliorer la compréhension
-
Améliorer la conception
-
Améliorer la testabilité
2. Introduction au refactoring
-
⇒ Introduction au refactoring
-
Bref rappel sur le test
-
Voyage à l’intérieur du cerveau
-
Améliorer la compréhension
-
Améliorer la conception
-
Améliorer la testabilité
2.1. Introduction
Refactoring et Agilité
Pas de fête sans gâteaux !
2.2. Que faisons nous quand nous développons ?
-
Réponse à un besoin humain
-
Pas de besoin, pas de projet !
-
-
Traduction
-
Des concepts humains ⇒ code exécutable par un ordinateur
-
Du code exécuté ⇒ concepts manipulables par des humains
-
-
Plusieurs traductions, plusieurs univers
-
Client(e), Architecte, Développeuse et Développeur, Fonctionnel, Technique, Management
-
-
Traduire, c’est trahir
-
Des univers aux fondamentaux différents
-
2.2.1. Comment s’assurer que nous développons bien ?
-
Notion de Qualité Logicielle
-
Ensemble de caractéristiques attendues
-
-
Capacité fonctionnelle
-
Est-ce que le logiciel répond aux besoins fonctionnels exprimés ?
-
-
Maintenabilité
-
Est-ce que le logiciel requiert peu d’effort à son évolution par rapport aux nouveaux besoins ?
-
2.2.2. Maîtriser la complexité
-
Complexité du projet
-
Besoins humains, Outils techniques
-
-
La complexité engendre la complexité
-
Problème humain complexe ⇒ code complexe
-
-
Développement ⇒ activité complexe peut devenir vite très compliquée
-
Beaucoup d’éléments & d’aspects à prendre en compte
-
|
Un logiciel est une solution en réponse à un besoin humain. Si ce besoin est simple, simple à exprimer, à formaliser, à traduire en code, que la traduction est assez directe, la solution sera simple également. Mais de tels besoins, à part des scripts très modestes, ne nécessitent pas de méthodologie. Dès que le besoin devient plus conséquent, qu’il est nécessaire de passer par plusieurs étapes de traductions, les choses deviennent beaucoup moins facile. Il s’agit de prendre en compte la notion de complexité Dans la construction d’une solution logicielle, de nombreux éléments sont souvent en interaction et s’influencent mutuellement. Plusieurs aspects à prendre en compte: la sécurité, la cohérence de l’application, les domaines métiers, les tests, etc. L’un des risques principaux est de perdre de vue ce que l’on souhaite faire, de s’éparpiller, d’être un peu en état de stupeur devant l’ensemble des connaissances à mobiliser. |
Développer un logiciel, c’est aussi garder la complexité sous contrôle
2.3. Agilité
-
Réponse à la complexité
-
Expériences passées submergées par la complexité
-
Nouvelle façon de définir et atteindre la capacité fonctionnelle
-
-
Adopter une démarche itérative et incrémentale
-
Ajouts de fonctionnalité successifs
-
Feedback rapide du client
-
Ne pas prétendre à l’exhaustivité
-
Se donner le droit de découvrir et changer
-
-
Sur le plan purement technique
-
Conception (Software Design) toujours en évolution
-
Une recherche de l’excellence technique
-
-
Sur le plan management
-
Avoir confiance dans les personnes en charge du développement.
-
Une remise en cause et une adaptation permanente
-
Un rythme de travail soutenable
-
2.4. Maintenabilité
Mesure de la facilité
-
Faciliter la compréhension
-
Faciliter l'analyse
-
Faciliter la modification
-
Faciliter les tests
-
Faciliter l'assemblage des composants
Faire évoluer un logiciel à un rythme soutenable ⇒ garantir maintenabilité
... à condition de ne pas être trop endetté.
|
2.5. Dette technique
-
Choisir, c’est regretter
-
Développer ⇒ choix à court termes
-
Contraintes de temps et de budget
-
Personnes/compétences/expertises disponibles
-
-
-
Choix à court terme ⇒ entropie naturelle
-
⇒ Compromis, maladresses, manques de clairvoyances, renoncements
-
⇒ Compréhension ou conception obsolète ou incomplète
-
|
Au cours d’un développement, il est naturel que des compromis, des maladresses ou des raccourcis soient commis. Cela fait parfois gagner du temps ou des ressources, parfois cela est du à un manque de clairvoyance ou plus simplement à une vision de la conception qui n’était pas la plus pertinente mais qui pénalisent la maintenabilité de l’application et sa faculté à évoluer. |
-
Dette technique
-
Dette : Renoncement accélérant le développement
-
Remboursement : Réécriture du code
-
-
Endettement
-
Dette remboursée plus tard ⇒ Dette plus coûteuse à rembourser
-
2.5.1. Dette technique > Appréciation
-
Toutes les dettes ne se valent pas
-
Choix assumé pour se développer
-
Descente aux enfer par méconnaissance
-
⇒ Deux axes d’évaluation
-
-
Réfléchie
-
Limitation
-
A une partie isolée du code ou généralisée
-
-
Prudence
-
Aspect marginal ou au coeur de l’application
-
-
-
Volontaire
-
En connaissance de cause
-
Conscience et compétence
-
… ou absence des deux
-
-
Recul
-
Réflexion sur ce qu’il aurait possible de mieux faire
-
-
2.5.2. Dette technique > Appréciation
Ne pas en faire un sujet de honte
Nécessité d’en avoir conscience et de la résorber
2.5.3. Dette technique > Mesure
-
Écart aux bonnes pratiques
-
Bonnes pratiques
-
Heuristiques propres à chaque écosystème
-
Principes reconnus (Code Clean)
-
Design Patterns (GoF, GRASP, …)
-
-
Référentiel de mauvaises pratiques
-
Anti patterns
-
Bad smells
-
-
Systèmes d’analyse qualité
-
Sonarqube, qodana, …
-
|
Les moteurs d’analyse qualité sont des outils très puissants, le plus connu étant sonarqube. Mais il n’est pas forcément nécessaire d’utiliser, encore moins de mettre en oeuvre, un tel système pour avoir une idée des écarts manifestes et corrigeables. Des linters suffisent. |
2.5.4. Ultra rapide présentation de Sonarqube
-
Analyseur statique open source
-
Evaluation de la dette suivant plusieurs aspects
-
Détail des point litigieux
-
Une forme d’objectivation
-
-
Rapide présentation
-
Je vous en met plein les mirettes
-
Nous jouerons plus tard si nous en avons le temps
-
Vous aurez le temps à la maison de jouer avec :)
-
Lancement de l’image sonarqube
docker run -d --name sonarqube -p 9000:9000 -p 9092:9092 sonarqube
-
Se loguer avec admin/admin
-
Changer en admin/refact
Repérer l’adresse IP
docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' sonarqube
Créer le projet dans Sonarqube
Sélectionner "Create project Manually"
Associer un id et un nom
Utiliser la configuration globale
Sélectionner l’analyse locale
Créer un token d’authentification
Continue
Vous avez un exemple des paramètres pour lancer l’analyse
Projet python
Include un fichier sonar-properties ultra-simpliste
sonar.projectKey=tm2raw
sonar.organization=ias
sonar.python.version=3
sonar.sources=src
sonar.dynamicAnalysis=reuseReports
sonar.python.coverage.reportPaths=*coverage*.xml
Préparer les tests
Installer des libraries propres à Python pour l’analyse
pip install pylint pytest pytest-cov
Lancer les tests
pytest -v tests/unit/ --cov --cov-report=xml --cov-report=html
Lancer l’analyse
./sonnar-scanner/bin/sonar-scanner -Dsonar.host.url=http://172.17.0.2:9000 -Dsonar.token=sqp_5e14217deb6e23ad8c728041f41bd736fb478b3c
INFO: Scanner configuration file: /home/mdexet/Workdirs/MAJIS/SGS/majis-tm2raw-pipeline/sonnar-scanner/conf/sonar-scanner.properties
INFO: Project root configuration file: /home/mdexet/Workdirs/MAJIS/SGS/majis-tm2raw-pipeline/sonar-project.properties
INFO: SonarScanner 5.0.1.3006
INFO: Java 17.0.7 Eclipse Adoptium (64-bit)
...
INFO: Analysis report compressed in 101ms, zip size=150.6 kB
INFO: Analysis report uploaded in 14ms
INFO: ANALYSIS SUCCESSFUL, you can find the results at: http://172.17.0.2:9000/dashboard?id=tm2raw
INFO: Note that you will be able to access the updated dashboard once the server has processed the submitted analysis report
INFO: More about the report processing at http://172.17.0.2:9000/api/ce/task?id=AYvEwhGUMb_Dhw3teUnJ
INFO: Analysis total time: 7.482 s
INFO: ------------------------------------------------------------------------
INFO: EXECUTION SUCCESS
INFO: ------------------------------------------------------------------------
INFO: Total time: 8.465s
INFO: Final Memory: 40M/188M
INFO: ------------------------------------------------------------------------
Voir l’analyse
Aller sur l’URL fournie http://172.17.0.2:9000/dashboard?id=tm2raw
Vue générale de l’évaluation de la qualité
Infographie générale
Evaluation de la maintenabilité
Détail d’un item : respect des standard Clean code
Détail d’un item : Maintenabilité
Détail d’un item : Maintenabilité
Détail d’un item : Code Smell
Vue de détail dans le code
Explication du problème avec exemple