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

20
Автоматизированная Автоматизированная классификация изменений классификация изменений программного кода программного кода Князев Е.Г. Старший разработчик ЗАО «Транзас Технологии»; Аспирант СПбГУ ИТМО для повышения эффективности для повышения эффективности задач его обзора и анализа задач его обзора и анализа

description

Автоматизированная классификация изменений программного кода. для повышения эффективности задач его обзора и анализа. Князев Е.Г. Старший разработчик ЗАО «Транзас Технологии» ; Аспирант СПбГУ ИТМО. Обзор программного кода ( Code Review ). Повышает качество кода - PowerPoint PPT Presentation

Transcript of Автоматизированная классификация изменений...

Page 1: Автоматизированная классификация изменений программного кода

Автоматизированная Автоматизированная классификация классификация изменений программного изменений программного кодакода

Князев Е.Г.

Старший разработчик

ЗАО «Транзас Технологии»;

Аспирант

СПбГУ ИТМО

для повышения эффективности для повышения эффективности задач его обзора и анализазадач его обзора и анализа

Page 2: Автоматизированная классификация изменений программного кода

Обзор программного кода (Обзор программного кода (Code Code ReviewReview))

2

Повышает качество кодаПомогает найти ошибки на

ранних стадияхПомогает узнать кодПомогает курировать работу

новичков

Page 3: Автоматизированная классификация изменений программного кода

Система контроля версий и Система контроля версий и обзор изменений кодаобзор изменений кода

Система контроля версий хранит всю историю разработки

Позволяет просматривать только изменившийся код

3

Система контроля

версий кода

Разработчик

Обзор

Запрос изменения

Page 4: Автоматизированная классификация изменений программного кода

Трудоемкость просмотра Трудоемкость просмотра измененийизмененийВ крупных проектах необходим просмотр

большого количества изменений

Проект Tortoise SVN

Navi-Manager

KDE

Размер, LOC

~ 200 тысяч

~ 250 тысяч

~ 4.7 миллион

а

Период наблюдения ~1 месяц

22.09.2007-22.10.2007

17.09.2007-

14.10.2007

Число изменений

215 72 11841 (!)4

Page 5: Автоматизированная классификация изменений программного кода

Метод решения проблемыМетод решения проблемыАвтоматизация классификации изменений

5

Система контроля

версий кода

Изменение

Класс измененияинтересен?

Автоматизированныйклассификатор

изменений

Класс изменения

Да

Разработчик

Просмотр

Page 6: Автоматизированная классификация изменений программного кода

Классы измененийКлассы измененийНовая функциональностьРефакторингУдаление кодаКосметическое изменениеИсправление ошибки

6

Page 7: Автоматизированная классификация изменений программного кода

Известные методы Известные методы классификации измененийклассификации изменений Метод классификации комментариев к

изменениям◦ “bug”, “fixed” – исправление ошибки◦ “implement”, “feature” – новая функциональность

Метод поиска рефактоингов по метрикам изменений◦ Выделение предка класса (DIT>0 и NOM<0, …)◦ Перенос в другой класс (DIT=0 и NOM<0, …)◦ Разделение метода (NOM < T, ...)

Метод поиска разности в семантических графах◦ Строится граф кода до изменения, после изменения◦ Генерируется скрипт перехода◦ Происходит поиск шаблонов рефакторингов

7

Page 8: Автоматизированная классификация изменений программного кода

Обучение методаОбучение метода

8

Page 9: Автоматизированная классификация изменений программного кода

Классификация измененийКлассификация изменений

9

Page 10: Автоматизированная классификация изменений программного кода

Метрики измененийМетрики измененийРассчитываются как разность

метрик ревизий◦ ∆M = Mr – Mr-1

CC – цикломатическая сложность (количество независимых путей в графе исполнения)

CS – количество классов/структурeLOC – эффективное число строк

кода (без учета комментариев и пустых строк)

10

Page 11: Автоматизированная классификация изменений программного кода

