Як розуміти чужий код
Перш ніж перейти до купи тексту , подивіться на код і зрозумійте, що він робить :
Таке пишуть розробники . Хтось не зрозумів взагалі, хтось тільки здогадується, що робить цей код . Але є спосіб зрозуміти його. Про нього буде нижчою.Коли ми змушені читати чужий код?
1 . Код дістається у спадок.Коли ви дописуєте за кимось, і вам потрібно оцінити, скільки часу займе доробка .2 . Ваш код , дописанийкимось, в який вносили зміни інші розробники, і вам необхідно зрозуміти, що вони там дописали .
3 . Code review .Відрізняється від перших двох тим, що його потрібно проводити до того, як код потрапляє в репозитарій/продакшн .
Що потрібно для розуміння чужого коду ?
- Знання предметної області , щоб читати код , розуміти , як це було реалізовано за вимогами, і продумати стратегію як його змінювати в майбутньому.- Особливості мови . Наприклад, в JavaScript є свої приведення типів , і деякі перевірки типів/умов будуть не завжди істинними або помилковими , як ви цього хочете. Потрібно розуміти , до чого призводять вирази, які ви прописуєте .
- Можливості підключених бібліотек. Якщо ви розробляєте , грунтуючись на якомусь фреймворку , потрібно знати його можливості. Дивлячись на код , ви повинні чітко розуміти , де яка функція використовується .
Проблеми
Перша проблема , з якою ви стикаєтеся , дивлячись на чужій код , - визначити, де потрібно вносити зміни . Для цього використовується пошук за різними критеріями . Потім , якщо місце в коді знайшлося, він може бути технічно незрозумілий, написаний таким чином, що вам не вдається його прочитати без коментарів. Третя проблема - незрозуміла логіка. Ви можете прочитати код , але не розумієте, навіщо було зроблено саме так .Як знайти потрібне місце в коді ?
- Ключові слова(фрагменти тексту). Якщо у формі кілька контролов зі своїми мітками , - в першу чергу ви будете шукати по ним. При цьому потрібний код можна і не знайти. Якщо проект було локалізовано, можливо, ви знайдете фрагмент тексту, але до якого контролю він - не зрозумієте .- Коментарі .Ви намагаєтеся шукати ключові слова - наприклад , форму логіна , в яку хочете внести зміни , - і шукаєте по цьому словосполученню , якщо розробник залишив такий коментар . Але код не завжди супроводжується коментарями.
- Назви файлів .Хороша практика - називати файли по їх суті, а не так , як нам зручно. Якщо файл називається якось інакше , то доведеться шукати по атрибутам елементів .
- Атрибути елементів .Коли запит йде на сервер , у контролов на формі є свої атрибути - ім'я, ідентифікатор, за якими можна шукати в коді елемент .
Знайшли потрібне місце , але як зрозуміти логіку ?
Є у нас ось такий код: Маємо ініціалізацію масиву, який називається « їжа» , потім створюємо об'єкт « кішка » , а потім чомусь прирівнюємо кішку до їжі і заносимо її в масив їжі. Ця логіка зрозуміла тільки якщо наш сайт продає шаурму . Навіть якщо ваше завдання - створити ще одного кота , ви його додасте , але він знову буде занесений в масив їжі. І чому так - залишиться загадкою. Хороша практика - перечитати вимоги , бути в курсі предметної області і зрозуміти, чому було реалізовано саме так. Приклад складний з початку статті : Ніяких коментарів, змінні називаються незрозуміло як , чомусь 4 вкладених циклу, код складний , і ми не можемо сказати, що конкретно він робить. Це шматок коду з алгоритму md5 . І я сам не знаю, що він робить. Єдиний спосіб його зрозуміти - знати сам алгоритм md5 , вміти в розумі розраховувати md5 і пройти код покроково , зіставляючи з тим, що виконується в самому алгоритмі . Ніхто не скасовував старий добрий debugger і покрокове виконання , але знання предметної області все одно потрібно .Причини виникнення складного коду
- Розробники не дотримуються Code Conventions . По-нашому - відсутність правил і домовленостей.- JsDocs . Це формат коментування джаваскріптових методів . Розробник думає « назову функцію по -зрозумілому - getDocument , мене зрозуміють » і реалізовує складну логіку всередині методу, про яку ми не знаємо. Ми сподіваємося отримати документ , використовуємо цей метод, а він робить ще купу всього , що варто було б описати в коментарях.
- Ключові моменти бізнес- логіки. Як у попередньому прикладі з getDocument , складні операції з масивами , цикли , умови - все повинно бути прокоментовано .
- Code Review , а саме його відсутність . Джуніор теж можуть Рев'ю сеньйорів.
Як ми називаємо поганий код?
- « Спагеті -код ».Чи не найпоширеніший варіант . Три методи , кожен з яких щось робить. У тілі функції йдуть виклики інших методів, і навіть очима неможливо простежити ланцюжок, що звідки викликається . Код переплутано , як спагеті в мисці. - « Милиці ». Такого в коді дуже багато. Розробник написав цикл , в якому він щось робить з елементами масиву, за яким йде цей цикл . І попереджає, що виклик методу doSomething при певному значенні вивалює помилку. І він просто пише, що якщо значення масиву - 4 , треба пропустити його і перейти до наступного. Він передбачив цю ситуацію і зробив « підпірку » , щоб не валилася помилка . Але цим він створив інші ситуації , які створять інші виняткові ситуації, коли щось не здасться або здасться зайве. Розробник ж продовжить дописувати інші милиці , перекриваючи створені помилки. - « Велосипед » Це - бульбашкова сортування масивів. Коли розробник пише такий код , він не замислюється, що на JavaScript є власна сортування масивів, яка викликається елементарно .sort ( ) . Він заново придумав код , який вже десь є . Таке часто буває в роботі в команді, коли один розробник вже написав метод, а ви не знаєте про це і пишете ще один такий метод . І код розростається однаковими методами.Як далі жити ?
Способи проведення Code Review виробляються у кожного індивідуально з досвідом. Потрібно читати і аналізувати чужий код для вироблення власних способів Code Review , з часом по коду починаєш дізнаватися автора. Code Conventions і коментарі економлять нерви і час . GodLevel читання чужого коду - github.com/torvalds/linux Читати Джуніор перед сном :- Стандарт оформлення коду
- Коментарі
- Рефакторинг
Опубліковано: 23/02/15 @ 06:51
Розділ Різне
Рекомендуємо:
Над чим не варто ламати голову на співбесідах
Аналітика IT-ринку фрілансерів Східної Європи : Україна лідирує
Бесіда з Катериною Володимирській ( Воробйової ), бізнес- аналітиком в DB Best Technologies
14 - 15 березня, Київ - Дводенний воркшоп " Автоматизація тестування REST -сервісів "
28 березня, Київ - Майстер-клас " Розробка мобільних додатків з PhoneGap "