Рефакторинг


10 0

От качества кода зависит многое – качество конечного продукта (программы, сайта, мобильного приложения…), стоимость дальнейшей поддержки и даже интерес работы над проектом. 

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

Сейчас читаю статью: Главный вопрос программирования, рефакторинга и всего такого и (http://www.viva64.com/ru/b/0391/) по мере чтения решил поделиться своими мыслями. Автор на примерах различных реальных ситуаций показывает преимущества программы статического анализатора PVS-Studio и заодно показывает интересные вещи, которые будут полезны любому программисту. 

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

Иногда бывает реально необходимо скопировать и вставить код несколько раз, потому что нет какой-то определенной закономерности, и в таких случаях легко допустить ошибку и не исправить что-то. Если статический анализатор PVS-Studio может показать ошибку даже тогда, когда нет такого откровенного шаблона, который показан в статье, то ему цены нет. 

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

У нас на работе сейчас поставлен процесс Code Review, когда один программист пишет код, а потом другой не только визуально проверяет результат, но и вручную делает легкий тест. И подобные вещи проскальзывали сквозь многоуровневые тесты. 

Автоматизация – это то, что может значительно сэкономить расходы на поддержания кода, поэтому я предпочитаю писать код, который покрывается тестами и где можно автоматизировать проверку. В больших приложениях внесение небольшого изменения может привести к эффекту домино, особенно с не очень хорошо написанным кодом. Изменяешь в одном месте и вроде бы все работает, но рушиться совершенно в неожиданном месте. 

Ручные тесты не способны проверить все возможные значения. Приложение может работать в 255 случаях и неожиданно повести себя не очень хорошо в 256-м. Автоматизация теоретически может покрывать тесты на много лучше, но только если программист, который написал тест, предусмотрел нужное покрытие. 

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

Когда я работал над SonyRewards, то у нас тестеры прогоняли сайт через различные программы автоматизации проверки на безопасность. И пусть они регулярно выдавали ложные срабатывания, если хотя бы одна из программ хотя бы случайно наткнется на реальную проблему и поможет ее исправить до выхода в рабочее состояние, то все эти затраты окупятся. 

Я никогда до этого не пользовался программами, которые анализируют код. Не думаю, что я имею права без разрешения менеджеров прогонять код на работе с помощью PVS-Studio, но было бы интересно увидеть результат. Я бы настроил проверку каждого изменения, которое попадает в TFS (да, к сожалению, сейчас мы на работе используем TFS) и пусть я никогда не увижу никаких предупреждений от этой программы, чем клиенты потом увидят баг. 

Статью написал Андрей Карпов - технический директор компании, которая разрабатывает PVS-Studio. И мне понравилось то, что в ней описаны не только возможные проблемы, но и варианты правильных выходов из неловкой ситуации. 

Основным языком примеров выступил C/C++, который пока еще кажется самый популярный и на котором разрабатывается большинство приложений. Хотя в начале статьи сказано, что примеры будут полезны и программистам на других языках, большинство примеров все же уж слишком специализировано для C/C++, потому что много рассказано багов с указателями, выделением памяти и т.д. 

Я знаю C++ и начинал программировать в 90-е еще на C под MS DOS, поэтому с удовольствием прочитал всю статью. Если ты не интересуешься низкоуровневым программированием, я все равно рекомендовал бы прочитать все советы. Хотя бы просто для общего развития. 


Понравилось? Кликни Лайк, чтобы я знал, какой контент более интересен читателям. Заметку пока еще никто не лайкал и ты можешь быть первым


Комментарии

Алексей

08 Сентября 2016

Миша, поправь пожалуйста ссылочку.


Олег

08 Сентября 2016

Я, конечно, не программист, но было интересно бы прочитать ту статью по ссылке, но у меня что-то не открывает.


Михаил Фленов

08 Сентября 2016

Ссылка исправлена.


detvremya

09 Сентября 2016

Знаю эту контору,это что заказная статья что-ли,они на Хабре крутят свои заметки регулярно.


Евгений

09 Сентября 2016

Почему вы пишете, что К СОЖАЛЕНИЮ используете TFS? Просто хотим на него переходить с SVN.


Михаил Фленов

09 Сентября 2016

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


Михаил Фленов

09 Сентября 2016

TFS совершенно неудобный, я предпочитаю git http://www.flenov.info/favorite.php?artid=47


Kastor

10 Сентября 2016

По поводу написания чистого кода крутая книга Роберта Мартина "Чистый код".

А про TDD (разработка через тестирования) классный доклад недавно смотрел от Андрея Солнцева
https://www.youtube.com/watch?v=8u6_hctdhqI


Николай

11 Сентября 2016

Миша, сам пишешь тесты или младшие покрывают?


Михаил Фленов

11 Сентября 2016

Сам предпочитаю писать


Добавить Комментарий

Еще что-нибудь

Хотите найти еще что-то интересное почитать? Можно попробовать отфильтровать заметки на блоге по категориям.

О блоге

Программист, автор нескольких книг серии глазами хакера и просто блогер. Интересуюсь безопасностью, хотя хакером себя не считаю

Обратная связь

Без проблем вступаю в неразборчивые разговоры по e-mail. Стараюсь отвечать на письма всех читателей вне зависимости от страны проживания, вероисповедания, на русском или английском языке.

Пишите мне