5.5.-5.6. Тестирование программы

Как проверить эффективность работы программы тестированием в Python?

Подумай

  • Что такое тестирование программы?
  • Какие типы тестов для проверки программы вам известны?

Новые знания

 Мы познакомились с разделением процесса тестирования программы на три этапа.

1. Проверка нормальных условий.

2. Проверка предельных (граничных) условий.

3. Проверка особых условий.

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

   В 7 классе мы познакомились с методами тестирования программ, записанных на алгоритмы разветвления. Процесс тестирования программы не зависит от вида алгоритма (линейный, разветвленный или циклический), использованного в ней. Процесс тестирования состоит из одинаковых этапов во всех алгоритмах.

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

Ошибки, возникающие в программировании

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

Примеры синтаксических ошибок:

• отсутствие знаков препинания;

• несоответствие скобок;

• неправильная запись оператора;

• неправильное написание служебного слова;

• неправильное написание имени переменной;

• отсутствие условий завершения цикла;

• отсутствие описания массива и т. п.

  Как правило, синтаксические ошибки обнаруживаются в самом начале выполнения программы. А алгоритмические ошибки транслятор не может найти из-за того, что он не знает конечные мысли программиста.

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

Ошибки, которые не могут быть найдены транслятором

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

   Логические ошибки:

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

• неполное рассмотрение возможных условий;

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

   Ошибки, встречающиеся в циклах:

• неправильное определение начала цикла;

• неправильное определение условий окончания цикла;

• неправильное указание количества итераций;

• бесконечный цикл.

   Ошибки ввода-вывода и ошибки при работе с данными:

  • неправильно описаны типы данных;
  • организация чтения данных меньше или больше требуемого;
  • не выводится результат на все возможные варианты;

   Ошибки, допускаемые при использовании переменных:

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

   Ошибки, допускаемые при работе с массивами:

  • массивы, предварительно не приведенные к нулю;
  • неправильно описанные массивы;
  • последовательность присвоения индексов массивов неверна.

   Ошибки, допускаемые при выполнении арифметических операций:

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

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

Практическая работа

   Для того, чтобы близко ознакомиться с процессом тестирования программы, рассмотрим задачу «Делители» (задача районной олимпиады по информатике в 2009 году).

«Делители»

   Если данное натуральное число b делится на число а без остатка, тогда число а будет делителем числа b. Например, у числа 15 имеется 4 делителя: 1, 3, 5, 15. Для каждого заданного числа b определите, что число его делителей будет четным или нечетным. Даны N (1 < N <= 105) различных числа b. Для каждого заданного b (1 <=b <= 1018) определите количество делителей и если оно четно, то выведите на экран 0, если оно нечетное – 1. Время ответа программы на каждый тест не превышает 2 секунд.

   Остановимся на образцах тестовых данных, составленных к этой задаче (Таблица 1). Эти тесты разрабатываются и представляются перед решением задач. Хотя общее количество тестов было составлено 10, мы остановимся на 5 основных тестах. Потому что тесты одинакового типа повторяются по 2 раза.

Таблица1. Образцы тестовых данных для задачи

Рассмотрим тестовые данные, приведенные в таблице 1:

Тест №1: для простого состояния;

Тест №2: среди чисел встречается одно число с нечетным количеством делителей;

Тест №3: для случаев, когда граница данных 106;

Тесты №4, №5: проверочные тесты значения b на соответствие числам в степени 1018. Как видно, даны тестовые данные на нормальные, граничные и экстремальные ситуации задачи.

Почему такие тестовые данные составлены для проверки решения задачи? Какие трудности возникают в решении задачи?

   Для того, чтобы найти делители одного числа в решении задачи, нам необходимо использовать один цикл с параметром, а для того, чтобы найти делители последовательности чисел – еще один цикл. Тогда для решения этой задачи необходимо будет использовать 2 встроенных цикла. А если учесть, что длина последовательности передаваемых чисел составляет 100000, то программа не может ответить на каждый тест в течение 2 секунд. Здесь возникает вторая проблема: ограничение числа b – 1018. При определении делителя числа мы будем делить его на числа до его половины. Так что мы не можем организовать цикл до половины этого числа. По алгоритму, который мы знаем, можно сказать, что задача позволит пройти только 20 процентов тестовых заданий. Следовательно, необходимо рассмотреть другой эффективный алгоритм решения этой задачи. В качестве эффективного алгоритма, который может быть использован для этого расчета, необходимо вычислить квадратный корень из заданного числа. Если число извлекается из корня целым, то количество делителей этого числа является нечетное число, в противном случае-четное число.

Например:

квадратный корень из 36 получается 6. Количество его делителей 9: 1, 2, 3, 4, 6, 9, 12, 18, 36.

Корень квадратный из 40 равен 6,324.... Количество его делителей 8: 1, 2, 4, 5, 8, 10, 20, 40.

Тогда можно легко разработать программу задачи (рисунок 1).

Анализ

Прикрепите свой файл к этому заданию, нажав «Добавить свой материал».

Вопросы

1. Какие этапы включает тестирование программы?

2. Какие виды ошибок можно определить в ходе тестирования?

3. Какой набор тестов выдается на тестирование программы?

4. Какое влияние оказывает тестирование на работу программы?

5. Почему важно тестировать программу?

Задания

Прикрепите свой файл к этому заданию, нажав «Добавить свой материал».


Прикрепите свой файл к этому заданию, нажав «Добавить свой материал».


Прикрепите свой файл к этому заданию, нажав «Добавить свой материал».

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

Домашнее задание

Дано количество книг – N (N ≤ 20), а цена одной книги – K. Выведите на экран вычисленную стоимость книг. Цена одной книги составляет K тенге, цена 2 книг – 2 * K тенге ... и т. д.

Прикрепите свой файл к этому заданию, нажав «Добавить свой материал».


Өтінемін күте тұрыңыз