После некоторых серьезных проблем с качеством в прошлом году моя компания недавно представила обзоры кода. Процесс обзора кода был введен быстро, без каких-либо инструкций или каких-либо контрольных списков.
Другой разработчик и я решили проверить все изменения, внесенные в системы, прежде чем они будут объединены в магистраль.
Мы также были выбраны как «Технический лидер». Это означает, что мы несем ответственность за качество кода, но у нас нет полномочий вносить изменения в процесс, переназначать разработчиков или задерживать проекты.
Технически мы можем отрицать слияние, возвращая его к разработке. В действительности это заканчивается почти всегда с нашим боссом, требующим, чтобы это было отправлено вовремя.
Наш менеджер - MBA, который в основном занимается составлением графика предстоящих проектов. В то время как он пытается, он почти не имеет представления о том, что делает наше программное обеспечение с точки зрения бизнеса, и изо всех сил пытается понять даже самые основные требования клиентов без объяснения со стороны разработчика.
В настоящее время разработка ведется в ветвях разработки в SVN, после того, как разработчик посчитает, что готов, он переназначает тикет в нашей системе тикетов нашему менеджеру. Затем менеджер назначает его нам.
Обзоры кода привели к некоторой напряженности в нашей команде. Особенно некоторые из старших членов ставят под сомнение изменения (т. Е. «Мы всегда так делали» или «Почему метод должен иметь разумное имя, я знаю, что он делает?»).
После первых нескольких недель моя коллега начала позволять вещам скользить, чтобы не вызывать проблем с коллегами (она сама сказала мне, что после того, как клиент подал отчет об ошибке, она знала об ошибке, но боялась, что разработчик будет зол на нее за указание на это).
Я, с другой стороны, теперь известен как задница для выявления проблем с подтвержденным кодом.
Я не думаю, что мои стандарты слишком высоки.
Мой контрольный список на данный момент:
- Код скомпилируется.
- Есть по крайней мере один способ, которым код будет работать.
- Код будет работать с большинством нормальных случаев.
- Код будет работать с большинством крайних случаев.
- Код будет выдавать разумное исключение, если вставленные данные недействительны.
Но я полностью принимаю на себя ответственность за то, как я отвечаю. Я уже даю практические замечания, объясняющие, почему что-то должно быть изменено, иногда даже просто спрашиваю, почему что-то было реализовано определенным образом. Когда я думаю, что это плохо, я отмечаю, что разработал бы это по-другому.
Чего мне не хватает, так это умения найти что-то, что можно назвать «хорошим». Я читал, что нужно постараться добавить плохие новости в хорошие новости.
Но мне трудно найти что-то хорошее. «Эй, на этот раз ты действительно совершил все, что сделал» - это скорее снисходительно, чем приятно или полезно.
Пример проверки кода
Эй Джо,
У меня есть несколько вопросов о ваших изменениях в классе Library \ ACME \ ExtractOrderMail.
Я не понял, почему вы отметили «TempFilesToDelete» как статический? В настоящий момент второй вызов GetMails вызовет исключение, потому что вы добавляете файлы в него, но никогда не удаляете их после того, как удалили их. Я знаю, что функция вызывается только один раз за запуск, но в будущем это может измениться. Можете ли вы просто сделать его переменной экземпляра, тогда у нас может быть несколько объектов параллельно.
... (некоторые другие пункты, которые не работают)
Незначительные баллы:
- Почему «GetErrorMailBody» принимает исключение в качестве параметра? Я что-то пропустил? Вы не генерируете исключение, вы просто передаете его и вызываете ToString. Почему это?
- SaveAndSend Не подходит для метода. Этот метод отправляет сообщения об ошибках, если обработка почты прошла неправильно. Не могли бы вы переименовать его в «SendErrorMail» или что-то подобное?
- Пожалуйста, не просто комментируйте старый код, просто удалите его. У нас все еще есть это в подрывной деятельности.