8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
|
# File 'lib/churn_vs_complexity/normal/serializer/summary_hash.rb', line 8
def serialize(result)
values_by_file = result[:values_by_file]
churn_values = values_by_file.map { |_, values| values[0].to_f }
complexity_values = values_by_file.map { |_, values| values[1].to_f }
mean_churn = churn_values.sum / churn_values.size
median_churn = churn_values.sort[churn_values.size / 2]
mean_complexity = complexity_values.sum / complexity_values.size
median_complexity = complexity_values.sort[complexity_values.size / 2]
max_churn = churn_values.max
min_churn = churn_values.min
max_complexity = complexity_values.max
min_complexity = complexity_values.min
epsilon = 0.0001
gamma_score = values_by_file.map do |_, values|
churn = values[0].to_f + epsilon
complexity = values[1].to_f + epsilon
(2 * churn * complexity) / (churn + complexity)
end
mean_gamma_score = gamma_score.sum / gamma_score.size
median_gamma_score = gamma_score.sort[gamma_score.size / 2]
end_date = result[:git_period].end_date
{
mean_churn:,
median_churn:,
max_churn:,
min_churn:,
mean_complexity:,
median_complexity:,
max_complexity:,
min_complexity:,
mean_gamma_score:,
median_gamma_score:,
end_date:,
}
end
|