Как определить частоту смены кода? - PullRequest
25 голосов
/ 22 февраля 2012

Я работаю над программой, написанной несколькими людьми с разным уровнем квалификации. Там есть файлы, которые никогда не менялись (и, вероятно, никогда не изменится, поскольку мы боимся их трогать), а другие постоянно меняются.

Интересно, есть ли какие-нибудь инструменты, которые бы просматривали всю историю репо (git) и производили анализ того, как часто данный файл изменяется? Или пакет? Или проект?

Было бы полезно признать, что (например) мы потратили 25% нашего времени, работая над набором пакетов, что было бы индикативным или хрупким кодом по сравнению с кодом, который «просто работает».

Ответы [ 5 ]

11 голосов
/ 27 февраля 2012

Если вы ищете решение для ОС, я бы, вероятно, подумал о том, чтобы начать с gitstats и посмотреть на его расширение, собирая журналы файлов и агрегируя эти данные.

8 голосов
/ 03 марта 2012

Я бы посмотрел на NChurn :

NChurn - это утилита, которая помогает оценить уровень оттока ваших файлов в вашем хранилище.Отток может помочь вам определить, какие файлы изменились больше всего за время их жизни.Это помогает выявить потенциальные ошибки и неправильный дизайн. Лучше всего подключить NChurn к процессу сборки и сохранять историю каждого запуска.Затем вы можете построить график оттока вашего хранилища.

5 голосов
/ 05 марта 2012

Я написал кое-что, что мы успешно используем для визуализации этой информации.

https://github.com/bcarlso/defect-density-heatmap

Посмотрите на проект, и вы сможете увидеть, как выглядит вывод в файле readme.

Вы можете делать то, что вам нужно, сначала получая список файлов, которые изменились в каждом коммите, из Git.

~ $ git log --pretty="format:" --name-only | grep -v ^$ > file-changes.txt

~ $ for i in `cat file-changes.txt | cut -d"." -f1,2 | uniq`; do num=`cat file-changes.txt | grep $i | wc -l`; if (( $num > 1 )); then echo $num,0,$i; fi; done | heatmap > results.html 

Это даст вам облако тегов с файлами, которые будут отображаться больше.вверх больше.

4 голосов
/ 02 марта 2012

Я предлагаю использовать команду типа

git log --follow -p file

, которая даст вам все изменения, которые произошли с файлом в истории (включая переименования).Если вы хотите получить количество коммитов, которые изменили файл, то вы можете сделать это на ОС UNIX:

git log --follow --format=oneline Gemfile | wc -l

Затем вы можете создать скрипт bash, чтобы применить его к нескольким файлам с именем в стороне.

Надеюсь, это помогло!

2 голосов
/ 13 июля 2013

Опираясь на предыдущий ответ, я предлагаю следующий скрипт для разбора всех файлов проекта

#!/bin/sh
cd $1
find . -path ./.git -prune -o -name "*" -exec sh -c 'git log --follow --format=oneline $1 | wc -l | awk "{ print \$1,\"\\t\",\"$1\" }" ' {} {} \; | sort -nr
cd ..

Если вы вызываете скрипт как file_churn.sh, вы можете проанализировать каталог вашего проекта git, вызвав

> ./file_churn.sh project_dir

Надеюсь, это поможет.

...