200 likes | 373 Views
Автоматизированная классификация изменений программного кода. для повышения эффективности задач его обзора и анализа. Князев Е.Г. Старший разработчик ЗАО «Транзас Технологии» ; Аспирант СПбГУ ИТМО. Обзор программного кода ( Code Review ). Повышает качество кода
E N D
Автоматизированная классификация изменений программного кода для повышения эффективности задач его обзора и анализа Князев Е.Г. Старший разработчик ЗАО «Транзас Технологии»; Аспирант СПбГУ ИТМО
Обзор программного кода (Code Review) • Повышает качество кода • Помогает найти ошибки на ранних стадиях • Помогает узнать код • Помогает курировать работу новичков
Система контроля версий и обзор изменений кода • Система контроля версий хранит всю историю разработки • Позволяет просматривать только изменившийся код Система контроля версий кода Запрос изменения Обзор Разработчик
Трудоемкость просмотра изменений • В крупных проектах необходим просмотр большого количества изменений
Метод решения проблемы • Автоматизация классификации изменений Система контроля версий кода Автоматизированный классификатор изменений Изменение Класс изменения Класс изменения интересен? Разработчик Просмотр Да
Классы изменений • Новая функциональность • Рефакторинг • Удаление кода • Косметическое изменение • Исправление ошибки
Известные методы классификации изменений • Метод классификации комментариев к изменениям • “bug”, “fixed” – исправление ошибки • “implement”, “feature” – новая функциональность • Метод поиска рефактоингов по метрикам изменений • Выделение предка класса (DIT>0 и NOM<0, …) • Перенос в другой класс (DIT=0 и NOM<0, …) • Разделение метода (NOM < T, ...) • Метод поиска разности в семантических графах • Строится граф кода до изменения, после изменения • Генерируется скрипт перехода • Происходит поиск шаблонов рефакторингов
Метрики изменений • Рассчитываются как разность метрик ревизий • ∆M = Mr–Mr-1 • CC – цикломатическая сложность (количество независимых путей в графе исполнения) • CS– количество классов/структур • eLOC– эффективное число строк кода (без учета комментариев и пустых строк)
Алгоритм нечеткойкластеризации метрик изменений
Расчет метрик и кластеризация множества изменений Navi-Manager
Таблица принадлежности изменений нечетким кластерам
Пример обучения метода • Проект: Navi-Manager • Размер обучающего множества: 29 изменений • Количество кластеров: 4
Нечеткость классификации • Изменение r16833 «Удалена лишняя команда (коммит)»классифицировано как: • на 2% рефакторинг • на 79% удаление кода • на 0% новая функциональность • на 20% исправление ошибки
Результаты • Применение метода в Navi-Managerпоказало его эффективность • От 50% экономии времени на обзоре кода • Выявлены проблемы разработки • Слишком большое число исправлений ошибок по сравнению среализацией новой функциональности
Инструмент автоматизированной классификации изменений • Работает с Subversion • Слабо зависит от языка программирования • Рассчитывает метрики CC, CS, eLOC • Выделяет следующие классы изменений • новая функциональность • удаление функциональности • рефакторинг • косметическое изменение • исправление ошибки*
Будущие исследования • Улучшение метода • Кластеризация по Гюстафсону-Кесселю • Объектные и другие метрики • Расширение внедрения • Использование в процессе разработки на постоянной основе • Оценивание применимости для различных типов проектов
Спасибо за внимание! Вопросы?