2011-10-06 24 views
11

estoy usando undercontrol php y el informe del navegador de código algún error de índice CRAP en cada código setter/getter es decir, como estoPHPUnit y el índice CRAP

public function getFoo() 
{ 
    return $this->_foo; 
} 

El captador/definidor están cubiertos por la prueba de la unidad, la complejidad es ninguno ya que no hay if/for/switch/foreach. Entonces, ¿por qué obtengo un índice CRAP de 1 para ese código?

PD: la auto-respuesta puede deberse a que la complejidad es inexistente pero mi problema principal es que cada getter/setter genere una advertencia por el índice CRAP así que hay que decir la cobertura del código phpunit/php para que el CRAP sea igual a 0 para la función con un índice de 0 complejidad.

+0

Cambiamos de phpUnderControl a Jenkins. Es mucho más configurable y está en desarrollo activamente, y hay una plantilla de proyecto para proyectos PHP. Le permite establecer valores umbral CRAP que desencadenarán advertencias y errores de compilación. –

Respuesta

22

La puntuación mínima es de 1 MIERDA, no 0. Esto se debe a que el algoritmo para CRAP es

CRAP(m) = comp(m)^2 * (1 – cov(m)/100)^3 + comp(m) 

y el valor mínimo complejidad ciclomática (comp) para una función es uno. Entonces, el problema no está en phpunit, sino lo que sea marcar un CRAP de 1 como un problema.

En general, desea establecer su umbral de CRAP en algún lugar alrededor de 5, en cualquier lugar inferior y también puede utilizar una métrica de cobertura de código simple (y disparar al 100%) ya que el factor complejidad apenas pesa. > = 30 significa que ninguna cantidad de prueba puede hacer que su método no sea malo.

Ciclomática complejidad puede por lo general (pero no más de una definición) ser parte calcula como:

  • añadir 1 punto por la llamada de función
  • añadir al menos 1 punto por cada bucle
  • añadir 1 punto para cada rama
+0

tiene razón, el mínimo es 1 ... parece ser un error de php_codebrowser que resalta esas líneas, incluso si están bien. ver https://github.com/mayflowergmbh/PHP_CodeBrowser/issues/50 – RageZ

+0

¿Qué tal un CRAP de 12 para una clase con un puntaje de 3 para tres métodos? (Creo que es por la cantidad de rutas de retorno) – MrMesees

1

¿De verdad es una advertencia? En general, el umbral de advertencias se establece mucho más que 1 (tal vez alrededor de 30). Hay una buena publicación SO here que muestra cómo se calcula el número. Parece que hay unos valores codificados en mi configuración PHPUnit para CRAP de 30.

Según Alberto Savoia, el creador del índice CRAP:

"El índice de CRAP (Cambio Análisis y predicciones de riesgo) está diseñado para analizar y predecir la cantidad de esfuerzo, dolor y tiempo requerido para mantener un cuerpo de código existente ".

El número mínimo de CRAP será la complejidad ciclomática para el código con una cobertura del 100%. La idea es que los cambios en el código complejo son más propensos a crear problemas que los cambios en el código simple.

+0

en realidad es un aviso, pero es molesto tener un aviso en cada getter y setter – RageZ