Pregunta

Un término que veo de vez en cuando es "Ciclomática Complejidad". Aquí en la SO vi algunas preguntas sobre "cómo calcular el CC de la Lengua X" o "¿Cómo lo hago Y con la cantidad mínima de CC", pero no estoy seguro de que realmente haya entendido lo que es.

En el NDepend sitio web , vi una explicación que básicamente dice "El número de decisiones en un método. Cada FI, para, etc && añade 1 al CC "puntuación"). ¿es realmente él? Si es así, ¿por qué es esto malo? puedo ver que uno podría querer mantener el número de caso -statements bastante baja para mantener el código fácil de entender, pero ¿es realmente todo lo que a ella?

O hay algún concepto más profundo a ella?

¿Fue útil?

Solución

No estoy al tanto de un concepto más profundo. Creo que se considera generalmente en el contexto de un índice de capacidad de mantenimiento. Las ramas más allá están dentro de un método en particular, más difícil es mantener un modelo mental de la operación de este método (por lo general).

Los métodos con mayor complejidad ciclomática también son más difíciles de obtener cobertura de código completo en en las pruebas unitarias. (Gracias Mark W !)

Esto trae todos los demás aspectos de la capacidad de mantenimiento de, por supuesto. Probabilidad de errores / regresiones / así sucesivamente. El concepto básico es bastante sencillo, sin embargo.

Otros consejos

Ciclomática complejidad mide el número de veces que se debe ejecutar un bloque de código con diferentes parámetros con el fin de ejecutar todos los caminos a través de ese bloque. Un registro más alto es malo, ya que aumenta las posibilidades de errores lógicos escapar de su estrategia de prueba.

Cyclocmatic complexity = Number of decision points + 1

Los puntos de decisión que pueden ser sus sentencias condicionales como if, if ... else, switch de bucle, el bucle while, etc.

La siguiente tabla describe el tipo de la aplicación.

  • Ciclomática complejidad radica 1 - 10  Para ser considerado normal applicatinon

  • ciclomática Complejidad se encuentra 11 - 20  aplicación Moderado

  • ciclomática Complejidad se encuentra 21 - 50  aplicación Risky

  • ciclomática Complejidad encuentra a más de 50  aplicación inestable

Wikipedia puede ser tu amigo en éste: Definición de complejidad ciclomática

Básicamente, hay que imaginar su programa como un gráfico de flujo y después

  

La complejidad es (...) definida como:

M = E − N + 2P
     

donde

     
      
  • M = complejidad ciclomática,
  •   
  • E = el número de bordes de la gráfica
  •   
  • N = el número de nodos del grafo
  •   
  • P = el número de componentes conectados
  •   

CC es un concepto que trata de captar la complejidad de su programa es y lo difícil que es para probarlo en un solo número entero.

Sí, eso es realmente. Los más rutas de ejecución de su código puede tomar, más cosas que deben ser probados, y la mayor probabilidad de error.

Otro punto interesante que he escuchado:

Los lugares en su código con los mayores guiones deben tener la más alta CC. Estos son generalmente las áreas más importantes para garantizar la cobertura de las pruebas, ya que se espera que van a ser más difíciles de leer / mantener. Como otras respuestas en cuenta, estos también son las regiones más difíciles de código para asegurar la cobertura.

Ciclomática Complejidad realidad es sólo una palabra de moda de miedo. De hecho, es una medida de la complejidad del código utilizado en el desarrollo de software para señalar partes más complejas de código (más propensos a tener errores, y por lo tanto tiene que ser muy cuidadosa y completamente probado). Se puede calcular utilizando la fórmula E-N + 2P, pero yo sugeriría que haya esta calculada automáticamente por un plugin. He oído hablar de una regla de oro que usted debe esforzarse para mantener el CC por debajo de 5 para mantener una buena legibilidad y mantenibilidad del código.

He experimentado recientemente con el Eclipse Plugin métricas en mis proyectos de Java, y tiene un archivo de ayuda muy agradable y concisa que por supuesto integrar con su ayuda Eclipse regular y se puede leer algunas nuevas definiciones de las diversas medidas de complejidad y consejos y trucos en la mejora de su código.

