После прочтения "Что вы/хороший предел для циклической сложности?, я понимаю, что многие из моих коллег были очень недовольны этим новым QA в нашем проекте: не более 10 циклическая сложность за функцию.
Значение: не более 10 'if', 'else', 'try', 'catch' и другой оператор ветвления ветвления кода. Правильно. Как я объяснил в разделе Вы проверяете закрытый метод?, такая политика имеет много хороших побочных эффектов.
Но: В начале нашего проекта (200 человек - 7 лет) мы с радостью регистрировались (и нет, мы не можем легко делегировать это какому-то "Аспектно-ориентированное программирование" для журналов).
myLogger.info("A String");
myLogger.fine("A more complicated String");
...
И когда первые версии нашей Системы пошли вживую, мы столкнулись с огромной проблемой памяти не из-за регистрации (которая была в какой-то момент выключена), а из-за параметров журнала (строк), которые всегда вычисляются, затем переходят к функциям "info()" или "fine()", только чтобы обнаружить, что уровень ведения журнала был "выключен" и что никаких протоколов не было!
Итак, QA вернулась и призвала наших программистов выполнять условные протоколирования. Всегда.
if(myLogger.isLoggable(Level.INFO) { myLogger.info("A String");
if(myLogger.isLoggable(Level.FINE) { myLogger.fine("A more complicated String");
...
Но теперь, когда уровень цикличности сложности "не может быть перемещен" на один функциональный предел, они утверждают, что различные журналы, которые они вносят в свою функцию, воспринимаются как бремя, потому что каждый "if (isLoggable() )" считается +1 циклической сложностью!
Итак, если функция имеет 8 'if', 'else' и т.д., в одном плотно связанном алгоритме с не легкостью и 3 критических действиях журнала... они нарушают предел, хотя условные журналы могут не быть действительно частью указанной сложности этой функции...
Как бы вы отреагировали на эту ситуацию?
Я видел пару интересных изменений в кодировании (из-за этого "конфликта" ) в моем проекте, но я просто хочу сначала высказать свои мысли.
Спасибо за все ответы.
Я должен настаивать на том, что проблема не связана с форматированием, а связана с "оценкой аргументов" (оценка, которая может быть очень дорогостоящей, перед вызовом метода, который ничего не сделает)
Поэтому, когда написано выше "A String", я на самом деле имел в виду aFunction(), aFunction() возвращал String и являлся вызовом сложного метода сбора и вычисления всех видов данных журнала, которые будут отображаться регистратором... или нет (следовательно, проблема и обязательство использовать условный каротаж, следовательно, актуальная проблема искусственного увеличения "циклической сложности"...)
Теперь я получаю сообщение " variadic функция, продвинутая некоторыми из вас (спасибо John).
Примечание: быстрый тест в java6 показывает, что моя varargs function действительно оценивает свои аргументы перед вызовом, поэтому его нельзя применять для вызова функции, но для "объекта ретрансляции журнала" (или "обертки функций" ), на который toTring() будет вызываться только при необходимости. Получил это.
Теперь я опубликовал свой опыт по этой теме.
Я оставлю его там до следующего вторника для голосования, затем я выберу один из ваших ответов.
Еще раз спасибо за все предложения:)