Алгоритм Алгоритм нечеткойнечеткой кластеризации кластеризации метрик метрик измененийизменений

11

Page 12: Автоматизированная классификация изменений программного кода

Расчет метрик и кластеризация Расчет метрик и кластеризация множества изменений множества изменений Navi-Navi-ManagerManagerРеви-зия CC IC eLOC

Ближ. кластер

Комментарий к изменению

16820 -2 +1 -5 1

Процесс объединения кораблей в рамках одной транзакции.

16833 0 0 -1 2

Удалена лишняя команда (коммит).

17026 +4 +4 +18 3

Вывод широты, долготы в полном формате при поллинге.

17029 0 0 +1 4

Обновление MessageSource. UpdateTime после обработки каждого сообщения.

17038 0 0 -1 2

Откат изменений из r17029. Не нужно обновлять поле после обработки каждого сообщения.

17107 +4

+12 +89 3

Первая версия механизма загрузки треков с MonServer.

12

Page 13: Автоматизированная классификация изменений программного кода

Таблица принадлежности Таблица принадлежности изменений нечетким изменений нечетким кластерамкластерам

13

Ревизия / Кластер 1 2 3 4

16820 0,78 0,14 0,00 0,08

16833 0,02 0,79 0,00 0,20

17026 0,21 0,32 0,11 0,36

17029 0,03 0,30 0,00 0,67

17038 0,02 0,79 0,00 0,20

17107 0,1 0,11 0,68 0,11

Page 14: Автоматизированная классификация изменений программного кода

Пример обучения методаПример обучения метода

Кластер Экспертный класс

1 Рефакторинг

2 Удаление кода

3Новая

функциональность

4 Исправление ошибки

14

Проект: Navi-ManagerРазмер обучающего множества: 29

измененийКоличество кластеров: 4

Page 15: Автоматизированная классификация изменений программного кода

Пример классификацииПример классификации

Ревизия

Ближ. класс

Ближ. кластер

Комментарий к изменению

16820 Рефакт. 1

Процесс объединения кораблей в рамках одной транзакции.

16833Удал.фун

. 2Удалена лишняя команда (коммит).

17026 Нов.фун. 3

Вывод широты, долготы в полном формате при поллинге.

17029Исправ. ошибки 4

Обновление MessageSource. UpdateTime после обработки каждого сообщения.

17038Удал.фун

. 2

Откат изменений из r17029. Не нужно обновлять поле после обработки каждого сообщения.

17107 Нов.фун. 3Первая версия механизма загрузки треков с MonServer.

15

Page 16: Автоматизированная классификация изменений программного кода

Нечеткость Нечеткость классификацииклассификацииИзменение r16833 «Удалена

лишняя команда (коммит)» классифицировано как:◦на 2% рефакторинг◦на 79% удаление кода◦на 0% новая функциональность◦на 20% исправление ошибки

16

Page 17: Автоматизированная классификация изменений программного кода

РезультатыРезультатыПрименение метода в Navi-Manager

показало его эффективность◦ От 50% экономии времени на обзоре

кодаВыявлены проблемы разработки

◦ Слишком большое число исправлений ошибок по сравнению с реализацией новой функциональности

17

Page 18: Автоматизированная классификация изменений программного кода

Инструмент Инструмент автоматизированной автоматизированной классификации измененийклассификации измененийРаботает с SubversionСлабо зависит от языка

программированияРассчитывает метрики CC, CS, eLOCВыделяет следующие классы

изменений◦ новая функциональность◦ удаление функциональности◦ рефакторинг◦ косметическое изменение◦ исправление ошибки*

18

Page 19: Автоматизированная классификация изменений программного кода

Будущие исследованияБудущие исследованияУлучшение метода

◦Кластеризация по Гюстафсону-Кесселю

◦Объектные и другие метрикиРасширение внедрения

◦Использование в процессе разработки на постоянной основе

◦Оценивание применимости для различных типов проектов

19

Page 20: Автоматизированная классификация изменений программного кода

Спасибо за внимание!Спасибо за внимание!

Вопросы?

20