Князев Е.Г. Автоматизированная классификация изменений

advertisement
Автоматизированная
классификация изменений
программного кода
для повышения эффективности задач
его обзора и анализа
Князев Е.Г.
Старший разработчик
ЗАО «Транзас Технологии»;
Аспирант
СПбГУ ИТМО
Обзор программного кода (Code
Review)
Повышает качество кода
 Помогает найти ошибки на ранних
стадиях
 Помогает узнать код
 Помогает курировать работу
новичков

2
Система контроля версий и обзор
изменений кода
Система
контроля
версий кода
Запрос
изменения
Система контроля
версий хранит всю
историю разработки
 Позволяет
просматривать только
изменившийся код

Обзор
Разработчик
3
Трудоемкость просмотра
изменений

В крупных проектах необходим просмотр
большого количества изменений
Проект
Размер,
LOC
Период
наблюдения
~1 месяц
Число
изменений
Tortoise
SVN
~ 200 тысяч
NaviManager
~ 250 тысяч
22.09.2007-22.10.2007
215
72
KDE
~ 4.7
миллиона
17.09.2007
14.10.2007
11841 (!)
4
Метод решения проблемы

Автоматизация классификации изменений
Система
контроля
версий кода
Автоматизированный
классификатор
изменений
Класс
изменения
Класс изменения
интересен?
Разработчик
5
Классы изменений
Новая функциональность
 Рефакторинг
 Удаление кода
 Косметическое изменение
 Исправление ошибки

6
Известные методы
классификации изменений

Метод классификации комментариев к изменениям
◦ “bug”, “fixed” – исправление ошибки
◦ “implement”, “feature” – новая функциональность

Метод поиска рефактоингов по метрикам изменений
◦ Выделение предка класса (DIT>0 и NOM<0, …)
◦ Перенос в другой класс (DIT=0 и NOM<0, …)
◦ Разделение метода (NOM < T, ...)

Метод поиска разности в семантических графах
◦ Строится граф кода до изменения, после изменения
◦ Генерируется скрипт перехода
◦ Происходит поиск шаблонов рефакторингов
7
Обучение метода
8
Классификация изменений
9
Метрики изменений

Рассчитываются как разность метрик
ревизий
◦ ∆M = Mr – Mr-1
CC – цикломатическая сложность
(количество независимых путей в графе
исполнения)
 CS – количество классов/структур
 eLOC – эффективное число строк кода (без
учета комментариев и пустых строк)

10
Алгоритм нечеткой
кластеризации
метрик изменений
11
Расчет метрик и кластеризация
множества изменений Navi-Manager
Ревизия
CC
IC
eLOC
Ближ.
кластер
Комментарий к изменению
16820
-2
+1
-5
1
Процесс объединения кораблей в
рамках одной транзакции.
16833
0
0
-1
2
Удалена лишняя команда (коммит).
3
Вывод широты, долготы в полном
формате при поллинге.
4
Обновление MessageSource.
UpdateTime после обработки
каждого сообщения.
2
Откат изменений из r17029. Не
нужно обновлять поле после
обработки каждого сообщения.
3
Первая версия механизма загрузки
треков с MonServer.
17026
17029
17038
17107
+4
0
0
+4
+4
0
0
+12
+18
+1
-1
+89
12
Таблица принадлежности
изменений нечетким кластерам
Ревизия /
Кластер
16820
1
2
3
4
0,78
0,14
0,00
0,08
16833
17026
17029
17038
0,02
0,79
0,00
0,20
0,21
0,32
0,11
0,36
0,03
0,30
0,00
0,67
0,02
0,79
0,00
0,20
17107
0,1
0,11
0,68
0,11
13
Пример обучения метода



Проект: Navi-Manager
Размер обучающего множества: 29 изменений
Количество кластеров: 4
Кластер
1
2
3
4
Экспертный класс
Рефакторинг
Удаление кода
Новая функциональность
Исправление ошибки
14
Пример классификации
Ревизия
Ближ.
класс
Ближ.
кластер
Комментарий к изменению
16820 Рефакт.
1
Процесс объединения кораблей в
рамках одной транзакции.
16833 Удал.фун.
2
Удалена лишняя команда (коммит).
3
Вывод широты, долготы в полном
формате при поллинге.
4
Обновление MessageSource.
UpdateTime после обработки
каждого сообщения.
2
Откат изменений из r17029. Не
нужно обновлять поле после
обработки каждого сообщения.
3
Первая версия механизма загрузки
треков с MonServer.
17026 Нов.фун.
Исправ.
17029 ошибки
17038 Удал.фун.
17107 Нов.фун.
15
Нечеткость классификации

Изменение r16833 «Удалена лишняя
команда (коммит)» классифицировано как:
◦ на 2% рефакторинг
◦ на 79% удаление кода
◦ на 0% новая функциональность
◦ на 20% исправление ошибки
16
Результаты

Применение метода в Navi-Manager показало
его эффективность
◦ От 50% экономии времени на обзоре кода

Выявлены проблемы разработки
◦ Слишком большое число исправлений ошибок по
сравнению с реализацией новой
функциональности
17
Инструмент автоматизированной
классификации изменений
Работает с Subversion
 Слабо зависит от языка программирования
 Рассчитывает метрики CC, CS, eLOC
 Выделяет следующие классы изменений

◦
◦
◦
◦
◦
новая функциональность
удаление функциональности
рефакторинг
косметическое изменение
исправление ошибки*
18
Будущие исследования
 Улучшение метода
◦ Кластеризация по Гюстафсону-Кесселю
◦ Объектные и другие метрики
 Расширение внедрения
◦ Использование в процессе разработки на
постоянной основе
◦ Оценивание применимости для различных
типов проектов
19
Спасибо за внимание!
Вопросы?
20
Download