[JAVA] À propos de la complexité cyclique

Contexte

«Quand je codais au travail, mon supérieur a souligné la complexité. «Je ne connaissais pas le mot complexité cyclique, mais je savais qu'un bug pouvait être caché d'une manière ou d'une autre. «Parce que c'est un gros problème, j'ai étudié la complexité cyclique. ――Pour les personnes aussi inexpérimentées que moi

Qu'est-ce que la complexité cyclique?

Je l'ai vérifié pour le moment ...

La complexité cyclomatique est un type de méthode de mesure logicielle. Développé par Thomas McCabe, il est utilisé pour mesurer la complexité d'un programme. Comptez le nombre de routes linéairement indépendantes directement à partir du code source du programme. [wikipedia](https://ja.wikipedia.org/wiki/%E5%BE%AA%E7%92%B0%E7%9A%84%E8%A4%87%E9%9B%91%E5%BA % A6)

en bref

--Calculer le nombre de branches telles que if / else, for statement, switch statement sont incluses dans le code ―― L'ampleur du nombre vous indique à quel point il est facile de mélanger les bogues.

Méthode de comptage spécifique

Idée générale

Il semble y avoir diverses théories, mais ...

Complexité circulaire Statut
1-10 Facile à tester avec un code sécurisé
11-20 Un code un peu compliqué
21-40 Un code complexe rend les tests difficiles
41 ou plus Mauvais garçon. Non testable

Si vous l'écrivez normalement, je pense qu'il est difficile de dépasser 10. (Dans mon cas, j'ai déjà mesuré 20 à la logique métier)

Pensez en fait en utilisant un exemple

J'ai préparé un service approprié ci-dessous. Puisqu'il ne s'agit que d'un exemple, le processus lui-même n'a aucune signification, alors ignorez-le.

Service.java



private String familyService(List<String> nameList) {
    String id;
    for (String name : nameList) {
        if (name.startsWith("a")){
            id = "a";
        } else if (name.startsWith("b")){
            id = "b";
        } else if (name.startsWith("c")){
            id = "c";
        } else if (name.startsWith("d")){
            id = "d";
        } else if (name.startsWith("e")){
            id = "e";
        } else if (name.startsWith("f")){
            id = "f";
        } else if (name.startsWith("g")){
            id = "g";
        } else if (name.startsWith("h")){
            id = "h";
        } else {
            id = "xxxx";
        }
    }
    return id;
}
      

Dans l'exemple ci-dessus, il y en a une pour instruction et neuf branches if / else, donc 1 + 1 + 9 donne une complexité de 11.

Contre-mesures

Je pense qu'il existe plusieurs façons de réduire la complexité cyclique.

Je pense qu'il y a plusieurs façons de le faire, donc je pense qu'il est plus important d'être conscient de la complexité cyclique lors du codage sur une base régulière. J'ai personnellement pu calculer visuellement grâce à mes recherches sur la complexité cyclique, mais je ne pense pas que tout le monde le soit, alors je voudrais présenter les fonctionnalités d'IntelliJ IDEA pour ces personnes. Mettre.

Ce que vous avez préparé

Comment faire

--IntelliJ >> Sélectionnez une préférence スクリーンショット 2018-10-14 12.55.49.png

--Recherche par "trop complexe" スクリーンショット 2018-10-14 12.58.12.png

Résumé

Site référencé

[Complexité circulaire-Wikipedia](https://ja.wikipedia.org/wiki/%E5%BE%AA%E7%92%B0%E7%9A%84%E8%A4%87%E9%9B% 91% E5% BA% A6) Learn Mccabe's Cyclomatic Complexity with Example

Recommended Posts

À propos de la complexité cyclique
Agrégation / couplage / complexité cyclique
À propos =
À propos de method.invoke
À propos de Kotlin
À propos de attr_accessor
À propos de Hinemos
À propos de l'héritage
À propos de Docker
À propos des rails 6
À propos du printemps ③
À propos d'énumération
À propos du polymorphisme
À propos facultatif
À propos du hachage
À propos de JitPack
À propos de ça ()
À propos de l'encapsulation
À propos de JAVA_HOME
À propos de statique
À propos des exceptions
À propos de la portée
[Maven] À propos de Maven