ВУЗ: Не указан
Категория: Не указан
Дисциплина: Не указана
Добавлен: 20.11.2019
Просмотров: 9472
Скачиваний: 184
Часто
тестирование
завершают
потому
,
что
закончилось
время
,
отведенное
на
выполнение
данного
этапа
.
В
этом
случае
тестирование
сворачивают
,
обходясь
минимальным
вариантом
.
Минимальное
тестирование
[31]
предполагает
:
тестирование
граничных
значений
;
•
тщательную
проверку
руководства
;
•
тестирование
минимальных
конфигураций
технических
средств
;
•
тестирование
возможности
редактирования
команд
и
повторения
их
в
любой
последовательности
;
•
тестирование
устойчивости
к
ошибкам
пользователя
.
Часть
ошибок
при
этом
остаются
неисправленными
«
отложенными
»
до
выпуска
следующей
версии
.
9.6.
Оценочное
тестирование
После
завершения
комплексного
тестирования
приступают
к
оценочному
тестированию
,
целью
которого
является
тестирование
программы
на
соответствие
основным
требованиям
.
Эта
стадия
тестирования
особенно
важна
для
программных
продуктов
,
предназначенных
для
продажи
на
рынке
.
Оценочное
тестирование
,
которое
также
называют
«
тестированием
системы
в
целом
»,
включает
следующие
виды
:
•
тестирование
удобства
использования
-
последовательная
проверка
соответствия
программного
продукта
и
документации
на
него
основным
положениям
технического
задания
;
•
тестирование
на
предельных
объемах
-
проверка
работоспособности
программы
на
максимально
больших
объемах
данных
,
например
,
объемах
текстов
,
таблиц
,
большом
количестве
файлов
и
т
.
п
.;
•
тестирование
на
предельных
нагрузках
-
проверка
выполнения
программы
на
возможность
обработки
большого
объема
данных
,
поступивших
в
течение
короткого
времени
;
•
тестирование
удобства
эксплуатации
-
анализ
психологических
факторов
,
возникающих
при
работе
с
программным
обеспечением
;
это
тестирование
позволяет
определить
,
удобен
ли
интерфейс
,
не
раздражает
ли
цветовое
или
звуковое
сопровождение
и
т
.
п
.;
•
тестирование
защиты
-
проверка
защиты
,
например
,
от
несанкционированного
доступа
к
информации
;
•
тестирование
производительности
-
определение
пропускной
способности
при
заданной
конфигурации
и
нагрузке
;
•
тестирование
требований
к
памяти
-
определение
реальных
потребностей
в
оперативной
и
внешней
памяти
;
•
тестирование
конфигурации
оборудования
-
проверка
работоспособности
программного
обеспечения
на
разном
оборудовании
;
•
тестирование
совместимости
-
проверка
преемственности
версий
:
в
тех
случаях
,
если
очередная
версия
системы
меняет
форматы
данных
,
она
должна
предусматривать
специальные
конвекторы
,
обеспечивающие
возможность
работы
с
файлами
,
созданными
предыдущей
версией
системы
;
•
тестирование
удобства
установки
-
проверка
удобства
установки
;
•
тестирование
надежности
-
проверка
надежности
с
использованием
соответствующих
математических
моделей
[66];
•
тестирование
восстановления
-
проверка
восстановления
программного
обеспечения
,
например
системы
,
включающей
базу
данных
,
после
сбоев
оборудования
и
программы
;
•
тестирование
удобства
обслуживания
-
проверка
средств
обслуживания
,
включенных
в
программное
обеспечение
;
•
тестирование
документации
-
тщательная
проверка
документации
,
например
,
если
документация
содержит
примеры
,
то
их
все
необходимо
попробовать
;
•
тестирование
процедуры
-
проверка
ручных
процессов
,
предполагаемых
в
системе
.
Естественно
,
целью
всех
этих
проверок
является
поиск
несоответствий
техническому
заданию
.
Считают
,
что
только
после
выполнения
всех
видов
тестирования
программный
продукт
может
быть
представлен
пользователю
или
к
реализации
.
Однако
на
практике
обычно
выполняют
не
все
виды
оценочного
тестирования
,
так
как
это
очень
дорого
и
трудоемко
.
Как
правило
,
для
каждого
типа
программного
обеспечения
выполняют
те
виды
тестирования
,
которые
являются
для
него
наиболее
важными
.
Так
базы
данных
обязательно
тестируют
на
предельных
объемах
,
а
системы
реального
времени
-
на
предельных
нагрузках
.
Контрольные
вопросы
и
задания
1.
Что
является
целью
тестирования
программ
?
Почему
?
2.
Перечислите
известные
вам
виды
контроля
качества
программного
обеспечения
.
На
каких
этапах
применяют
каждый
их
них
?
3.
Какие
подходы
к
тестированию
вы
знаете
?
В
чем
они
заключаются
?
4.
Почему
функциональное
тестирование
называют
«
тестированием
по
методу
черного
ящика
»?
Перечислите
методы
функционального
тестирования
и
определите
,
в
каких
случаях
следует
использовать
каждый
из
них
.
5.
Почему
структурное
тестирование
называют
«
тестированием
по
методу
белого
или
прозрачного
ящика
»?
Перечислите
методы
структурного
тестирования
и
определите
возможности
каждого
из
них
.
Какой
метод
структурного
тестирования
обеспечивает
наибольшую
вероятность
обнаружения
ошибок
?
6.
Используя
методы
обоих
подходов
,
сформируйте
пакет
тестов
для
тестирования
программы
,
вычисляющей
действительные
корни
квадратного
уравнения
.
Какие
методы
вы
использовали
и
почему
?
7.
Чем
нисходящее
тестирование
отличается
от
восходящего
?
Что
понимают
под
комплексным
тестированием
и
чем
оно
отличается
от
тестирования
компонент
?
Когда
можно
прекращать
тестирование
компонентов
?
8.
Перечислите
виды
тестирования
системы
в
целом
.
В
каких
случаях
применяют
каждый
из
них
?
10.
ОТЛАДКА
ПРОГРАММНОГО
ОБЕСПЕЧЕНИЯ
Отладка
программы
—
один
их
самых
сложных
этапов
разработки
программного
обеспечения
,
требующий
глубокого
знания
:
•
специфики
управления
используемыми
техническими
средствами
,
•
операционной
системы
,
•
среды
и
языка
программирования
,
•
реализуемых
процессов
,
•
природы
и
специфики
различных
ошибок
,
•
методик
отладки
и
соответствующих
программных
средств
.
Обсуждению
последних
двух
вопросов
и
посвящается
данная
глава
.
10.1.
Классификация
ошибок
Отладка
-
это
процесс
локализации
и
исправления
ошибок
,
обнаруженных
при
тестировании
программного
обеспечения
.
Локализацией
называют
процесс
определения
оператора
программы
,
выполнение
которого
вызвало
нарушение
нормального
вычислительного
процесса
.
Доя
исправления
ошибки
необходимо
определить
ее
причину
,
т
.
е
.
определить
оператор
или
фрагмент
,
содержащие
ошибку
.
Причины
ошибок
могут
быть
как
очевидны
,
так
и
очень
глубоко
скрыты
.
В
целом
сложность
отладки
обусловлена
следующими
причинами
:
•
требует
от
программиста
глубоких
знаний
специфики
управления
используемыми
техническими
средствами
,
операционной
системы
,
среды
и
языка
программирования
,
реализуемых
процессов
,
природы
и
специфики
различных
ошибок
,
методик
отладки
и
соответствующих
программных
средств
;
•
психологически
дискомфортна
,
так
как
необходимо
искать
собственные
ошибки
и
,
как
правило
,
в
условиях
ограниченного
времени
;
•
возможно
взаимовлияние
ошибок
в
разных
частях
программы
,
например
,
за
счет
затирания
области
памяти
одного
модуля
другим
из
-
за
ошибок
адресации
;
•
отсутствуют
четко
сформулированные
методики
отладки
.
В
соответствии
с
этапом
обработки
,
на
котором
проявляются
ошибки
,
различают
(
рис
. 10.1):
синтаксические
ошибки
-
ошибки
,
фиксируемые
компилятором
(
транслятором
,
интерпретатором
)
при
выполнении
синтаксического
и
частично
семантического
анализа
программы
;
ошибки
компоновки
-
ошибки
,
обнаруженные
компоновщиком
(
редактором
связей
)
при
объединении
модулей
программы
;
ошибки
выполнения
-
ошибки
,
обнаруженные
операционной
системой
,
аппаратными
средствами
или
пользователем
при
выполнении
программы
.
Синтаксические
ошибки
.
Синтаксические
ошибки
относят
к
группе
самых
простых
,
так
как
синтаксис
языка
,
как
правило
,
строго
формализован
,
и
ошибки
сопровождаются
развернутым
комментарием
с
указанием
ее
местоположения
.
Определение
причин
таких
ошибок
,
как
правило
,
труда
не
составляет
,
и
даже
при
нечетком
знании
правил
языка
за
несколько
прогонов
удается
удалить
все
ошибки
данного
типа
.
Следует
иметь
в
виду
,
что
чем
лучше
формализованы
правила
синтаксиса
языка
,
тем
больше
ошибок
из
общего
количества
может
обнаружить
компилятор
и
,
соответственно
,
меньше
ошибок
будет
обнаруживаться
на
следующих
этапах
.
В
связи
с
этим
говорят
о
языках
программирования
с
защищенным
синтаксисом
и
с
незащищенным
синтаксисом
.
К
первым
,
безусловно
,
можно
отнести
Pascal,
имеющий
очень
простой
и
четко
определенный
синтаксис
,
хорошо
проверяемый
при
компиляции
программы
,
ко
вторым
-
Си
со
всеми
его
модификациями
.
Чего
стоит
хотя
бы
возможность
выполнения
присваивания
в
условном
операторе
в
Си
,
например
:
if (c = n) x = 0; /*
в
данном
случае
не
проверятся
равенство
с
и
n,
а
выполняется
присваивание
с
значения
n,
после
чего
результат
операции
сравнивается
с
нулем
,
если
программист
хотел
выполнить
не
присваивание
,
а
сравнение
,
то
эта
ошибка
будет
обнаружена
только
на
этапе
выполнения
при
получении
результатов
,
отличающихся
от
ожидаемых
*/
Ошибки
компоновки
.
Ошибки
компоновки
,
как
следует
из
названия
,
связаны
с
проблемами
,
обнаруженными
при
разрешении
внешних
ссылок
.
Например
,
предусмотрено
обращение
к
подпрограмме
другого
модуля
,
а
при
объединении
модулей
данная
подпрограмма
не
найдена
или
не
стыкуются
списки
параметров
.
В
большинстве
случаев
ошибки
такого
рода
также
удается
быстро
локализовать
и
устранить
.
Ошибки
выполнения
.
К
самой
непредсказуемой
группе
относятся
ошибки
выполнения
.
Прежде
всего
они
могут
иметь
разную
природу
,
и
соответственно
по
-
разному
проявляться
.
Часть
ошибок
обнаруживается
и
документируется
операционной
системой
.
Выделяют
четыре
способа
проявления
таких
ошибок
:
•
появление
сообщения
об
ошибке
,
зафиксированной
схемами
контроля
выполнения
машинных
команд
,
например
,
переполнении
разрядной
сетки
,
ситуации
«
деление
на
ноль
»,
нарушении
адресации
и
т
.
п
.;
•
появление
сообщения
об
ошибке
,
обнаруженной
операционной
системой
,
например
,
нарушении
защиты
памяти
,
попытке
записи
на
устройства
,
защищенные
от
записи
,
отсутствии
файла
с
заданным
именем
и
т
.
п
.;
• «
зависание
»
компьютера
,
как
простое
,
когда
удается
завершить
программу
без
перезагрузки
операционной
системы
,
так
и
«
тяжелое
»,
когда
для
продолжения
работы
необходима
перезагрузка
;
•
несовпадение
полученных
результатов
с
ожидаемыми
.
Примечание
.
Отметим
,
что
,
если
ошибки
этапа
выполнения
обнаруживает
пользователь
,
то
в
двух
первых
случаях
,
получив
соответствующее
сообщение
,
пользователь
в
зависимости
от
своего
характера
,
степени
необходимости
и
опыта
работы
за
компьютером
,
либо
попробует
понять
,
что
произошло
,
ища
свою
вину
,
либо
обратится
за
помощью
,
либо
постарается
никогда
больше
не
иметь
дела
с
этим
продуктом
.
При
«
зависании
»
компьютера
пользователь
может
даже
не
сразу
понять
,
что
происходит
что
-
то
не
то
,
хотя
его
печальный
опыт
и
заставляет
волноваться
каждый
раз
,
когда
компьютер
не
выдает
быстрой
реакции
на
введенную
команду
,
что
также
целесообразно
иметь
в
виду
.
Также
опасны
могут
быть
ситуации
,
при
которых
пользователь
получает
неправильные
результаты
и
использует
их
в
своей
работе
.
Причины
ошибок
выполнения
очень
разнообразны
,
а
потому
и
локализация
может
оказаться
крайне
сложной
.
Все
возможные
причины
ошибок
можно
разделить
на
следующие
группы
:
•
неверное
определение
исходных
данных
,
•
логические
ошибки
,
•
накопление
погрешностей
результатов
вычислений
(
рис
. 10.2).
Н
е
в
е
р
н
о
е
о
п
р
е
д
е
л
е
н
и
е
и
с
х
о
д
н
ы
х
д
а
н
н
ы
х
происходит
,
если
возникают
любые
ошибки
при
выполнении
операций
ввода
-
вывода
:
ошибки
передачи
,
ошибки
преобразования
,
ошибки
перезаписи
и
ошибки
данных
.
Причем
использование
специальных
технических
средств
и
программирование
с
защитой
от
ошибок
(
см
.§ 2.7)
позволяет
обнаружить
и
предотвратить
только
часть
этих
ошибок
,
о
чем
безусловно
не
следует
забывать
.
Л
о
г
и
ч
е
с
к
и
е
о
ш
и
б
к
и
имеют
разную
природу
.
Так
они
могут
следовать
из
ошибок
,
допущенных
при
проектировании
,
например
,
при
выборе
методов
,
разработке
алгоритмов
или
определении
структуры
классов
,
а
могут
быть
непосредственно
внесены
при
кодировании
модуля
.
К
последней
группе
относят
:
ошибки
некорректного
использования
переменных
,
например
,
неудачный
выбор
типов
данных
,
использование
переменных
до
их
инициализации
,
использование
индексов
,
выходящих
за
границы
определения
массивов
,
нарушения
соответствия
типов
данных
при
использовании
явного
или
неявного
переопределения
типа
данных
,
расположенных
в
памяти
при
использовании
нетипизированных
переменных
,
открытых
массивов
,
объединений
,
динамической
памяти
,
адресной
арифметики
и
т
.
п
.;
ошибки
вычислений
,
например
,
некорректные
вычисления
над
неарифметическими
переменными
,
некорректное
использование
целочисленной
арифметики
,
некорректное
преобразование
типов
данных
в
процессе
вычислений
,
ошибки
,
связанные
с
незнанием
приоритетов
выполнения
операций
для
арифметических
и
логических
выражений
,
и
т
.
п
.;
ошибки
межмодульного
интерфейса
,
например
,
игнорирование
системных
соглашений
,
нарушение
типов
и
последовательности
при
передачи
параметров
,
несоблюдение
единства
единиц