Agile Practices: Перегляд коду - Не вдалося переглянути або не порушити проблему?


53

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

Інакше завдання відповідає визначенню виконаного.

У нас є два варіанти.

  • Не вдалося перевірити код, щоб квиток не закрився в цьому спринті, і ми трохи вдарилися по моралі, тому що ми не можемо пропустити квиток.
  • Рефактор - це невеликий твір, який можна було б виконати в наступному спринті (або навіть перед тим, як він розпочнеться) як крихітна, напівточна історія.

Моє запитання: чи є якісь властиві проблеми чи міркування щодо підняття квитка з задньої частини огляду, замість того, щоб його не дати?

Ресурси, які я можу знайти, і зазвичай читають детальні огляди коду як 100% або нічого, але я вважаю, що це зазвичай не реально.


23
Отже, якщо ви не можете пропустити огляд коду для цього, яка мета цього огляду? Зараз вам здається, що вам слід зрозуміти, чи щось працює , проте, безумовно, це завдання тесту чи тестера, а не перевірка коду.
ВЛАЗ

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

1
@ErdrikIronrose, таким чином, це здається, що зміни не були до стандартних і, можливо, не були (настільки легко) ретельними. Хоча ваш інший коментар, схоже, вказує на те, що зміна не була частиною запиту, і в цьому випадку вона не повинна бути частиною перегляду коду. Якщо хтось пише правильний та стандартний код поруч із існуючим некрасивим злому, тоді сміливо піднімайте квиток на виправлення негарного зламу та передайте поточний огляд коду. Якщо хтось пише правильний, але не стандартний (як вказує ваше запитання) код, не завершуйте перевірку коду, поки це не буде виконано правильно.
ВЛАЗ

9
@ErdrikIronrose: Ага, таким чином, кодовий запах не створений під час роботи над огляданою історією , а вже існував? Це важлива відмінність - подумайте про редагування питання.
sleske

1
@vlaz Ви повинні відповісти на свій коментар
Істер

Відповіді:


67

Чи є якісь властиві проблеми чи міркування щодо підняття квитка з задньої частини огляду, замість того, щоб його не дати?

Не по суті. Наприклад, реалізація поточної зміни, можливо, виявила проблему, яка вже існувала, але досі не була відома / очевидна. Позбавлення квитка було б несправедливим, оскільки ви його відмовите за щось, не пов’язане з фактично описаною задачею.

в огляді ми виявляємо функцію

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

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

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

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

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

Рефактор - це невеликий твір, який можна було б виконати в наступному спринті (або навіть перед тим, як він розпочнеться) як крихітна, напівточна історія.

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

Ресурси, які я можу знайти, і зазвичай читають детальні огляди коду як 100% або нічого, але я вважаю, що це зазвичай не реально.

Пропуск / невдача - це по суті бінарний стан , який по суті є все або нічого.

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

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

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

Інакше завдання відповідає визначенню виконаного.

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


26
"Правильність та чистота коду не залежать від настрою команди". +1 лише для цього, проте єдиним застереженням до всієї цієї відповіді було б досягнення терміну. Якщо недолік цього огляду коду означає, що довгоочікувана функція не перетворить його на наступний випуск, ви повинні збалансувати чистоту коду з потребами клієнта. Але пам’ятайте, що невірний код, який відповідає терміну клієнта сьогодні, є виробничим питанням завтра.
Грег Бургхардт

11
Чудова відповідь - твердий, але не грубий. Одним тангенціальним моментом може бути також: як нам вдалося зробити огляд коду настільки пізно у спринті, що не вдалося зробити легкий рефактор, не спричинивши збій всього спринту?
Даніель

@Daniel: Розробник може бути залучений інакше, або це може бути проблема планування. Час між завершенням завдання і закінченням спринту зазвичай мінімальний, оскільки (в ідеальному світі) люди закінчують своє останнє завдання спринту біля часу завершення спринту. Ви не можете взяти тривалий період для перегляду / виправлення; або, можливо, розробник просто не присутній / доступний для решти спринту.
Flater

8
+1 Програмісти можуть почувати себе добре, коли написали хороший код. Обхід контролю якості не є відповіддю на поліпшення морального стану. Епізодичне відхилення незначних питань, все одно, не призведе до морального страждання. Якщо ваша мораль страждає через те, що регулярно не вдається пройти контроль якості, відповідь полягає в тому, щоб постійно робити щось щодо відмови QC, а не скидати стандарти.
jpmc26

1
@GregBurghardt: Оскільки я бачив, як аргумент строку зловживають у багатьох компаніях, я схильний погоджуватися лише на те, щоб пройти поганий огляд, якщо і лише в тому випадку, якщо завдання для його негайного рефакторингу буде створено і заплановано на перший спринт після випуску. Додана вартість часу додає значущого бар'єру для входу у обхід якості коду.
Flater

