Dans ce premier projet significatif en python, je me suis rapproché de mes anciennes habitudes en actionscript. Le code est essentiellement objet. Il utilise massivement la composition ainsi que les classes statiques et (grande force de python) l’héritage multiple.

Pour standardiser le code j’ai fait appel à Black « The Uncompromising Code Formatter », dans son paramétrage par défaut.

Pour obtenir quelques métriques j’ai utilisé Sonarqube:

Métrique Projet Code générique Code du jeu
Total (lignes) 43 117 12 424 30 682
Code (lignes) 26 981 7 020 19 953
Commentaires (lignes) 14 284 4 737 9 545
Commentaires (%) 34.6% 40.3 % 32.4 %
Classes 146 54 92
Fonctions (méthodes) 1 946 675 1 271
Fichiers (modules) 84 17 66

quality_gate

Par curiosité j’ai analysé le code du projet avec Sonarqube, là encore dans son paramétrage par défaut. Le code passe la « quality gate » avec :

  • la note A en Reliability, Security et Maintainability
  • 0% de couverture du code (tests unitaires absents)
  • 573 « code smell » dont une très grande partie relève de conventions de nommage. Parmi les autres causes : trop grand nombre de paramètres pour des fonctions, Cognitive complexity to reduce
  • 17 Security Hotspots : liés à l’utilisation
    • d’arguments en ligne de commande
    • d’expressions régulières
    • d’adresse IP littérales
    • de l’entrée standard
    • du générateur pseudorandom

L’outil met en évidence les classes les plus difficiles à appréhender (volume et complexité du code).

Enfin, j’ai utilisé Sphinx pour générer une documentation html du projet (avec le thème Read The Docs). Vous trouverez cette documentation ici : documentation du code source. La suite de cette partie proposera un certain nombre de pointeurs vers différents points d’entrée de cette documentation.

Remarque:

la documentation n’évoque que les membres publics des classes, sans respecter leur « ordre chronologique » (trie alphabétique forcé par un plugin). Pour une vision complète du code, vous pouvez accéder au code source d’une classe depuis sa page de documentation.