Оффтоп Digital Skynet
333

Почему я изменил подход к качеству кода

Что первым приходит в голову, когда вы думаете о качестве кода? Это согласованность? Или использование стандартов и лучших практик программирования? А что насчет авто-тестов или код-ревью?

В закладки

Это лишь некоторые моменты, которые приходят на ум. Автоматизированные процессы и ручные проверки.

Да, они все полезны, но решают только половину проблем.

Мы не можем автоматизировать всё

Автоматизация много значит для поддержания качества кода. Статический анализ синтаксиса с использованием автоматического тестирования - это маст-хэв. Но я могу написать код, который пройдет все автоматизированные процессы без каких-либо гарантий его фактического качества.

Соответствует ли код паттернам? Использует ли он существующие модули или дублирует код? Все ли названо разумно? Находится ли код в правильном месте? К чему приведет изменение кода? Действительно ли этот код решает то, что должен? А он вообще работает?

Использование автоматизированных процессов не даст нам ответы на эти вопросы (пока). Если вы или ваш коллега не задаете себе подобных вопросов, то, вы не знаете, что такое качественный код. Вот почему надо делать код-ревью.

Качественное код-ревью это больше, чем просто просмотр кода

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

Я заметил тенденцию, что разработчики рассматривают код-ревью как нечто поверхностное и не важное. Написали пару комментариев на очевидные ошибки, создали видимость занятости и вовлеченности в работу и всего-то потратили на это 5 минут. «Вроде норм, можно пойти перекурить»

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

Вот минимум, который нужен для качественного ревью кода:

· Стянуть ветку на свою локальную машину

· Сбилдить проект

· Проверить, что код работает без ошибок на всех основных браузерах или устройствах

· Проверить, что выполненная работа соответствует требованиям задачи

Код-ревью – это возможность задать вопросы. Если вы не понимаете код коллеги, попросите разъяснений. Не забывайте, что рецензент несет равную ответственность с автором за качество кода.

Выполнение этих маленьких шагов повысит качество вашего кода и уменьшит усилия на его просмотр.

Проверьте свою собственную работу дважды

У меня есть раздражающая привычка. Когда я заканчиваю писать последние строки кода, я мысленно проверяю задачу как уже полностью завершенную. Если бы я слушал назойливый голос в моей голове, я бы немедленно делал пул-реквест. Но мой код, вероятно, содержит много или даже все из следующего:

· Неучтенные требования;

· Ненаписанные или неизмененные тесты;

· Избыточный, неиспользуемый или черновой код;

· Комментарии отсутствуют, либо устарели;

· Визуальные баги в некоторых браузерах / устройствах.

Если хоть один из пунктов характерен для вашего кода, его нельзя назвать законченным. Если такой код появился в мастере, поздравляю, вы ухудшили качество всего проекта.

Главное: качество кода начинается с автора кода. Не ленитесь проверять свою работу дважды.

Проверьте свою ветку

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

Прежде чем кто-то другой будет просматривать ваш код, сделайте это самостоятельно. Убедитесь, что очевидные ошибки исправлены, все требования по задаче учтены и работа выполнена полностью. Это повысит качество кода, и вам не придется краснеть перед коллегами в дальнейшем. Проверено на себе.

Обеспечение качества кода должно быть неотъемлемым требованием для каждой задачи

Возможно, вы думаете, что этот подход увеличивает время выполнения задачи. И вы правы, так и есть. Но это того стоит.

Эффективность важна, а лень и апатия мешают ей. Апатия приводит к раздутому, несогласованному коду. Лень удлиняет сроки выполнения проекта. Невозможно быть пассивным, при этом поддерживать высокое качество кода. Это требует времени и усилий.

Измените своё отношение к качеству кода внутри команды. Поймите, руководители проектов и владельцы программных продуктов обычно не обеспокоены качеством кода - у них есть свои собственные проблемы. Вся ответственность ложится на вас. Думаете ли вы о конечных потребителях? Или хотите поскорее выполнить работу, не прилагая особых усилий? Поддержание высокого качества кода не должно рассматриваться как нечто дополнительное. Это должно быть неотъемлемым требованием для каждой задачи. Пусть это документально нигде не закреплено. Сделайте это своим личным требованием к написанию кода.