38

В кінці двотижневого спринту та завдання має огляд коду [...] Легка робота рефактора.

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

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

Отже, підсумовуючи це: так, DoD є двійковим. Перехід або провал. Огляд коду не є двійковим, він повинен бути більше схожим на поточне завдання. Ви не можете провалитись . Це процес і врешті-решт це зроблено. Але якщо ви не плануєте належним чином, ви не потрапите до того "зробленого" етапу вчасно і затримаєтесь на "не зробленій" території в кінці спринту. Це не добре для моралі, але це потрібно враховувати при плануванні.


5
Це саме та відповідь, яка прийшла мені в голову. Якщо кожна історія реалізується з власною гілкою, то не відкладайте огляд і об'єднання гілок до кінця спринту. Натомість створіть запит на витяг, як тільки вважається, що гілка готова, і продовжуйте повторювати цю гілку, поки вона фактично не буде зроблена, затверджена та об'єднана. Якщо цей процес не закінчився в кінці спринту, історія не закінчена.
Даніель Приден

20

Просто: Ви переглядаєте зміни . Ви не переглядаєте стан програми в іншому випадку. Якщо я виправляю помилку у функції 3000 ліній, то ви перевіряєте, чи мої зміни виправляють помилку, і все. І якщо моя зміна виправить помилку, ви приймаєте її.

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

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

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


4
Я думаю, що в цьому випадку зміною була занадто довга функція - якщо ви ввели функцію 3000 ліній, якої раніше не було (або раніше вона була 10-лінійною функцією).
користувач3067860

3
В принципі ця відповідь є абсолютно правильною. На практиці ..... Якщо всі розробники вірять і практикують хороші практики кодування, збалансовані проти зусиль, то ви, швидше за все, не стикаєтеся з цим питанням дуже часто, і тоді ця відповідь з’являється на місці. Однак .... здається, що завжди є один або два розробника, які роблять все швидко і брудно, щоб заощадити 5 хвилин; тоді як вони ігнорують години до днів або місяців, які вони додають до роботи, яка буде пізніше. У цих випадках ця відповідь є лише слизьким схилом до того, що потрібно починати заново і переробляти всю систему.
Данк

+1, хоча, я думаю, вам слід перефразувати останній абзац, щоб виділити, що перевірка коду з проблемами повинна бути абсолютним винятком. Я маю в виду, хіба що хтось - то заблокувало це НЕ досить відмовки. Невдача єдиного спринту теж не виглядає достатньою приправкою, і, звичайно, не приводом, який може використовуватися неодноразово.
Фракс

@ user3067860 Якщо ви перетворили функцію 10 ліній на функцію 3000 ліній - явно не вдається. Якщо ви перетворили функцію 3000 ліній на 3010 - тоді, ймовірно, пройдіть. Але що робити, якщо функцію 100 ліній (зазвичай трохи завелику) ви перетворили на функцію 300 ліній ( безумовно, занадто велику)?
Мартін Боннер підтримує Моніку

9

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

Здається, це проблема.
Теоретично ви знаєте, що вам слід робити, але це близько до строку, тому ви не хочете робити те, що знаєте, що вам слід робити.

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


"Шановний клієнт, ви не можете мати свою функцію ще 2-3 тижні, оскільки наш код працював, але нам не сподобалось, як це виглядало", ... будь ласка, не звертайтеся до нашого конкурента ... або повідомте генеральному директору !
RandomUs1r

6
@ RandomUs1r клієнти не повинні мати такого роду інформацію. Це не було зроблено, тому що на це було недостатньо часу, і це все. Чи клієнти диктують, як слід писати код? Якщо ви зателефонували електромонтажу, щоб виправити електропроводку у себе вдома, ви переходите "Просто поміняйте кабелі, але не турбуйтеся перевіряти, чи правильні кабелі"? Або ви скажете своєму лікареві "я хворий - дайте мені таблетки, але не діагностуйте мене спочатку"? Огляди коду повинні бути невід'ємною частиною роботи, а не те, що диктує замовник.
ВЛАЗ

1
@ RandomUs1r: "" Шановний розробнику, чому ця функція не була завершена? " - відповідь повинна бути", оскільки у нас не було достатньо часу, щоб побудувати її до прийнятного рівня якості ", можливо, після цього" Ми можемо надати її для вас, якщо ви готові йти на компроміс щодо якості ".
Брайан Оуклі,

1
@ RandomUs1r, в основному ви хочете пожертвувати якістю коду, що, ймовірно, ускладнює впровадження функцій пізніше. 2-денний виправлення зараз може дуже добре заощадити 4 тижні виправлення пізніше. Тож це "Шановний клієнт, ви не можете мати свою функцію ще 2-3 тижні, тому що для впровадження другорядних функцій зараз потрібно так багато часу". Також це закінчення спринту чи це головний термін? Якщо це головний термін, я можу побачити злиття зараз, написання виправлення протягом наступних 2 днів і підняття PR відразу після закінчення терміну.
xyious

