Как справиться с проверкой кода на моем новом месте, когда я пришел из этой практики?

33

Команда в моей новой компании не имеет процесса проверки кода.

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

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

  • Как я могу показать, что проверка кода - это не трата времени, а экономия времени?
  • Можно ли пропустить проверку кода, если у вас есть модульные тесты?
jparkcool
источник
рекомендации по ресурсам вне сайта явно не по теме для справочного центра . См meta.programmers.stackexchange.com/questions/6483/...
комар
1
Попробуйте задать это здесь: meta.codereview.stackexchange.com И, на мой взгляд, этот вопрос можно задать здесь, потому что он / она просто хочет знать что-то, связанное с программированием.
xqMogvKW
1
Хотя я также твердо верю в рецензирование кода, у меня также были некоторые неудачные опыты, когда рецензирование кода превратилось в вечную войну, инструмент рецензирования кода (gerrit) превратился в плохой аватар какой-то дискуссионной доски с чрезмерно увлеченными дебатами негабаритными эго. Я не уверен, обязательно ли это произойдет в какой-либо компании или это просто вопрос зрелости людей.
Джоэл
Переименовано в то, что вы спрашиваете, спрашивая, потому что «Обязательна ли проверка кода»? это слишком широкий и не подлежащий обсуждению вопрос, поскольку он будет зависеть от огромного числа факторов - размера компании, числа разработчиков, дохода и т. д. и т. д. Я бы подумал над тем, как вы можете включить и продать свое желание и энтузиазм в отношении хороших методов программирования и мастерство программного обеспечения на ваших публичных сайтах (резюме, linkIn, GitHub, Twitter и т. д.). опубликуйте, что вам важно и что вы ищете, чтобы люди, с которыми вы хотите быть, увидели это. Это, конечно, «будущий» совет, а значит и комментарий :)
Майкл Даррант
3
Я не вижу, как это «рекомендация за пределами ресурса». Это не похоже на правильную причину для меня.
nyuszika7h

Ответы:

30

Можно ли пропустить проверку кода, если у вас есть модульные тесты?

Но почему?

Основная роль рецензирования заключается не в выявлении ошибок.

Да, вы можете выявить некоторые потенциальные ошибки и сомнительный, склонный к ошибкам код, это часто случается, но иногда обнаружение некоторых грубых ошибок не означает, что рецензирование является надежным способом исключить наличие ошибок. Это далеко не так. Это не правильный инструмент для проверки функциональной правильности реализации.

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

Наличие модульных тестов полностью ортогонально этому. Вы можете иметь 100% покрытие кода и все тесты, проходящие для абсолютно непонятного кода.

Обзор кода также служит для ознакомления других разработчиков с вашей работой, чтобы они знали, что к чему, и могли оттуда забирать, или обрабатывать отчеты об ошибках, когда вы в отпуске и т. Д. Знание того, что вы сделали сразу, может помочь хорошо выполняйте свою работу - сохраняйте согласованность кодовой базы (придерживайтесь аналогичных шаблонов и соглашений во всем приложении) или избегайте дублирования кода.

В более широком плане человек также учится и развивается как разработчик, читая чужой код.

Модульные тесты вряд ли могут заменить любую из них. Да, если они хорошо написаны, они читают как документацию, и мы должны стремиться к этому. Но, опять же, это не является взаимоисключающим с проведением рецензирования, скорее наоборот - все преимущества рецензирования остаются в силе, тот факт, что ваши коллеги имеют несколько хороших модульных тестов, на которые можно посмотреть, только сделает процесс рецензирования более простым и еще более полезным а не излишним.

Конрад Моравский
источник
4
Я не верю, что модульные тесты также являются заменой обзоров кода. Но основная роль юнит-тестов также не в том, чтобы отлавливать ошибки. Да, вы можете выявить некоторые потенциальные ошибки при написании модульного теста, но модульные тесты предназначены для того, чтобы убедиться, что вы не будете вносить ошибки позже, когда вам придется что-то изменить. Таким образом, цель модульных тестов также состоит в том, чтобы поддерживать ваш код в удобном для обслуживания состоянии
Док Браун
2
@DocBrown правда это. Однако обнаружение ошибок регрессии также относится к категории обнаружения ошибок. Очевидно, что это одно из преимуществ модульных тестов по сравнению с экспертной проверкой (в этом аспекте), поскольку они не являются одноразовыми операциями. Рецензирование даже не пытается решить этот важный аспект, так как не представляется возможным пересмотреть всю кодовую базу после каждого отдельного изменения.
Конрад Моравский
1
@DocBrown Peer review doesn't even attempt to tackle this important aspect- ну, это так. По мере. Я часто нахожу себя указывающим, например. «партнер, вы фактически повторяете ту же логику здесь, и это бомба замедленного действия. Однажды она изменится в другом месте, и мы забудем обновить ее здесь ...»
Конрад Моравский
24