Eso es todo, la idea es que un método que tiene una baja CC tiene menos horquillas, de enlace, etc, que todos hacen un método más complejo. Imagínese la revisión de 500.000 líneas de código, con un analizador y ver un par de métodos que tienen oder de magnitud mayor CC. Esto le permite a continuación se centra en la refactorización esos métodos para una mejor comprensión (También es común que un alto CC tiene una alta tasa de errores)

Cada punto de decisión en una rutina (circular, interruptor, si, etc ...) esencialmente se reduce a un caso equivalente comunicado. Para cada if tienes 2 codepaths que se pueden tomar. Así que con la primera rama que hay 2 rutas de código, con el segundo hay 4 posibles caminos, con la tercera hay 8 y así sucesivamente. Hay al menos 2 ** n rutas de código, donde N es el número de ramas.

Esto hace que sea difícil de entender el comportamiento del código y para probarlo cuando N crece más allá de un número pequeño.

Las respuestas proporcionadas hasta ahora no mencionar la correlación de la calidad del software a la complejidad ciclomática. La investigación ha demostrado que tener una métrica de complejidad ciclomática inferior debe ayudar a desarrollar un software que es de mayor calidad. Puede ayudar con los atributos de calidad de software de la legibilidad, mantenibilidad y portabilidad. En general se debe intentar obtener una métrica complejidad ciclomática de entre 5-10.

Una de las razones para utilizar las métricas como la complejidad ciclomática es que, en general, un ser humano sólo puede realizar un seguimiento de cerca de 7 (más o menos 2) piezas de información simultáneamente en el cerebro. Por lo tanto, si su software es demasiado complejo con múltiples rutas de decisión, es poco probable que usted será capaz de visualizar cómo se comportará su software (es decir, tendrá una alta complejidad métrica ciclomática). Esto sería más probable conducir al desarrollo de software errónea o error montado. Más información sobre esto se puede encontrar rel="nofollow"> y también en Wikipedia .

ciclomática complejidad se calcula utilizando el gráfico de flujo de control. El Número de medida cuantitativa de caminos linealmente independientes a través del código fuente de un programa se llama como Ciclomática Complejidad (si / si otra cosa / de / tiempo)

complejidad Cyclomatric es básicamente una métrica para calcular áreas de código que necesita más attension para el mantenimiento. Sería básicamente una entrada a la refactorización. Definitivamente da una indicación del área de mejora código en términos de evitar profundo de bucle anidado, condiciones etc.

Eso es una especie de la misma. Sin embargo, cada rama de un "caso" o una declaración "switch" tiende a contar como 1. En efecto, esto significa CC odios declaraciones de caso, y cualquier código que les obliga (procesadores de mando, máquinas de estado, etc).

Considere las href="http://en.wikipedia.org/wiki/Control_flow_graph" gráfico de flujo de control de su función, con un borde adicional que va desde la salida a la entrada. La complejidad ciclomática es el número máximo de cortes que podemos hacer sin separar el gráfico en dos piezas.

Por ejemplo:

function F:
    if condition1:
       ...
    else:
       ...
    if condition2:
       ...
    else:
       ...

Control de flujo Graph

de control de flujo Gráfico

Puede probablemente intuitivamente ver por qué la gráfica vinculada tiene una complejidad de ciclomática 3.

complejidad Cyclomatric es una medida de la complejidad de una unidad de software de is.It mide el número de diferentes rutas de un programa podría seguir con las construcciones lógicas condicionales (Si, mientras que, para el, interruptor y casos etc ....). Si usted quiere saber más acerca de cómo calcular aquí es un video de youtube maravillosa se puede ver https : //www.youtube.com/watch? v = PlCGomvu-NM

Es importante en el diseño de casos de prueba, porque revela los diferentes caminos o escenarios de un programa puede tomar. "Para tener una buena capacidad de prueba y facilidad de mantenimiento, McCabe recomienda que ningún módulo de programa debe exceder de una complejidad ciclomática de 10" (Marsic, 2012, p. 232).

Referencia: Marsic., I. (2012, septiembre). Ingeniería de Software . Universidad Rutgers. Obtenido de www.ece.rutgers.edu/~marsic/books/SE/book-SE_marsic.pdf

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top