На мой взгляд, существует разрыв между тем, что разработчики думают о качестве кода, и их фактическими действиями при написании кода. Советы, которые я перечислил, не новаторские. Но они работают. Попробуйте внедрить их, и вы увидите, как изменится результат.

Если у вас есть свои интересные методы по повышению качества кода, делитесь ими в комментариях.

Вывод: Все команды, проекты, рабочие процессы разные. Возможно, не все из перечисленных рекомендаций, подойдут именно вам. Главное – это осознание вашей ответственности и желание писать качественный код. Проверяйте свой код дважды до того, как сделаете пул-реквест. Консультируйтесь со своими коллегами. Одна голова хорошо, а две еще лучше.

Перевод статьи Why I changed the way I think about Code Quality от Digital Skynet :)

Материал опубликован пользователем. Нажмите кнопку «Написать», чтобы поделиться мнением или рассказать о своём проекте.

Написать
{ "author_name": "Digital Skynet", "author_type": "self", "tags": [], "comments": 9, "likes": 1, "favorites": 1, "is_advertisement": false, "subsite_label": "flood", "id": 43515, "is_wide": false }
00
дни
00
часы
00
мин
00
сек
(function(){ var banner = document.querySelector('.teaserSberbank'); var isAdsDisabled = document.querySelector('noad'); if (!isAdsDisabled){ var countdownTimer = null; var timerItem = document.querySelectorAll('[data-sber-timer]'); var seconds = parseInt('15388' + '59599') - now(); function now(){ return Math.round(new Date().getTime()/1000.0); } function timer() { var days = Math.floor(seconds / 24 / 60 / 60); var hoursLeft = Math.floor((seconds) - (days * 86400)); var hours = Math.floor(hoursLeft / 3600); var minutesLeft = Math.floor((hoursLeft) - (hours * 3600)); var minutes = Math.floor(minutesLeft / 60); var remainingSeconds = seconds % 60; if (days < 10) days = '0' + days; if (hours < 10) hours = '0' + hours; if (minutes < 10) minutes = '0' + minutes; if (remainingSeconds < 10) remainingSeconds = '0' + remainingSeconds; if (seconds <= 0) { clearInterval(countdownTimer); } else { timerItem[0].textContent = days; timerItem[1].textContent = hours; timerItem[2].textContent = minutes; timerItem[3].textContent = remainingSeconds; seconds -= 1; } } timer(); countdownTimer = setInterval(timer, 1000); } else { banner.style.display = 'none'; } })();
{ "id": 43515, "author_id": 187179, "diff_limit": 1000, "urls": {"diff":"\/comments\/43515\/get","add":"\/comments\/43515\/add","edit":"\/comments\/edit","remove":"\/admin\/comments\/remove","pin":"\/admin\/comments\/pin","get4edit":"\/comments\/get4edit","complain":"\/comments\/complain","load_more":"\/comments\/loading\/43515"}, "attach_limit": 2, "max_comment_text_length": 5000, "subsite_id": 199791 }

9 комментариев 9 комм.

Популярные

По порядку

Написать комментарий...
4

Почудилось, что сижу на хабре

Ответить
3

На хабре минусов бы за такое напихали во все щели, потому что заголовок про "изменил подход к качеству кода" дает надежды на что-то большее, чем "ну, я подумал и решил, что код неплохо бы проверять, прежде чем пушить".

Ответить
1

Digital Skynet

Дайте ей время. Нейросеть просто еще не обучилась.

Ответить
0

