Skip to content

Repository files navigation

Git Developer Productivity Analyzer

Этот инструмент анализирует Git-репозиторий для оценки объективной продуктивности каждого разработчика на основе их вклада в проект. Он учитывает множество факторов, которые могут влиять на статистику, такие как:

  • Увольнение и приход новых сотрудников
  • Несущественные изменения (например, только отступы или форматирование)
  • Squash-коммиты, которые могут изменить историю авторства
  • Revert-коммиты

Возможности

  • Сбор и анализ коммитов из любого Git-репозитория
  • Определение существенных и несущественных изменений
  • Расчет рейтинга полезности для каждого разработчика
  • Визуализация результатов через веб-интерфейс или автономный HTML-отчет
  • Экспорт статистики в JSON-формат
  • Опция игнорирования revert-коммитов
  • Настраиваемые веса для параметров оценки полезности
  • Возможность исключения разработчиков из отчетов и графиков
  • Графический интерфейс пользователя для удобной настройки параметров
  • Подробное логирование процесса анализа

Установка

Требования

  • Python 3.7+
  • Git

Установка из исходного кода

# Клонируем репозиторий
git clone https://github.com/yourusername/git-dev-productivity.git
cd git-dev-productivity

# Устанавливаем зависимости
pip install -e .

Или просто установите требуемые зависимости:

pip install gitpython flask pandas matplotlib tkinter

Использование

Графический интерфейс (GUI)

Для запуска графического интерфейса используйте:

python run_gui.py

Через GUI вы можете:

  • Выбрать Git-репозиторий для анализа
  • Настроить все параметры анализа
  • Установить веса для факторов оценки полезности
  • Исключить определенных разработчиков из отчета
  • Сгенерировать JSON-отчет и HTML-визуализацию
  • Просмотреть журнал работы анализатора

Командная строка (CLI)

Для анализа через командную строку:

python main.py --repo-path /путь/к/вашему/репозиторию --output-file результаты.json [--ignore-reverts]

Опции командной строки

Основные параметры:

  • --repo-path - путь к Git-репозиторию для анализа (обязательный)
  • --output-file - путь для сохранения результатов в JSON (по умолчанию: developer_stats.json)
  • --ignore-reverts - флаг для игнорирования revert-коммитов
  • --start-date - начальная дата для анализа (формат: YYYY-MM-DD)
  • --end-date - конечная дата для анализа (формат: YYYY-MM-DD)
  • --min-changes - минимальное количество изменений для существенного коммита (по умолчанию: 5)

Параметры HTML-отчета:

  • --generate-html - флаг для активации генерации HTML-отчета
  • --html-output-dir - директория, в которую будет сохранен HTML-отчет (по умолчанию: git_stats_report)
  • --inline-html - создать автономный HTML-отчет со встроенными CSS и JavaScript

Настройка весов параметров оценки:

  • --weight-substantial-commits - вес для существенных коммитов (по умолчанию: 0.3)
  • --weight-lines - вес для общего количества строк (по умолчанию: 0.15)
  • --weight-impact - вес для влияния коммитов (по умолчанию: 0.25)
  • --weight-substantive-ratio - вес для соотношения существенных коммитов (по умолчанию: 0.2)
  • --weight-revert-penalty - вес для штрафа за revert-коммиты (по умолчанию: -0.1)
  • --weight-daily-activity - вес для ежедневной активности (по умолчанию: 0.2)
  • --weights-file - путь к JSON-файлу с настройками весов

Исключение разработчиков:

  • --exclude-developers - список email разработчиков, которых нужно исключить из отчета

Параметры логирования:

  • --verbose или -v - включить подробное логирование
  • --log-file - файл для сохранения лога

Примеры использования

Базовый анализ:

python main.py --repo-path /путь/к/репозиторию --output-file результаты.json --ignore-reverts

Анализ с пользовательскими весами:

python main.py --repo-path /путь/к/репозиторию --output-file результаты.json --weight-substantial-commits 0.4 --weight-impact 0.3 --weight-daily-activity 0.1

Анализ с исключением разработчиков:

