Системы автоматизации разработки новых программ на языке программирования

Обновлено: 30.06.2024

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

Дафна Лепренс-Ринге — репортер из Лондона.

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

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

Разработчик

MISIM (Machine Inferred code Similarity) — новая технология, разработанная Intel и лабораториями Массачусетского технологического института. Она эффективно изучает фрагменты кода, чтобы понять, для чего предназначено программное обеспечение. Затем система может создать базу данных, в которой программные коды со схожими результатами получают оценки сходства.

ПОСМОТРЕТЬ: DevOps: шпаргалка (TechRepublic)

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

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

Райан Маркус, ученый из Intel Labs, сказал ZDNet: "Наша цель с MISIM – помочь разработчикам в решении таких сложных вопросов, как "как наиболее эффективно использовать этот API" или "как правильно проверить вводимые данные". '. Это должно дать инженерам гораздо больше времени, чтобы сосредоточиться на элементах своей работы, которые действительно влияют на реальный мир."

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

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

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

В этом инструменте используется новая технология, называемая контекстно-зависимой семантической структурой (CASS), которая позволяет MISIM интерпретировать код на более высоком уровне — не только структуру программы, но и ее назначение. Когда оно представлено кодом, алгоритм переводит его в форму, которая представляет то, что делает программное обеспечение, а не то, как оно написано; Затем MISIM сравнивает найденный код с кодом миллионов других программ, взятых из онлайн-репозиториев.

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

Джастин Готтшлих, руководитель исследовательской группы Intel по машинному программированию, сказал ZDNet, что по мере того, как разработка программного обеспечения становится все более сложной, MISIM может оказать большое влияние на производительность.

"Скорость, с которой мы представляем старших разработчиков, не соответствует темпам, с которыми мы внедряем новые архитектуры микросхем и сложность программного обеспечения", – сказал он. «С сегодняшним гетерогенным оборудованием — процессорами, графическими процессорами, FPGA, ASIC, нейроморфными и, вскоре, квантовыми чипами — станет трудно, а возможно, и невозможно найти разработчиков, которые смогут правильно, эффективно и безопасно программировать на всем этом оборудовании». /p>

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

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

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

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

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

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

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

Как автоматизация может изменить профессиональную разработку программного обеспечения.

Архитектура предприятия

Корпоративная архитектура (источник: Pexels)

На конференции Microsoft Build технический директор Microsoft Кевин Скотт рассказал об экспериментальном проекте, в котором ИИ, обученный коду в GitHub, фактически создает программы: он генерирует тела функций на основе описательного комментария и подписи сообщения. (Перейдите к 29:00 видео.) Аналогичным образом в несвязанной исследовательской статье сообщается о неконтролируемом переводе программ с одного языка на другой — на самом деле, это, вероятно, более легкая задача, чем перевод на естественный язык.

Демонстрация Microsoft — это просто демонстрация, а исследовательская работа — это исследовательская работа. ИИ Microsoft смог предоставить тела методов для некоторых относительно простых функций; очевидно, оно было довольно ограниченным. Напрашивается вопрос, как именно вы пишете комментарий, который говорит ИИ, что делать; мы просто заменяем описание на точном языке программирования описанием на двусмысленном, неточном человеческом языке? Я уверен, что обучение модели стоит дороже, чем наем разработчика для написания нескольких коротких функций. И хотя мне легко поверить, что программное обеспечение может перевести какой-то простой код из COBOL в Rust, я могу только представить, что оно было бы ужасно запутанным из-за множества уловок, которые программисты использовали в 1960-х и 1970-х годах для работы с компьютерами, которые современные стандарты, крошечные воспоминания. Вакансии программистов не исчезнут завтра.


Учитесь быстрее. Копай глубже. Смотрите дальше.

Присоединяйтесь к платформе онлайн-обучения O'Reilly. Получите бесплатную пробную версию сегодня и быстро находите ответы или осваивайте что-то новое и полезное.

Тем не менее, нам важно подумать о том, что автоматизация может означать для будущего программирования. Является ли это проблеском будущего, и если да, то о чем оно говорит нам? Чему мы можем научиться из него? Программирование будет все больше автоматизироваться; и, как человек, который начал писать на ассемблере для PDP-8, я могу сказать вам, что программирование уже высоко автоматизировано, и что хороший оптимизирующий компилятор — это уже продвинутая система ИИ, которая принимает ваши подсказки и превращает их в работающий код.< /p>

Программирование не исчезнет и не устареет. Однако его значение изменится. Ранее я писал о «синих» и «белых воротничках»: программистах, которые соединяют вещи, и программистах, которые проектируют взаимосвязанные вещи и создают инструменты для их соединения. Это разные (хотя и сильно пересекающиеся) наборы навыков. И хотя демонстрация Microsoft может показать, что программисты в конечном итоге могут быть освобождены от задачи кодирования простых функций, механизм генерации кода, безусловно, был создан командой программистов, и, возможно, большой. Программисты, которые пишут инструменты более высокого уровня, такие как сам механизм кодирования Microsoft, могут вздохнуть с облегчением. Как и программисты, разрабатывающие API, поскольку вам все равно придется предоставлять сигнатуры функций/методов.

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

