Untitled
unknown
plain_text
8 months ago
1.5 kB
4
Indexable
import math
def halstead_metrics(n1, n2, N1, N2):
# Vocabulary size
vocabulary_size = n1 + n2
# Program length
program_length = N1 + N2
# Program volume
if vocabulary_size > 0:
program_volume = program_length * math.log2(vocabulary_size)
else:
program_volume = 0 # Avoid log2(0) error
# Difficulty / Error proneness
if n2 > 0:
program_difficulty = (n1 / 2) * (N2 / n2)
else:
program_difficulty = 0 # Avoid division by zero
# Program level (inverse of difficulty)
if program_difficulty > 0:
program_level = 1 / program_difficulty
else:
program_level = 0 # Avoid division by zero
# Programming effort
programming_effort = program_difficulty * program_volume
# Programming time
programming_time = programming_effort / 18 # Standard assumption
# Estimated bugs
program_bugs = program_volume / 3000 # Empirical constant
return {
"Vocabulary Size": vocabulary_size,
"Program Length": program_length,
"Program Volume": program_volume,
"Program Difficulty": program_difficulty,
"Program Level": program_level,
"Programming Effort": programming_effort,
"Programming Time": programming_time,
"Estimated Bugs": program_bugs
}
# Example usage:
n1, n2, N1, N2 = 10, 15, 50, 70 # Example values
metrics = halstead_metrics(n1, n2, N1, N2)
for key, value in metrics.items():
print(f"{key}: {value:.2f}")Editor is loading...
Leave a Comment