Существуют ли какие-либо исследования и статистика, показывающая, что проверка кода - не трата времени, а экономия времени?

Я не знаю ни одного. Также трудно проводить такие исследования, потому что вам понадобятся две команды, у которых есть задача равной и реалистичной сложности, где одна использует обзоры кода, а другая - нет. Вам, вероятно, нужно, чтобы они решили ту же проблему, что означает выбрасывание большого количества денег в окно. И вам нужно было бы повторять эксперимент достаточно часто, чтобы получить статистическую значимость, что увеличило бы количество брошенных денег на порядки.

Если вы просто измеряете эффективность компаний, использующих проверки кода, по сравнению с компаниями, которые этого не делают, не только неясно, как измерить эффективность, но и какова реальная причина. Обзоры кода являются частью большой культуры. Трудно сказать, какая часть этого факта делает команду более эффективной (и может очень зависеть от характера команды или проекта). Или наличие этой культуры может просто означать, что компания меньше или моложе, каждый из которых имеет множество эффектов. Или вполне может быть, что готовность подчиниться кодовым обзорам исключает или способствует здоровой дистанции с вашим эго;)

Но не забывайте: у вас есть собственный опыт. Это часть того, почему они наняли тебя. Так что, если вы действительно верите, что можете повысить эффективность (а ваша команда действительно страдает от ее нехватки), сообщите об этом четко.

Можно ли пропустить проверку кода, если у вас есть модульные тесты?

Нет. Если вы верите в важность тестов, то ваши тесты должны быть в первую очередь рассмотрены. Что если это чепуха? Или если покрытие паршивое? Или если они проверяют реализацию, а не поведение?

back2dos
источник
2
Я думаю, что вы сделали очень хорошую точку зрения на проверку кода для тестовых случаев. Спасибо!
jparkcool
4
+1 за «у вас есть собственный опыт, который можно извлечь из» - на самом деле, если кто-то действительно работал с обзорами кода в течение некоторого времени, он, должно быть, видел, сколько проблем с качеством, как правило, было исправлено во время типичного обзора кода, и сколько передачи знаний была достигнута. Из этого опыта должно быть трудно не иметь горстки аргументов за или против обзоров кода.
Док Браун
2
Что касается вашего первого абзаца: для этого потребуется не только две команды, выполняющие одно и то же задание, но и две команды с равными возможностями. Индивидуальный опыт может испортить любую попытку изучить это.
Дэвид Уилкинс
«Что, если это чепуха? Или, если освещение плохое?» Или просто скажи return true;.
Бурхан Али
1
Прочитайте главу 20 Code Complete для тщательной обработки обзоров кода, а также исследований и статистики, которые поддерживают их использование. Вот несколько хороших резюме: блог Джеффа Этвуда и еще один парень
Майк Партридж,
5

Взятые из некоторых случайных слайдов, которые я нашел , но точные данные взяты из книги Стив Макконнелла Code Complete:

Полезны ли обзоры кода?

«Я считаю, что рецензирование кода - это самая большая вещь, которую вы можете сделать, чтобы улучшить свой код»

Джефф Этвуд из «Кодирующего ужаса» на http://www.codinghorror.com/blog/2006/01/code-reviews-just-do-it.html


«Индивидуальные проверки обычно выявляют около 60 процентов дефектов, что выше, чем у других методов, кроме прототипирования и бета-тестирования большого объема».

Стив Макконнелл, Code Complete 2-е издание, стр. 485

Эта цифра 60% взята из статьи IEEE Шулла и др. 2002 г. « Что мы узнали о борьбе с дефектами», которая содержит раздел под названием:

«Экспертные оценки улавливают 60% дефектов»

icc97
источник
1
Я думаю, что проблема в этом заключается в том, что в 2006 году мы еще не полностью охватили парное программирование, которое, как я чувствую, стало своего рода заменой некоторой рецензии кода. Я понимаю, что они не сравнимы в некоторых отношениях.
JP Silvashy
3

Отказ от ответственности: Этот ответ мой личный опыт :)

