Files
scripts-and-configs/school/effort-estimation.py

50 lines
1.4 KiB
Python

import array
import math
# estimate based on:
# P3D1: 240h ( 8 weeks, 30hrs) -> 200
# P3D2: 300h (10 weeks, 30hrs) -> 250
# P3D3: 240h ( 8 weeks, 30hrs) -> 200
# P3D4: 60h ( 2 weeks, 30hrs) -> 50
ph_est = 840
#ph_est = 700 # if 25hrs instead of 30
ph_perc = array.array('f', [0.15, 0.28, 0.42, 0.075, 0.175])
baseline_mh = round(ph_est / ph_perc[2])
def calculate_person_months(man_hours):
person_months = 114
return man_hours / person_months
def ovza(person_months):
return math.sqrt(person_months) + 1
print("Man-Hour baseline: ", baseline_mh)
total_mh = 0
total_pm = 0
total_ovza = 0
man_hours = array.array("I")
person_months = array.array("f")
optimal_fte = array.array("f")
for i in range(5):
man_hours.append(round(baseline_mh * ph_perc[i]))
total_mh += man_hours[i]
print("Phase", i+1, "Man-Hours: ", man_hours[i])
person_months.append(calculate_person_months(baseline_mh * ph_perc[i]))
total_pm += person_months[i]
print("Phase", i+1, "Person-Months:", round(person_months[i],2))
optimal_fte.append(ovza(person_months[i]))
total_ovza += optimal_fte[i]
print("Phase", i+1, "OVZA :", round(optimal_fte[i],1))
print("Phase", i+1, "WVZA? :", round(ovza(optimal_fte[i]),1))
print("Total Man-Hours: ", total_mh)
print("Total Person-Months: ", round(total_pm,2))
print("Total OVZA : ", round(total_ovza,1))