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

Записная книжка рассеянного [в пространстве и времени] программиста

Часть 1: краткая историческая справка (Тестирование ПО)

Оглавление

Баг. Кто он?

ТЕСТИРОВАНИЕ ПРОГРАММНОГО ПРОДУКТА

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

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

Лекция 113: Тестирование программ

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

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

Принципы тестирования

Тестирование проводится по специально подготовленным тестам, которые включают:

1) конкретные значения всех необходимых входных данных;

2) ожидаемые конкретные значения всех выходных данных, рассчитанных по допустимым входным данным вручную или с использованием специальных программ;

3) описание ожидаемой реакции программы на неверные входные данные.

Однократное исполнение программы с использованием теста называется тестовым прогоном. Г. Майерс дает следующее определение: «Тестирование – это процесс исполнения программы с целью обнаружения ошибок». Отсюда следует несколько основных выводов:

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

2) удачным считается тестовый прогон, который позволил обнаружить ошибку;

МИНУСЫ РАБОТЫ ТЕСТИРОВЩИКОМ. Кому эта работа НЕ подойдет?

3) следует проверить, все ли функции программа выполняет правильно;

4) программу надо тестировать при неправильных и недопустимых входных данных;

5) необходимо проверять, не выполняет ли программа побочные, не предусмотренные разработчиком, функции;

6) необходимо, чтобы тестирование программы проводилось как самим разработчиком, так и незаинтересованным лицом;

7) результаты применения каждого теста должны быть зафиксированы и тщательно проанализированы;

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

Аксиомы тестирования

Тестирование должно начинаться с определения целей.

Хорошим считается тест, для которого высока вероятность найти еще не выявленную ошибку.

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

Тесты готовятся как для правильных, так и для неправильных и недопустимых входных данных.

Тесты должны проверять выполнение всех функций программы.

Тесты должны проверять наличие непредусмотренных функций.

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

Результаты выполнения каждого теста должны быть оформлены документально и проанализированы.

Нельзя изменять программу, чтобы облегчить ее тестирование.

Виды тестирования

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

Элементами модульного тестирование являются:

1) синтаксическая проверка — проверка с использованием некоторого инструментального средства для выявления синтаксических ошибок в программном коде;

2) проверка соответствия стандартам кодирования — проверка кода на соответствие стандартам кодирования компании;

3) технический обзор программного кода.

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

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

Элементами интеграционного тестирования являются:

1) проверка функциональности — проверка соответствия отдельных функций, выполняемых совокупностями модулей, функциям, заданным в спецификациях требований;

2) проверка промежуточных результатов — проверка всех промежуточных результатов и файлов на наличие и корректность;

3) проверка интеграции — проверка того, что модули передают друг другу информацию корректно.

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

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

Читайте также:
Программа у которой есть версии для разных операционных систем

Элементами системного тестирования являются:

1) граничное тестирование — тестирование в граничных условиях;

2) прогоночное тестирование — тестирование всех функциональных характеристик реальной работы системы;

3) целевое тестирование — тестирование на целевой платформе (по возможности);

4) проверка документации — проверка пользовательской документации на корректность;

5) другие тесты, определяемые тестировщиком.

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

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

1) проверка инсталляции — проверка на ясность и корректность инструкций по инсталляции;

2) проверка документации — проверка того, что вся необходимая документация полностью подготовлена и готова к передаче заказчику.

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

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

Методы тестирования

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

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

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

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

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

Сравнительная оценка стратегий приведена в таблице:

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

Проектирование тестов

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

Хороший тест должен удовлетворять следующим требованиям:

1) должна быть достаточной вероятность выявления тестом ошибки.

2) Целью тестирования является поиск возможных ошибок. Поэтому, разрабатывая тестовые примеры, необходимо проанализировать все возможные варианты сбоев программы или ее некорректной работы;

3) набор тестов не должен быть избыточным. Если два теста предназначены для выявления одной и той же ошибки, то достаточно выполнить только один из них;

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

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

Источник: megaobuchalka.ru

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

Главная Программы Тестирование программного обеспечения

Тестирование программного обеспечения. Учебное пособие

Подробности марта 25, 2016 Просмотров: 37515

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

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

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

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

  1. Планирование
  2. Анализ
  3. Дизайн
  4. Разработка программного обеспечения
  5. Реализация
  6. Тестирование программного обеспечения
  7. Развертывание
  8. Техническое обслуживание

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

Читайте также:
Программа уже можно на мтв

Введение в тестирование программного обеспечения

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

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

Дефект (баг, неисправность): сбой в системе или продукте, который может привести к сбою или неисправности компонента.

Отказ: это разница между фактическим и ожидаемым результатом.

Риск: риск — это фактор, который может привести к отрицательным результатам или возможности убытка, или ущерба.

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

  1. Обнаружение дефектов
  2. Обретение уверенности и предоставление информации об уровне качества
  3. Предотвращение дефектов

Область применения тестирования программного обеспечения

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

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

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

Ключевые понятия

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

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

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

Верификация и Валидация: тестирование программного обеспечения проводится с учетом этих двух факторов.

  1. Верификация: проверяет, разработан ли данный продукт согласно спецификации.
  2. Валидация: проверяет, соответствует ли продукт требованиям клиентов.

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

Типы тестирования программного обеспечения

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

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

Инструкции по сценарию тестирования:

  • Black Box (черный ящик) тестирование
  • White Box (белый ящик) тестирование
  • Gray Box (серый ящик) тестирование