Да, надо заминусовать, это неуважение к читателям :(

Ответить
0

Зачем? Либеральные взгляды - главное преимущество VC. Особенно если с хабром сравнивать.

Ответить
0

Затем, что только так мы избавимся от такой чуши.

Ответить
0

Мда, прикольно наверное пилить под собой сук 😁

Ответить
0

Каких?

Ответить
0

Короче, не хочу ждать ответа, просто хочу, чтобы ты знал, что ты написал бред.

Ответить
0

Прямой эфир

[ { "id": 1, "label": "100%×150_Branding_desktop", "provider": "adfox", "adaptive": [ "desktop" ], "adfox_method": "createAdaptive", "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "bugf", "p2": "ezfl" } } }, { "id": 2, "label": "1200х400", "provider": "adfox", "adaptive": [ "phone" ], "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "bugf", "p2": "ezfn" } } }, { "id": 3, "label": "240х200 _ТГБ_desktop", "provider": "adfox", "adaptive": [ "desktop" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "bugf", "p2": "fizc" } } }, { "id": 4, "label": "240х200_mobile", "provider": "adfox", "adaptive": [ "phone" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "bugf", "p2": "flbq" } } }, { "id": 5, "label": "300x500_desktop", "provider": "adfox", "adaptive": [ "desktop" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "bugf", "p2": "ezfk" } } }, { "id": 6, "label": "1180х250_Interpool_баннер над комментариями_Desktop", "provider": "adfox", "adaptive": [ "desktop" ], "adfox": { "ownerId": 228129, "params": { "pp": "h", "ps": "bugf", "p2": "ffyh" } } }, { "id": 7, "label": "Article Footer 100%_desktop_mobile", "provider": "adfox", "adaptive": [ "desktop", "tablet", "phone" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "bugf", "p2": "fjxb" } } }, { "id": 8, "label": "Fullscreen Desktop", "provider": "adfox", "adaptive": [ "desktop", "tablet" ], "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "bugf", "p2": "fjoh" } } }, { "id": 9, "label": "Fullscreen Mobile", "provider": "adfox", "adaptive": [ "phone" ], "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "bugf", "p2": "fjog" } } }, { "id": 10, "disable": true, "label": "Native Partner Desktop", "provider": "adfox", "adaptive": [ "desktop", "tablet" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "fmyb" } } }, { "id": 11, "disable": true, "label": "Native Partner Mobile", "provider": "adfox", "adaptive": [ "phone" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "fmyc" } } }, { "id": 12, "label": "Кнопка в шапке", "provider": "adfox", "adaptive": [ "desktop" ], "adfox": { "ownerId": 228129, "params": { "p1": "bscsh", "p2": "fdhx" } } }, { "id": 13, "label": "DM InPage Video PartnerCode", "provider": "adfox", "adaptive": [ "desktop", "tablet", "phone" ], "adfox_method": "createAdaptive", "adfox": { "ownerId": 228129, "params": { "pp": "h", "ps": "bugf", "p2": "flvn" } } }, { "id": 14, "label": "Yandex context video banner", "provider": "yandex", "yandex": { "block_id": "VI-223676-0", "render_to": "inpage_VI-223676-0-1104503429", "adfox_url": "//ads.adfox.ru/228129/getCode?pp=h&ps=bugf&p2=fpjw&puid1=&puid2=&puid3=&puid4=&puid8=&puid9=&puid10=&puid21=&puid22=&puid31=&puid32=&puid33=&fmt=1&dl={REFERER}&pr=" } }, { "id": 15, "label": "Плашка на главной", "provider": "adfox", "adaptive": [ "desktop", "tablet", "phone" ], "adfox": { "ownerId": 228129, "params": { "p1": "byudx", "p2": "ftjf" } } }, { "id": 16, "label": "Кнопка в шапке мобайл", "provider": "adfox", "adaptive": [ "tablet", "phone" ], "adfox": { "ownerId": 228129, "params": { "p1": "byzqf", "p2": "ftwx" } } }, { "id": 17, "label": "Stratum Desktop", "provider": "adfox", "adaptive": [ "desktop" ], "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "bugf", "p2": "fzvb" } } }, { "id": 18, "label": "Stratum Mobile", "provider": "adfox", "adaptive": [ "tablet", "phone" ], "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "bugf", "p2": "fzvc" } } }, { "id": 19, "label": "Тизер на главной", "provider": "adfox", "adaptive": [ "desktop", "tablet", "phone" ], "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "p1": "cbltd", "p2": "gazs" } } } ]
Компания отказалась от email
в пользу общения при помощи мемов
Подписаться на push-уведомления