Обзоры кода действительно ли они работают в Agile?

13

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

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

В любом случае, я утверждаю, что Code Reviews - пустая трата времени в итеративной или гибкой разработке, где UX / UI экстремальный / интенсивный (подумайте о совершенстве Apple / Steve Jobs). Может быть, кто-то здесь может помочь понять, прежде чем меня уволят?

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

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

По мере приближения к концу 8-недельного итерационного цикла QA начинает тестирование, затем переходит к альфа-пользователям и, наконец, к бета-версии. Но во время альфа- и бета-тестирования разработчики рассматривают новые и старые функции, внося ежедневные или часовые изменения в пользовательский интерфейс, чтобы улучшить UX. Таким образом, функция, которая разрабатывалась в этом выпуске, может в конечном итоге измениться еще 3 раза за последние четыре недели, чтобы улучшить и улучшить ее или добавить несколько крошечных функций (например, сделать компонент немного более гладким или умным). Иногда изменения могут быть поверхностными, то есть никакие операции CRUD не изменяются и не изменяются, но изменяется только пользовательский интерфейс.

Так что с таким типом процесса разработки, чрезвычайно гибким, разве проверки кода не будут пустой тратой времени? Это означает, что, если бы у меня был другой разработчик или два, пересмотрел мой код, но затем этот код меняется еще 3 раза, прежде чем он выйдет из-за всех улучшений UI / UX, разве мы не тратим свое время на первые 3 раза, когда они просматривали его? код как тот код / ​​компонент / пользовательский интерфейс был отменен?

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

И да, у нас много тестеров, потому что им, возможно, придется перепроверять вещи 3 или 4 раза. Также, пожалуйста, не зацикливайтесь на вопросе, почему все изменения в UI / UX ... вот как все это делается ... именно поэтому приложение выигрывает множество наград за UI / UX, а пользователи убивают за приложение. Мысленный процесс заключается в том, что если я смогу улучшить что-то даже на 2%, потому что у меня есть дополнительный час, тогда сделайте это. Пользователи будут счастливее, что означает больше долларов или пользователей. И да, наши пользователи согласны с тем, что приложение постоянно меняется, потому что так оно и было с самого первого дня, поэтому они не считают его плохим или негативным.

Надеюсь, что этот пост не выглядит напыщенным, но я просто не вижу, как Обзоры кода не расточительны. Возможно, 2% всего нашего кода в проверенном коде содержат ошибки. В каждом выпуске мы можем найти 3 ошибки через обзор кода. Таким образом, в итоге получается 40 часов проверки кода на разработчика на выпуск (4 x 40 = 160 часов), чтобы найти от 3 до 5 ошибок? Скорее всего, 50% эти 3–5 ошибок были бы обнаружены QA в любом случае. Не лучше ли потратить 40 часов на каждого разработчика, добавляя новую функцию или улучшая существующие?

user25702
источник
@DeadMG: пользовательский опыт
Стивен А. Лоу
4
@ user25702: описанный вами процесс не похож на Agile, звучит как RUP / спираль. В частности, «Несколько раз в течение нескольких недель нашего развития мы снова проводим сеансы с заинтересованными сторонами, чтобы убедиться, что они по-прежнему согласны, что функции / функции / UX / UI по-прежнему подходят и нацелены». анти-проворный; во время итерации функции замораживаются, чтобы избежать проблем движущихся целей, связанных с RUP / спиральными подходами. Что касается вашего номинального вопроса, я не вижу большой ценности в обзорах кода здесь, если и только если вы уверены, что ошибки были бы найдены QA.
Стивен А. Лоу
1
8-недельные итерации не являются гибкими и определенно не «чрезвычайно гибкими».
Мартин Уикман,
Некоторые менеджеры думают, что итерации означают, что у нас есть пара коротких итераций в начале и пара длинных итераций в середине, за которыми следует столько коротких итераций в конце, сколько необходимо. Проблема в том, что это мешает боевому ритму разработки программного обеспечения и способности своевременно обнаруживать ошибки. 8-недельная итерация была бы одной из тех средних итераций. Я согласен, что это не ловко.
Берин Лорич
Если вы хотите спорить с отзывами о кодах, то я рекомендую взять некоторые статистические данные. Документируйте время, затрачиваемое на проверку кода (общее количество человеко-часов), количество обнаруженных в них ошибок / проблем, а также серьезность проблемы. Для моей команды оказалось, что мы потратили не менее 16 человеко-часов на обзор, в среднем было обнаружено 2-3 ошибки, и все они носили косметический характер. Было легко утверждать, что методология «первый тест» заменит эти оценки.
Берин Лорич

Ответы:

13

