Яка мета огляду коду


76

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

Отже, яка мета огляду коду?


16
Пов'язані (на стек переповнення): Мета коду відгуків
yannis

16
- Як би ви дізналися, чи написали читабельний і легкодоступний код? - Ваш одноліток повідомляє вам після перегляду коду. "Обґрунтування: Ви не можете визначити це самостійно, тому що ви знаєте більше як автора, ніж сам код каже. Комп’ютер не може сказати вам з тих самих причин, що він не може сказати, чи є картина мистецтвом чи ні. Отже, вам потрібна інша людина - здатна підтримувати програмне забезпечення - щоб переглянути те, що ви написали, та висловити свою думку. Офіційна назва зазначеного процесу - "Експертна оцінка " . "
гнат

3
"Яка мета перегляду коду?" щоб перешкодити розробникам писати код terribad і направляти їх у правильному напрямку.
zzzzBov

7
Здається, огляд коду може мати непряму відповідь на це питання .. просто перегляньте питання та відповіді, мета огляду коду стає досить очевидною :)
Mathieu Guindon

3
Цікаво, скільки разів програмісти виявляли помилки у власному коді просто шляхом простого пояснення свого коду під час огляду?
неактивний

Відповіді:


75

Є кілька причин, чому ви хочете провести перевірку коду:

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

Існує кілька ділових справ для проведення оглядів:

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

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


7
+1, я думаю, що ви добре помітили основні моменти з правильними пріоритетами. Дотримуватися дизайну при роботі з колегами, які постійно знаходять дуже креативні рішення "WTF", можна досягти лише за допомогою регулярних перевірок коду.
Doc Brown

Ми робимо огляди коду в нашому коді JavaScript, головним чином, щоб забезпечити, що розробники дотримуються окреслених стандартів, використовуючи заданий зразок при проектуванні модулів, використовуючи надані компоненти та не починаючи робити кодування ніндзя (навмисно чи ні) навколо проблем, у яких ми вже маємо рішення для. Вони також чудово помічають, що хтось випадково перезаписує thisконтекст, не використовуючи .hasOwnPropertyмісця, у яких він повинен бути, тощо, тощо. Так, головним чином, для стандартів. У керованій мові на зразок C # у вас поза курсом є кілька менших причин, ніж у динамічних мов.
Нема

1
Поки що ваша відповідь натякає лише на поліпшення правильності коду. Він не вдається вирішити читабельність / ремонтопридатність коду, що рідко може бути точно визначено кількісно розвивається розробником.
ArTs

51

Огляди коду - це інструмент для передачі знань .

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

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

    Ретельний перегляд коду вимагатиме частих перевірок різної документації. Це прекрасний спосіб вивчити мову чи API.

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

Огляди коду не про:

  • … Виявлення помилок. Ось для чого тести. Все ще часто трапляється, що перегляд коду знайде певну проблему.

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


2
Ваша остання думка щодо проблем стилю ниткопсингу, з якою я не повністю згоден - у нас просто був досвід перегляду коду молодшого розробника, і найяскравіша скарга була насправді на стиль, але не на види проблем зі стилем, які легко програмуються примусово .... waaaaaay занадто багато, якщо заяви для крайових випадків тощо; проблеми, що так, ви могли знайти комп'ютер у деяких випадках, але в більшості випадків це проблеми, які варто загалом знайти за сценарієм. Ми беремо 30 секунд читання, щоб ми почали його бачити, ще 30, щоб пояснити розробнику та, сподіваємось, поправити проблему. Все ще в шоці від цього: /
пацифіст

7
@pacifist Це не той стиль, який описує відповідач. Стиль - це розташування дужок, відступ тощо. Якщо ваш молодший розробник використовує занадто багато, якщо у заяв у вас зовсім інша проблема, ніж у стилі; загальний атрибут кодування STYLE полягає в тому, що він не впливає на продуктивність. І я думаю, що значна кількість висловлювань "if-if" вплине на результативність.
Пімгд

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

2
На додаток до @DocBrown є випадки, які не можна легко перевірити - перегони даних, деякі типи тупикових ситуацій, лайфлэйнс, не визначені форми поведінки / значення (переважно в C / C ++, але порядок елементів у хеш-таблицях також у невизначеному) або ресурс цибулі-порей (відкриття файлу в циклі може бути поганою ідеєю навіть для GC). Деякі з цих речей можна виявити досить розумним компіляторним аналізом .
Maciej Piechotka

2
@pacifist ваш конкретний приклад отримав би повну репутацію в огляді коду. Це також було б червоним прапором для будь-якого аналізатора статичного коду (Цикломатична складність 17!). Огляд коду швидко визначить цю функцію як проблему в семантичному стилі (або навіть алгоритмі!). Однак. Цей вид випуску - це не просто питання "стилю". Якщо ви ставитесь до цього як до такого, то незабаром у вашому сховищі з'явиться справді неприємний код; це просто "стиль", зрештою.
Пімгд

12

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


2
це, здається, не пропонує нічого істотного за попередні 4 відповіді
gnat

2
@gnat: Інші відповіді стосуються передачі знань та виявлення помилок. Вони важливі, але є ще огляд коду.

1
Наскільки я можу сказати, у цій відповіді є достатньо уваги : "Якщо ви шукаєте всебічну дискусію щодо переваг та стратегій впровадження експертних оцінок, рекомендую перевірити експертні оцінки в програмному забезпеченні: Практичний посібник Карла Вігерса ". Ця відповідь також охоплює його: "коректив проти надто складного коду"
gnat

2
@gnat Це підкреслює інший аспект питань, порушених в інших відповідях. Ви коли-небудь були спантеличені власним кодом, який ви написали півроку тому? Перегляд коду дозволяє прискорити цей процес. Якщо ваш колега спантеличений вашим кодом, ви все одно можете уточнити його, поки проблема все ще свіжа у вашій пам’яті.
200_успіх

1
@ 200_success можливо. Але цей момент, якщо він дійсно є, виглядає насправді погано представленим. Навіть ваш коментар вдається передати це краще, ніж ця "відповідь". Не кажучи вже про те, що він просто повторює те, що було зазначено в попередньому коментарі, що стосується канонічної відповіді, що пояснює це у спорідненому питанні
gnat

7

Я хотів би додати дві області, не охоплені іншими чудовими відповідями:

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

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

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