Last active
August 29, 2015 14:22
-
-
Save rh0dium/414ed6ca567bdff2b57b to your computer and use it in GitHub Desktop.
Effort is the measure of what changed divided by the time it took to do it (Man Hours). For this we use the following strategy. If it is programatic code we look at the absolute lines of code that was edited, added and deleted negating comments. In the event it is binary data we look at the absolute file size delta. We divide this by the man ho…
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
def calculate_effort_hours(**kwargs): | |
"""Calculate effort hours on a file change. | |
The best situation is that we have a lines_delta, on known file types (*.c, *.v, *.va, etc.) | |
In lieu of that use the file size as the file_delta. time_difference is how long the file | |
was checked out as reported in journal file.""" | |
code_lines_add = kwargs.get('code_lines_add', 0) | |
code_lines_add = int(code_lines_add) if code_lines_add is not None else 0 | |
code_lines_minus = kwargs.get('code_lines_minus', 0) | |
code_lines_minus = int(code_lines_minus) if code_lines_minus is not None else 0 | |
lines_delta = code_lines_add + code_lines_minus | |
file_size = kwargs.get('file_size', 0) | |
file_size = int(file_size) if file_size is not None else 0 | |
prev_file_size = kwargs.get('prev_file_size', 0) | |
prev_file_size = int(prev_file_size) if prev_file_size is not None else 0 | |
filesize_byte_delta = abs(file_size - prev_file_size) | |
# We prefer line delta | |
effort_delta = lines_delta if lines_delta else filesize_byte_delta | |
man_minutes = max([kwargs.get('man_hours', 0.0), 1/60.0]) * 60 # 1/2 sec | |
effort = (effort_delta / man_minutes) * \ | |
EFFORT_DATA_SCALER.get(kwargs.get('vendor_datatype', None), 1) * \ | |
EFFORT_ACTION_SCALER.get(kwargs.get('action', None), 1) | |
return effort / 60 |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment