web-dev-qa-db-fra.com

Complexité cognitive et son effet sur le code

W.r.t à l'un des projets Java, nous avons récemment commencé à utiliser SonarLint. La sortie de l'analyse de code affiche trop d'alertes critiques d'odeur de code.

Critical code smell: Refactor this method to reduce its Cognitive Complexity.

J'ai entendu parler de la complexité cyclomatique, mais pas de la complexité cognitive. Mes questions au groupe:

  • La complexité cognitive est-elle une norme de l'industrie?
  • Impacts de la complexité cognitive sur le code en dehors de la lisibilité et de la maintenabilité.
  • La complexité cognitive s'applique-t-elle uniquement aux méthodes ou à toute autre partie du code?
  • Des critères spécifiques dont dépend la complexité cognitive?
  • Meilleures pratiques pour améliorer la complexité cognitive d'un code.

J'ai vécu cela lien mais je n'ai pas pu obtenir de réponses à toutes mes questions.

Merci d'avance.

19
vmorusu

Les humains peuvent facilement garder à l'esprit environ 7 entités +/- 2 ( wikipedia ). Lorsque quelqu'un a besoin de lire le code, il peut rencontrer cette limite. Parfois, il y a trop de variables locales à suivre ou trop d'instructions if/for. Dans tous les cas, il est plus difficile de comprendre ce que le code est censé faire car il est difficile de garder une image mentale de l'algorithme.

Norme industrielle: Non.

Lisibilité et maintenabilité: il est plus facile de déboguer/améliorer du code simple et facile à lire.

S'applique aux méthodes ou à d'autres parties: tout ce que certains humains pourraient vouloir comprendre. Si vous essayez d'expliquer votre conception et que je dois suivre plus de 20 classes, je serai perdu. Si je dois travailler rapidement avec votre interface mais que je dois me souvenir de 10 bits d'état, je ne pourrai pas.

Tout critère spécifique dont il dépend: La quantité de choses dont il faut se souvenir pour comprendre le code.

Meilleures pratiques: créez des fonctions plus nombreuses et mieux définies. Extraire les concepts associés dans des groupes/packages. Réduisez le nombre de niveaux d'imbrication dans le code (si vous lisez un code imbriqué, vous devez vous souvenir de la condition qui vous y a conduit). Réduisez le nombre de variables utilisées à un moment donné (fonctionne très bien avec les fonctions d'extraction).

25
Sorin