Exemple #1
0
 public function testCouplingTakesCareOfReturnedValues()
 {
     $filename = __DIR__ . '/../../../../../resources/coupling/f1.php';
     $extractor = new Extractor(new Tokenizer());
     $classmap = new ClassMap();
     $classmap->push($filename, $extractor->extract($filename));
     $coupling = new Coupling();
     $this->result = $coupling->calculate($classmap);
     $this->assertEquals(0, $this->result->get('\\ClassWhoUseAnother')->getAfferentCoupling());
     $this->assertEquals(1, $this->result->get('\\ClassWhoUseAnother')->getEfferentCoupling());
     $this->assertEquals(1, $this->result->get('\\ClassWhoIsUsed')->getAfferentCoupling());
     $this->assertEquals(0, $this->result->get('\\ClassWhoIsUsed')->getEfferentCoupling());
 }
 /**
  * Calculates lcom for file (and not for class)
  *
  * @param string $filename
  * @return Result
  */
 public function calculate($filename)
 {
     $rOOP = $this->classMap->getClassesIn($filename);
     $result = new Result($filename);
     $n = 0;
     $lcom = new LackOfCohesionOfMethods();
     foreach ($rOOP->getClasses() as $class) {
         $r = $lcom->calculate($class);
         $n += $r->getLcom();
     }
     $result->setLcom($n);
     return $result;
 }
 /**
  * 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;
 }
Exemple #4
0
 /**
  * Calculates coupling for file (and not for class)
  *
  * @param string $filename
  * @return Result
  */
 public function calculate($filename)
 {
     $rOOP = $this->classMap->getClassesIn($filename);
     $result = new Result($filename);
     // case of file doesn't contain any class
     if (null === $rOOP) {
         return $result;
     }
     $instability = $ce = $ca = 0;
     $classes = $rOOP->getClasses();
     foreach ($classes as $declaredClass) {
         $declaredClassCoupling = $this->couplingMap->get($declaredClass->getFullname());
         $ce += $declaredClassCoupling->getEfferentCoupling();
         $ca += $declaredClassCoupling->getAfferentCoupling();
     }
     if ($ca + $ce > 0) {
         $instability = $ce / ($ca + $ce);
     }
     $result->setAfferentCoupling($ca)->setEfferentCoupling($ce)->setInstability($instability);
     return $result;
 }
Exemple #5
0
 /**
  * Extracts afferent and efferent coupling
  *
  * @param ClassMap $result
  * @return array
  */
 private function extractCoupling(ClassMap $result)
 {
     $results = $result->all();
     $classes = array();
     foreach ($results as $result) {
         $classes = array_merge($classes, $result->getClasses());
     }
     $map = array();
     foreach ($classes as $class) {
         if (!isset($map[$class->getFullname()])) {
             $map[$class->getFullname()] = new Result($class->getFullname());
         }
         $dependencies = $class->getDependencies();
         $map[$class->getFullname()]->setEfferentCoupling(sizeof($dependencies, COUNT_NORMAL));
         foreach ($dependencies as $dependency) {
             if (!isset($map[$dependency])) {
                 $map[$dependency] = new Result($dependency);
             }
             $map[$dependency]->setAfferentCoupling($map[$dependency]->getAfferentCoupling() + 1);
         }
     }
     return $map;
 }
Exemple #6
0
 /**
  * Run analyze
  *
  * @param $filename
  * @return \Hal\Component\Result\ResultSet
  */
 public function execute($filename)
 {
     $rHalstead = $this->halstead->calculate($filename);
     $rLoc = $this->loc->calculate($filename);
     $rMcCabe = $this->mcCabe->calculate($filename);
     $rMyer = $this->myer->calculate($filename);
     $rMaintenability = $this->maintenabilityIndex->calculate($rHalstead, $rLoc, $rMcCabe);
     $resultSet = new \Hal\Component\Result\ResultSet($filename);
     $resultSet->setLoc($rLoc)->setMcCabe($rMcCabe)->setMyer($rMyer)->setHalstead($rHalstead)->setMaintenabilityIndex($rMaintenability);
     if ($this->withOOP) {
         $rOOP = $this->extractor->extract($filename);
         $this->classMap->push($filename, $rOOP);
         $resultSet->setOOP($rOOP);
     }
     return $resultSet;
 }