Уровни тестирования программного обеспечения жизненного цикла включают в себя:

  • Модульное тестирование
  • Интеграционное тестирование
  • Системное тестирование
  • Приемочное тестирования (альфа-тестирование и бета-тестирование)

Другими видами тестирования программного обеспечения являются:

  • Функциональное тестирование
  • Тестирование производительности (нагрузочное тестирование и стресс-тестирование)
  • Дымовое тестирование
  • Санитарное тестирование (проверка согласованности)
  • Регрессионное тестирование
  • Тестирование восстановления .
  • Юзабилити-тестирование
  • Тестирование на совместимость
  • Тестирование конфигурации
  • Исследовательское тестирование

Автоматизированное тестирование

Ручное тестирование — трудоемкий процесс. Автоматизация тестирования предполагает автоматизировать ручной процесс. Автоматизация тестирования — это процесс написания компьютерной программы в виде скриптов для тестирования, который обычно делается вручную. Некоторыми популярными средствами автоматизации являются Winrunner, Quick Test Professional (QTP), LoadRunner, SilkTest, Rational Robot, и т. д. Средства автоматизации также включает в себя сервисные инструменты, такие как TestDirector и многие другие.

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

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

  • Каскадная модель
  • V Модель
  • Спиральная модель
  • Рационального унифицированный процесс
  • Гибкая модели
  • Быстрая разработка приложений

Тестовые артефакты

В процессе тестирования программного обеспечения можно произвести различные артефакты, такие как:

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

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

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

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

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

Читайте также:
Обзор программ для автосервиса

Тестовый набор: это сборник тестовых случаев.

Процесс тестирование программного обеспечения

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

  1. Создание плана тестирования
  2. Дизайн тест-кейсов
  3. Описание тестовых случаев
  4. Обзор тестовых случаев
  5. Выполнение теста
  6. Изучение результатов тестов
  7. Составление конечного обзора

Ниже приведены примеры тестирования:

Тестирование программного обеспечения для входа на страницу системы:

цель: пользователь должен иметь возможность перейти на главную страницу.

  1. Программное обеспечение должно быть совместимо с операционной системой.
  2. Должна появиться страница «ввода логина».
  3. Текстовые поля идентификатора пользователя и пароля должны быть доступны с соответствующими метками.
  4. Должны быть в наличии кнопки «Войти» и «Отмена» с соответствующими подписями.

Тест 1

Название теста: проверка требований пользовательского интерфейса.

Шаги/действия: Пользователь просматривает страницу, чтобы проверить, включает ли она в себя ID пользователя и пароль в текстовых полях с соответствующими наклейками. Кроме того, кнопки «Войти» и «Отмена» должны быть доступны с соответствующими подписями.

Ожидаемые результаты: экран отображает интерфейс пользователя согласно требованиям пользователя.

Тест 2

Название теста: Текстовое поле для идентификатора пользователя следует: 1) разрешить только буквенные символы , 2) не разрешать специальные символы, такие как , 3) не разрешать цифровые символы .

Шаги/действия: 1) Пользователь вводит числа в текстовое поле. 2) Пользователь вводит алфавитно-цифровые данные в текстовом поле.

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

Тест 3

Название теста: проверка функциональности текстового поля для пароля: 1) текстовое поле для пароля должно принять шесть или более символов. 2) данные должны отображаться в зашифрованном виде.

Шаги/действия: 1) Пользователь вводит только два символа в текстовом поле пароля. 2) Пользователь вводит более шести символов в текстовом поле пароля. 3) Пользователь проверяет отображаются ли данные в зашифрованном виде.

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

Тест 4

Название теста: проверка функциональности кнопки «Войти».

Шаги/действия: 1) Пользователь проверяет, включена или отключена кнопка «Войти». 2) Пользователь нажимает на кнопку «Войти» и ожидает, просмотра главной страницы приложения.

Ожидаемые результаты: 1) система отображает кнопку «Войти». 2) Система перенаправляет пользователя на главную страницу приложения, как только он нажимает на кнопку «Войти».

Тест 5

Название теста: проверка функциональности кнопки «Отмена».

Шаги/действия: 1) Пользователь проверяет, включена или отключена кнопка «Отмена». 2) Пользователь проверяет, сбрасываются ли текстовые поля ID пользователя и пароль при нажатии кнопки «Отмена».

Ожидаемые результаты: 1) система отображает кнопки «Отмена». 2) система сбрасывает данные текстовых полей идентификатора пользователя и пароля, когда пользователь нажимает на кнопку «Отмена».

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

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

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

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

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

— Метрика программного обеспечения поможет избежать таких подводных камней, как:

  1. Перерасход средств
  2. Определение, источника проблемы
  3. Уточнение целей

— Даст ответы на такие вопросы как:

  1. Какова оценка каждого процесса деятельности?
  2. Каково качество кода, который был разработан?
  3. Как можно улучшить слаборазвитый код?

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

Некоторыми общими метриками программного обеспечения являются:

  • Покрытие кода
  • Цикломатическая сложность
  • Сплоченность
  • Связь
  • Функция точечного анализа
  • Время выполнения
  • Источник строк кода
  • Ошибка в строках кода

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

Тестирование программного обеспечения в качестве карьеры

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

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

Источник: juice-health.ru

Рейтинг
( Пока оценок нет )
Загрузка ...
EFT-Soft.ru