Рубрики
Uncategorized

Работает на машине каждого. Как мы кодируем MVPS и постоянно развиваем их при обновлении.

Наконец, веселая часть. Как только у нас есть пользовательские истории и каркасы, оцененное время и стоимость, … с меткой webdev, mvp, devops.

Как мы разрабатываем потрясающие приложения в Updivision (5 частей серии)

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

Для проще прочитать, мы сломали его на четыре этапа:

1. Настраивать

  • 1.1 Окружающая среда развития

2. Разработка

  • 2.1 стандарты Gitflow

  • 2.2.Commitity и Review Code

  • 2.3. Стандарты кодирования

  • 2.4. Техническая документация

3. Тестирование

  • 3.1. Три уровня тестирования

  • 3.2. Программное тестирование в CI/CD

4. Развертывание — Ура!

  • 4.1 Автоматическое развертывание и трубопроводы

И, конечно же, прикосновение управлений Agile Project требуется, чтобы сблизиться с 1 по 4. Хотя не участвует непосредственно в разработке, менеджер проекта отвечает за вождение работы через весь процесс и до завершения.

Для MVPS это означает продвижение всех шагов для успешного запуска, с тестируемыми вехами и четкой временной шкалой для улучшения времени на рынок. Как только MVP начинает расти, мы делаем постоянное развитие, с небольшими итерациями и частыми развертываниями, чтобы собрать как можно больше обратной связи. Если вы думали, что разработка программного обеспечения заканчивается после запуска, вы ошибаетесь. Разработка программного обеспечения никогда не заканчивается. Никогда!:)

1/4 Настройка

Вот еще больше работать до работы

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

В начале проекта/MVP разработчики часто проводят определенное количество времени. Это может означать что-нибудь из «О, я просто создаю автоматизацию сборки», чтобы «не беспокоить». Я выясняет управление зависимостями, и у меня еще не было моего кофе ». Хотя существует тысячи инструментов для настройки «Основы», самые трудоемкие биты всегда являются конкретными проектами. Это связано с тем, что разработчики должны создать правильную среду, инструмент, библиотеки и базовую структуру кода для текущих необходимых функций, основанные на определенном технологическом стеке и согласно согласованному техническому решению. Мы всегда включаем настройки в наших технических оценках (подробнее о оценках здесь ), именно потому, что количество времени, потраченного на него, варьируется от проекта к проекту.

Конкретные требования в сторону, при настройке экосистемы для проекта веб-разработки мы обычно делаем некоторое изменение следующего:

  • Мы создаем репозиторий проекта
  • Мы инициализируем поток Git внутри созданного репозитория (подробнее о стандартах Gitflow и структуру репозитории ниже)
  • Мы устанавливаем необходимые пакеты и зависимости (например, паспорт Laravel для аутентификации)
  • Мы настроили базу данных
  • Мы настроили Redis для кэширования и выполнения очереди
  • Мы устанавливаем постановку сервера для автоматического развертывания
  • Если проект требует загрузки файлов, мы настроили ведра и систему загрузки

2/4 разработки

Быть в Gitflow

Разработчики пишут код. Код хранится безопасно и совместно используются с помощью некоторой версий управления инструментом, обычно GIT. Подумайте о GIT как на самом деле Advanced Google Docs, инструмент, посредством которого вы можете сотрудничать, есть история изменений трека, проверьте изменения или вернуться к предыдущей версии.

Тем не менее, в отличие от Google Docs, Git позволяет нескольким версиям «истины» сосуществовать. По сути, у каждого разработчика есть копия хранилища, в отличие от Google Docs, где каждый работает на централизованной копии. Например, в Git у вас может быть несколько версий программного обеспечения одновременно в производстве или вы можете доставлять исправления ошибок на предыдущей версии.

Поскольку у каждого разработчика есть его версия «правды», должна быть способ предотвратить конфликт. Некоторые правила, которые ставят на место для работы с таким количеством версий менее запутаны. Эти правила называются Gitflow. Gitflow — это только один из нескольких способов управления разветвлением и слиянием рабочего процесса, но это, вероятно, самый популярный.

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

