Class: ChurnVsComplexity::Timetravel::Serializer::QualityCalculator

Inherits:
Object
  • Object
show all
Defined in:
lib/churn_vs_complexity/timetravel/serializer/quality_calculator.rb

Instance Method Summary collapse

Constructor Details

#initialize(min_churn:, max_churn:, min_complexity:, max_complexity:) ⇒ QualityCalculator

Returns a new instance of QualityCalculator.



9
10
11
12
13
14
# File 'lib/churn_vs_complexity/timetravel/serializer/quality_calculator.rb', line 9

def initialize(min_churn:, max_churn:, min_complexity:, max_complexity:)
  @min_churn = min_churn
  @max_churn = max_churn
  @min_complexity = min_complexity
  @max_complexity = max_complexity
end

Instance Method Details

#alpha_score(raw_churn, raw_complexity) ⇒ Object



16
17
18
19
20
21
22
# File 'lib/churn_vs_complexity/timetravel/serializer/quality_calculator.rb', line 16

def alpha_score(raw_churn, raw_complexity)
  # harmonic mean of normalised churn and complexity
  churn = normalise(raw_churn, @min_churn, @max_churn, EPSILON)
  complexity = normalise(raw_complexity, @min_complexity, @max_complexity, EPSILON)

  (2 * churn * complexity) / (churn + complexity)
end

#beta_score(raw_churn, raw_complexity) ⇒ Object



24
25
26
27
28
29
30
# File 'lib/churn_vs_complexity/timetravel/serializer/quality_calculator.rb', line 24

def beta_score(raw_churn, raw_complexity)
  # geometric mean of normalised churn and complexity
  churn = normalise(raw_churn, @min_churn, @max_churn, EPSILON)
  complexity = normalise(raw_complexity, @min_complexity, @max_complexity, EPSILON)

  Math.sqrt(churn * complexity)
end