Code Reviews Відгуки дійсно працюють у справжньому Agile?


13

Тож я почав працювати над великим корпусом. Один із тих, хто має 3 букви на ім'я, і ​​вони намагаються стати Agile, але мають безліч процесів, які, як я не відчуваю, є спритними.

Те, що мене найбільше обернуло, - це огляди коду. Моя остання робота була зі стартапом, про який я б сказав, це найгірша команда розвитку, яку я бачив, був і / або коли-небудь чув.

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

Ось мій процес розробки та той, коли я останній запуск ... дуже Agile.

Ми робимо ранню функціональну роботу, щоб сортувати завдання розвитку / todos. Ми будемо знущатися над декількома версіями та представляти користувачам, команді та маркетингу, щоб отримати зворотній зв'язок. Потім ми робимо ще одну макет ітерації, щоб отримати один раунд від тих самих зацікавлених сторін вище. Тоді ми заглиблюємо роботу і починаємо. У нас є важливі етапи та дати для зустрічі, але ми продовжуємо підключатись. Ми не маємо оглядів коду під час нічого з цього. Кілька разів протягом тижнів нашої розробки ми знову проводимо сесії з зацікавленими сторонами, щоб побачити, чи вони все ще погоджуються, що функції / функції / UX / UI все ще підходять та націлені.

Коли ми наближаємось до кінця 8-тижневого циклу ітерації, QA починає тестувати, тоді він переходить до альфа-користувачів і, нарешті, до бета-користувачів. Але під час альфа- та бета-версії розробники переглядають нові функції та старіші функції, вносячи ітеративні щоденні або години зміни в інтерфейс для поліпшення UX. Таким чином, функція, яка розроблялась у цьому випуску, може змінитися ще 3 рази за останні чотири тижні, щоб покращити та вдосконалити її, або додати кілька крихітних функцій (наприклад, зробити компонент трохи стрункішим чи розумнішим). Іноді зміни можуть бути поверхневими, тобто CRUD-операції не змінюються та не змінюються, але весь інтерфейс лише змінюється.

Отож, при такому типі процесу розробки, надзвичайно Agile, чи не огляд коду буде марною тратою часу? Значить, якщо у мене був інший розробник чи два переглянули свій код, але потім цей код змінюється ще 3 рази, перш ніж він вийде з дверей, через всі вдосконалення UI / UX, ми не витрачаємо час на перші 3 рази, коли вони переглядали його код як код / ​​компонент / інтерфейс користувача був знятий?

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

І так, у нас дуже багато тестувальників, оскільки їм, можливо, доведеться повторно перевірити речі 3 або 4 рази. Також, будь ласка, не зациклюйтесь на запитання, чому всі зміни інтерфейсу / UX змінюються ... ось як все робиться ... тоді тоді додаток виграє багато нагород за UI / UX, і користувачі вб'ють за додаток Мисленнєвий процес - якщо я можу зробити навіть 2% поліпшення чогось, тому що у мене є додаткова година, то це робити. Користувачі будуть щасливішими, що означає більше $ або користувачів. І так, наші користувачі в порядку, коли додаток постійно змінюється, тому що це робиться з першого дня, тому вони не вважають це поганим чи негативним.

Сподіваюся, ця публікація не виглядає настільки помпезною, але я просто не можу побачити, наскільки огляди коду не марнотратні. Можливо, у 2% всього нашого коду в переглянутому коді є помилки. Кожен випуск ми можемо знайти 3 помилки за допомогою перегляду коду. Отже, це виявляється за 40 годин перегляду коду на розробника за випуск (4 х 40 = 160 годин), щоб знайти 3 - 5 помилок? Швидше за все, 50% тих, що 3 - 5 помилок було б зібрано QA у будь-якому випадку. Чи не було б краще витратити ці 40 годин на розробника, додавши нову функцію або вдосконалюючи існуючі?


@DeadMG: Досвід користувачів
Стівен А. Лоу

