Условное ведение журнала с минимальной цикломатической сложностью



после прочтения "каков ваш / хороший предел для цикломатической сложности?", Я понимаю, что многие из моих коллег были очень раздражены этим новым 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");
...


но теперь, с этим "не может быть перемещен" 10 цикломатический уровень сложности на предел функции, они утверждают, что различные журналы, которые они помещают в свою функцию, ощущаются как бремя, потому что каждый "если (isLoggable ())" является считаются как +1 цикломатическая сложность!



Итак, если функция имеет 8 'if', 'else' и т. д., В одном тесно связанном нелегко совместимом алгоритме и 3 критических действия журнала... они нарушают ограничение, даже если условные журналы не могут быть действительно часть указанной сложности этой функции...



Как бы вы отреагировали на эту ситуацию ?

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





Спасибо за все ответы.

Я должен настаивать на том, что проблема связана не с "форматированием", а с "оценкой аргументов" (оценка, которая может быть очень дорогостоящей, непосредственно перед вызовом метода, который ничего не сделает)

Поэтому, когда A написал выше "a String", я на самом деле имел в виду aFunction(), с aFunction (), возвращающим строку, и являющимся вызовом сложного метода сбора и вычисления всех видов данных журнала, которые будут отображаться лесоруб... или нет (отсюда и вопрос, и обязательство использовать условное лесозаготовление, отсюда и актуальный вопрос искусственного увеличения "цикломатической сложности"...)



теперь я получаю 'variadic функция ' точка, выдвинутая некоторыми из вас (спасибо Джон).

Примечание: быстрый тест в java6 показывает, что мой функция varargs оценивает свои аргументы перед вызовом, поэтому он не может быть применен для вызова функции, но для ' log retriever object '(или' function wrapper'), на котором toString () будет вызываться только в случае необходимости. Понял.



теперь я опубликовал свой опыт по этой теме.

Я оставлю его там до следующего вторника для голосования, то я выберу один из ваших ответов.

Еще раз спасибо за все пожелания :)

601   0  

Comments

    Ничего не найдено.