Национальный исследовательский ядерный университет «МИФИ»
Опубликован: 28.11.2007 | Доступ: свободный | Студентов: 3885 / 335 | Оценка: 4.53 / 3.65 | Длительность: 22:18:00
ISBN: 978-5-94774-825-3
Специальности: Программист, Тестировщик
Практическая работа 1:

Введение

< Лекция 1 || Практическая работа 1: 12 || Лекция 2 >
Аннотация: Обзор общих подходов к тестированию, изучение архитектуры программного комплекса "Калькулятор".

Внимание! Для работы с семинаром необходимы учебные файлы, которые Вы можете загрузить здесь.

2.1. Введение

Наши занятия будут направлены на приобретение практических навыков в области тестирования и верификации программного обеспечения (ПО). На протяжении всего семестра мы будем изучать данный курс на одном сквозном примере – на программном продукте "Калькулятор".

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

2.2. Система "Калькулятор"

2.2.1. Общее описание

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

1
  1+1
 (1+1)
 (1+1)*2

и т.д., то есть, выражения, корректные в математическом смысле.

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

2.2.2. Требования к системе

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

2.2.3. Архитектура

В архитектуре системы выделено 3 модуля. Каждый из модулей занимается определенной задачей. Соответственно, Система – это взаимодействие этих 3-х модулей. Разбиение Системы на модули вытекает из различной функциональности этих модулей. Рассмотрим их.

  1. Модуль математических функций – так как Система будет иметь дело с математикой, нам потребуется подобный модуль. В него включены такие функции, как сложение, умножение и др.
  2. Модуль анализа и вычисления выражений – это модуль, который занимается главной задачей Системы. Разбор и компиляция выражений – вот основные функции этого модуля. Непосредственные вычисления этот модуль не проводит, а лишь вызывает функции из математического модуля.
  3. Модуль графического интерфейса – обеспечивает управление системы в графической форме. Основные функции этого модуля – ввод и вывод данных.

Взаимодействие модулей показано на рис.2.1.

Взаимодействие модулей системы

Рис. 2.1. Взаимодействие модулей системы

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

2.2.4. Программный код

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

2.3. Тестирование системы

2.3.1. Общее описание

Как было сказано, наша основная задача – протестировать Систему.

Если в общем случае рассматривать жизненный цикл системы (например, V-образный), то наша задача лежит где-то справа (рис.2.2).

Обобщенный V-образный жизненный цикл разработки и верификации программных систем

Рис. 2.2. Обобщенный V-образный жизненный цикл разработки и верификации программных систем

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

 V-образный жизненный цикл разработки и верификации системы "Калькулятор"

Рис. 2.3. V-образный жизненный цикл разработки и верификации системы "Калькулятор"

2.3.2. Проверка программного кода

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

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

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

Немного о тестировании конкретных модулей.

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

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

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

При тестировании будет использоваться следующая последовательность действий.

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

2.3.3. Проверка архитектуры

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

2.3.4. Проверка требований

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

< Лекция 1 || Практическая работа 1: 12 || Лекция 2 >
Александр Медов
Александр Медов

Здравствуйте, какова полная сумма предоставленной услуги с печатью документа и отправкой по почте?

Владислав Нагорный
Владислав Нагорный

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

Спасибо!