4
@ user25702: описаний вами процес не звучить як Agile, це звучить як RUP / спіраль. Зокрема, "Кілька разів протягом тижнів нашого розвитку ми знову проводимо сесії з зацікавленими сторонами, щоб побачити, чи вони все ще погоджуються, що функції / функції / UX / UI все ще є придатними та цільовими". є протилегким; під час ітерації функції заморожуються, щоб уникнути проблем з рухомою ціллю, пов'язаних із підходами RUP / спіраль. Щодо вашого номінального запитання, я не бачу великої цінності в оглядах кодів, якщо і тільки якщо ви впевнені, що помилки знайшли б QA.
Стівен А. Лоу

1
8 тижневих ітерацій не є спритними та, безумовно, не "надзвичайно спритними".
Мартін Вікман

Деякі прем'єр-міністри вважають, що ітерації означають, що ми маємо на початку кілька коротких ітерацій, а в середині - кілька довгих ітерацій, а наприкінці - стільки коротких повторів. Проблема полягає в тому, що це псується з ритмом бою розробки програмного забезпечення та можливістю рано ловити помилки. 8-тижнева ітерація була б однією з тих середніх ітерацій. Я згоден, що це не спритно.
Берін Лорич

Якщо ви хочете сперечатися з оглядами коду, рекомендую взяти кілька статистичних даних. Документуйте час, відведений для огляду коду (загальна кількість годин), кількість виявлених помилок / проблем, а також гостроту проблеми. Для моєї команди виявилося, що ми витрачали щонайменше 16 годин на людину, виявляючи в середньому 2-3 помилки, всі вони носили косметичний характер. Легко сперечатися за методологією першого тестування заміни експертних оцінок перед цими числами.
Берін Лорич

Відповіді:


13

Є кілька речей, які огляди коду можуть зробити для вас, і деякі речі вони не можуть. Аргументи на користь оглядів коду:

  • Колективна власність
  • Знайти помилки (КК)
  • Застосування послідовного стилю (QA)
  • Наставництво

Багато гнучких процесів вирішують різні способи:

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

По суті, є й інші способи піклуватися про потенційні вигоди, які ви, як правило, мали б проводити експертні огляди. Мій особистий досвід експертних оцінок полягає в тому, що вони дуже неефективні механізми і не ефективні при пошуку помилок або великих недоліків дизайну. Однак вони мають своє місце в деяких командах, а в проектах, де спритний неможливий (з будь-якої причини), вони цілком необхідні.


3
Здається, в поточній відповіді є дезінформація. Колективна власність не означає "весь погляд на весь код". Рефакторинг не має нічого спільного з виявленням дефектів. Тестові огляди та перевірка служать різним цілям, і фактично кожен може виявити різні види дефектів (приклади в інших відповідях). Парне програмування, хоча є формою огляду, не є справжньою заміною, наприклад, перевірки Фагана. Ваш особистий досвід здається нетиповим, особливо щодо помилок дизайну - які відгуки ви робили? Як ви оцінили ефективність оглядів?
Майкл

1
Час виконання огляду проти виявлених дефектів та їх вираженість. Ми порівнювали це з тими ж показниками щодо одиничного тестування. Проблеми, виявлені під час перегляду коду, майже завжди були пов'язані із форматуванням коду, і для цього потрібно було більше часу. Цей же час, витрачений на тестування одиниць, виявив реальні проблеми і більше не потребував у підготовці та роботі.
Берін Лорич

"Колективна власність": На мій досвід, це часто ілюзія: рецензенти часто перебирають дрібні деталі і не бачать великої картини в коді, написаному іншими. Потім, коли йдеться про зміну цього коду, вони насправді не розуміють його, або вони (1) не наважуються його змінити, або (2) вони всебічно переписують його, щоб вони могли його зрозуміти. У підходу (2) часто є два побічні ефекти: (A) вони вводять помилки, і (B) оригінальний розробник вже не розуміє код.
Джорджіо

