Qué es el anti patrón de riezgo de cambio (Change Risk Anti-Patterns C.R.A.P)?
es un método para analizar y predecir la cantidad de esfuerzo, trabajo y tiempo requerido para mantener la base de código existente. La fórmula de C.R.A.P. es la siguiente:
C.R.A.P.(m) = comp(m)^2 * (1 – cov(m)/100)^3 + comp(m)
Donde comp(m) es la complejidad ciclomática del método m y cov(m) es la cobertura de pruebas del método m.
Más información aqui:
Al intentar configurar CRAP para grails me topé con que no pude utilizar gmetrics, le di muchas vueltas hasta que lo abandoné, leyendo sobre métricas me topé con esta presentación y ahí me di cuenta de que codenarc ya contiene a CRAP entre sus reglas. He aquí como lo configuré:
buildconfig.groovy
25 grails.project.dependency.resolution = { 54 55 dependencies { 66 compile 'org.gmetrics:GMetrics:0.6' 69 } 70 71 plugins { 85 compile ':codenarc:0.20' 99 } 100 } 101 110 111 codenarc.reports = { 116 MyHtmlReport('html') { 117 outputFile = 'target/CodeNarcReport.html' 118 title = 'Violations Report' 119 } 120 } 121 122 codenarc.propertiesFile='grails-app/conf/codenarc.properties' 123 codenarc.ruleSetFiles = "rulesets/basic.xml,rulesets/exceptions.xml, rulesets/imports.xml,rulesets/grails.xml, rulesets/unused.xml, rulesets/size.xml, rulesets/concurrency.xml,rulesets/convention.xml,rulesets/design.xml,rulesets/groovyism.xml,rulesets/imports.xml,rulesets/logging.xml" 124
codenarc.properties
1 GrailsPublicControllerMethod.enabled=false 2 CatchException.enabled=false 3 CatchThrowable.enabled=false 4 ThrowException.enabled=false 5 ThrowRuntimeException.enabled=false 6 GrailsStatelessService.enabled=false 7 NestedBlockDepth.maxNestedBlockDepth=3 8 CrapMetric.enabled=true 9 CrapMetric.coberturaXmlFile=file:target/test-reports/cobertura/coverage.xml
Ahora solo basta ejecutar:
grails test-app -unit -coverage -xml
grails codenarc
Como resultado tendremos más violaciones a las reglas pero seguro ayuda a mejorar en algo.
➥ ItemGroupsController.groovy
Rule Name | Priority | Line # | Source Line / Message |
---|---|---|---|
CrapMetric | 2 | 76 |
[SRC]def update() {
[MSG]Violation in class com.winbits.api.catalog.controllers.ItemGroupsController. The CRAP score for method [update] is [90.0]
|
El límite está puesto a 30 como máximo, este método tiene un índice de 90 lo cual nos indica que esta muy crapy, para poder reducir el índice se puede hacer un refactor para reducir su complejidad o aumentar sus pruebas automatizadas, claro que si se hace un refactor primero se tienen que hacer las pruebas para que sea seguro hacerlo :-)
No hay comentarios.:
Publicar un comentario