Я сделал очень плохой опыт с обзорами кода в коде, который мы поддерживаем. Потому что у нас обычно только один лайнер или около того, и нам не о чем пересматривать.

Но в реальных проектах я получил хороший опыт, во время экзамена мой тренер проверял мои правила работы с кодом, и это очень помогло мне найти некоторые ошибки, которые я делал очень часто, которых я больше не делаю.

Так что я бы сказал, что это сильно зависит от того, что вы делаете, сколько людей вы и т.д.

Кроме того, риск того, что ваши пересмотры кода закончатся войной, не стоит недооценивать.

Knerd
источник
3

Вы можете попросить руководителя вашей группы и / или коллеги провести рецензирование вашего кода, даже если проверки кода не выполняются нормально, возможно, как часть вашего обучения.

Убедитесь, что ваш код хорошо написан и проверен перед проверкой.

Когда я был руководителем группы, я сам проверял код новых сотрудников до тех пор, пока (через некоторое время) я не перестал бы находить ошибки или что-либо еще, что можно было бы критиковать в их коде, и с этого момента я перестал бы делать обзоры кода с ними; это произойдет, когда:

  • Они изучили системы, с которыми они взаимодействуют, и не нуждались в моих объяснениях
  • Они научились проектировать и / или тестировать свой код до тех пор, пока он не станет без ошибок, прежде чем я его увидел
  • Они узнали достаточно о моих рекомендациях по стилю кодирования, и я бы посчитал их код поддерживаемым

Обзоры кода имеют несколько целей:

  • Нахождение дефектов в коде
  • Передача знаний между членами команды

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

ChrisW
источник
2

Для любого программного обеспечения, разработанного для программного кода, не существует правила большого пальца, все зависит от области применения, размера клиента и размера компании. Например, если вы создаете приложение, в котором в будущем будет реализовано простое приложение, в котором, возможно, не будет никаких других версий, там достаточно модульного тестирования. Но опять же, проверка кода происходит, когда вы говорите о производительности приложения, где вам нужно проверять код на предмет кратковременного падения кода, которое можно было бы сделать лучше, чтобы повысить быстродействие.

Обзоры кода обычно выполняются там, где есть команда из более чем 2 разработчиков и технический руководитель, где технический руководитель хочет обеспечить качество приложения и обеспечить соблюдение стандартов кода, чтобы масштабировать приложение для будущих улучшений и обновлять его для различных приложений. будущие версии.

Например, у нас сейчас есть много платформ с открытым исходным кодом CMS, и эти платформы время от времени выпускают обновления для улучшения функций платформы, воображают разработчика, использующего одну из этих платформ, и не следуют стандартам кода, таким как жесткое кодирование в основных файлах, написание приложений код в файлах шаблонов, и если этот код поступает в производство и позже, когда клиент хочет обновить платформу до новой версии, он никогда не будет обновлен, если кодирование не будет переделано в соответствии со стандартами кода для этой платформы. Здесь это становится серьезной проблемой для выпуска кода в производство без проверки кода.

Поэтому я бы сказал, что обзоры кода, выполняемые перед выпуском, являются необходимостью для любых профессиональных софтверных компаний, и исключения могут быть только для личных / очень небольших приложений, где разработчик является опытным программистом и имеет опыт работы с ним.

Venkat
источник
1

Обзоры кода имеют преимущества, которые не проистекают из самого процесса рецензирования: всегда есть дилемма, чтобы получить код высокого качества, но созданный за короткое время. Без проверки кода вы сами по себе, так что вы можете пожертвовать качеством для выполнения кода в короткие сроки. В обзорах кода есть рецензент, который не позволяет вам избежать низкого качества кода - именно этого вы хотите, будучи вынужденным тратить время на получение качественного кода, чего вы в первую очередь хотели, и который вы знаете, что в итоге вы сэкономите время, потому что каждый час, потраченный на написание лучшего кода, - это два часа, сэкономленные на отладке (или больше).

Без проверки кода вы сами по себе, так что вы должны поддерживать высокое качество кода. Простым решением является проверка каждого изменения, которое вы делаете самостоятельно, и исправление вещей, которые не соответствуют вашим стандартам качества.

Это также позволяет избежать ужасных ситуаций, когда проверки кода приводят к столкновениям эго - ситуации, когда программист A будет использовать метод X, а B будет использовать метод Y, поэтому, если A пишет код, который использует метод X, рецензент B настаивает на методе Y, поэтому A переписывает код с использованием метода Y, в то время как если бы B написал код, а A проверил его, произошла бы полная противоположность.