Точка B показує, що часто відбувається не колективна власність, а індивідуальна власність, яка постійно переходить від одного розробника до іншого. Таким чином, кожен член команди приблизно знає, що робить код і як він організований, але ніхто насправді його не розуміє глибоко. Справжнє володіння колективним кодом вимагало б набагато більше часу та дискусій щодо коду, щоб отримати спільне розуміння, але часто цей час просто недоступний.
Джорджіо

11

Чи є огляди коду лише для пошуку помилок? Ви, здається, вважаєте, що це правда, а я - ні.

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


4

Парне програмування - це відповідь XP на огляди коду. По суті, кожен рядок коду переглядається так, як він написаний. Це огляди коду, взяті до крайності.


7
Я б з цим рішуче сперечався. Звичайно, його переглядають дві людини, але ці люди, як правило, на одній сторінці, на якій написано код. Огляд коду - це хтось із зовсім іншим душевним станом, дивлячись на ваш код і виявляючи "проблеми! Забули про обробку цього випадку" види проблем - XP дійсно не допомагає у цьому.
Біллі ONeal

4

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

Ви не можете знати, чи код без помилок лише тому, що він проходить тестування без жодного записаного. "Тестування може лише довести наявність помилок, а не їх відсутність." (Dijkstra?)

Огляд коду також підтримує однаковий стиль коду, і він може знайти місця, де код не є гарним, але він працює на даний момент. Це економить витрати на обслуговування на дорозі.

Також вимоги великої корпорації та стартапу різні. Стартапи, як правило, виходять з ладу і повинні швидко рухатися. Великі корпорації отримують набагато більше цінності, якщо робити речі правильно, а не якнайшвидше. Ви, можливо, вважаєте за краще працювати в стартапах, ніж великі компанії, але це не привід намагатися нав'язувати стратегії запуску там, де вони не підходять.


2

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

Зараз я погоджуся з вами, що десь треба провести лінію. Чи переглядаєте ви 4 повторення тієї самої зміни інтерфейсу користувача? Або ви проходите 4 ітерації цього, кожен з яких може зробити код менш реальним? Я б сказав, спробуйте виміряти обидва підходи та знайти правильний баланс для вашої команди, але не відмовляйтеся від огляду коду повністю.

Навіть якщо огляд коду ніколи не виявляє проблеми, він має перевагу, яку ви рідко помічаєте, поки його немає: кожен фрагмент коду переглядають два розробники, тож два розробники знають, що було зміною і чого було призначено досягти . Тож один із них захворіє на наступний день і виходить на тиждень, інший може забрати будь-яку невідкладну роботу, яку вони виконували.


1

Я схильний погоджуватися, що власність колективного коду та сполучення разом з TDD та CI є антидотами Agile до офіційних сесій з перегляду коду.

Навіть під UP / Spiral я не був великим шанувальником конкретного кроку процесу, який є "переглядом коду", тому що, як мені здається, такі проблеми, які, швидше за все, можуть бути знайдені пізніше, ніж вони могли бути, якби однакова енергія була замість цього вкладена в якийсь перший план співпраця та деяка проста автоматизація.

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

Ми змогли вийти з ладу раніше і отримати зворотний зв’язок швидше, ніж це призвело б до перегляду звички перегляду коду.

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


0

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

Перегляди коду самі по собі ніколи не повинні призводити до змін коду. Якщо в огляді коду зазначено, що потрібні зміни, то впровадження змін призведе до зміни коду.

Стан коду може змінитися в результаті огляду, але це має бути в основному не стосується питань, які ви згадуєте.

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

Речі повинні перейти до тестувальників у завершеному стані. Якнайбільше тестування повинно бути автоматизовано, щоб тестувальники не повторно повторяли те саме і те саме.

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

Вартість на впровадження змін (включаючи виправлення помилок) зазвичай збільшується на кожному етапі, через який він проходить. Пошук помилок у розробці взагалі дешевше, ніж їх виправлення після тестування.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.