Блог о программировании

Цикломатическая сложность

Категория: DevOps
 25 июня 2017 г. 21:44

Цикломатическая сложность (Cyclomatic Complexity Number, ccn) программного кода является одной из наиболее старых метрик. Впервые эта метрика была упомянута в 1976 году Томасом МакКэбом. Эта метрика подсчитывает доступные пути выполнения кода во фрагменте программного обеспечения, чтобы определить его сложность. Каждый путь выполнения включает одну условную конструкцию из приведенного ниже списка, так что это их довольно легко обнаружить в существующем исходном коде:

  • ?
  • case
  • elseif
  • for
  • foreach
  • if
  • while

В данном случае нет конструкций else и default, потому что они в любом случае предполагают использование конструкций if и case, которые присутствуют в списке.

Читать далее  

Статический анализ и метрики PHP-кода

Категория: DevOps
 17 июня 2017 г. 20:43

Статический анализ кода — процедура, выполняемая над исходниками программы с целью выявления метрик программного обеспечения. Соответственно, статический анализатор — это утилита, выполняющая данную процедуру. Метрики программного обеспечения — это просто сумма каких-то последовательностей или фрагментов кода, найденные в анализируемом источнике. Например, цикломатическая сложность — это всего лишь сумма всех логических элементов(if, for, while, case и т. д.) в анализируемом фрагменте. Самой же простой и понятной метрикой программного обеспечения является количество строк кода программы.

Читать далее  

Теги:  PHP  ci  cd 

Непрерывная интеграция и непрерывная доставка PHP-кода

Категория: DevOps
 22 мая 2017 г. 23:01

Ритм разработки программного обеспечения из года в год все ускоряется. Если раньше было возможным применять водопадную модель разработки ПО, когда программа от стадии задумки до стадии релиза проживала в разработке и тестировании многие годы, прошли. Сейчас это совершенно неприемлемо. Даже более совершенная итеративная модель разработки, которая предполагает достаточно частые релизы 1-4 раза в месяц, и то уже не отвечает потребностям рынка. Современный ритм разработки программ требует, чтобы фичи выкатывались в релиз как можно быстрее после разработки. А ведь фичу необходимо еще и полноценно протестировать. Именно как ответ на данные вызовы появились такие практики как непрерывная интеграция и непрерывная доствка программного кода в арсенале современных команд разработки.

Непрерывная интеграция (англ. Continuous Integration, CI) — это практика разработки программного обеспечения, которая заключается в выполнении частых автоматизированных сборок проекта для скорейшего выявления и решения интеграционных проблем. Обычно сборка проекта осуществляется после внесения изменения разработчиком в код, либо через определенные промежутки времени, например, каждые 20 минут. В любом случае, за определенной сборкой закрепляется определенный коммит в репозитории кода.

Касательно PHP-кода термин "сборка" подразумевает прохождение текущим кодом какого-то набора важных процедур, позволяющих составить представление о качестве кода. Здесь главную роль играет прохождение всякого рода автоматических тестов. Тесты могут выявить уже известные проблемы в системе. В случае, если после очередного коммита в коде всплывает какая-то ошибка, то разработчики тутже об этом знают - вот, где вся прелесть непрерывной интеграции. Соответственно, чем больше тестов написано на известные проблемы, тем спокойнее писать новый код зная, что если что-то пошло не так - ты обязательно об этом узнаешь и все исправишь.

Читать далее  

Теги:  PHP  ci  cd 

PHP 7 в подлиннике

Категория: Книги
 2 апреля 2017 г. 18:48

Авторы: Дмитрий Котеров, Игорь Симдянов

Хоть книга и вышла в 2016м году, все равно отсутствует или минимальна устаревшая информация о языке, его конструкциях и применяемых подходах, то есть информация актуальна, что очень важно начинающим разработчикам. Изложение идет доступным языком с большим количеством наглядных примеров кода. Что порадовало - дается понимание, как развиваются идеи в разработки веб-приложений, описывается процесс разработки на основе независимых компонентов.

В целом - еще одна всеобъемлющая книга по PHP, соответственно, книга для широкого круга читателей. В книге описывается весь процесс разработки на php, а также сопутствующие темы, правда в краткой форме. Присутствуют главы с описанием работы с системой контроля версий git, виртуальных машин, веб-сервера nginx и php-fpm. Также в общих чертах дается описание работы cgi-интерфейса. Уделено внимание работе с composer, использованию компонентов, расширениям php, документированию кода и стандартам PSR. Описанию разработки с использованием ООП уделено достаточно внимание, трудностей с пониманием данного материала не должно возникнуть у читателя.

Вдвойне полезна разработчикам, осваивающим язык, работая в системе Linux, поскольку присутствует множество примеров с командной строкой Linux.

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

Теги:  php  книга 

Тенденции развития PHP. Будущее языка

Категория: PHP
 12 марта 2017 г. 19:32

Программиста, изучающего тот или иной язык разработки всегда интересует множество вопросов касательно объекта изучения. Каково будущее этого языка? Каковы сферы его применения, сильные и слабые стороны? Перспективна ли изучаемая технология и стоит ли тратить на нее время? В данном материале дам свой взгляд на язык программирования PHP.

