Я работаю в компании, которая набрала 11 баллов на тесте Джоэла - по крайней мере, на бумаге.
На практике, однако, ничего не работает так хорошо, как ожидалось, и проект был на DEFCON 1 в течение полугода. Теперь большинство моих сверстников счастливы, если могут вернуться домой в 6 вечера - в воскресенье.
Одна из очевидных хороших практик, которые показались мне неработающими, - это использование инструментов статического анализа. Проект отслеживает как предупреждения gcc -Wall, так и собственный и очень дорогой инструмент "C / C ++" .
Предупреждения Gcc чаще всего указывают на реальные (если в большинстве случаев безобидные) ошибки.
Однако проприетарные инструменты перечисляют такие вещи, как неявное приведение и размер строкового литерала. Неявные приведения также занесены в черный список в их книге стилей.
Стандартная практика заключается в том, что людей заставляют замолчать каждое предупреждение. Обратите внимание, что это исключает предупреждения, которые являются преимущественно ложными срабатываниями, это не проблема.
Результат:
- Люди добавляют приведения типов к каждому значению и к каждому аргументу, скрывая реальные проблемные несоответствия типов в процессе.
- Люди рассказывают об ошибках или используют другую проблематичную языковую функцию (strlen вместо sizeof, strncpy вместо strcpy и т. Д.)
- Предупреждения молчат.
- Отчеты об ошибках начинают появляться.
Суть в том, что оригинальный код работал и был написан людьми, которые играли безопасно в рамках своих языковых способностей, а исправления - нет.
Я не думаю, что эту компанию можно спасти. Тем не менее, я хотел бы знать, есть ли лучший, желательно работающий, способ использовать «профессиональные» инструменты или мне следует просто избегать их использования полностью, если я буду принимать решение в будущем.
Решение, которое не предполагает, что все программисты - гении, которые не могут ошибиться. Потому что хорошо, если они есть, то нет необходимости использовать инструменты в первую очередь.