コード例 #1
0
 /**
  * @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);
 }
コード例 #2
0
 /**
  * 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;
 }