Есть несколько вещей, которые обзоры кода могут сделать для вас, и некоторые вещи, которые они не могут. Аргументы в пользу кода отзывов:

  • Коллективная собственность
  • Найти ошибки (КК)
  • Обеспечить последовательный стиль (QA)
  • Наставничество

Многие гибкие процессы решают их по-разному:

  • Коллективное владение: все в команде несут ответственность за проект, а это значит, что каждый будет следить за кодом в любой момент времени.
  • Бесплатный рефакторинг: это выводит обзоры кода на новый уровень и позволяет любому члену команды выполнять рефакторинг по мере необходимости.
  • Модульные тесты (QC): модульные тесты более эффективны и менее подвержены человеческим ошибкам, чем визуальные проверки. На самом деле мне еще предстоит найти более эффективное средство.
  • Парное программирование (QA): заботится о наставничестве и дает рекомендации по раннему рефакторингу при написании кода. Это также по-прежнему спорная тема, но я считаю, что это помогает при освоении нового разработчика. Это также хорошее время для применения стандартов кодирования.

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

Берин Лорич
источник
3
Кажется, в текущем ответе есть некоторая дезинформация. Коллективная собственность не означает «все время смотреть на весь код». Рефакторинг не имеет ничего общего с обнаружением дефектов. Модульные тесты и проверки служат различным целям и фактически могут выявить различные виды дефектов (примеры в других ответах). Парное программирование, хотя и является формой обзора, не является истинной заменой, например, инспекции Фагана. Ваш личный опыт кажется нетипичным, особенно в отношении ошибок проектирования - какие обзоры вы делали? Как вы измерили эффективность отзывов?
Майкл
1
Время выполнения обзора в сравнении с найденными дефектами и их серьезностью. Мы сравнили это с теми же показателями против модульного тестирования. Проблемы, обнаруженные во время проверки кода, почти всегда были связаны с форматированием кода, и для их выполнения требовалось больше времени. То же время, потраченное на юнит-тесты, выявило реальные проблемы и больше не требовало подготовки и выполнения.
Берин Лорич
«Коллективное владение»: по моему опыту, это часто иллюзия: рецензенты часто придирчивы к мелким деталям и не видят общую картину в коде, написанном другими. Затем, когда дело доходит до изменения этого кода, они на самом деле не понимают его, и они либо (1) не осмеливаются изменить его, либо (2) они переписывают его, чтобы они могли его понять. Подход (2) часто имеет два побочных эффекта: (A) они вносят ошибки, и (B) первоначальный разработчик больше не понимает код.
Джорджио
Точка B показывает, что часто случается не коллективная собственность, а индивидуальная собственность, постоянно переходящая от одного разработчика к другому. Таким образом, каждый член команды примерно знает, что делает код и как он организован, но никто не понимает его глубоко. Истинное коллективное владение кодом потребует гораздо больше времени и обсуждения кода, чтобы получить общее понимание, но часто это время просто недоступно.
Джорджио
11

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

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

JB King
источник
4

Парное программирование - это ответ XP на обзоры кода. По сути, каждая строка кода рассматривается так, как она написана. Это обзоры кода доведены до крайности.

Дейв
источник
7
Я бы сильно поспорил с этим. Конечно, его проверяют два человека, но эти люди обычно находятся на той же странице, на которой пишется код. Обзор кода - это кто-то с совершенно другим состоянием ума, смотрящий на ваш код и обнаруживающий проблемы типа "дох! Забыл про обработку этого случая" - XP действительно не помогает с этим.
Билли ОНил
4

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

Вы не можете знать, если код не содержит ошибок только потому, что он проходит тестирование без записи. «Тестирование может доказать только наличие ошибок, а не отсутствие». (Дейкстр?)

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

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

Дэвид Торнли
источник
2

Ваши обзоры кода только когда-либо вызывают изменения UI / UX? Я бы сказал, что это не обзор кода, а юзабилити-тест. Обзоры кода гораздо больше касаются выявления проблем, которые пользователи / тестировщики / бизнес / что бы то ни было никогда не видят, потому что они в коде. Подсказка прямо в названии.

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

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

прецизионный самописец
источник
1

Я склонен согласиться с тем, что коллективное владение кодом и сопряжение с TDD и CI - это гибкие противоядия от сессий формального анализа кода.

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

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

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

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

mmeyer
источник
0

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

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

Состояние кода может измениться в результате проверки, но это в основном не должно относиться к упомянутым вами проблемам.

Если проверка кода приводит к множественным изменениям кода, значит, что-то не работает в процессе разработки. Учитывая количество тестеров, которые у вас есть, вы можете бросить его через стену и позволить тестировщикам найти проблему.

Вещи должны идти к тестерам в завершенном состоянии. Как можно большая часть тестирования должна быть автоматизирована, чтобы тестеры не проверяли одно и то же время от времени.

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

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

BillThor
источник