Базовая модель Gitflow состоит из двух основных ветвей (Master и Deview) и трех рабочих ветвей (функция, выпуск, исправления). Некоторые версии Gitflow также включают в себя поддерживающие ветви, которые используются, например, для получения исправления ошибок для более старых версий приложения. В отличие от основных ветвей, рабочие ветки всегда имеют ограниченную жизнь.

  • Мастер — Это живой, производственный код. При создании новой функции разработчики не работают на этой отрасли напрямую. Они создают новые функции филиалов и когда они сделаны, изменения объединяются в мастеру через развитие.
  • Развивать — В противном случае, известный как постановка, это действует как буфер между тем, что считается готовой задание с точки зрения развития и что на самом деле в производстве. Согласно модели Gitflow, все сначала все объединено в эту ветку, а затем в мастере. Вот почему некоторые называют это «филиал интеграции». Именно здесь построены любые автоматические ночные сборки.
  • Особенность — используется для разработки новых функций для предстоящего или дальнего будущего выпуска. Функциональные ветви существуют до тех пор, пока функция находится в разработке, но в конечном итоге будет объединена в развитие или отброшено.
  • Выпуск — Поддерживает подготовку нового добычи. Это позволяет незначительными исправлениями ошибок и подготовки метаданных для выпуска (номер версии, даты сборки, замены выпуска и т. Д.). Делая все это работа на филиале выпуска, разрабатывающая ветвь очищается для получения функций для следующего большого выпуска.
  • Исправления — используется для быстрого исправления проблем в производстве. Когда критическая ошибка в производственной версии должна быть немедленно разрешена, ветка исправления может быть отделена от этой производственной версии.

Мы используем конкретные функциональные ветви для каждой задачи (подробнее о задачах и планировании проекта здесь). Все задачи разрешены в собственной филиале функции, и когда это сделано, они объединяются в развитие. Таким образом, у нас есть стабильная разрабатывающая ветвь, которая поддерживает регулярные и непрерывные релизы.

Тонкое искусство совершения и просмотра кода

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

Запрос на тягу всегда связан с ветвью. Другими словами, запрос на тягу — это запрос, чтобы объединить одну ветвь в другую и выдается после одного или нескольких коммитов. Хорошо обменивается следующим принципу ответственности, что означает, что один изменил одну вещь в коде и только одну вещь. Вы можете легко проверить этот принцип в вашем сообщении Commit. Если вы достигнете слова «и», вы остановитесь:)

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

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

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

  • Прочитайте все тщательно. Это включает в себя название, описание, контрольные списки, скриншоты и видео, если таковые имеются. Даже ссылки на связанные вопросы/билеты.
  • Не просто указывайте на проблему. Постарайтесь предложить альтернативу, более простой способ делать вещи, где это возможно.
  • Быть вежливым и полезным.

Кодирование со стилем (и стандартами)

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

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

Мы обеспечиваем применение стандартов кодирования через контакты и кодовые рецензии. Как упомянуто выше, Linters — это инструменты, которые проверяют код против набора правил и нарушений флага этих правил в качестве ошибок. Линтер также может быть сконфигурирован для проверки соответствия заданного стиля-руководства, в зависимости от языка, который был написан код (например, PSR-2 для PHP). ЛИНТЕРЫ намного лучше со временем на месте наблюдения или даже ненужной сложности в коде, но у них все еще есть свои ограничения. Мы используем Review Code Reeks для выпускаемых вопросов, которые в противном случае были бы незамечены линтами, такие как неисправные логические структуры.

Что происходит, когда вы не инвестируете в стандарты кодирования? Возникает версия разработчика программного обеспечения ада. У вас есть PHP вместе с HTML, CSS и JavaScript в одном файле. Комментарии варьируются неопределенностью от «oopsie» на «незначительное изменение» или «Работа над функцией X», а затем 20 коммит в ряд, без способа разглядеть между ними. Переменные, классы, имена методов несовместимы и полны опечаток, а все кусочки кода издаются странным образом.

