Untitled

 avatar
unknown
plain_text
11 days ago
1.5 kB
3
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