spamsink: (Default)
[personal profile] spamsink
Я, скорее всего, изобретаю велосипед и задаю вопрос, ответ на который всем интересующимся давно и хорошо известен. Так что ...

Как эффективно определить избыточность исходника (в предположении, что его автор не предпринимал countermeasures)? Я беру файл, удаляю из него пробелы и табуляции, пустые строки и строки, состоящие лишь из ограничителей составных операторов, и считаю отношение уникальных оставшихся строк к общему числу оставшихся строк.

Какой интервал, по-вашему, приемлем для плотного кода, и начиная с какого значения можно начинать говорить, что код нуждается в рефакторинге?

Date: 2010-01-22 12:39 am (UTC)
From: [identity profile] zebra24.livejournal.com
На мой взгляд это всё очень зависит от языка и пр.
Хочу заметить, что более компактный код хоть и красив, но часто требует больше времени и усилий на отладку.

Имхо главный признак, что требуется рефакторинг:
# Дублирование кода
# Длинные методы (больше одной страницы)

При оценке дублирования кода глупо исходить из "отношение уникальных оставшихся строк к общему числу оставшихся строк".

Например есть вызов
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

Date: 2010-01-25 07:58 pm (UTC)
From: [identity profile] zebra24.livejournal.com
Ну осторожней тогда, т.к.

lalalala(param1, param2);

в разных местах будет скорей всего восприниматься как одно и тоже, а по сути могут быть разные вещи..

Date: 2010-01-22 10:14 am (UTC)
From: [identity profile] dz.livejournal.com
анализировать на повторы нужно, наверное, не сырец, а AST. Но это уже грепом и верёвкой не сделаешь, конечно.

Date: 2010-01-23 12:11 am (UTC)
From: [identity profile] relyef.livejournal.com
Избыточность кода можно проверить по тому, как файл сжимается zip'oм :), как source, так и binary. Второе даже интереснее, потому как комментарии не учитываются.

Date: 2010-01-23 12:20 am (UTC)
From: [identity profile] relyef.livejournal.com
Если в качестве идентификаторов используется что-то типа c1, n03, _a5 - тут не рефакторинг, а публичные казни устравать надо.

Date: 2010-01-23 02:35 am (UTC)
From: [identity profile] malaya-zemlya.livejournal.com
Стиль программиста измеряется, как известно, количеством WTF в минуту чтения кода. Остальное есть профанация

Date: 2010-02-07 09:09 am (UTC)
From: [identity profile] vlad-gor.livejournal.com
Строкам ведь бесполезно рефакторинг делать.
Надо искать не повторяющиеся строки, а повторяющиеся блоки.

Надо еще убрать комментарии, всем переменным одно и тоже имя присвоить. И убрать переносы строк внутри внутреннего блока.
Page generated Apr. 28th, 2026 09:41 pm
Powered by Dreamwidth Studios