python main.py --repo-path /путь/к/репозиторию --output-file результаты.json --exclude-developers dev1@example.com dev2@example.com

Полный анализ с генерацией HTML:

python main.py --repo-path /путь/к/репозиторию --output-file results/team_report.json --generate-html --inline-html --html-output-dir reports --exclude-developers dev3@example.com --weight-substantial-commits 0.35 --verbose

Расшифровка параметров оценки полезности

Рейтинг полезности разработчика рассчитывается на основе нескольких факторов с настраиваемыми весами:

  1. Существенные коммиты (вес 0.3) - коммиты с достаточным количеством значимых изменений. Отражает способность разработчика делать осмысленные, значимые изменения.

  2. Количество строк (вес 0.15) - общее количество добавленных и удаленных строк. Отражает объем выполненной работы.

  3. Влияние коммитов (вес 0.25) - комплексная метрика, учитывающая количество измененных файлов и объем изменений. Отражает широту воздействия на кодовую базу.

  4. Соотношение значимых коммитов (вес 0.2) - доля существенных коммитов к общему числу. Отражает качество и значимость вносимых изменений.

  5. Штраф за реверты (вес -0.1) - отрицательный фактор за отмену своих или чужих изменений. Отражает стабильность и надежность вносимых изменений.

  6. Регулярность активности (вес 0.2) - равномерность вклада во времени. Учитывает стабильность работы и вовлеченность в проект.

HTML-отчеты

Анализатор может генерировать HTML-отчеты в двух режимах:

  1. Стандартный режим - создает HTML-файл и директорию со статическими файлами (CSS, JavaScript). Требует веб-сервер для корректного просмотра.

  2. Режим встраивания (inline) - создает автономный HTML-файл со встроенными CSS и JavaScript, который можно открыть в любом браузере без веб-сервера.

HTML-файл всегда создается с именем, соответствующим имени JSON-отчета, но с расширением .html. Например, если вы указали --output-file team_report.json, HTML-файл будет называться team_report.html.

Особенности HTML-отчетов

  • Интерактивность - графики и таблицы можно взаимодействовать (сортировка, фильтрация)
  • Детальная статистика - полная информация по каждому разработчику
  • Управление видимостью - возможность скрывать разработчиков на графиках
  • Автономность (в режиме inline) - не требует веб-сервера для просмотра

Структура JSON-вывода

Результаты анализа сохраняются в JSON-файл со следующей структурой:

{
  "metadata": {
    "generated_at": "2023-05-01 12:34:56",
    "developer_count": 10,
    "excluded_developers": ["dev3@example.com"]
  },
  "team_stats": {
    "total_commits": 1500,
    "total_substantial_commits": 1200,
    "total_lines_added": 50000,
    "total_lines_removed": 30000,
    ...
  },
  "developers": {
    "dev1@example.com": {
      "name": "Developer 1",
      "email": "dev1@example.com",
      "total_commits": 300,
      "substantial_commits": 250,
      "lines_added": 10000,
      ...
    },
    ...
  },
  "usefulness_rating": {
    "dev1@example.com": {
      "score": 85.42,
      "factors": {
        "substantial_commits": 90.5,
        "lines_contributed": 80.2,
        ...
      },
      "factor_descriptions": {
        "substantial_commits": "Коммиты с существенными изменениями...",
        ...
      }
    },
    ...
  },
  "weights_used": {
    "substantial_commits": 0.3,
    "lines": 0.15,
    ...
  }
}

Структура проекта

  • main.py - основной скрипт запуска
  • gui.py - графический интерфейс пользователя
  • cli.py - улучшенный командный интерфейс
  • run_gui.py - скрипт запуска графического интерфейса
  • config.py - файл конфигурации
  • git_collector.py - сбор данных из Git-репозитория
  • analyzer.py - анализ собранных данных
  • output_generator.py - генерация JSON-вывода
  • html_generator.py - генерация HTML-отчетов
  • utils.py - вспомогательные функции
  • templates/ - HTML-шаблоны
  • static/ - статические файлы (CSS, JavaScript)
  • tests/ - модульные тесты

Тестирование

Запуск тестов:

python -m unittest discover tests

Лицензия

MIT License

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages