Entropie du logiciel : dette technique & complexité accidentelle — Agile France 2017
Une conférence ouverte à tous (y compris non développeurs), pour s’intéresser à pourquoi et comment le code source d’un logiciel finit par être immaintenable.
d’acheter une augmentation rapide de ROI pour le projet Mais avec un taux d’intérêt (élevé) Elle doit donc être générée consciemment, avec parcimonie et avec l’accord du PO
doivent donc être extrêmement explicites sur la prise de dette Ils ont le dernier mot sur le remboursement de celle-ci La gestion de la dette technique demande une réelle expérience dans le développement
mesure l'incertitude de la nature d'un message donné à partir de celui qui le précède. (L'entropie est nulle lorsqu'il n'existe pas d’incertitude. définition larousse « tendance naturelle d’un système à se désordonner »
complexité d’un logiciel dépend de trois facteurs Complexité accidentelle Complexité obligatoire Complexité essentielle Une bonne conception cherche à minimiser la complexité accidentelle
économiquement Certains projets arrivent à ce stade avant même la mise en production Pour les projets critiques cela peut prendre très très longtemps Il coûte plus cher à maintenir qu’il ne rapporte Ajouter une fonctionnalité coûte plus cher que ce qu’elle rapporterait
Et c’est un processus inexorable TMA / souffrance pour les développeurs le code source est complètement pourri et le logiciel cherche à mourir Il continue à rapporter plus d’argent qu’il ne coûte
la taille d’une code base C’est pourquoi l’on assemble des modules logiciels indépendants et de petites tailles Ce qui est la base d’une bonne conception logicielle
fonctionnel du logiciel (on a le droit on fait du scrum) L’équipe n’a pas l’expérience pour construire de façon incrémentale l’architecture Les développeurs accélèrent l’entropie du logiciel accélérant le phénomène de pourrissement
pas un traducteur métier -> technique Son métier est d’implémenter au plus près le métier dans le code source Un bon code source doit être compréhensible par un expert métier (principe du DDD)
que l’on ne découvrira pas le domaine technique dès le début Il faut pouvoir facilement refactorer le code existant au fur et à mesure de la découverte du domaine Pour pouvoir refactorer, il est important d’avoir des tests unitaires pour vérifier la non-regression.
code Utilisation de seams pour pouvoir étendre facilement le code source : • injection de dépendance • évènements « A good heuristic is that decisions that makes things easier, clearer while keeping options open are the best at reducing development costs. » - mozaicworks
code source sous une taille critique, il faut créer de petits modules Cet avantage est totalement détruit si vous commencez à avoir des modules dépendants les un des autres Une des première cause de dépendance est la dépendance via la base de donnée
dans notre industrie d’essayer de supprimer les duplications Deux éléments de même nom peuvent représenter des intentions différentes dans des contextes différents En essayant de rassembler ces deux intentions, vous complexifiez et couplez deux codes qui n’ont rien à voir
souvent de la complexité Optimiser avant même d’avoir identifié les causes des problèmes de performance est donc contre indiqué Encore pire si le développeur tente d’implémenter une solution « intelligente » mais illisible
génériques Vous imaginez des cas d’usages qui n’existent pas, et qui vont souvent se révéler faux Une variante encore pire est de faire des développements « au cas où » (et ça peut venir du PO)
with a few broken windows. If the windows are not repaired, the tendency is for vandals to break a few more windows. Eventually, they may even break into the building, and if it's unoccupied, perhaps become squatters or light fires inside. » - James Q. Wilson and George L. Kelling
most dangerous system a man ever designs. […] The general tendency is to over-design the second system, using all the ideas and frills that were cautiously sidetracked on the first one. » - Fred Brooks