5
Все, що я говорю, - якщо ваші стандарти відрізняються перший день і останній день спринту, то у вас немає стандарту, і ваша якість неминуче знизиться.
xyious

5

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

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

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

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


4

Проблем з переглядом деприортинізації коду немає притаманних проблем, але це звучить як основні проблеми, з якими потрібно узгодитись, як команда, такі:

  1. Яка мета перегляду вашого коду?
  2. Як результати огляду коду відносяться до визначення Виконано для робочого предмета?
  3. Якщо огляд коду застосовується як тест на тестування, які проблеми вважаються «блокаторами»?

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

Це те саме, що якщо під час тестування приладу не вдалося випробувати тест. Ви будете виправляти помилку, а не ігнорувати тест одиниці, якщо проходження одиничних тестів було вимогою до виконання.

Якщо команда не погодилася на те, щоб огляди коду були визначенням "Готово", огляди вашого коду не є тестом прийняття робочого предмета. Вони є командною діяльністю, яка є частиною вашого процесу відставання, щоб шукати додаткову роботу, яка може знадобитися. У цьому випадку будь-які виявлені вами проблеми не пов’язані з вимогами оригінального робочого предмета і є новими робочими елементами, які колектив повинен надати пріоритет.

Наприклад, команді може бути цілком прийнятно деприоритизувати виправлення помилок в деяких назвах змінних, оскільки це не впливає на функціональність бізнесу, яка була поставлена, хоча команда справді ненавидить бачити назву змінної "myObkect".


1

Тут відповіді, які голосують вище, дуже хороші; це стосується кута рефакторингу.

У більшості випадків більшість робіт при рефакторингу - це розуміння існуючого коду; змінивши його після цього, як правило, є меншою частиною роботи з однієї з двох причин:

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

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

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

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

Рефактор - це невеликий твір, який можна було б виконати в наступному спринті (або навіть перед тим, як він розпочнеться) як крихітна, напівточна історія.

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

  1. Ви не думаєте про рефакторинг як частину кодування, а як про окрему операцію, яка, в свою чергу, робить можливим потрапляння під тиском.

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

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

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

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


1

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

Ваше запитання чітко закликає до "спритних практик", тому переглянемо маніфест спритності (акцент мій):

Ми розкриваємо кращі шляхи розробки програмного забезпечення, роблячи це та допомагаючи іншим. Завдяки цій роботі ми оцінили:

  • Індивіди та взаємодія над процесами та інструментами
  • Працює програмне забезпечення над всеосяжною документацією
  • Співпраця з клієнтами щодо укладання договорів
  • Відповідаючи на зміни протягом наступного плану

Тобто, хоча в елементах праворуч є значення, ми більше цінуємо предмети зліва.

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

Почніть співпрацювати. Зупиніть невдачу оглядів коду.


Я все для співпраці. Але який термін ви б використали, якби не "провалити"? Навіть обговорюючи, як група, одна людина сказала б "це недостатньо добре, йому потрібен рефакторинг", що означає, що він просто не перевірив якість, правда?
Erdrik Ironrose

1
@ErdrikIronrose Я ніколи не використовував - або потребував використання - термінологію "невдалого" перегляду коду. Хтось переглядає код, виникає дискусія навколо будь-яких потенційних моментів поліпшення, після чого приймається рішення про те, чи потрібно вирішувати ці питання. Ніякого "проходження" чи "невдачі" немає, просто спілкування та прогрес. Я не впевнений, чому потрібен штамп.
Мураха P

0

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

Чи є якісь властиві проблеми чи міркування щодо підняття квитка з задньої частини огляду, замість того, щоб його не дати?

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

Одне з прислів'їв, які ми маємо, - це "Виберіть прогресивне вдосконалення над відкладеною досконалістю".

У нас дуже текучий процес, і ми створимо досить велику кількість "доказів концепції" (1 або 2 за спринт), які роблять це через dev і тестування, але ніколи не роблять його минулим внутрішнім оглядом зацікавлених сторін (хм, чи можемо ми це зробити замість цього ?), альфа чи бета ... деякі виживають, а інші ні.

У поточному проекті я втратив інформацію про те, скільки разів ми побудували певну функцію, отримав її в руки зацікавлених сторін, а спринт-два пізніше повністю усунув її, оскільки напрямок продукту змінився або виникли вимоги повна переробка способу реалізації функції. Будь-які інші завдання на «уточнення» для видаленої функції або такі, що не відповідають новим вимогам, видаляються, а також частина затримки.


