La complexité du code est un autre aspect important de la qualité du code. La complexité du code est mesurée avec un certain nombre de moyens, mais une mesure de complexité généralement utilisée (et facile à comprendre) est la complexité cyclomatique, qui consiste à mesurer le nombre de chemins différents à travers une méthode. En utilisant cette métrique, le code complexe a généralement un grand nombre d’instructions conditionnelles et de boucles imbriquées, qui rendent le code plus difficile à comprendre et à déboguer.
Il y a aussi une théorie de qualité de code mettant en corrélation la complexité du code et la couverture du code qui donne une idée générale de la fiabilité d’une portion de code. Celle-ci est basée sur l’idée (très compréhensible) que le code qui est à la fois complexe et peu testé est plus susceptible de contenir des bugs que du code simple et bien testé.
Le plugin Coverage Complexity Scatter Plot est conçu pour vous laisser visualiser cette information dans vos builds Jenkins (voir Figure 9.14, “Un nuage de point couverture/complexité.”). Les méthodes dangereusement complexes et/ou non testées apparaîtront hautes sur le graphique, alors que les méthodes bien écrites et bien testées apparaîtront plus basses.
Le graphique de dispersion vous donne un bon aperçu de l’état de votre code en termes de complexité et de couverture de test, mais vous pouvez aussi descendre pour poursuivre l’enquête. Si vous cliquez sur n’importe quel point dans le graphique, vous pouvez voir les méthodes correspondantes, avec leur couverture de test et leur complexité (voir Figure 9.15, “Vous pouvez cliquer sur n’importe quel point du graphique pour poursuivre l’enquête”).
Au moment de la rédaction de ce livre, le plugin nécessite Clover, donc votre build a besoin d’avoir généré un rapport XML de couverture de Clover, et vous avez besoin d’avoir installé et configuré le plugin Clover de Jenkins (voir Section 6.6.2, “Mesurer la couverture de code avec Clover”). Cependant, un support pour Cobertura et d’autres outils est prévu.