Чи застарілі коментарі міський міф?


38

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

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


30
Домовились. Застарілий код, зроблений у коментарі, тепер я багато чого бачу - і хотів би бачити менше.
pyvi

8
Я бачу більше бракуючих коментарів взагалі. У поєднанні з поганими умовами іменування - це куля задоволення, намагаючись прочитати деякі речі, з якими я працюю.
P.Brian.Mackey

2
Я бачив багато застарілих коментарів, деякі були просто оманливими ЗЛИВОМ. Однозначно не міф, але в основному діє для проектів, які підтримуються багатьма людьми та / або тривалий час, посилюються складністю. Однак я навчився довіряти коду, а не коментарям (я майже ніколи не читав їх, якщо вони перевищують більше одного двох рядків).
MaR

Я в основному працював із дуже старим спадковим кодом протягом усієї своєї кар'єри. Десь з десяток разів, коли у дивного коду Fortan77 за 30 років у мене виникли серйозні проблеми, пов'язані із застарілими коментарями, але це був майже нульовий відсоток коду, де коментарі були адекватними. Тож я згоден, масштаб проблеми, мабуть, був перебільшений.
SK-логіка

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

Відповіді:


33

Постійно

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

Це, мабуть, найголовніше залежить від віку коду. Наступним фактором буде плинність кадрів.

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

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

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

Конкретні приклади:

  • Коментарі, що описують поліпшення продуктивності для певної методології, наприклад, уникання копії в пам'яті. Велика справа, коли верхня машина в Pentium 2 з МБ оперативної пам’яті, але навряд чи зараз це проблема.

  • TODO

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

  • Блоки коментування зверху коментованого коду (Хто знає, скільки років там було).

У всьому цьому ви бачите тенденцію просто не підтримувати коментарі та код на тому ж рівні, що і програмне забезпечення. ІДЕ та основні звички розробника не допомагають у цьому, моє око було навчене пройти повз них. Я думаю, що застарілі коментарі відносно дешеві, яких можна уникати в екологічному просторі та активних проектах. Якщо ви можете підтримувати співвідношення код / ​​коментар на високому рівні, це не так важливо, щоб підтримувати їх у курсі. Трохи важче виправдати полювання на ці речі, коли ви плануєте х годин для виправлення помилок у виробничій системі.


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

5
@Steven - Я особисто, ні. Я дуже вірую у поступове покращення. Я бачив, як уривки абсолютно нерозбірливого коду перетворилися на щось цілком пристойне з досить поступовими зусиллями. Але ігнорування, безумовно, є нормою в моєму досвіді. Це дуже зрозуміло, коли ви стикаєтеся з декількома переплетеними класами 10000 ліній з тижнями, які мають проблеми з каталогізацією, що застарілі коментарі, як правило, падають у нижню частину списку пріоритетів.
Стів Джексон

1
@Steve: У вашій ситуації я просто створив би сценарій, який видаляє всі коментарі, і почав коментувати з нуля, де потрібно. :)
Стівен Євріс

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

4
Я бачив кілька жахливих прикладів Blocks of copy-pasted code including comments. Comment may have made sense in its original location, but hardly makes sense here. Зауваження на рівні класу, що говорять, наприклад, про інший клас.
Пітер Тейлор

18

"коментарі, як правило, застаріли."

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

Річ у тому, що я думаю, що я бачив, можливо, два чи три застарілі коментарі за всю мою кар’єру.

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

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


Недавнє дослідження Roehm et al. 2012 рік зазначає:

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

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

Roehm, T., Tiarks, R., Koschke, R., & Maalej, W. (2012, червень). Як професійні розробники розуміють програмне забезпечення ?. У працях Міжнародної конференції з інженерії програмного забезпечення 2012 року (с. 255-265). IEEE Press.


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

3
@Paul Nathan, коментарі ніколи не повинні описувати, що робить код - код описує це краще. Коментарі є, щоб пояснити, чому код робить те, що робить.
SK-логіка

2
@ SK-логіка: Хоча я розумію аргумент, я вважаю, що він занадто широкий. Коментарі коментаря до функції (або абзацу / блоку коду) можуть набагато більше (і швидше) прояснити, що функція робить, ніж її назва. Це особливо потрібно для державних функцій. Настільки ж простим, як код можна прочитати, читання дволанкового пояснення 10-лайнерного коду все ще швидше. Уявіть, що ви працюєте з улюбленим API, який не має жодної документації "що" . Ви були б набагато менше впевнені в його функціональності.
Стівен Євріс

так, я не включив документацію (наприклад, Javadoc) - вона занадто структурована, щоб називатися просто " коментарями ".
SK-логіка

17

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

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


"Застарілі коментарі - це запах роботи". Дуже добре кажучи! Точно так же самодокументірующіеся коди тільки без будь - яких коментарів не вирішення, але ледачий «хак».
Стівен Євріс

10

Коментарі - як тести, вони дуже хороші, коли вони актуальні, але можуть ще важче зрозуміти код, якщо таких немає.

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

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


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

Я працював у трьох різних країнах Європи, переважно консультантом великої компанії та невеликої. Останнім часом у будинку розвитку SaaS.
Кім.Нет


10

Застарілі коментарі часто з'являються в JavaDoc:

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

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


3
(Не критика - просто представлення рішення) Попередження IDE можуть пройти довгий шлях до запобігання цьому. Якщо потрібні більш різкі заходи, не вдасться побудувати попередження / помилку збірки javadoc.
Майкл К

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

4
@Michael, попередження IDE корисні у легких випадках. Наша застаріла база даних створює понад 20 000 попереджень Checkstyle, це вже перевищує межу, на яку ви перестаєте звертати увагу: - (((IDE, коли погано використовуються, можуть значно сприяти нещастям Javadoc. Більшість лайно Javadoc у нашій кодовій базі явно автогенерується.
Péter Török

4

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

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

featureList = GetFeatures();

// Sorting features and deleting empty ones from the list...
ProcessFeatures(featureList);

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


3

Запитайте себе в цьому. Ви коли-небудь змінювали рядок коду і не змінювали пов'язані коментарі чи додавали нові?

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


2

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

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


2

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

//TODO: In 15 years AND NO SOONER... actually implement this method.

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

1
У C # я використовую NotImplementedException для цих цілей.
Стівен Євріс

2
@pwny, я використовую лише TODO на те, що я планую написати перед тим, як зареєструватися, щоб переконатися, що я висвітлюю це. На мою думку, будь-який довший термін, ніж це, належить до трекера помилок.
Карл Білефельдт

@Karl Bielefeldt Це також має багато сенсу.
pwny

2

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

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


1

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

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


0

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

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