Complexité cyclomatique de la scala

Existe-t-il un outil pour générer une complexité cyclomatique du code Scala?

Je vous remercie

À ma connaissance, il n’y a pas de tels outils. Je pense qu’il est important de noter que la complexité cyclomatique est une mésortingque fondamentalement procédurale et qu’elle s’effondre complètement lorsque vous avez des fonctions d’ordre supérieur dans votre langue. Si vous écrivez du code dans “bon” style Scala, la complexité cyclomatique passe littéralement à 1 pour l’ensemble de votre base de code. La raison en est que les frameworks d’ordre supérieur ont tendance à éviter les twigs explicites. Tout est codé en termes de fonctions et la manière de mesurer la complexité cyclomatique d’une fonction d’ordre supérieur n’est pas particulièrement claire (par conséquent, tout passe à 1).

Je vous conseillerais d’abandonner l’idée de mesurer la complexité cyclomatique dans le contexte de Scala, ou de tout autre langage fonctionnel. Une mésortingque meilleure, et en fait plus informative, consisterait simplement à passer à travers le code pour les instructions if et match / case . Lorsque vous les trouvez, envisagez de les faire partir. Ces affirmations ne sont en aucun cas mauvaises, mais dans de nombreux cas, elles peuvent être remplacées par une fonction linéaire, d’ordre supérieur. Cet examen permettra d’atteindre le même objective qu’une mésortingque de complexité cyclomatique, mais beaucoup plus utilement pour le paradigme fonctionnel. Et, en fin de compte, il est probable que votre code sera beaucoup plus “fonctionnel” et beaucoup plus modulable en conséquence.

Pour étendre le commentaire de Daniel, les mêmes problèmes surviennent chaque fois que vous pouvez encoder des fonctions d’ordre supérieur. Cela signifie notamment que la complexité cyclomatique ne s’applique pas bien à OO. Si une méthode appelle b.foo, il y a un sharepoint twigment invisible – une twig vers l’une des méthodes foo pouvant être atteinte de cette manière. Pourtant, la plupart des mesures de complexité cyclomatique pour Java ou tout ce qui ne compte pas envoie des messages en tant que points de twigment. Il est tout à fait possible (mais pas communément pratiqué) de supprimer tous les ifs, tous les fors et les whiles, etc. La seule différence entre OO et FP dans ce sens est que le remplacement de boucles et de conditions par des constructions de niveau supérieur est considéré comme une pratique normale de la PF.

Scalastyle:

http://www.scalastyle.org/rules-0.5.0.html

Odersky considère que la complexité cyclomatique est importante dans la PF, et ceci est une question Scala.

Vous pouvez exécuter une tâche dans l’outil SBT pour vérifier les problèmes de style courants. Entre autres choses, il déclenchera un avertissement si la complexité cyclomatique dépasse 10 dans n’importe quel bloc. Pour plus de détails, consultez ici: http://www.scala-sbt.org/

La tâche s’appelle styleCheck.