Разработка тестов

1. Классификация методов тестирования

  1. По объекту тестирования:
    1. тестирование на основе требований – призвано проверить, все ли требования к программному обеспечению выполнены;
    2. структурное тестирование – призвано проверить, все ли блоки программы функционируют надлежащим образом;
    3. статистическое тестирование – призвано проверить, как долго может выполняться программа, какое количество запросов может быть обработано и т.п.;
    4. тестирование, ориентированное на риски – позволяет удостовериться в том, что основные ситуации, связанные с рисками (неверные данные, безопасность и т.п.), обрабатываются должным образом.
  2. По знанию системы:
    1. тестирование белого ящика – тестирование, при котором тестировщик имеет доступ к исходному коду программного обеспечения;
    2. тестирование чёрного ящика – тестирование, при котором тестировщик не имеет доступа к исходному коду программного обеспечения.
  3. По степени автоматизированности:
    1. ручное тестирование;
    2. полуавтоматизированное тестирование;
    3. автоматизированное тестирование.
  4. По степени изолированности компонентов:
    1. модульное тестирование – тестируется минимально возможный компонент: класс или подпрограмма;
    2. интеграционное тестирование – тестируются интерфейсы между компонентами;
    3. системное тестирование – тестируется вся система в совокупности.
  5. По методу тестирования:
    1. статическое тестирование – программный код не выполняется, а анализ программы происходит на основе исходного кода, который вычитывается вручную, либо анализируется специальными инструментами;
    2. динамическое тестирование – код программы выполняется.

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

2. Пример

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

  1. Есть элемент, больший t
    1. Есть положительные элементы
      1. Все положительные элементы расположены до элемента, большего t
      2. Не все положительные элементы расположены до элемента, большего t
        • Номер первого положительного элемента меньше номера элемента, большего t
          • Положительный элемент, расположенный до элемента, большего t, минимален
            • Второй «по минимальности» элемент один
              • минимальный элемент расположен первым
              • минимальный элемент расположен в середине
              • минимальный элемент расположен последним
            • Второй «по минимальности» элемент не один
              • один минимальный элемент расположен первым
              • все минимальные элементы расположены в середине
              • один минимальный элемент расположен последним
          • Положительный элемент, расположенный до элемента, большего t, не является минимальным
            • Минимальный элемент один
              • минимальный элемент расположен первым
              • минимальный элемент расположен в середине
              • минимальный элемент расположен последним
            • Минимальных элементов несколько
              • один минимальный элемент расположен первым
              • все минимальные элементы расположены в середине
              • один минимальный элемент расположен последним
        • Номер первого положительного элемента равен номеру элемента, большего t
          • Минимальный элемент один
            • минимальный элемент расположен первым
            • минимальный элемент расположен в середине
            • минимальный элемент расположен последним
          • Минимальных элементов несколько
            • один минимальный элемент расположен первым
            • все минимальные элементы расположены в середине
            • один минимальный элемент расположен последним
        • Номер первого положительного элемента больше номера элемента, большего t
          • Минимальный элемент один
            • минимальный элемент расположен первым
            • минимальный элемент расположен в середине
            • минимальный элемент расположен последним
          • Минимальных элементов несколько
            • один минимальный элемент расположен первым
            • все минимальные элементы расположены в середине
            • один минимальный элемент расположен последним
    2. Нет положительных элементов
  2. Нет элемента, большего t
    1. Нет положительных элементов
    2. Есть положительные элементы
      1. Минимальный элемент один
        • минимальный элемент расположен первым
        • минимальный элемент расположен в середине
        • минимальный элемент расположен последним
      2. Минимальных элементов несколько
        • один минимальный элемент расположен первым
        • все минимальные элементы расположены в середине
        • один минимальный элемент расположен последним

Общее количество необходимых тестовых примеров – 33.

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

Задание. Проверьте правильность приведённой программы с помощью метода ручной прокрутки. Если есть ошибки, постарайтесь их найти.

program Sort; const nmax = 100; type mas = array [1..nmax] of real; var x: mas; y: real; n, i, j: integer; begin // Ввод write('введите количество элементов массива: '); readln(n); writeln('Введите массив'); for i := 1 to n do readln(x[i]); // Вывод исходного массива for i := 1 to n do write(x[i]:8:2, ' '); writeln; // Сортировка for i := 2 to n do begin y := x[i]; j := i - 1; while (j > 1) and (x[j] > y) do begin x[j + 1] := x[j]; j := j - 1; end; x[j] := y; end; // Вывод отсортированного массива for i := 1 to n do write(x[i]:8:2, ' '); writeln; end.