Программистская стилеметрия
Jan. 21st, 2010 04:01 pmЯ, скорее всего, изобретаю велосипед и задаю вопрос, ответ на который всем интересующимся давно и хорошо известен. Так что ...
Как эффективно определить избыточность исходника (в предположении, что его автор не предпринимал countermeasures)? Я беру файл, удаляю из него пробелы и табуляции, пустые строки и строки, состоящие лишь из ограничителей составных операторов, и считаю отношение уникальных оставшихся строк к общему числу оставшихся строк.
Какой интервал, по-вашему, приемлем для плотного кода, и начиная с какого значения можно начинать говорить, что код нуждается в рефакторинге?
Как эффективно определить избыточность исходника (в предположении, что его автор не предпринимал countermeasures)? Я беру файл, удаляю из него пробелы и табуляции, пустые строки и строки, состоящие лишь из ограничителей составных операторов, и считаю отношение уникальных оставшихся строк к общему числу оставшихся строк.
Какой интервал, по-вашему, приемлем для плотного кода, и начиная с какого значения можно начинать говорить, что код нуждается в рефакторинге?
no subject
Date: 2010-01-22 12:39 am (UTC)Хочу заметить, что более компактный код хоть и красив, но часто требует больше времени и усилий на отладку.
Имхо главный признак, что требуется рефакторинг:
# Дублирование кода
# Длинные методы (больше одной страницы)
При оценке дублирования кода глупо исходить из "отношение уникальных оставшихся строк к общему числу оставшихся строк".
Например есть вызов
lalalala(param1, param2);
Если написано стильно, табуляция и имена переменных могут совпадать, а смысл вызовов (их может быть десятки) будет разный и дублированием это сложно назвать.
С другой стороны две функции с дублирующим друг друга поведением, но обрабатывающие разные поля структуры, это 100% дублирование, а Ваш методы выдаст что разные функции.
lalala_for_left_hand() {
left_hand = ...
};
lalala_for_right_hand() {
right_hand = ...
};
Ещё я-бы заметил, что пробелы и табуляция тоже работа. :)
И комментарии, 30% от сложного кода это нормально.
про рефакторинг хорошо написано здесь.
http://ru.wikipedia.org/wiki/%D0%A0%D0%B5%D1%84%D0%B0%D0%BA%D1%82%D0%BE%D1%80%D0%B8%D0%BD%D0%B3
К сожалению про тулы с помощью которых можно автоматизировать code_review вики молчит..
http://ru.wikipedia.org/wiki/Code_review
no subject
Date: 2010-01-22 04:59 pm (UTC)Комментарии, если они разные, снижают повторяемость, это нормально.
Длина методов - это отдельная грустная песня. Пока найденный мной рекорд - около 2100 строк.
no subject
Date: 2010-01-25 07:58 pm (UTC)lalalala(param1, param2);
в разных местах будет скорей всего восприниматься как одно и тоже, а по сути могут быть разные вещи..
no subject
Date: 2010-01-22 10:14 am (UTC)no subject
Date: 2010-01-22 04:52 pm (UTC)no subject
Date: 2010-01-22 11:00 pm (UTC)no subject
Date: 2010-01-23 12:11 am (UTC)no subject
Date: 2010-01-23 12:18 am (UTC)no subject
Date: 2010-01-23 12:20 am (UTC)no subject
Date: 2010-01-23 12:30 am (UTC)no subject
Date: 2010-01-23 12:35 am (UTC)no subject
Date: 2010-01-23 12:43 am (UTC)no subject
Date: 2010-01-23 02:35 am (UTC)no subject
Date: 2010-01-23 02:44 am (UTC)no subject
Date: 2010-02-07 09:09 am (UTC)Надо искать не повторяющиеся строки, а повторяющиеся блоки.
Надо еще убрать комментарии, всем переменным одно и тоже имя присвоить. И убрать переносы строк внутри внутреннего блока.
no subject
Date: 2010-02-07 09:14 am (UTC)