0

На мою думку, є два способи розглянути цю проблему:

  1. Академічний шлях
  2. Реальний світовий шлях

Академічно кажучи, більшість процесів перегляду коду існує, щоб не вдалося розгорнути PBI (товарний запас продукту), коли стандарт якості коду не дотриманий.

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


2
ніхто в реальному світі не рухається спритно до Т - він більше не буде "спритним", якщо у нас занадто суворі правила, правда?
Paŭlo Ebermann

@ PaŭloEbermann У мене була забавна розмова з компанією, з якою я брав інтерв'ю один раз. Вони стверджували, що їх процес не є спритним, тому що це не приклад підручника з спритності. Хоча все, що вони робили, було в дусі спритного. Я вказав їм на це, але його зустріли лише (по суті) "Ні, ми не дотримуємось встановленої спритної процедури до листа, навіть якщо сильно запозичуємо ці поняття. Тому ми не спритні". Це було досить химерно.
ВЛАЗ

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

@ Curt Я розумію, що моє може бути непопулярним поглядом з точки зору dev (я теж дев. Btw), але бізнес справді повинен стати першим, вони підписують зарплату, і це заслуговує на певну повагу. Що стосується відходу часу, я знову кину виклик вашому розумінню реального світу, і вам потрібно усвідомити, що це не завжди можливо, і дуже багато спринтів бігають, бо дияволам також потрібні речі в кінці спринту. Це не так, оскільки твердий код, відділ може зводити ноги по 1/10 дня кожні 2 тижні і нічого не робити, що може бути чудовим за короткий термін, але не є життєздатним довго.
RandomUs1r

@ RandomUs1r Я теж працюю в реальному світі, я постійно приймаю ярлики, і я завжди ставлю бізнес на перше місце, тому не думаю, що мені тут не вистачає розуміння. Але в описі ОП не було "ми зазвичай завжди отримуємо це право, і це була лише стандартна незначна відрижка", або він би не ставив це питання. Як я пояснив у своїй відповіді, це виглядає як проблема процесу, і ви вирішите це, практикуючи робити процес правильно, перш ніж розслабитися з ним.
Керт Дж. Сампсон

-2

Ні . Якщо не вдалося переглянути код, завдання не виконано. Але ви не можете пропустити огляди коду на особисту думку. Код проходить; перейти до наступного завдання.

Це повинен бути простий дзвінок, і той факт, що це не говорить про те, що у вас недостатньо чітких списаних правил для огляду коду.

  1. "Функція досить довга". Запишіть: Функції повинні бути меншими за X рядків (я не припускаю, що правила щодо тривалості функції - це добре).

  2. Msgstr "Є деякі запахи коду". Запишіть: загальнодоступні функції повинні мати тести одиниць на функціональність та продуктивність, і використання процесора, і пам'яті повинні бути обмежені x та y.

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

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

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

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

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

Re: Неможливо записати правила !!

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

Запишіть правила, які ви можете, і поговоріть над пивом про те, що робить код «хорошим».


6
Ні, ви пропускаєте пункт про те, що "мати досконалий і загальноприйнятий стандарт без двозначностей" не є реалістичною умовою для перевірки коду. Завжди з’являться нові типи питань, які ви ще не брали до уваги, і тому вам потрібно мати можливість приймати рішення на незареєстрованій території. Звичайно, ви повинні задокументувати це рішення, щоб це більше не була незареєстрована територія, але ваша відповідь ґрунтується на припущенні, що ви зможете якось гарантувати відсутність незареєстрованої території, якщо лише складете ідеальні правила перед переглядом. Ти ставиш візок перед конем.
Flater

5
Абсолюти на кшталт "функції повинні бути менше x рядків" теж не є відповіддю .
Blrfl

2
Домовився з Blrfl. Функцій (загалом) не повинно бути більше 20 рядків. Але зробити це абсолютним правилом - це помилка. Конкретні обставини завжди перешкоджають загальним правилам: якщо у вас є вагомі причини зробити свою функцію більш ніж 20 рядками, то зробіть це.
Метт Мессерсміт

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

2
@Ewan Звичайно. Моя думка полягала лише в тому, що в ОП є орієнтир функції тривалості , а не правило. Де б не було встановлено поріг, він пропонує поради, щоб допомогти людям помітити важко підтримуваний код, але це ніколи не є абсолютним правилом. Якщо (як каже ОП) це насправді ідеально читабельно, і рецензенти погоджуються, що це добре читабельно, і немає проблем з його належним тестуванням, то функція за визначенням є правильним розміром. Огляд, можливо, отримує однолінійну замітку із записом "Так, це довше, ніж рекомендується, але ми згодні, що це нормально", і робота виконана. Реконструкція після цього пункту є позолоченою.
Грем
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.