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