Но этот подвиг по-прежнему вызывает вопрос о том, что мы подразумеваем под программированием. В видео Кевин Скотт рассказывает о сокращении времени, которое программисты тратят на скучные, повторяющиеся задачи. Да, это то, что мы все говорим об ИИ: он сократит время, затрачиваемое на скучные, повторяющиеся задачи, и освободит больше времени для творческой работы. Однако давайте сломаем это. Большая часть программирования указывает, в мучительных деталях, как выполнить некоторый процесс. Это может быть скучно, это часто повторяется, и это, безусловно, подвержено ошибкам. И нам действительно нужно больше думать о том, каким должно быть программирование. Говоря словами Скотта, каковы «творческие» аспекты программирования?

Я не уверен, что слово "творческий" — правильное слово. Еще в 1960-х и 1970-х годах больше программистов называли «аналитиками». Это название должности все еще используется, но не так уж часто: Glassdoor показывает около 10 000 вакансий для «программиста-аналитика», 44 000 для «программиста» и 100 000 для «инженера-программиста». Monster показывает около 20 000 для "программиста-аналитика", 300 000 для "программиста" и 170 000 для "инженера-программиста".

Наш акцент на написании кода и измерении производительности по «строчкам кода» является близоруким. Только взгляните на все замечательные (и абсолютно необходимые) инструменты, которые у нас есть для создания, тестирования, архивирования и развертывания кода. Но эти инструменты, какими бы важными и революционными они ни были, не решают реальной проблемы: решаем ли мы правильные проблемы? Существуют тысячи приложений, которые проходят каждый модульный тест, каждый интеграционный тест и каждый приемочный тест, но все еще ужасны в использовании. И мы узнаем, что существуют новые аспекты программного обеспечения, о которых мы редко задумывались: есть ли группы, которым нужно использовать наше программное обеспечение и которые не могут? Поддерживает ли ваше программное обеспечение специальные возможности? Могут ли им пользоваться люди, не имеющие надежного доступа к компьютерам и сетям? Работа такой организации, как Code for America, технически не глубока и неглубока. Радикальным в таком продукте, как GetCalFresh, было то, что он реконструировал систему, чтобы сделать ее пригодной для использования людьми, которым это нужно. И нам нужно гораздо больше подобного анализа.

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

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

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

Следующий список подготовлен после рассмотрения таких показателей, как последние тенденции, популярность языков, карьерные перспективы, проекты с открытым исходным кодом и т. д. Согласно TIOBE Index 2021 и IEEE Spectrum Magazine, Java, C и Python входят в тройку лидеров автоматизации. языков программирования в списке. Ниже приведены наиболее предпочтительные из длинного списка имен.

1. ЯВАСКРИПТ

Согласно недавнему опросу разработчиков, проведенному Stack Overflow, JavaScript восьмой год подряд занимает первое место как наиболее часто используемый язык программирования. Он в большей степени поддерживает автоматизацию тестирования, особенно для разработки интерфейса. Многие крупные веб-сайты, такие как Instagram, Accenture, Airbnb и Slack, используют JavaScript в качестве предпочтительного языка для разработки интерфейса и языка программирования для автоматизации.

  • Это соответствует подходу к тестированию со сдвигом влево, когда даже разработчики играют активную роль в процессе разработки тестового кода. Здесь команда тестирования тесно сотрудничает с командой разработчиков, чтобы внедрить эффективную автоматизацию тестирования.
  • JavaScript и Selenium используются разработчиками вместе для создания тестовых сценариев для автоматизированного тестирования браузера. В этом контексте удаленная Selenium Grid от pCloudy идеально подходит для использования без каких-либо требований к изменению исходного кода.
  • Существуют различные среды тестирования JavaScript для модульного и сквозного тестирования, такие как Zest, Mocha, Jasmine, Nightwatch JS и т. д.

2.ПИТОН

Согласно статистике, это самый популярный язык программирования для автоматизации в 2021 году. Он имеет открытый исходный код и имеет опыт разработки веб- и настольных приложений, машинного обучения, сетевых серверов, мультимедийных инструментов и т. д. Для любого бизнеса. который только запускается, Python — наиболее рекомендуемый язык программирования. Он обеспечивает поддержку библиотек, надежную интеграцию и функции управления. Некоторые из популярных приложений, созданных с использованием Python, — это Youtube, Pinterest и Instagram. Согласно последним тенденциям, примерно 2,3 миллиона веб-сайтов Live (6 лаков по всему миру и 3,1 тысячи в Индии) созданы с использованием Python.

