/* * Sonar Total Quality Plugin * Copyright (C) 2010 Martin (e72636) and Emilio Escobar Reyero (escoem) * dev@sonar.codehaus.org * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 3 of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02 */ package org.sonar.plugins.totalquality; import java.util.Arrays; import java.util.List; import java.util.Map; import org.sonar.api.measures.CoreMetrics; import org.sonar.api.measures.Metric; import org.sonar.api.measures.Metrics; import com.google.common.collect.ImmutableMap; /** Metrics for TQ plugin. */ public final class TQMetrics implements Metrics { /** Domain Architecture. */ public static final String DOMAIN_ARCHITECTURE = "Architecture"; public static final String TQ_TOTAL_QUALITY_KEY = "total-quality"; public static final Metric TQ_TOTAL_QUALITY = new Metric(TQ_TOTAL_QUALITY_KEY, "Total Quality", "The total quality of a project", Metric.ValueType.PERCENT, Metric.DIRECTION_BETTER, true, CoreMetrics.DOMAIN_GENERAL); public static final String TQ_DRY_KEY = "total-quality-dry"; public static final Metric TQ_DRY = new Metric(TQ_DRY_KEY, "DRYness", "DRY = 100 - " + CoreMetrics.DUPLICATED_LINES_DENSITY_KEY, Metric.ValueType.PERCENT, Metric.DIRECTION_BETTER, true, CoreMetrics.DOMAIN_DUPLICATION); public static final String TQ_CODE_KEY = "total-quality-code"; public static final Metric TQ_CODE = new Metric(TQ_CODE_KEY, "Code Quality", "CODE quality from " + CoreMetrics.PUBLIC_DOCUMENTED_API_DENSITY_KEY + ", " + CoreMetrics.VIOLATIONS_DENSITY_KEY + " and " + TQ_DRY_KEY, Metric.ValueType.PERCENT, Metric.DIRECTION_BETTER, true, CoreMetrics.DOMAIN_RULES); public static final String TQ_TS_KEY = "total-quality-test"; public static final Metric TQ_TS = new Metric(TQ_TS_KEY, "Testing Quality", "TS quality from " + CoreMetrics.BRANCH_COVERAGE_KEY + ", " + CoreMetrics.LINE_COVERAGE_KEY + " and " + CoreMetrics.COVERAGE_KEY, Metric.ValueType.PERCENT, Metric.DIRECTION_BETTER, true, CoreMetrics.DOMAIN_TESTS); public static final String TQ_DESIGN_NOM_KEY = "total-quality-design-nom"; public static final Metric TQ_DESIGN_NOM = new Metric(TQ_DESIGN_NOM_KEY, "Design Classes and Methods Complexity", "NOM from classes with " + CoreMetrics.FUNCTION_COMPLEXITY_KEY + " gt value (2.5 default) and " + CoreMetrics.CLASS_COMPLEXITY_KEY + " gt value (12 default)", Metric.ValueType.PERCENT, Metric.DIRECTION_BETTER, true, CoreMetrics.DOMAIN_DESIGN); public static final String TQ_DESIGN_LCOM4_KEY = "total-quality-design-lcom4"; public static final Metric TQ_DESIGN_LCOM4 = new Metric(TQ_DESIGN_LCOM4_KEY, "Design Lack of Cohesion of Methods", "LCOM4 from classes with " + CoreMetrics.LCOM4_KEY + " gt vale (50 default)", Metric.ValueType.PERCENT, Metric.DIRECTION_BETTER, true, CoreMetrics.DOMAIN_DESIGN); public static final String TQ_DESIGN_RFC_KEY = "total-quality-design-rfc"; public static final Metric TQ_DESIGN_RFC = new Metric(TQ_DESIGN_RFC_KEY, "Design Response for Class", "RFC from classes with " + CoreMetrics.RFC_KEY + " gt vale (50 default)", Metric.ValueType.PERCENT, Metric.DIRECTION_BETTER, true, CoreMetrics.DOMAIN_DESIGN); public static final String TQ_DESIGN_CBO_KEY = "total-quality-design-cbo"; public static final Metric TQ_DESIGN_CBO = new Metric(TQ_DESIGN_CBO_KEY, "Design Coupling Between Objects", "CBO from classes with " + CoreMetrics.EFFERENT_COUPLINGS_KEY + " gt value (5 default)", Metric.ValueType.PERCENT, Metric.DIRECTION_BETTER, true, CoreMetrics.DOMAIN_DESIGN); public static final String TQ_DESIGN_DIT_KEY = "total-quality-design-dit"; public static final Metric TQ_DESIGN_DIT = new Metric(TQ_DESIGN_DIT_KEY, "Design Depth of Inheritance Tree", "DIT from classes with " + CoreMetrics.DEPTH_IN_TREE_KEY + " gt value (5 default)", Metric.ValueType.PERCENT, Metric.DIRECTION_BETTER, true, CoreMetrics.DOMAIN_DESIGN); public static final String TQ_DESIGN_KEY = "total-quality-design"; public static final Metric TQ_DESIGN = new Metric(TQ_DESIGN_KEY, "Design Quality", "DES from " + TQ_DESIGN_DIT_KEY + ", " + TQ_DESIGN_CBO_KEY + ", " + TQ_DESIGN_LCOM4_KEY + ", " + TQ_DESIGN_RFC_KEY + " and " + TQ_DESIGN_NOM_KEY, Metric.ValueType.PERCENT, Metric.DIRECTION_BETTER, true, CoreMetrics.DOMAIN_DESIGN); public static final String TQ_ARCHITECTURE_PTI_KEY = "total-quality-architecture-pti"; public static final Metric TQ_ARCHITECTURE_PTI = new Metric(TQ_ARCHITECTURE_PTI_KEY, "Architecture Tangle Index", "Inverse of Packages and files tangle index", Metric.ValueType.PERCENT, Metric.DIRECTION_BETTER, true, DOMAIN_ARCHITECTURE); public static final String TQ_ARCHITECTURE_ADI_KEY = "total-quality-architecture-adi"; public static final Metric TQ_ARCHITECTURE_ADI = new Metric("isoqa_architecture_adi", "Architecture Distance", "ADI from " + CoreMetrics.DISTANCE_KEY + " gt value (20 default)", Metric.ValueType.PERCENT, Metric.DIRECTION_BETTER, true, DOMAIN_ARCHITECTURE); public static final String TQ_ARCHITECTURE_KEY = "total-quality-architecture"; public static final Metric TQ_ARCHITECTURE = new Metric(TQ_ARCHITECTURE_KEY, "Architecture", "ARCH from " + TQ_ARCHITECTURE_ADI_KEY + " and " + CoreMetrics.PACKAGE_TANGLE_INDEX_KEY, Metric.ValueType.PERCENT, Metric.DIRECTION_BETTER, true, DOMAIN_ARCHITECTURE); public List<Metric> getMetrics() { return Arrays.asList(TQ_TOTAL_QUALITY, TQ_DRY, TQ_CODE, TQ_TS, TQ_DESIGN_NOM, TQ_DESIGN_RFC, TQ_DESIGN_CBO, TQ_DESIGN_DIT, TQ_DESIGN_LCOM4, TQ_DESIGN, TQ_ARCHITECTURE_ADI, TQ_ARCHITECTURE_PTI, TQ_ARCHITECTURE); } public static final Map<String, Metric> formulaParams = ImmutableMap.<String, Metric> builder().put("ARCH", TQ_ARCHITECTURE).put( "DESIGN", TQ_DESIGN).put("CODE", TQ_CODE).put("TESTS", TQ_TS).put("NOM", TQ_DESIGN_NOM).put("LCOM", TQ_DESIGN_LCOM4).put("RFC", TQ_DESIGN_RFC).put("CBO", TQ_DESIGN_CBO).put("DIT", TQ_DESIGN_DIT).put("PTI", TQ_ARCHITECTURE_PTI).put("ADI", TQ_ARCHITECTURE_ADI) .put("COV", CoreMetrics.COVERAGE).put("SUC", CoreMetrics.TEST_SUCCESS_DENSITY).put("DOC", CoreMetrics.PUBLIC_DOCUMENTED_API_DENSITY) .put("RULES", CoreMetrics.VIOLATIONS_DENSITY).put("DRY", TQ_DRY).build(); }