Sdlc что это тестирование

Что такое SDLC (жизненный цикл разработки программного обеспечения)?

Как разработчики обеспечивают соответствие своих приложений всем спецификациям? Когда они тестируют свой код? Каковы подходящие временные рамки для анализа требований?

Без ответов на эти вопросы разработчики программного обеспечения были бы в растерянности, когда бы они ни работали над новым проектом. Как они узнают, что делать и когда? Вот где вступает в игру жизненный цикл разработки программного обеспечения (SDLC).

В этом руководстве мы собираемся обсудить основы SDLC. Мы поговорим о каждой фазе SDLC и предоставим вам примеры того, как жизненный цикл используется на практике.

Что такое SDLC?

Жизненный цикл разработки программного обеспечения — это методология, которая описывает, как вам следует подходить к разработке программного обеспечения. Этот процесс гарантирует, что вы создаёте программное обеспечение в правильном порядке, и помогает сделать разработку более эффективной.

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

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

Жизненный цикл разработки программного обеспечения обычно контролируется менеджером проекта, который обеспечивает достижение разработчиками своих целей.

Как работает SDLC?

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

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

Этап 1: Анализ и планирование

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

Хотя многие люди рассматривают разработку программного обеспечения как простое кодирование, на самом деле это гораздо больше, чем просто ввод кода. Вам нужно будет определить объём и границы проекта, прежде чем вы начнёте писать код. Здесь вы поймёте, что вы собираетесь построить и почему.

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

Этап 2: Дизайн

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

Следующим этапом SDLC является этап проектирования. Именно здесь вы будете решать, как должны быть реализованы функции. Работая со всеми заинтересованными сторонами, чтобы ваши планы соответствовали их потребностям.

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

Этап 3: Разработка

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

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

Этап 4: Тестирование

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

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

Этап 5: Развёртывание

Готовый продукт готов. Вы протестировали код и убедились, что конечный продукт соответствует всем исходным спецификациям. Теперь вы готовы начать развёртывание проекта.

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

Этап 6: Обслуживание и оценка

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

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

Как применяется SDLC

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

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

Модель водопада

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

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

Гибкая модель

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

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

Инкрементальная модель технически является частью модели водопада. Это серия водопадных циклов. В этой модели разработчики объединяются в группы и разделяют требования к проекту. Затем каждая группа реализует согласованный SDLC.

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

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

Заключение

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

Источник

Что такое Жизненный Цикл Разработки ПО и какие проблемы возникают на каждом этапе SDLC?

Жизненный цикл разработки ПО (англ. SDLC – Software development lifecycle) – это серия из шести фаз, через которые проходит любая программная система.

Абсолютно любое ПО проходит через 6 основных шагов, начиная от простой идеи и заканчивая использованием её конечным пользователем.

Но как это выглядит изнутри? С какими сложностями сталкивается команда разработчиков и как их решает на каждой фазе Жизненного Цикла ПО? Об этом расскажет Павел Гапонов, Project Manager компании-разработчика SolveIt.

Типичный жизненный цикл разработки состоит из следующих фаз:

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

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

Проблема: Не соответствующие ожидания и часто изменяющиеся требования: заказчик и команда не понимают, какую реально пользу принесёт продукт.

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

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

Важно четко определить и прописать, что требуется выполнить, это делается с помощью SRS (Software Requirement Specification). Документ содержит все требования к продукту, которые должны быть спроектированы и разработаны в течение жизненного цикла проекта.

Проблема: Большой многостраничный список требований

Решение: Выяснить высокоуровневые требования и, в ходе разработки и коммуникации с заказчиком, дописывать ТЗ. То есть разработка идет параллельно с Техническим заданием, а в процессе корректируется план.

В SolveIt мы всегда стараемся быть гибкими и подстраиваться под клиента. Работающий продукт важнее исчерпывающей документации.

SRS это ориентир для разработчиков, чтобы предложить лучшую архитектуру для продукта. Обычно предлагается несколько подходов к проектированию архитектуры продукта. Все предложенные подходы документируются в спецификации DDS (Design Document Specification) и выбирается наилучший подход к проектированию. Данный подход очень четко определяет все архитектурные модули продукта, а также его связь с внешними и сторонними модулями.

Проблема: Выбрали неправильную архитектуру.

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

Здесь начинается разработка и сборка продукта. Весь программный код, новые модули и фичи разрабатываются на основании DDS. Чем лучше написана эта документация, тем быстрее будет идти имплементация. На этом этапе подключается команда разработчиков. Написанный код должен покрываться Unit-тестами, а взаимодействие новых фич с другими модулями тестироваться с помощью интеграционных тестов. Эти активности выполняются именно командой разработчиков, а не QA специалистами.

Проблема №1: Слабая коммуникация между командой

Разработчик не интересуется прогрессом проекта, проблемами коллег.

Решение: Daily meetings, 100% вовлеченность, Скрам доска (интерактивность).

Проблема №2: Невыполнимые сроки

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

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

Проблема №3: Добавление не оговоренных фич

Решение: Менеджер проекта должен объяснить клиенту, к чему приведет добавление новых фич в проект, отстаивать свою позицию и держаться SRS. Поэтому так важна вторая фаза Жизненного цикла разработки ПО.

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

Проблема: Тратится слишком много времени на поиск причин багов. Попытки найти и исправить дефекты после завершения разработки – сложный процесс, который может привести к большому количеству исправлений.

Решение: Проводить тестирование параллельно задачам, сразу же по их завершению.

Как только продукт протестирован, он выходит в релиз. Иногда внедрение происходит поэтапно, в соответствии с бизнес-стратегией. Продукт сначала может быть выпущен в ограниченном сегменте и протестирован в реальной бизнес-среде, это UAT-тестирование (User Acceptance Testing). Затем, основываясь на отзывах, продукт может быть выпущен как есть, или с предлагаемыми улучшениями. После того, как продукт выпущен на рынок его обслуживание выполняется для существующей клиентской базы, и на этом этапе подключаются Support-команды.

Проблема №1: Отсутствие обратной связи, реальных отзывов потенциальных пользователей продукта.

Решение: Не ждать конца разработки, а как можно скорее запускать продукт, чтобы получить отзывы от реальных пользователей и на основе их предпочтений приоритезировать дальнейший функционал.

Проблема №2: Слабая инфраструктура проекта на стороне клиента.

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

Решение: Предупредить клиента, о возможных проблемах, предложить решения для их устранения.

Если вам нужен качественный продукт, свяжитесь с нами и мы сделаем оценку вашего проекта!

Источник

🔀 SDLC модели: как выбрать правильный подход к разработке и не завалить проект

Sdlc что это тестирование. 958f3cf02c1cd096b5bdee0657dc0995. Sdlc что это тестирование фото. Sdlc что это тестирование-958f3cf02c1cd096b5bdee0657dc0995. картинка Sdlc что это тестирование. картинка 958f3cf02c1cd096b5bdee0657dc0995

Более половины ИТ-проектов заканчиваются провалом. Одни из самых распространенных причин неудач ИТ-проектов – неправильная интерпретация бизнес-целей, игнорирование клиентов, неправильная расстановка приоритетов. Но у всех у них общий корень проблемы: неправильный подход к разработке программного обеспечения.

Основные методологии разработки ПО

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

Каскадная модель (waterfall)

Это линейная и последовательная модель разработки программного обеспечения, в которой фазы проекта следуют одна за другой и включают:

Плюсы и минусы подхода

ПлюсыМинусы
Простая в использовании модель.С этой моделью слишком сложно и дорого адаптироваться к изменениям требований.
Каждый этап хорошо задокументирован.Документирование каждой фазы проекта занимает много времени.
Результат проекта абсолютно предсказуем.Вы не можете ничего предоставить заказчику, пока не завершите весь проект.
Этапы и роли четко определены с самого начала.Различные команды (дизайн, разработка, контроль качества и т. д.) изолированы, а взаимодействие между ними ограничено.
Минимальное вмешательство клиента.Без обратной связи клиента результат рискует не оправдать ожидания.

Каким проектам подходит

Каскадная модель – хороший вариант, если выполняются эти условия:

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

V-образная модель SDLC

V-образная модель – это своего рода другая версия каскада, но в её основе лежит контроль качества каждой фазы. Например, когда группа разработчиков собирает требования к проекту, QA-специалисты пишут приемочные тесты на основе этих сценариев. Точно так же на этапе проектирования системы создаются сценарии тестирования и так далее. После написания кода команда QA проверяет продукт на соответствие заранее написанным тестам (правая часть буквы «V»).

Sdlc что это тестирование. d14747d82c6fcde0a69bade08ad0aa60. Sdlc что это тестирование фото. Sdlc что это тестирование-d14747d82c6fcde0a69bade08ad0aa60. картинка Sdlc что это тестирование. картинка d14747d82c6fcde0a69bade08ad0aa60

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

Каким проектам подходит

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

Модель эволюционного прототипирования

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

Sdlc что это тестирование. d33010649c2d69d955fccd725fe75c85. Sdlc что это тестирование фото. Sdlc что это тестирование-d33010649c2d69d955fccd725fe75c85. картинка Sdlc что это тестирование. картинка d33010649c2d69d955fccd725fe75c85

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

Каким проектам подходит

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

Итеративная и инкрементальная модель

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

ПлюсыМинусы
Модель инкрементальной и итеративной разработки обеспечивает быструю и регулярную «доставку» работающего программного обеспечения клиентам.Во время интеграции модуля могут возникнуть архитектурные проблемы.
Легче и дешевле учесть изменения в требованиях проекта.Несмотря на некоторую гибкость, систему следует планировать с самого начала; в противном случае его нельзя разделить на модули.
Обратная связь от клиента на ранней стадии.Участие клиентов может быть проблематичным.
Небольшие части программного обеспечения легче тестировать и исправлять.Не всегда можно разбить систему на сегменты.
Экономия на издержках.Хотя выпуск одного модуля дешевле, общие затраты на систему будут увеличиваться по мере интеграции новых модулей.

Каким проектам подходит

Модель будет эффективна в следующих случаях:

Спиральная модель

Этот подход основан на оценке риска, он сочетает в себе функции каскадной, прототипной, итеративной и инкрементной моделей. Модель похожа на спираль с несколькими кругами. Каждый круг – это фаза, состоящая из четырёх элементов:

Затем, на основе отзывов пользователей и заинтересованных сторон, планируется следующая итерация.

Sdlc что это тестирование. 574fcb6ec5a53bec0b1aa48d907c67b4. Sdlc что это тестирование фото. Sdlc что это тестирование-574fcb6ec5a53bec0b1aa48d907c67b4. картинка Sdlc что это тестирование. картинка 574fcb6ec5a53bec0b1aa48d907c67b4

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

ПлюсыМинусы
Анализ рисков на каждой итерации увеличивает шансы проекта на успех.Требуется опыт управления рисками.
Этот метод позволяет создавать стабильные и надёжные системы, поскольку они тщательно тестируются в каждом цикле.Модель подразумевает работу с большим объёмом документации.
Можно менять требования между циклами.Нельзя изменить требования в середине цикла.
Раннее вовлечение разработчиков помогает согласовать бизнес-требования и технические возможности.Каждый кружок в спирали развития представляет собой «мини-каскад», а это значит, что вы не можете пропускать фазы.
Частые выпуски позволяют получать регулярную обратную связь от клиентов даже на ранних этапах цикла.Поскольку ограничений на количество итераций нет, сложно предсказать, сколько кругов потребуется для создания окончательной версии продукта.

Каким проектам подходит

Спиральная модель подходит для:

Microsoft, IBM и Tata Consultancy используют спиральную модель.

Модели гибкой разработки программного обеспечения

Вопреки распространённому мнению Agile не является ни структурой, ни методологией. Это философия с набором принципов, ориентированных на ускорение процесса разработки программного обеспечения, обеспечение 100% удовлетворённости клиентов и предоставление высококачественных решений в быстро меняющейся среде. Фактически, существует 12 принципов гибкой разработки, которые сводятся к следующим ценностям:

Scrum

Скрам-проекты разбиты на спринты. Спринт – это небольшой объём работы, который необходимо выполнить в течение определённого периода времени. Обычно заказчику доставляется часть проекта, которая была завершена во время спринта (инкремент продукта, от англ. increment). Скрам подразумевает активное общение и сотрудничество между всеми участниками проекта. Наряду с ежедневными 15-минутными встречами разработчиков, есть также:

Сердце процессов Scrum – это backlog, своего рода список задач, которые необходимо сделать для завершения проекта. По мере того, как проект продвигается, и команда узнаёт о нём больше, они редактируют бэклог продукта, добавляя, удаляя и переупорядочивая его элементы. Тем не менее, нельзя сделать что-то, если этого нет в очереди продукта.

Sdlc что это тестирование. e3342e4b408729a24c89305b201eebeb. Sdlc что это тестирование фото. Sdlc что это тестирование-e3342e4b408729a24c89305b201eebeb. картинка Sdlc что это тестирование. картинка e3342e4b408729a24c89305b201eebeb

Но на самом ли деле всё так гладко и красиво в Agile? Посмотрим на его основные варианты использования, а также на плюсы и минусы.

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

Примеры использования

Большинство современных проектов требуют определённого уровня «маневренности», особенно когда:

Резюме

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

Вот несколько советов как подходить к разработке на примере реального проекта EPAM Anywhere :

Источник

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

Ваш адрес email не будет опубликован. Обязательные поля помечены *