Analizo

 view release on metacpan or  search on metacpan

lib/Analizo/GlobalMetrics.pm  view on Meta::CPAN

  $self->metric_report->{'total_loc'} += $values->{'loc'};
}

sub _add_values_to_values_lists {
  my ($self, $values) = @_;
  for my $metric (keys %{$values}) {
    $self->_add_metric_value_to_values_list($metric, $values->{$metric});
  }
}

sub _add_metric_value_to_values_list {
  my ($self, $metric, $metric_value) = @_;
  if( $metric ne '_module' && $metric ne '_filename' ) {
    $self->values_lists->{$metric} = [] unless ($self->values_lists->{$metric});
    push @{$self->values_lists->{$metric}}, $metric_value;
  }
}

sub report {

  my ($self) = @_;

  $self->_include_metrics_from_calculators;
  $self->_add_statistics;
  $self->_add_total_coupling_factor;

  return \%{$self->metric_report};
}

sub _include_metrics_from_calculators {
  my ($self) = @_;
  for my $metric (keys %{$self->calculators}) {
    $self->metric_report->{$metric} = $self->calculators->{$metric}->calculate();
  }
}

sub _add_statistics {
  my ($self) = @_;

  for my $metric (keys %{$self->values_lists}) {
    my $statistics = Statistics::Descriptive::Full->new();
    $statistics->add_data(@{$self->values_lists->{$metric}});

    $self->_add_descriptive_statistics($metric, $statistics);
    $self->_add_distributions_statistics($metric, $statistics);
  }
}

sub _add_descriptive_statistics {
  my ($self, $metric, $statistics) = @_;
  $self->metric_report->{$metric . "_mean"} = $statistics->mean();
  $self->metric_report->{$metric . "_mode"} = $statistics->mode();
  $self->metric_report->{$metric . "_standard_deviation"} = $statistics->standard_deviation();
  $self->metric_report->{$metric . "_sum"} = $statistics->sum();
  $self->metric_report->{$metric . "_variance"} = $statistics->variance();

  $self->metric_report->{$metric . "_quantile_min"}   = $statistics->min(); #minimum
  $self->metric_report->{$metric . "_quantile_lower"}   = $statistics->quantile(1); #lower quartile
  $self->metric_report->{$metric . "_quantile_median"}   = $statistics->median(); #median
  $self->metric_report->{$metric . "_quantile_upper"}   = $statistics->quantile(3); #upper quartile
  $self->metric_report->{$metric . "_quantile_ninety_five"}  = $statistics->percentile(95); #95th percentile
  $self->metric_report->{$metric . "_quantile_max"} = $statistics->max(); #maximum
}

sub _add_distributions_statistics {
  my ($self, $metric, $statistics) = @_;

  if (($statistics->count >= 4) && ($statistics->variance() > 0)) {
    $self->metric_report->{$metric . "_kurtosis"} = $statistics->kurtosis();
    $self->metric_report->{$metric . "_skewness"} = $statistics->skewness();
  }
  else {
    $self->metric_report->{$metric . "_kurtosis"} = 0;
    $self->metric_report->{$metric . "_skewness"} = 0;
  }
}

sub _add_total_coupling_factor {
  my ($self) = @_;
  my $total_modules = $self->metric_report->{'total_modules'};
  my $total_acc = $self->metric_report->{'acc_sum'};

  $self->metric_report->{"total_cof"} = $self->coupling_factor($total_acc, $total_modules);
}

sub coupling_factor {
  my ($self, $total_acc, $total_modules) = @_;
  return ($total_modules > 1) ? $total_acc / _number_of_combinations($total_modules) : 1;
}

sub _number_of_combinations {
  my ($total_modules) = @_;
  return $total_modules * ($total_modules - 1);
}



1;



( run in 1.713 second using v1.01-cache-2.11-cpan-22024b96cdf )