По данным последнего опроса разработчиков Stack Overflow, около 70 % разработчиков выбрали Python в качестве наиболее предпочтительного языка программирования, потому что:

  • В Python есть несколько библиотек, которые помогают разработчикам выполнять любые функции, не затрачивая много усилий на написание кода.
  • У него сильное сообщество Python.
  • Он объектно-ориентирован.
  • Python – сравнительно портативный и простой в освоении язык программирования для автоматизации, что делает его лучшим выбором для начинающих.
  • Библиотеки Selenium-Appium для Python упрощают автоматизацию и кроссбраузерное тестирование на мобильных устройствах и компьютерах. Наиболее популярными средами тестирования Python являются PyTest и PyUnit, используемые в Selenium Automation Testing для кросс-браузерного автоматизированного тестирования.

3. ЯВА

Это один из популярных языков программирования автоматизации общего назначения, принадлежащий корпорации Oracle. Applitools Survey сообщает, что JAVA сохраняет свое лидерство: 43% пользователей выбирают Java в качестве основного языка для написания своих тестов. Предприятия используют Java для обслуживания серверных систем. Более 3 миллиардов устройств используют приложения, созданные на основе Java. Он поставляется с комплексными средами тестирования, пакетами и источниками знаний, что делает его одним из лучших языков программирования для автоматизации. Netflix, Google, Pinterest, Instagram — это лишь несколько громких имен, использующих JAVA.

  • Он предоставляет своим пользователям встроенные библиотеки с открытым исходным кодом, мощную командную строку, простую интеграцию, поддержку IDE и т. д.
  • Это объектно-ориентированный язык, работающий по принципу "написать один раз и запустить где угодно", что обеспечивает гибкость на многих кроссбраузерных платформах.
  • Позволяет легко интегрировать JUnit с Selenium Webdriver для автоматизации тестирования веб-приложений.
  • Он также предоставляет разработчикам программного обеспечения короткие тестовые примеры.

5. PHP

Препроцессор гипертекста — это широко используемый язык командной строки, язык сценариев на стороне сервера, используемый для веб-разработки и автоматизации тестирования. Чаще всего используется для мобильных приложений, которым требуется доступ к базе данных. Более 34 живых веб-сайтов Lac используют PHP в качестве предпочитаемого языка программирования автоматизации. Популярные организации, такие как Википедия, Facebook и Yahoo, используют PHP для своих веб-сайтов. PHP поддерживает разработку веб-сайтов электронной коммерции, содержательных и динамичных веб-приложений и мобильных приложений. Наиболее распространенными фреймворками для тестирования PHP являются BeHat, Codeception, Laravel Dusk, PHPUnit, предлагающие исключительные преимущества в процессе автоматизации. XDebug, расширение PHP, представляет собой мощный инструмент отладки, улучшающий процесс разработки PHP.

  • PHP является гибким и легко связывается с HTML/HTML5.
  • Предоставляет отличные функции обработки ошибок.
  • Это независимый от платформы язык.
  • Хорошая система поддержки сообщества.

6. РУБИН

Другим популярным языком программирования автоматизации является Ruby, который демонстрирует тенденцию к росту в области автоматизации. В последние годы в Ruby наблюдается рост числа пользователей. Ruby хорошо работает с платформой Selenium, поэтому считается важным компонентом для выполнения автоматизированного тестирования Selenium. Начать работу с Ruby-Selenium легко, поскольку он создает удобную среду для запуска вашего первого кросс-браузерного теста с помощью Selenium Webdriver с использованием меньшего количества строк кода. Популярными веб-сайтами, использующими Ruby, являются Twitter, Bloomberg, Airbnb и Shopify.

  • Это объектно-ориентированный язык программирования внутренних сценариев.
  • Это удобный, простой в освоении язык, поддерживающий архитектуру MVC и обеспечивающий автоматическое развертывание.

7. СМАШТЕСТ

Это язык программирования автоматизации с открытым исходным кодом, который создает самые быстрые тесты автоматизации. SmashTest позволяет ускорить выполнение теста, записав тесты в виде древовидной структуры. Он генерирует тесты в десять раз быстрее, чем любой другой язык программирования. Однако его процесс документирования не так хорош. SmashTest может выполнять как тестирование API, так и тестирование пользовательского интерфейса. Он поставляется с средством запуска тестов для обеспечения параллельного тестирования и цикла чтения-оценки-печати (REPL). Это требует загрузки Selenium WebDriver. Его фиктивный API позволяет имитировать время и геолокацию. Smashtest CLI (интерфейс командной строки) состоит из инструментов для CI/CD и интерпретатора REPL.

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

8. VBSCRIPT

VBScript – это язык программирования, разработанный Microsoft. Это облегченная версия Visual Basic, поэтому оба используют схожий синтаксис. Он используется в Quick Test Professional (QTP), автоматизированном инструменте функционального тестирования для кодирования и выполнения автоматических тестов. Если тестировщик хочет работать с QTP, он должен знать VBScript.

  • Легко освоить, даже если у вас мало базовых навыков программирования.
  • Это язык без учета регистра.
  • VBScripts — это интерпретатор, а не компилятор (например, C++, Java и т. д.). Иногда его также называют построчным компилятором.

Заключение

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

Автоматизация быстрого тестирования

Приянка Чарак< бр />

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

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

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

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

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

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

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

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

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

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

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

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

Читайте также: