/** * @dataProvider providesClasses */ public function testICanCalculateSystemComplexityOfClass($totalDataComplexity, $totalStructureComplexity, $totalSystemComplexity, $code) { $filename = tempnam(sys_get_temp_dir(), 'unit-phpmetrics-syc'); file_put_contents($filename, $code); $extractor = new Extractor(new Tokenizer()); $classes = $extractor->extract($filename)->getClasses(); $class = $classes[0]; $metric = new SystemComplexity(); $result = $metric->calculate($class); $this->assertEquals($totalDataComplexity, $result->getTotalDataComplexity(), 'total data complexity'); $this->assertEquals($totalStructureComplexity, $result->getTotalStructuralComplexity(), 'total structure complexity'); $this->assertEquals($totalSystemComplexity, $result->getTotalSystemComplexity(), 'total system complexity'); unlink($filename); }
/** * Calculates system complexity * * @param string $filename * @return Result */ public function calculate($filename) { $rOOP = $this->classMap->getClassesIn($filename); $result = new Result($filename); $len = 0; $sy = $dc = $sc = array(); $calculator = new SystemComplexity(); foreach ($rOOP->getClasses() as $class) { $r = $calculator->calculate($class); $len += sizeof($class->getMethods(), COUNT_NORMAL); $sy[] = $r->getTotalSystemComplexity(); $dc[] = $r->getTotalDataComplexity(); $sc[] = $r->getTotalStructuralComplexity(); } if ($len > 0 && sizeof($dc, COUNT_NORMAL) > 0) { $result->setRelativeStructuralComplexity(round(array_sum($sc) / $len, 2))->setRelativeDataComplexity(round(array_sum($dc) / $len, 2))->setRelativeSystemComplexity(round(array_sum($sy) / $len, 2))->setTotalStructuralComplexity(array_sum($sc))->setTotalDataComplexity(array_sum($dc))->setTotalSystemComplexity(array_sum($dc) + array_sum($sc)); } return $result; }