Хотя не синтаксически значимые для переводчиков кода, стандарты кодирования являются важными для людей. Они облегчают чтение кода, применяя правила, касающиеся:

  • Форматирование : Это то, что заставляет ваши глаза не кровоточить. Такие вещи, как вдавливание блочных выписок, размещение скобки, пробелы и т. Д.
  • Соглашения об именах : Вы уверены, что хотите назвать вашу вариабельную a_rather_long_and_vague_variable_name_which_might_as_well_be_called_x1_because_it_doesn`t_tell_you_anything_useful?
  • Комментарии : предоставлено, придумать эффективные правила комментирования могут быть сложными. Те, которые будут актуальны в рецензен. Хорошее правило, что комментарии говорят, где код не может говорить за себя. Хорошие комментарии также объясните, почему код делает то, что он делает, а не как.

Ленивый разработчик прыгает над техническими документами. И сожалеет об этом позже.

Помните, как мы упоминали, это хорошая идея, чтобы правильно прокомментировать ваш код? Угадай, что? Вы также можете генерировать документацию кода на основе комментариев. Хотя мы не рекомендуем сделать это единственным источником документации, он дает вам простой способ начать. Техническая документация очень похожа на пиццу в этом смысле. Даже когда это плохо или слишком мало, это все еще лучше, чем ничего.

Многие языки имеют возможность превращать комментарии к красиво оказанным документам, которые могут ссылаться на другие произведения документации. Вид как страница Википедии для вашего кода. Мы используем комментарии документации (известные как блоки DOC), особенно для документации API. Дальше удаленное из исходного кода ваша документация API, тем больше вероятность того, чтобы устареть или неточность со временем. Таким образом, лучшая стратегия должна встроить документацию непосредственно в код, а затем использовать инструмент для его извлечения.

Если истории пользователей сосредоточены на опыте конечного пользователя с приложением, технические документы сосредоточены на спецификациях, которые делают это возможным. В большинстве случаев необходимы несколько функций, чтобы обеспечить действие, описанное пользовательской историей. И почти во всех случаях несколько решений по разработке входят в одну функциональность. Возьмите, например, простое действие входа в систему. Какой тип логина мы должны реализовать, электронную почту и пароль или социальный логин? Если входные поля имеют ограничения? Как они должны обнаруживать и обращаться с ошибками, например, недопустимые адреса электронной почты? Как долго следует хранить информацию для опции «Запомнить меня»? Нижняя линия, технические документы не могут быть отделены от контекста развития. Вот почему мы пишем технические документы, как код, и мы поддерживаем их обновлять на протяжении всего процесса разработки.

Для общественных проектов, таких как API, библиотеки или некоторые из Работа с открытым исходным кодом Мы сделали, первое взаимодействие, у кого-то с проектом, как правило, через файл Readme. В таких случаях, имеющий хорошо структурированный, хорошо написанный файл Readme, является первым шагом в качке вашего продукта к более широкой аудитории. На самом деле, некоторые принимают этот «первый шаг» буквально и выступают за README ДОСТАВИТЬ РАЗВИТИЕ Отказ Ниже приведен простым шаблоном для написания легко читает и полезно Readme Docs.

3/4 тестирования

Три столпа программного тестирования

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

Мир гарантии качества программного обеспечения огромна. Тем не менее, существует три фундаментальных уровня, в которых приложение проверено разработчиками, прежде чем они покажут свою работу кому-то еще, то есть до того, как приложение проверено конечными пользователями или клиентом, иначе известным как тестирование приема пользователя (UAT).

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

1. Агрегаты тесты — Это строительные блоки тестирования программного обеспечения. Разработчики пишут тесты подразделения, чтобы убедиться, что определенная единица кода (например, метод, класс, функция) работает, как и ожидалось по ряду действительных и недействительных входов. Допустим, у вас есть функция 2VAL, которая дана два значения, x и y, всегда возвращает x + y. Тест Установки выполнит функцию с двумя входными значениями и подтвердить вывод X + Y.

2. Тесты на функциях — Они охватывают наиболее важные функциональные возможности компонента или системы. Как функции должны работать, могут быть описаны в спецификации приложений или документации по продукту и могут варьироваться от довольно технических (вернуть конечные точки, что они должны возвращать?) Для самоижелания

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

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

Программное тестирование в CI/CD

Программное обеспечение для тестирования требуется много времени. Программное обеспечение для тестирования вручную еще хуже. Если бы только был способ не только автоматизировать тесты, но интегрировать их в ваш рабочий процесс разработки. Введите CI/CD, кратко для непрерывной интеграции/непрерывной доставки или развертывания. Это верно, CD может стоять либо для доставки, либо для развертывания (смущение, мы знаем), в зависимости от степени автоматизации. Но давайте не будем опередить себя. Мы будем говорить о этих различиях в глубине в более позднем разделе.

На данный момент важно знать, что CI/CD — это набор практик, предназначенных для того, чтобы позволить команды разработки доставлять изменения быстрее и с меньшим конфликтом, как уровень человека, так и уровень кода. Основная идея состоит в том, чтобы автоматизировать сборку, тестирование и развертывание через скрипты, чтобы: a.) Минимизируйте ошибки, слияние конфликтов, человеческую ошибку, все, что стоит между вами и успешным выпуском б.) Непрерывно строить, тестируйте и разверните код и легко откатывайтесь, если что-то пойдет не так. Это означает, что выпуски менее трудно управлять и менее рискованным И поэтому они могут произойти чаще.

Допустим, у вас есть код, хранящийся в репозитории Git. Большинство систем управления версиями в настоящее время имеют инструменты CI/CD, встроенные в них, такие как Gitlab CI/CD или GitHub. Эти инструменты убедитесь, что тесты работают автоматически, когда предан новый кусок кода. Чтобы поставить его в противном случае, вы не можете совершить кусок кода, если каждый не проходит каждый отдельный тест в кодовой базе, и есть тесты, чтобы охватить весь новый код в кодовой базе. Точка здесь в два раза. Во-первых, чтобы убедиться, что новый код, который вы просто написали, не нарушает старый код. Подумайте об этом, как ваше прошлое, сохраняя свое будущее, от чего-то ужасного. Во-вторых, чтобы автоматически определить, есть ли новый код тесты.

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

Если CI/CD отвечает за то, что можно сделать автоматически, ваше развлекательное и слияние рабочего процесса (запоминайте Gitflow?) В конечном итоге диктует, как все должно быть настроено. Базовая настройка CI/CD после логики Gitflow может выглядеть что-то подобное:

  • Запустите автоматические тесты на всех филиалах, кроме мастера.

  • Автоматически развернуть после каждого слива в Master.

CI/CD и Gitflow являются важными частями нашего процесса разработки. Мы используем их, чтобы убедиться, что тесты находятся на месте, выпуски безболезненные, и все следует за тем же рабочим процессом по всей веществе. Поскольку он принимает день выпуска давления (не нужно приостановить разработку для выпуска, проблемы легче исправить из-за развертывания на небольших партиях), он позволяет нам развернуть чаще и получить отзыв от наших клиентов намного быстрее.

4/4 развертывание

В кроличью нору. Автоматическое развертывание и трубопроводы

Вы можете использовать CI/CD для автоматизации чего-либо из строя и тестирования до развертывания и выпуска. » Трубопровод «- это визуально наводящий срок, обычно связанный с CI/CD. Используется для определения и степени, в которой рабочий процесс автоматизирован, и последовательность шагов, которые необходимо запускать.

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

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

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

Мы запуская конвейер CI/CD для автоматизации наиболее важных шагов в процессе развертывания:

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

  • Развертывание

  • Задача, связанные с развертыванием, такие как проходные сценарии миграции базы данных

  • Выполнение любой необходимой конфигурации

  • Выполнение теста развертывания (в противном случае, известное как «дымовой тест»), чтобы убедиться, что жизненные внешние службы достигаются, и что система работает. Например, вы можете проверить наличие сетевых адресов/серверов или которые существуют сертификаты и ключевые ключи реестра или что минимальные требования к дисковым пространствам выполнены.

Мы автоматизируем развертывание для проектов, которые требуют частых выпусков и тесных циклов обратной связи. Более того, это помогает нам убедиться, что все работает как ожидалось в реальной жизни. Развертывание в производственной среде только при полном объеме разработки означает, что у вас есть нулевые гарантии, что конкретный релиз будет работать для конечных пользователей. Автоматизированные развертывания позволяют вам легко проверить свой код в подобной подобной среде, как вам нужно, и так часто, как вам нужно.

Готов начать?

Если вы начинаете искать технический партнер для поездки, не смотрите дальше. Мы специализируемся на помощи запусками, запускают и масштабируйте их MVP. Свяжитесь с нами Теперь, чтобы получить ваш проект от земли.

Как мы разрабатываем потрясающие приложения в Updivision (5 частей серии)

Оригинал: «https://dev.to/updivision/it-works-on-everyone-s-machine-how-we-code-mvps-and-continuously-develop-them-at-updivision-2a4o»