gnasher729
источник
0

Если вы сторонник рецензирования кода, я боюсь, что нет реальной замены. Неудачный и стереотипный случай - это рабочее место, которое не выполняет проверки кода, потому что (A) они не знакомы с практикой и / или (B) они не хотят тратить время и усилия на получение обзора кода Система на месте.

В основном, чтобы получить то, что вы хотите здесь, вам нужно изменить культуру на рабочем месте - и это никогда не бывает простым или легким. Не забывайте, что даже если ваше рабочее место на 100% убеждено, что обзоры кода превосходны, и они хотят их принять, то для перехода на новый способ работы все равно потребуются значительные затраты времени, энергии и производительности. Эти инвестиции должны окупиться - но вы должны иметь бай-ин для инвестиций, а не только для окупаемости. Посмотрите видео Роя Ошерова «Модульное тестирование и TDD - как это сделать» - проблемы принятия обзоров кода очень похожи на проблемы, связанные с применением модульного тестирования.

А пока делай, что можешь, чтобы получить как можно больше:

  • Если есть другие разработчики, которые видят ценность проверок кода, попробуйте проверять друг друга, даже неформально.
  • Если у вас есть наставник или какой-либо разработчик, ответственный за ваше обучение, объясните ему значение, которое вы видите в обзорах кода, и спросите, не захотят ли они пересмотреть ваш код, по крайней мере, иногда.
  • Скажите своему менеджеру, что вы хотите просмотреть чужой код, потому что он поможет вам лучше понять систему.
  • Если в какой-то момент вы станете руководителем группы, вы можете проводить проверки кода локально, только для вашей команды.

Основным преимуществом любого из них является то, что если вы сможете поддерживать их с течением времени, разработчики вокруг вас начнут замечать обзоры кода. Вы эффективно продемонстрируете, как проверки кода могут быть интегрированы в существующую культуру, и это открывает путь для изменения культуры. Обзоры кода помогают , поэтому, если вы сможете продемонстрировать это в небольшом масштабе, это откроет путь для других - и культуры в целом - последовать вашему примеру.

Отойди
источник
-2

Перестаньте беспокоиться об этом - ваш новый работодатель просто не заботится об обзорах кода. Научитесь быть уверенными в своих силах, и никто не скажет вам, что можно проверить код, который вы написали. Вскоре вы научитесь жить без утомительно утомительного процесса, который просматривает код других людей.

Следуйте рекомендациям по стилю (или просто стилю), которые используют все остальные. Используйте свой опыт, чтобы решить, что нужно комментировать, какие соглашения об именах использовать и так далее.

Затем проверьте все, прежде чем проверить его. Самое главное, что он работает правильно.

Саймон Б
источник
2
-1: тот факт, что новая команда ОП не делает обзоры кода, не делает это плохой идеей. Это признак хорошего инженера, помогающего улучшить качество процесса разработки.
Йорген Фог,
1
@ JørgenFogh Я также поддерживаю обзоры кода, но вы, похоже, предполагаете, что обзоры кода помогут этому конкретному процессу разработки. В дополнение к этому ответу я хотел бы спросить, почему они не выполняют проверки кода - у них может быть веская причина. Возможно, как следует из этого ответа - эта компания нанимает людей, которым не нужно просматривать свой код, или, по крайней мере, выгоды от этого просто не стоят дополнительных затрат. Если ОП попытается, но не удастся что-либо изменить, это будет ответом, на который можно вернуться.
DoubleDouble
1
Вполне возможно, что выгоды не стоят затрат. Однако тот факт, что команда не выполняет проверки кода, ничего не говорит нам о том, должны ли они это делать.
Йорген Фог
4
-1: «Самое главное, что он работает правильно». Это довольно близорукое представление о том, что важно, когда дело доходит до производственного кода. Код читается чаще, чем написано. Ценность (хорошо выполненного) обзора кода выходит далеко за рамки проверки правильности. Среди многих преимуществ, обзоры кода гарантируют, что код имеет смысл для того, кто его не написал.
Dancrumb
-2

Если вашему новому работодателю не нравится идея проверки кода, возможно, это связано с тем, что у него отрицательная связь со старомодными методологиями командных и управляющих типов, и они стремятся к более современному, гибкому набору практик. В этом случае они могут быть более открытыми для идеи парного программирования, которая обеспечивает многие из тех же преимуществ и широко рассматривается как более динамичная современная практика.

Жюль
источник