Я не согласен с утверждениями "вообще нет причин".
Лично я считаю, что правильный подход - это политика нулевых предупреждений, но без учета предупреждений как ошибок.Я утверждаю, что это повышает производительность и ответственность программиста.
Я использовал оба подхода в командах: 1) предупреждения как ошибки и 2) нулевые предупреждения как политика, но не соблюдаются компилятором.В обоих случаях выпуски были сделаны без предупреждений, а уровни предупреждений оставались около нуля.В последнем случае, однако, иногда возникали состояния, когда уровень предупреждений в течение короткого периода времени достигал нескольких единиц.
Это привело к повышению качества кода и улучшению команды.Чтобы увидеть, как я постараюсь придумать разумный пример по памяти.Если вы достаточно умны и мотивированы, вы сможете пробить дыры, но постарайтесь расширить свою память и воображение, и я думаю, вы поймете мою точку зрения, независимо от каких-либо недостатков в моем примере.
* 1008Допустим, у вас есть какой-то устаревший код в стиле c, в котором для индексирования использовались входные сигнатуры, а для какой-то специальной обработки использовались отрицательные значения.Вы хотите модернизировать код, чтобы использовать преимущества алгоритмов std и, возможно, что-то, что предлагает boost.Вы исправляете один угол кода, и это является отличным доказательством концепции, поэтому вы хотите добавить его в стек обзора кода, потому что вы почти уверены, что хотите сделать все так.
В конце концовподписанный материал исчезнет, но в данный момент вы получаете предупреждение о том, что сравниваются подписанные и неподписанные целые числа.Если ваша компания применяет бесплатные сборки предупреждений, вы можете:
- Для статического вещания.
- Ввести некоторый ненужный временный код.
- Идти на большой скорости - переносить всевещь сразу.
То же самое может произойти по большому количеству причин.Все это хуже, чем выдвигать несколько предупреждений, обсуждать предупреждения на собрании вашей группы и очищать их в какой-то момент в ближайшие несколько недель.Кастинги и временный код задерживают и загрязняют код на долгие годы, тогда как отслеживаемые предупреждения в мотивированной команде будут быстро очищены.
В этот момент некоторые люди будут утверждать: «Да, но люди не будут достаточно мотивированы"или" не моя команда, они все дерьмо ", или так далее (по крайней мере, я часто слышал эти аргументы).Я нахожу, что это, как правило, Фундаментальная ошибка атрибуции .Если вы относитесь к своим коллегам так, как будто они безответственные, безразличные, они будут склонны вести себя таким образом.
Хотя существует большое количество социальных наук, подтверждающих это, я могу предложить только свой личный опыт, которыйконечно анекдотичны.Я работал в двух командах, где мы начали с большой базы устаревшего кода и множества предупреждений (тысячи).Это ужасная ситуация, чтобы быть уверенным.В дополнение к тысячам предупреждений, многие другие были проигнорированы, поскольку это слишком сильно загрязняло бы вывод компилятора.
Команда 1: предупреждения как предупреждения, но не допускаются
В команде 1 мы отслеживали количество предупреждений у Дженкинса, а на наших слабых совещаниях команды мы говорили о количестве предупреждений.Это была команда из 5 человек, о которой двое из нас действительно заботились.Когда один из нас снизит уровень предупреждения, другой будет петь на собрании.При очистке предупреждения удалили неизвестную ошибку, мы рекламировали этот факт.Через несколько месяцев к этому времени присоединились 2 из 5 других кодировщиков, и мы быстро (в течение года) сократили количество предупреждений до нуля.Время от времени предупреждения накапливались, иногда в десятках или двадцатых.Когда это произошло, зашел ответственный разработчик, извинился и объяснил, почему они были там и когда они ожидали его почистить.Тот парень, который никогда не был мотивирован, по крайней мере был достаточно мотивирован давлением со стороны сверстников не добавлять никаких предупреждений.
Это привело к значительно улучшенной командной атмосфере.В некоторых случаях у нас были продуктивные дискуссии о том, как лучше всего справиться с определенным предупреждением или классом предупреждений, что привело к тому, что мы все стали лучшими программистами, а код улучшился.У всех нас появилась привычка заботиться о более чистом коде, что привело к другим дискуссиям, например, о том, была ли рекурсивная функция из 1000 строк с десятью параметрами хорошим кодированием или нет - намного проще.
Команда2: Предупреждения как ошибки
Команда 2 была практически идентична команде 1 в начале.Такой же большой унаследованный код, полный предупреждений.Одинаковое количество разработчиков, мотивированных и немотивированных.В команде 2, хотя один из нас (я) хотел оставить предупреждения как предупреждение, но сосредоточиться на уменьшении предупреждений.Мой другой целеустремленный коллега утверждал, что все остальные разработчики были ** дырами, и если мы не допустим ошибок предупреждений, они никогда не избавятся от них, и какую возможную выгоду вы можете получить от этого?Я объяснил свой опыт в команде 1, но у него ничего не было.
Я все еще работаю в команде один.Это год спустя, и наш код не содержит предупреждений, но он полон быстрых хаков, чтобы избавиться от предупреждений и ненужного кода.Несмотря на то, что мы устранили множество реальных проблем, многие потенциальные проблемы были скрыты под ковром.
Кроме того, сплоченность команды не улучшилась.Во всяком случае, это ухудшается, и руководство рассматривает возможность разрушения команды по этой причине.Коллеги, которые никогда не заботились о предупреждениях, до сих пор не заботятся, и забота людей о качестве не возросла.На самом деле произошло обратное.Всякий раз, когда кто-то говорит о качестве кода, этот набор людей закатывает глаза и думает о нем, как о другой деспотичной и глупой управленческой навязчивой идее, которая только снижает производительность и приносит мало пользы.
Еще хуже, когда мы хотим ввести другое предупреждениеэто дало бы полезную информацию, это важный проект, так как нам нужно было бы либо изменить нашу политику предупреждений как ошибок, либо исправить все существующие предупреждения, прежде чем вводить предупреждение.Поскольку у нас не было практики наблюдения и исправления предупреждений с помощью внутренней мотивации, первое, скорее всего, вызовет реальные проблемы, поэтому вместо этого мы добавляем задачу в отставание, и оно задерживается и задерживается.
Другой пример, который привеля обнаружил этот вопрос и написал этот ответ, это [[не рекомендуется]] функция C ++ 11, которую я хотел бы использовать для пометки устаревшего кода, чтобы мы могли постепенно исключить его как часть нашей очистки предупреждений.Это, однако, несовместимо с «все предупреждения как ошибки».
Мой совет: относитесь к предупреждениям как к психологическим ошибкам в вашей команде, но не говорите своему компилятору делать это.Возможно, относитесь к некоторым особенно пагубным предупреждениям как к ошибкам, но будьте разборчивы.