Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/wbhob/halflife
Analyzes half-life of code in a Git repository.
https://github.com/wbhob/halflife
Last synced: 19 days ago
JSON representation
Analyzes half-life of code in a Git repository.
- Host: GitHub
- URL: https://github.com/wbhob/halflife
- Owner: wbhob
- Created: 2024-11-08T07:52:00.000Z (3 months ago)
- Default Branch: main
- Last Pushed: 2024-11-08T07:55:13.000Z (3 months ago)
- Last Synced: 2024-11-08T08:36:23.392Z (3 months ago)
- Language: Go
- Homepage:
- Size: 0 Bytes
- Stars: 1
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# Code Half-Life Analyzer
A Go tool that analyzes the "half-life" of code in Git repositories by tracking how long lines of code survive between modifications. This helps teams understand their codebase's stability and evolution patterns.
## Features
- Tracks individual line changes throughout Git history
- Calculates code half-life (time until 50% of code is modified)
- Provides detailed statistics on code longevity
- Supports filtering by file types and extensions
- Generates comprehensive reports including:
- Survival rates over time
- Change frequency metrics
- Code age distribution
- Edit size statistics## Installation
### Prerequisites
- Go 1.19 or later
- Git installed on your system### Steps
1. Clone the repository:
```bash
git clone https://github.com/wbhob/halflife
cd halflife
```2. Install dependencies:
```bash
go mod tidy
```3. Build the tool:
```bash
go build
```## Usage
Basic usage:
```bash
./halflife /path/to/repository [file-pattern]
```Examples:
```bash
./halflife /path/to/repository # Analyzes *.go files by default
./halflife /path/to/repository "*.js" # Analyze JavaScript files
./halflife /path/to/repository "*.py" # Analyze Python files
```## Output Example
```
Code Half-Life Analysis Report
============================Summary Statistics:
-----------------
- Estimated Code Half-Life: 45.2 days
- Median Lifetime: 65.3 days
- Mean Lifetime: 72.1 days
- Standard Deviation: 23.4 daysCode Coverage:
------------
- Total Lines Tracked: 15234
- Lines with Multiple Changes: 8543
- Oldest Code Age: 365.0 days
- Newest Code Age: 1.0 daysSurvival Rate:
------------
Day 1: 95.0%
Day 7: 85.2%
Day 30: 70.5%
Day 90: 45.3%
Day 180: 25.1%Change Frequency:
---------------
Created: 15234
Modified: 8543
Deleted: 3421Additional Metrics:
----------------
- Average Edit Size: 125.34 characters
```## How It Works
The tool:
1. Analyzes the Git history of your repository
2. Tracks when each line of code was first introduced and last modified
3. Calculates statistics based on the lifetime of code lines
4. Estimates the half-life by analyzing modification patterns## Statistics Explained
- **Half-Life**: Estimated time until 50% of code is modified
- **Median Lifetime**: Middle value of all code lifetimes
- **Mean Lifetime**: Average lifetime of code
- **Standard Deviation**: Variation in code lifetimes
- **Total Lines Tracked**: Number of unique lines analyzed
- **Lines with Multiple Changes**: Lines that have been modified at least once## Limitations
- Only tracks lines in their current file location (line moves between files are treated as delete + create)
- Merges and non-linear history may affect accuracy
- Very large repositories might require significant processing time
- Analysis is based on the main branch only (follows HEAD)
- Empty lines are ignored in the analysis
- File renames may be interpreted as deletes and creates
- Only analyzes files matching the specified pattern (defaults to *.go)## Contributing
Contributions are welcome! Please feel free to submit pull requests or create issues for bugs and feature requests.
## License
This project is licensed under the MIT License - see the LICENSE file for details.
## Acknowledgments
- Uses the [go-git](https://github.com/go-git/go-git) library for Git operations
- Inspired by various studies on code churn and software evolution