About program SSD. Aug. 5, 2020, 2:04 p.m., by Lem

Santé du code

Petit état des lieux pour voir si le code est en bonne santé.


A priori


A priori la situation n'est pas glorieuse : pour un code maintenu par une seule personne sur des périodes aléatoires, on peut parfois se laisser aller à quelques facilités (code mal testé, conventions fluctuantes, documentation lacunaire). De plus, pour un développement avec des interruptions aussi longues (le projet a plus de 3 ans et certains trous de développement font plus de 6 mois) et peu documenté, on finit inéluctablement par oublier certains aspects centraux de l'architecture mise en place et on finit soit par recoder quelque chose qui existe déjà soit faire des choix incompatibles avec les décisions précédentes.


Constat


Volume de code


Voyons le volume et la répartition dans les fichiers. Des fichiers trop volumineux sont souvent symptome d'un code mal compartimenté.
corescoutdriver$ find . -name '*.py' | xargs wc -l | sort -nr
12722 total
1152 ./Desks/controlDesk.py
954 ./guiSide/GenericInterface.py
852 ./guiSide/qt/qtFrontend.py
848 ./guiSide/wxFrontend.py
748 ./Mimesis/univObjects.py
678 ./Desks/staticDesk.py
630 ./Mimesis/universe.py
446 ./guiSide/universalArtist.py
437 ./localSniffing.py
387 ./Mimesis/mapping.py
...


Graph of number of lines


La règle que je m'étais fixé était de ne pas dépasser 500 lignes par fichier. On voit bien ici que cette règle n'est plus respectée pour les 7 plus gros fichiers. Les 4 plus gros contiennent 30% des lignes de code du projet, il y a du travail à faire de ce côté.


Proportion de code à licence verrouillée


Point sur les zones de code dépendant de bibliothèques avec une politique de licence restrictive. Précédemment j'utilisais EyeD3 pour la récupération de métadonnées, qui contraignait à une licence GPL. En utilisant les fonctionnalités de vlc-python cette contrainte a été levée.


Mais plus récemment pour obtenir une interface graphique performante je me suis tourné vers Qt (avant le durcissements de conditions d'utilisation de cette année 2020), ce qui contraint une partie du code de l'interface graphique vers une licence libre (ce qui ne me pose pas problème actuellement, mais j'aime bien limiter au maximum les dépendances à des bibliothèques pas parfaitement opensource et permissives).


Le volume dépendant se résume donc à :
corescoutdriver$ find guiSide/qt/ -name '*.py' | xargs wc -l | sort -nr
1224 total

Ce qui fait 10% de code contraint, ce qui n'est pas rien mais pas catastrophique non plus. Surtout que le travail de refactoring pour isoler le code spécifique n'est pas terminé.


Graph of number of lines

> More Créations articles

Add a comment

| RSS feed for all notifications | for dev news only