Вот уже на протяжении 20 лет PHP входит в десятку популярнейших языков программирования. Повсеместно его используют в вебе для разработки динамических сайтов. На PHP создано большое количество быстро разворачиваемых платформ управления контентом(CMS) практически под любые нужды. Самые известные из них - WordPress, Joomla и Drupal. На их основе делают от простых блогов до сложных информационных систем и интернет-магазинов. Кроме того, на PHP изначально были написаны такие высоконагруженные системы как facebook и vkontakte. Вместе с тем PHP имеет самую неоднозначную репутацию среди профессионального комьюнити. Все дело в том, что для того, чтобы запустить собственный сайт на PHP глубоких познаний не требуется, ровно также как и титанических усилий. Это одновременно и неимоверное преимущество языка и его проклятье. Низкий порог входа в использование языка приводит к тому, что на нем пишет кто попало и как попало. Таким образом, существует большое количество программистов, пишущих низкосортный неподдерживаемый код. Одновременно с этим существуют и мощные фреймворки, например Symfony и Zend, которые являются образцами дизайна программных систем. Такое положение дел и приводит к тому, что одновременно с огромной популярностью языка существует большое количество ненавистников данного языка.


Тенденции развития языка

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

Читать далее  

Теги:  php 

Особенности ООП в PHP: traits

Категория: PHP
 23 февраля 2017 г. 20:37

Данная статья является логическим продолжением статьи о трейтах, выложенной на официальном сайте php. Начиная с версии PHP 5.4.0 появилась такая конструкция как трейты. Прошло уже более 4х лет с момента появления трейтов, тем не менее очень часто приходится сталкиваться с неясностью со стороны других разработчиков по поводу использования трейтов. Многие попросту не понимают, когда их нужно использовать и нужно ли вообще. В интернете полно информации о том, как их писать, объявлять, есть информация об особенностях поведения трейтов. Однако практически не раскрытым остается вопрос о том, в каких же случаях уместо их использовать. В данной статье постараюсь ответить на этот вопрос. Поскольку трейты уже не являются новинкой для языка PHP, можно обощить полученный опыт их использования и описать практики ввнедрения данного механизма.

Читать далее  

Теги:  ООП  php  traits 

Алгоритм сортировки пузырьком

Категория: Алгоритмы
 10 декабря 2016 г. 23:29

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

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

Читать далее  

Объектно-ориентированное мышление

Категория: Книги
 12 октября 2016 г. 23:22

Автор:Мэтт Вайсфельд

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

В самом названии книги поставлена цель научить читателя объектно-ориентированному мышлению. На мой взгляд книга своей цели не достигает. Да, в книге раскрыты все понятия ООП, но как-то сложно, чтоли. Примеры выбраны неудачные, да и сам способ объяснения оставляет желать лучшего. Также встречаются неточности перевода, что может ввести в заблуждение начинающих программистов.

Очень много внимания в книге уделено около-ООПшным темам: диаграммы uml, шаблоны проектирования, фреймворки, форматы передачи данных xml и json, веб-сервисы и т.д. Данные темы в книге даются в ознакомительных целях. Получилась книга обо всем, но не о главном - мышлении объектами. В общем, уж лучше прочитать какую-либо другую книгу по ООП, нежели тратить время на эту. По теме ООП можно выделить книгу Брюса Эккеля "Философия Java" - описание ООП в ней ведется более последовательно и наглядно.

Теги:  книга  ООП 

Шаблон Observer на PHP

 26 сентября 2016 г. 18:28

Observer(Наблюдатель) - является поведенческим шаблоном проектирования. Является достаточно популярным шаблоном проектирования, но, при этом, очень прост в реализации. Данный шаблон предполагает зависимость между объектами "один ко многим" так, что при изменении состояния одного объекта все зависящие от него объекты уведомляются и обновляются автоматически. Таким образом, в шаблоне наблюдаются две роли: субъект и слушатель. Шаблон "Наблюдатель"определяется следующими свойствами:

  • существует, как минимум, один субъект, рассылающий сообщения;
  • имеется не менее одного получателя сообщений, причём их количество и состав могут изменяться во время работы приложения;
  • нет надобности очень сильно связывать взаимодействующие объекты, что полезно для повторного использования.

Шаблон подходит для любого сценария, в котором требуется использование push-уведомлений. Очень часто его можно заметить в системах пользовательского интерфейса.


Аналогия

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

Читать далее  

Простая jQuery галерея изображений

Категория: Javascript
 11 августа 2016 г. 17:30

Библиотека jQuery появилась в 2007 году. С тех пор с ее использованием было разработано огромное количество плагинов, в том числе и галерей изображений. Они изобилуют красивыми рамками, годными анимационными переходами и замечательным дизайном. Однако, что интересно, мне еще не попадалась на глаза какая-нибудь jQuery-галерея с возможностью поворота изображения. А ведь довольно часто приходится просматривать изображения, перевернутые на 90 градусов, а то и вовсе загруженные вверх-ногами. Именно такая функциональность требовалась для моего проекта.

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

Читать далее  

Теги:  jQuery  javascript