Виды ошибок методы отладки презентация

1. Причины и типы ошибок

ПРИЧИНЫ И ТИПЫ ОШИБОК

2. Классификация ошибок по причине возникновения

• синтаксические ошибки;
• семантические ошибки;
• логические ошибки.

3. Синтаксические ошибки

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

4. Семантические ошибки

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

5. Логические ошибки

• связаны с неправильным применением тех
или иных алгоритмических конструкций.
• Эти ошибки при выполнении программы могут
проявиться явно (выдано сообщение об
ошибке, нет результата или выдан неверный
результат, программа «зацикливается»), но
чаще они проявляют себя только при
определенных сочетаниях параметров или
вообще не вызывают нарушения работы
программы, которая в этом случае выдает
правдоподобные, но неверные результаты.

6. Классификация ошибок по этапу обработки программы

Ошибки, которые могут быть в программе,
принято делить на три группы:
• ошибки компиляции;
• ошибки компоновки;
• ошибки выполнения.

7.

Ошибки компиляции
Ошибки компиляции (Compile-time error) – ошибки,
фиксируемые компилятором (транслятором, интерпретатором)
при выполнении синтаксического и частично семантического
анализа программы;
Наиболее легко устранимы.
Их обнаруживает компилятор, а программисту остается только
внести изменения в текст программы и выполнить повторную
компиляцию.
Компилятор просматривает программу от начала. Если
обнаруживается
ошибка,
то
процесс
компиляции
приостанавливается и в окне редактора кода выделяется строка,
которая, по мнению компилятора, содержит ошибочную
конструкцию.

8.

Ошибки компиляции
В нижнюю часть окна редактора кода компилятор выводит сообщения об
ошибках. Первая ошибка – это первая от начала текста программы
синтаксическая ошибка, обнаруженная компилятором. Наличие в тексте даже
одной синтаксической ошибки приводит к возникновению второй, фатальной
ошибки (Fatal Error) – невозможности генерации исполняемой программы.

9. Наиболее типичные ошибки компиляции

Сообщения компилятора
Undeclared identifier
(Необъявленный
идентификатор)
Вероятная причина
Используется переменная, не объявленная в
разделе var программы;
Ошибка при написании имени переменной;
Ошибка при написании имени инструкции
(оператора).
Unterminated string
При записи строковой константы не
(Незавершенная строка)
поставлена завершающая кавычка.
Incompaible types … and В операторе присваивания тип выражения

не соответствует или не может быть
(Несовместимые типы)
приведен к типу переменной, получающей
значение выражения.
Missing operator or
Не поставлена точка с запятой после
semicolon
инструкции программы.
(Отсутствует оператор или точка
с запятой)

10. Ошибки компоновки

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

11. Ошибки выполнения

Ошибки выполнения – ошибки, обнаруженные
операционной системой, аппаратными средствами или
пользователем при выполнении программы.
Могут иметь разную природу, и соответственно поразному проявляться.
Часть ошибок обнаруживается и документируется
операционной системой.

12. Ошибки выполнения

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

13. Причины ошибок выполнения

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

14. Причины ошибок выполнения

15. Предотвращение и обработка исключений

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

16. Предотвращение и обработка исключений

Инструкция обработки исключения в общем виде:
try // инструкции, выполнение которых может вызвать
исключение
except // начало секции обработки исключений
on ТипИсключения1 do Обработка1;
on ТипИсключения2 do Обработка2;
…;
else // инструкции обработки остальных исключений
end;

17. Предотвращение и обработка исключений

где:
• try — ключевое слово, обозначающее, что далее следуют
инструкции, при выполнении которых возможно
возникновение исключений, и что обработку этих
исключений берет на себя программа;
• except — ключевое слово, обозначающее начало секции
обработки исключений. Инструкции этой секции будут
выполнены, если в программе возникнет ошибка;
• on — ключевое слово, за которым следует тип
исключения, обработку которого выполняет инструкция,
следующая за do;
• else — ключевое слово, за которым следуют инструкции,
обеспечивающие обработку исключений, тип которых не
указаны в секции except.

18. Типичные исключения

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

19. Пример: Обработка исключения типа EZeroDivide

procedure TForm1.Button1Click(Sender: TObject);
Var u, r, i: real; // напряжение , сопротивление, ток
begin
Labels.Caption := ‘ ‘;
try // инструкции, которые могут вызвать исключение (ошибку)
u := StrToFloat(Edit1.Text);
r := StrToFloat(Edit2.Text);
i := u/r;
except // секция обработки исключений
onEZeroDivide do // деление на ноль
begin
ShowMessage(‘Сопротивление не может быть равно нулю!’);
exit;
end;
on EConvertError do // ошибка преобразования строки в число
begin
ShowMessage(‘Напряжение и сопротивление должны быть заданы числом. ‘ );
exit;
end; end;

20. Отладка и тестирование

ОТЛАДКА И ТЕСТИРОВАНИЕ

21.

Немного истории
Долгое время было принято считать, что целью тестирования
является доказательство отсутствия ошибок в программе.
Но полный
перебор
всех
возможных
вариантов
выполнения
программы
находится
за
пределами
вычислительных возможностей даже для очень небольших
программ.
«Тестирование – это процесс выполнения программ с
целью обнаружения ошибок».
Гленфорд Майерс
Майерс, Г. Искусство тестирования программ, 1982

22.

Немного истории
До начала 80-х годов процесс тестирования программного
обеспечения (ПО) был разделен с процессом разработки: вначале
программисты реализовывали заданную функциональность, а
затем тестировщики приступали к проверке качества созданных
программ.
Проблемы:
• разработка программ может оказаться достаточно длительной –
чем в это время должны заниматься тестировщики?
• Плохая предсказуемости результатов такого процесса разработки.
Ключевой вопрос: сколько времени потребуется на завершение
продукта, в котором существует 500 известных ошибок?

23.

Немного истории
Статистика:
Даже
однострочное
изменение
в
программе
с
вероятностью 55 % либо не исправляет старую ошибку,
либо вносит новую. Если же учитывать изменения любого
объема, то в среднем менее 20 % изменений корректны с
первого раза.

24.

Немного истории
В 90-х годах появилась другая методика разработки
(zero-defect mindset), основная идея которой заключается в
том, что качество программ проверяется постоянно в
процессе разработки.
Тестирование становится центральной частью любого
процесса разработки программ
Данная методика предъявляет существенно более высокие требования к
квалификации инженера тестирования: в сферу его ответственности
попадает не только функциональное тестирование, но и организация
процесса разработки (процесс ежедневной сборки, участие в инспекциях,
сквозных просмотрах и обычное чтение исходных текстов тестируемых
программ). Поэтому идеальной кандидатурой на позицию тестировщика
становится наиболее опытный программист в команде.

25. Зависимость вероятности правильного исправления ошибок и стоимости исправления ошибок от этапа разработки

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

26.

Основные понятия, связанные с
тестированием и отладкой
Отладка программного средства – это деятельность,
направленная на обнаружение и исправление ошибок в ПС с
использованием процессов выполнения его программ.
Тестирование программного средства — процесс выполнения
программ на некотором наборе данных, для которого заранее
известен результат применения или известны правила поведения
этих программ.
Отладка = Тестирование + Поиск ошибок + Редактирование

27.

Основные понятия, связанные с
тестированием и отладкой
Процесс отладки включает:
• действия, направленные на выявление ошибок
(тестирование);
• диагностику и локализацию ошибок (определение
характера ошибок и их местонахождение);
• внесение исправлений в программу с целью устранения
ошибок (редактирование).
Отладка = Тестирование + Поиск ошибок + Редактирование
Самым трудоемким и дорогим является тестирование,
затраты на которое приближаются к 45% общих затрат на
разработку ПС и от 30 до 60% общей трудоемкости создания
программного продукта.

28.

Две задачи тестирования
Первая задача тестирования – подготовить набор тестов и
применить к ним ПС, чтобы обнаружить в нём по возможности
большее число несоответсвий.
Вторая задача тестирования — определить момент окончания
отладки ПС (или отдельной его компоненты).

29.

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

30. Требования к программному продукту и тестирование

Разработка любого программного продукта начинается с
выявления требований к этому продукту.
Спецификация (англ. Software Requirements Specification, SRS) документ, в котором отражены все требования к продукту описываются, как функциональные (что должна делать
программа, варианты взаимодействия между пользователями
и программным обеспечением), так и нефункциональные
(например, на каком оборудовании должна работать
программа,
производительность, стандарты качества)
требования.

31. Рекомендуемая стандартом IEEE 830 структура SRS

Введение
– Цели
– Соглашения о терминах
– Предполагаемая аудитория и последовательность восприятия
– Масштаб проекта
– Ссылки на источники
Общее описание
– Видение продукта
– Функциональность продукта
– Классы и характеристики пользователей
– Среда функционирования продукта (операционная среда)
– Рамки, ограничения, правила и стандарты
– Документация для пользователей
– Допущения и зависимости
Функциональность системы
– Функциональный блок X (таких блоков может быть несколько)
• Описание и приоритет
• Причинно-следственные связи, алгоритмы
• Функциональные требования

32. Рекомендуемая стандартом IEEE 830 структура SRS (продолжение)

Требования к внешним интерфейсам
– Интерфейсы пользователя (UX)
– Программные интерфейсы
– Интерфейсы оборудования
– Интерфейсы связи и коммуникации
Нефункциональные требования
– Требования к производительности
– Требования к сохранности (данных)
– Критерии качества программного обеспечения
– Требования к безопасности системы
Прочие требования
– Приложение А: Глоссарий
– Приложение Б: Модели процессов и предметной области и другие
диаграммы
– Приложение В: Список ключевых задач

33.

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

34. Стратегия проектирования тестов

В тестирование ПС входят
• постановка задачи для теста,
• проектирование,
• написание тестов,
• выполнение тестов,
• изучение результатов тестирования.

35.

По объекту тестирования
Функциональное тестирование
Тестирование производительности
Нагрузочное тестирование
Стресс-тестирование
Тестирование стабильности
Конфигурационное тестирование
Юзабилити-тестирование
Тестирование интерфейса пользователя
Тестирование безопасности
Тестирование локализации
Тестирование совместимости
По знанию системы
Тестирование чёрного ящика
Тестирование белого ящика
Тестирование серого ящика
По степени автоматизации –
Ручное тестирование
Автоматизированное тестирование
Полуавтоматизированное тестирование
По степени изолированности компонентов
Модульное тестирование
Интеграционное тестирование
Системное тестирование
По времени проведения тестирования
Альфа-тестирование
Дымовое тестирование
Тестирование новой функции
Подтверждающее тестирование
Регрессионное тестирование
Приёмочное тестирование
Бета-тестирование
По признаку позитивности сценариев
Позитивное тестирование
Негативное тестирование
По степени подготовленности к
тестированию
Тестирование по документации
(формальное тестирование)
Интуитивное тестирование (англ. ad hoc
testing)

36.

Подходы к выработке стратегии
проектирования тестов
Функциональный подход основывается на том, что
структура программного обеспечения не известна (программа
рассматривается как «черный ящик»). В этом случае тесты
проектируют, исследуя внешние спецификации или
спецификации сопряжения программы или модуля, которые
он тестирует.
Логика проектировщика тестов такова: «Меня не
интересует, как выглядит эта программа, и выполнил ли я все
команды. Я удовлетворен, если программа будет вести себя
так, как указано в спецификациях».
В идеале — проверить все возможные комбинации
и значения на входе.

37.

Подходы к выработке стратегии
проектирования тестов
Структурный подход базируется на том, что известна
структура тестируемого программного обеспечения, в том
числе его алгоритмы («стеклянный ящик»). В этом случае
тесты строят так, чтобы проверить правильность реализации
заданной логики в коде программы.
Проектировщики
тестов
стремятся
подготовить
достаточное число тестов, чтобы каждая команда была
выполнена, хотя бы, один раз. Чтобы каждая команда
условного перехода выполнялась в каждом направлении
хотя бы раз.
В идеале — проверить каждый путь, каждую ветвь
алгоритма.

38.

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

39.

Критерии полноты тестирования

40.

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

41. Критерии полноты тестирования

• Функциональные критерии:
• Структурные критерии:
1)
2)
3)
4)
5)
Покрытие операторов
Покрытие условий
Покрытие путей
Покрытие функций
Покрытие вход/выход

42. Критерии полноты тестирования

Критерий тестирования функций

43. Критерии полноты тестирования

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

44. Критерий тестирования функций

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

45. Критерии тестирования входных и выходных данных

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

46. Критерии тестирования входных и выходных данных

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

47. Критерии тестирования входных и выходных данных

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

48. Критерии тестирования входных и выходных данных

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

49. Критерии тестирования входных и выходных данных

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

50. Критерии тестирования входных и выходных данных

Пример. Показывает отличие количества тестов при различных выбранных
структурных критериях.
В случае выбора критерия «Покрытие операторов» достаточен 1 тест
(рис.а)
В случае выбора критерия «Покрытие условий» достаточно двух тестов,
покрывающих пути 1, 4 или 2, 3 (рис.б)
В случае выбора критерия «Покрытие путей необходимо четыре теста
для всех четырех путей (рис.б)

51. Структурные критерии

Покрытие операторов
Пример 1
If ((A>1) and (B =0))
then X := X/A;
If ((A=2) or (X>1))
then X:=X+1;
Можно выполнить каждый оператор,
записав один-единственный тест,
который реализовал бы путь асе.
Иными словами, если бы в точке а были
установлены значения А = 2, В = 0 и Х =
3, каждый оператор выполнялся бы
один раз (в действительности Х может
принимать любое значение)

52.

Покрытие операторов
Пример 2

53. Покрытие операторов

Покрытие условий
Пример 1
If ((A>1) and (B =0))
then X = X/A;
If ((A=2) or (X>1))
then X:=X+1;
Покрытие условий может быть выполнено двумя тестами,
покрывающими либо пути асе и abd, либо пути acd и abe.
Если мы выбираем последнее альтернативное покрытие, то входами двух тестов являются A = 3, В = 0, Х = 1 и A = 2, В = 1, Х = 1.

54. Покрытие операторов

Покрытие условий
Пример 2
a:=7;
while a>x do a:=a-1;
b:=1/a;
a:=7
a>x

b:=1/a
+
a:=a-1
Для того чтобы удовлетворить критерию покрытия ветвей в данном
случае достаточно одного теста. Например такого, чтобы х был равен
6 или 5. Все ветви будут пройдены. Но ошибка в программе
обнаружена так и не будет. Она проявится в единственном случае,
когда х=0. Но такого теста от нас критерий покрытия ветвей не
требует.

55. Покрытие условий

Покрытие путей
Пример 1
If ((A>1) and (B =0))
then X = X/A;
If ((A=2) or (X>1))
then X:=X+1;
Покрытие путей (все возможные пути
через заданную часть кода должны быть
выполнены и протестированы) может быть
выполнено четырьмя тестами:
a,c,e – A=2, B=0, X=3
a,b,e – A=2, B=1, X=1
a,b,d – A=3, B=1, X=1
a,c,d – A=3, B=0, X=1

56. Покрытие условий

Покрытие путей
a
Пример 1
If ((A>1) and (B =0))
then X = X/A;
If ((A=2) or (X>1))
then X:=X+1;
c
b
е
d

57. Покрытие путей

Критерий комбинаторного покрытия условий
Пример 2
If (a=0) or (b=0) or (c=0)
Then d:=1/(a+b)
Else d:=1;
Ошибка будет выявлена только при a=0 и b=0.
Критерий покрытия путей не гарантирует
проверки такой ситуации.
Для решения этой проблемы был предложен критерий комбинаторного
покрытия условий, который требует подобрать такой набор тестов, чтобы
хотя бы один раз выполнялась любая комбинация простых условий.
Критерий значительно более надежен, чем покрытие путей, но обладает
двумя существенными недостатками.
• Во-первых, он может потребовать очень большого числа тестов.
Количество тестов, необходимых для проверки комбинаций n простых
условий, равно 2n.
• Во-вторых, даже комбинаторное покрытие условий не гарантирует
надежную проверку циклов.

58. Покрытие путей

Уровни тестирования
• Модульное тестирование (автономное тестирование,
юнит-тестирование) — тестируется минимально
возможный для тестирования компонент, например,
отдельный класс или функция. Часто модульное
тестирование осуществляется разработчиками ПО.
• Интеграционное тестирование — тестируются
интерфейсы между компонентами, подсистемами. При
наличии резерва времени на данной стадии тестирование
ведётся итерационно, с постепенным подключением
последующих подсистем.
• Системное тестирование — тестируется интегрированная
система на её соответствие требованиям.

59.

Основные этапы разработки
сценария автономного тестирования
1. На основании спецификации отлаживаемого модуля
подготовить тесты для
– каждой логической возможности ситуации;
– каждой границы областей возможных значений всех
входных данных;
– каждой области недопустимых значений;
– каждого недопустимого условия.
2. Проверить текст модуля, чтобы убедиться, что каждое
направление любого разветвления будет пройдено хотя
бы один раз. Добавить недостающие тесты.

60. Два основных вида тестирования

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

61. Уровни тестирования

Основная особенность практики
тестирования ПС
По мере роста числа обнаруженных и исправленных
ошибок в ПС растёт также относительная вероятность
существования в нём необнаруженных ошибок.
Это подтверждает важность предупреждения ошибок на
всех стадиях разработки ПС.

62. Основные этапы разработки сценария автономного тестирования

Творческая работа
1. Разделиться на группы
2. Получить тему (практические работы по Delphi №№ 3, 5, 7,
9, 10)
3. Составить спецификацию
4. Разработать программу тестирования:
4.1. Определить виды тестирования
4.2. Определить объекты тестирования
4.3. Определить субъекты тестирования
4.4. Определить классы входных данных
4.5. Написать тест-кейсы для тестирования функций и ожидаемые
результаты
4.6. Написать тест-кейсы для структурного тестирования и
ожидаемые результаты
Составить чек-листы для проведения всех видов тестирования
5. Провести тестирование
6. Сделать выводы

63. Основные этапы разработки сценария автономного тестирования

Содержание ПЗ к проекту
Титульный лист
Бриф
Спецификация
ТЗ
Пользователи
Интерфейсы
Информационно-логическая схема
Схема БД
Алгоритм одной процедуры
Программа тестирования
Результаты тестирования



Скачать материал

ОТЛАДКА ПРОГРАММЫПредмет:   Технология разработки 
програ...



Скачать материал

  • Сейчас обучается 424 человека из 64 регионов

Описание презентации по отдельным слайдам:

  • ОТЛАДКА ПРОГРАММЫПредмет:   Технология разработки 
програ...

    1 слайд

    ОТЛАДКА ПРОГРАММЫ
    Предмет: Технология разработки
    программного обеспечения

    Преподаватель: Кумскова И.А.

  • ОПРЕДЕЛЕНИЯ...ВозмездьеРукой бесстрастной чашу с нашим ядом Подносит нам же...

    2 слайд

    ОПРЕДЕЛЕНИЯ
    …Возмездье
    Рукой бесстрастной чашу с нашим ядом
    Подносит нам же..,
    (Шекспир. Макбет)

    Программа, свободная от ошибок, есть абстрактное теоретическое понятие .
    ОТЛАДКА ПРОГРАММЫ (program debugging) — этап разработки программы, состоящий в локализации, выявлении и устранении программных ошибок, факт существования которых уже установлен.
    Отладка имеет место тогда, когда очевидно, что программа либо не компилируется, либо работает неправильно.
    Отладка программы предполагает обязательное наличие той или иной ошибки, в противном случае речь идет о тестировании.

  • СЛОЖНОСТЬ ОТЛАДКИПРИЧИНЫ:
требует от программиста глубоких знаний специфики у...

    3 слайд

    СЛОЖНОСТЬ ОТЛАДКИ
    ПРИЧИНЫ:
    требует от программиста глубоких знаний специфики управления используемыми техническими средствами, операционной системы, среды и языка программирования, реализуемых процессов, природы и специфики различных ошибок, методик отладки и соответствующих программных средств;
    психологически дискомфортна, так как необходимо искать собственные ошибки и, как правило, в условиях ограниченного времени;
    возможно взаимовлияние ошибок в разных частях программы, например, за счет затирания области памяти одного модуля другим из-за ошибок адресации;
    отсутствуют четко сформулированные методики отладки.

  • ОШИБКИИз истории ошибок: первая программная ошибка была обнаружена на заре ра...

    4 слайд

    ОШИБКИ
    Из истории ошибок: первая программная ошибка была обнаружена на заре развития ЭВМ,
    когда в Массачусетском технологическом
    институте окончилась неудачей попытка
    запуска машины Whirlwind I.

    В соответствии с этапом обработки, на котором появляются ошибки, различают:
    синтаксические ошибки — ошибки, фиксируемые компилятором (транслятором, интерпретатором) при выполнении синтаксического и частично семантического анализа программы;
    ошибки компоновки — ошибки, обнаруженные компоновщиком (редактором связей) при объединении модулей программы;
    ошибки выполнения — ошибки, обнаруженные операционной системой, аппаратными средствами или пользователем при выполнении программы.

  • ОШИБКИ ВЫПОЛНЕНИЯСпособы проявления: 
появление сообщения об ошибке, зафиксир...

    5 слайд

    ОШИБКИ ВЫПОЛНЕНИЯ
    Способы проявления:
    появление сообщения об ошибке, зафиксированной схемами контроля выполнения машинных команд, например, переполнении разрядной сетки, ситуации «деление на ноль», нарушении адресации и т.п.;
    появление сообщения об ошибке, обнаруженной операционной системой, например, нарушении защиты памяти, попытке записи на устройства, защищенные от записи, отсутствии файла с заданным именем и т.п.;
    «зависание» компьютера, как простое, когда удается завершить программу без перезагрузки операционной системы, так и «тяжелое», когда для продолжения работы необходима перезагрузка;
    несовпадение полученных результатов с ожидаемыми.

  • ОШИБКИ ВЫПОЛНЕНИЯ

    6 слайд

    ОШИБКИ ВЫПОЛНЕНИЯ

  • ОШИБКИ

  • СЛОЖНОСТЬ ОТЛАДКИСложность отладки увеличивается также вследствие влияния сле...

    8 слайд

    СЛОЖНОСТЬ ОТЛАДКИ
    Сложность отладки увеличивается также вследствие влияния следующих факторов:
    опосредованного проявления ошибок;
    возможности взаимовлияния ошибок;
    возможности получения внешне
    одинаковых проявлений разных ошибок;
    отсутствия повторяемости проявлений некоторых ошибок от запуска к запуску — так называемые стохастические ошибки;
    возможности устранения внешних проявлений ошибок в исследуемой ситуации при внесении некоторых изменений в программу, например, при включении в программу диагностических фрагментов может аннулироваться или измениться внешнее проявление ошибок;
    написания отдельных частей программы разными программистами.

  • ОШИБКИ ОБЩЕГО ХАРАКТЕРА Логические ошибки 
Ошибки в циклах 
Ошибки при работ...

    9 слайд

    ОШИБКИ ОБЩЕГО ХАРАКТЕРА

    Логические ошибки
    Ошибки в циклах
    Ошибки при работе с данными
    Ошибки в описании переменных
    Ошибки при работе с массивами
    Ошибки арифметических операций
    Ошибки в подпрограммах
    Ошибки ввода-вывода
    Ошибки логических операций

  • МЕТОДИКА ОТЛАДКИ ПО1 этап - изучение проявления ошибки: если выдано какое-либ...

    10 слайд

    МЕТОДИКА ОТЛАДКИ ПО
    1 этап — изучение проявления ошибки: если выдано какое-либо сообщение или выданы неправильные или неполные результаты, то необходимо их изучить и попытаться понять, какая ошибка могла так проявиться версии о характере ошибки, которые необходимо проверить.
    2 этап — локализация ошибки: определение конкретного фрагмента, при выполнении которого произошло отклонение от предполагаемого вычислительного процесса.
    3 этап — определение причины ошибки: изучение результатов второго этапа и формирование версий возможных причин ошибки.
    4 этап — исправление ошибки: внесение соответствующих изменений во все операторы, совместное выполнение которых привело к ошибке.
    5 этап — повторное тестирование: повторение всех тестов с начала, так как при исправлении обнаруженных ошибок часто вносят в программу новые.

  • СРЕДСТВА ОТЛАДКИ Типы отладочных средств, применяемых при программировании:...

    11 слайд

    СРЕДСТВА ОТЛАДКИ
    Типы отладочных средств, применяемых при программировании:
           1. Распечатывание содержимого памяти.
           2. Отслеживание хода выполнения алгоритма.
           3. Отслеживание обращений к переменным.
           4. Отслеживание обращений к подпрограммам.
           5. Проверка индексов.
           6. Воспроизведение значений переменных.

  • МЕТОДЫ ОТЛАДКИ Запуск программы из под отладчика с пошаговой отладкой, просмо...

    12 слайд

    МЕТОДЫ ОТЛАДКИ
    Запуск программы из под отладчика с пошаговой отладкой, просмотром состояний (переменных, стека, памяти, регистров и т.п.) в требуемых точках исполнения программы.
    Логирования кода – вывод в файл (или консоль и т.п.) входных, выходных аргументов функций, промежуточных состояний (переменных, стека, памяти, передаваемых или получаемых каким-либо образом данных и т.п.) в процессе исполнения программы. При сложностях с воспроизведением сценария дефекта, логирование становится основной методикой отладки.

  • МЕТОДЫ ОТЛАДКИ Анализ кода без исполнения программы – поиск причин возникнове...

    13 слайд

    МЕТОДЫ ОТЛАДКИ
    Анализ кода без исполнения программы – поиск причин возникновения дефекта с помощью анализа исходного кода программы, проблемного контента, конфигурации, состояния базы данных и т.п.
    Анализ поведения системы или её части – изолирование проблемы, путём упрощения сценария (используя ручное или автоматическое тестирование). Аксиома звучит так: чем проще сценарий, тем проще отладить проблему. Если найти более простой сценарий, то отладка может упроститься.
    Unit тестирование – выполнение автоматических unit test-ов в основном изолировано (т.е. в более простых сценариях) для функций (модулей, компонентов и т.п.), и таким образом автоматическое выявление проблемных участков кода. Unit тестирование в каком-то смысле одна из разновидностей отладки путём «анализа поведения системы».

  • МЕТОДЫ ОТЛАДКИ Прототипирование – проверка функций (модулей, библиотек, и т.п...

    14 слайд

    МЕТОДЫ ОТЛАДКИ
    Прототипирование – проверка функций (модулей, библиотек, и т.п.) в изоляции с помощью небольших примеров кода (прототипов). Прототип легче отлаживать, чем целевую систему. Если проблема воспроизводиться с помощью прототипа, отладка упрощается.
    Отладка с помощью memory-dump-ов – разновидность логирования кода, только здесь логируется не просто некая структура памяти, а целиком вся память процесса и состояния регистров, когда возникает exception. По такому дампу памяти можно «раскрутить» состояние программы (стеков, очередей, переменных и т.п.), в котором она находилась во время паники. Достаточно много существует инструментальных средств для выполнения этой операции.

  • МЕТОДЫ ОТЛАДКИ Отладка с помощью перехватов – в основном используется в случа...

    15 слайд

    МЕТОДЫ ОТЛАДКИ
    Отладка с помощью перехватов – в основном используется в случаях утечки ресурсов, разновидность логирования кода. Основная идея: перехват и логирование вызова функций выделения и освобождения ресурса, а также анализ состояния ресурсов (например, памяти) в требуемый момент времени или в нужной точке исполнения программы.
    Профилирование кода (если необходима оптимизация производительности) – разновидность логирования кода, хотя часто выполняется с использованием специализированных инструментальных средств (профилировщиков). Этот метод отладки позволяет получить профиль исполнения программы – сколько и какая функция, строчка кода, модуль, и т.п. отнимают процессорного времени, и таким образом найти узкие места.

  • МЕТОДЫ ОТЛАДКИ Выполнения программы (или её части) в другой среде (операционн...

    16 слайд

    МЕТОДЫ ОТЛАДКИ
    Выполнения программы (или её части) в другой среде (операционной системе, эмуляторе, симуляторе) – основная идея в том, что если нет инструментальных средств на целевой платформе, то можно спортировать код на другую платформу, где они есть. Также можно изначально писать кросс-платформенный код системы или какой-то её части, и таким образом, при необходимости практически без портирования отлаживать код на другой платформе.
    Отладка методом RPC (remote procedure call)  – применимо в основном для встроенного программирования. Суть метода в возможности вызвать любую функцию (модуль и т.п.) передавая аргументы и получая результаты исполнения удалённо с одного хоста на другом вместо того, чтобы тратить время на компиляцию или обновление софта на удалённом хосте.

  • МЕТОДЫ ОТЛАДКИ Отладка путём анализа документации, дизайна, требований или ог...

    17 слайд

    МЕТОДЫ ОТЛАДКИ
    Отладка путём анализа документации, дизайна, требований или ограничений модулей (программных или аппаратных) – применимо в основном для сложных и крупных проектов. Основная идея понять по имеющейся документации допустимо ли поведение, происходящее в дефекте.
    Отладка трансляцией кода – сложный алгоритм пишется или прототипируется на одном языке программирования) с наличием всех доступных инструментальных средств), а потом исходный код отлаженного алгоритма транслируется в ручную или автоматически в другой язык программирования (целевой системы), для которого отсутствуют необходимые инструментальный средства.
    Возможны и другие варианты, например,   дисассемблерование с целью более низкоуровневого понимания, что происходит при выполнении программы. Т.е. анализируется некий промежуточный вариант кода, который в некоторых ситуациях легче отладить или понять.

  • МЕТОДЫ ОТЛАДКИ Отладка разработкой интерпретатора - метод отладки, корый испо...

    18 слайд

    МЕТОДЫ ОТЛАДКИ
    Отладка разработкой интерпретатора — метод отладки, корый используется, когда модуль требует частых изменений, а время построения приложения очень большое.
    Для ускорения процесса и гибкости пишется небольшой интерпретатор кода с наличием управляющих конструкций. При наличии такого интерпретатора разработчик сравнительно не сложно создаёт скрипты, которые  можно быстрее исправить и отладить.

  • ПРЕДОТВРАЩЕНИЕ ОШИБОК Не применяйте непроверенных способов программирования....

    19 слайд

    ПРЕДОТВРАЩЕНИЕ ОШИБОК
    Не применяйте непроверенных способов программирования.
    Старайтесь не использовать принцип умолчания.
    Никогда не допускайте зависимости работы программы от достоверности данных.
    Добивайтесь полноты логических решений.
    Стремитесь минимизировать число обращений к оператору ЭВМ.

  • СОВЕТЫ ПРОГРАММИСТУ  Применяйте отладочный компилятор. 
Первым делом проверя...

    20 слайд

    СОВЕТЫ ПРОГРАММИСТУ
    Применяйте отладочный компилятор.
    Первым делом проверяйте программу за столом.
    Выполняйте эхо-проверку вводимых данных.
    Вводите средства отладки как можно раньше.
    Контролируйте правдоподобность вводимых
    данных.
    Используйте доступные для вас
    средства отладки.
    Делайте программу правильной с
    самого начала.

Найдите материал к любому уроку, указав свой предмет (категорию), класс, учебник и тему:

6 092 518 материалов в базе

  • Выберите категорию:
  • Выберите учебник и тему
  • Выберите класс:
  • Тип материала:

    • Все материалы

    • Статьи

    • Научные работы

    • Видеоуроки

    • Презентации

    • Конспекты

    • Тесты

    • Рабочие программы

    • Другие методич. материалы

Найти материалы

Другие материалы

Рейтинг:
3 из 5

  • 31.05.2017
  • 8142
  • 147

Рейтинг:
5 из 5

  • 31.05.2017
  • 5369
  • 146

Рейтинг:
4 из 5

  • 31.05.2017
  • 5323
  • 109
  • 31.05.2017
  • 487
  • 1
  • 31.05.2017
  • 1105
  • 0
  • 31.05.2017
  • 681
  • 1

Вам будут интересны эти курсы:

  • Курс повышения квалификации «Методика написания учебной и научно-исследовательской работы в школе (доклад, реферат, эссе, статья) в процессе реализации метапредметных задач ФГОС ОО»

  • Курс повышения квалификации «Организация научно-исследовательской работы студентов в соответствии с требованиями ФГОС»

  • Курс профессиональной переподготовки «Экскурсоведение: основы организации экскурсионной деятельности»

  • Курс повышения квалификации «Экономика предприятия: оценка эффективности деятельности»

  • Курс профессиональной переподготовки «Клиническая психология: теория и методика преподавания в образовательной организации»

  • Курс повышения квалификации «Управление финансами: как уйти от банкротства»

  • Курс повышения квалификации «Организация практики студентов в соответствии с требованиями ФГОС юридических направлений подготовки»

  • Курс профессиональной переподготовки «Организация деятельности по подбору и оценке персонала (рекрутинг)»

  • Курс повышения квалификации «Организация практики студентов в соответствии с требованиями ФГОС медицинских направлений подготовки»

  • Курс повышения квалификации «Экономика: инструменты контроллинга»

  • Курс повышения квалификации «Разработка бизнес-плана и анализ инвестиционных проектов»

  • Курс повышения квалификации «Актуальные вопросы банковской деятельности»

  • Курс профессиональной переподготовки «Деятельность по хранению музейных предметов и музейных коллекций в музеях всех видов»

  • Курс профессиональной переподготовки «Политология: взаимодействие с органами государственной власти и управления, негосударственными и международными организациями»

Слайд 1

Отладка приложений, обработка ошибок Лекция посвящена описанию вопросов, касающихся отладки приложений и работы с ошибками.

Слайд 2

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

Слайд 3

Пример синтаксических ошибок Неправильное ключевое слово. Такая ошибка сразу будет отмечена редактором. Например, если в конструкции цикла For-Nextсделать ошибку в ключевом слове For — вы увидите сообщение об ошибке как только попытаетесь перейти к написанию следующей, после начала цикла, строки. Ошибка при объявлении переменной. Если вы забудете указать ключевое слово Dim при объявлении переменной — редактор выдаст сообщение об ошибке. Однако, сделает он это лишь при попытке запуска программы.

Слайд 4

Пример логических ошибок . Неправильное использование операторов Расчет какого-либо показателя по неправильной формуле. Неправильное использование функций — как встроенных, так и пользовательских. Неправильное использование переменных. Случайное использование «новых» переменных. Неправильное использование оператора сравнения

Слайд 5

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

Слайд 6

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

Слайд 7

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

Слайд 8

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

Слайд 9

Отладка программ в редакторе VBA Основной метод отладки — это пошаговое исполнение программы с использованием точек останова ( breakpoint ). щелкнуть мышью в редакторе на серой панели напротив команды, на которой нужно остановить выполнение программы. Строка кода подсветиться красном цветом Чтобы убрать точку останова, щелкните по ней мышью.

Слайд 10

Так же режим отладки можно включить, нажав во время работы программы комбинацию клавиш Ctr + Pause Break и нажав в появившемся окне кнопку Debug . Однако такой способ не позволяет точно «попасть» в предполагаемое место ошибки (рис. 8.2.).

Слайд 11

Останова на каждой строке, можно запустить ее в режиме Step Into командой Debug o Step Into (Пошаговое исполнение ) или F8 на клавиатуре .

Слайд 12

Когда программа остановлена, вы можете выполнить следующие действия Просмотреть значения переменных, наведя на них указатель мыши. Продолжить выполнение программы в режиме Step Into — выбрав соответствующую команду меню или нажав клавишу F8 . Отредактировать программу. Продолжить исполнение программы в обычном режиме командой Run o Sub / User Form (Запустить o Процедуру/Форму), нажатием клавиши F5 или соответствующей кнопкой на панели инструментов Остановить выполнение программы командой Run o Reset (Запустить o Перезагрузка) или кнопкой на панели инструментов Воспользоваться другими средствами отладки — окнами Immediate , Locals , Watch . Помимо режима Step Into существуют следующие режимы отладки, доступные в меню Debug . Step Over (Перейти на следующую строку). Эта команда полезна при отладке программы , содержащей вызовы уже отлаженных процедур. В режиме Step Over отладчик не входит в процедуру , выполняя ее без отладки , после чего переходит на следующую строку. Например, вы выполняете программу в режиме Step Into и при очередной остановке видите, что подсвеченная строка содержит вызов процедуры, которую отлаживать не нужно. Вы выбираете команду Step Over , процедура выполняется без остановок на каждой ее строке, после чего следующая остановка происходит на строке вашей программы, которая идет за вызовом процедуры. Step Out (Выполнить процедуру) — эта команда позволяет выполнить текущую процедуру (например, вызванную из кода основной программы при обычной отладке ) без остановки в каждой строке. Следующая остановка будет сделана на строке, которая следует за вызовом процедуры в основном тексте программы. Run To Cursor (Выполнить до курсора) — выполняет программу до позиции, на которой установлен курсор. Аналогично установке одиночной точки останова .

Слайд 13

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

Слайд 14

Для отправки в окно Immediate Debug.Print Команда Print frm_Test.Caption вывела свойство Caption формы frm_Test в окно. Далее , обратите внимание на то, что вместо команды Print можно использовать знак ?.

Слайд 15

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

Слайд 16

Как видите, Immediate — это очень простое, но мощное средство отладки . Однако, его неудобно использовать для быстрого просмотра множества свойств элементов управления, значений многих переменных и т.д. В подобных случаях нам может помочь окно Locals .

Слайд 17

Locals Окно Locals (Локальные переменные) позволяет просматривать и изменять свойства всех объектов приложения и значения переменных.

Слайд 18

Watches Окно Watches (Контролируемые выражения) предназначено для контроля за отдельными выражениями, значениями переменных и т.д. Чтобы добавить такое выражение , щелкните мышью по нему и выберите команду меню Add Watch ( Контро лировать ). Появится окно Add Watch

Слайд 19

Watches В окне Watches отображены следующие данные: Expression — контролируемое выражение. Value — значение выражения. Type — тип данных. Context — контекст (область контроля).

Слайд 20

отредактировать — Edit Watch . Для удаления пункт Delete Watch , Для добавления нового — Add Watch .

Слайд 21

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

Слайд 22

Давайте рассмотрим пример, в котором пользователь должен ввести свой возраст в ответ на запрос программы. Очевидно, что возраст должен удовлетворять следующим условиям . должен быть числом ограничим введенное значение диапазоном значений для типа данных Byte — то есть введенное значение не может быть больше 256 и меньше 0. скорее всего, он не превысит 100 лет, но, учитывая то, что нашей программой могут пользоваться и долгожители (если верить статистике, некоторые доживают и до 150) — переспросим пользователя, уверен ли он в том, что ввел именно это значение, и, если он согласится, примем его.

Слайд 23

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

Слайд 24

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

Слайд 25

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

Тестирование и отладка программ

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

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

Тестирование – проверка работоспособности

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

Отладкой называется процесс поиска и устранения ошибок.

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

2

Типы ошибок в программах

Синтаксические ошибки, их также называют ошибками времени компиляции (Compile-time error), наиболее легко устранимы. Их обнаруживает компилятор, а программисту остается только внести изменения в текст программы и выполнить повторную компиляцию

Ошибки времени выполнения (Run-time error) возникают не при каждом запуске программы, а лишь при определенном наборе входных данных (например, делении на ноль или вводе некорректной даты). Для их выявления требуется тщательно подготовить тестовые примеры. Если причиной являются не программные ошибки, а действия пользователя, то в программе должна быть предусмотрена обработка исключительных ситуаций

Алгоритмические ошибки. Компиляция программы, в которой есть алгоритмическая ошибка, завершается успешно. При пробных запусках программа ведет себя нормально, однако результата получается неверный. Для того чтобы устранить алгоритмическую ошибку, приходится анализировать алгоритм, вручную «прокручивать» его выполнение

3

Синтаксические ошибки

4

Ошибки времени выполнения

5

Алгоритмические ошибки

правильно n-2

6

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

Авторское тестирование (еще его называют методом «белого ящика») – проверка программы исходя из ее логики. Автор, зная внутреннюю логику программы, подбирает тестовые примеры так, чтобы проверить работу всех ее блоков.

Неавторское тестирование (стороннее, по методу «черного ящика») – проверка программы с точки зрения пользователя. Тестовые примеры подбираются исходя из реальных ситуаций, возникающих в ходе эксплуатации.

В крупных фирмах – разработчиках ПО тестированием занимается специальный персонал. В небольших коллективах практикуется «перекрестное тестирование»

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

используют тестирование широким кругом потенциальных пользователей. Для этого выпускают так называемую «бета-версию»

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

7

Методы отладки программ

Трассировка — это процесс выполнения программы по шагам (step-by-step), инструкция за инструкцией. Во время трассировки программист дает команду:

выполнить очередную инструкцию программы.

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

Наблюдение значений переменных

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

8

Средства отладки в Delphi: трассировка

Delphi обеспечивает два режима трассировки: без захода в процедуру (Step over) и с заходом в процедуру (Trace into).

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

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

Средства отладки в Delphi: точки останова

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

Для точки останова можно задать некоторые дополнительные параметры при

помощи диалогового окна Add Source Breakpoint меню

Run.

10

Соседние файлы в папке ИТ

  • #
  • #
  • #
  • #
  • #
  • #
  • #
  • #
  • #
  • #
  • #

Слайд 1

Отладка приложений, обработка ошибок Лекция посвящена описанию вопросов, касающихся отладки приложений и работы с ошибками.

Слайд 2

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

Слайд 3

Пример синтаксических ошибок Неправильное ключевое слово. Такая ошибка сразу будет отмечена редактором. Например, если в конструкции цикла For-Nextсделать ошибку в ключевом слове For — вы увидите сообщение об ошибке как только попытаетесь перейти к написанию следующей, после начала цикла, строки. Ошибка при объявлении переменной. Если вы забудете указать ключевое слово Dim при объявлении переменной — редактор выдаст сообщение об ошибке. Однако, сделает он это лишь при попытке запуска программы.

Слайд 4

Пример логических ошибок . Неправильное использование операторов Расчет какого-либо показателя по неправильной формуле. Неправильное использование функций — как встроенных, так и пользовательских. Неправильное использование переменных. Случайное использование «новых» переменных. Неправильное использование оператора сравнения

Слайд 5

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

Слайд 6

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

Слайд 7

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

Слайд 8

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

Слайд 9

Отладка программ в редакторе VBA Основной метод отладки — это пошаговое исполнение программы с использованием точек останова ( breakpoint ). щелкнуть мышью в редакторе на серой панели напротив команды, на которой нужно остановить выполнение программы. Строка кода подсветиться красном цветом Чтобы убрать точку останова, щелкните по ней мышью.

Слайд 10

Так же режим отладки можно включить, нажав во время работы программы комбинацию клавиш Ctr + Pause Break и нажав в появившемся окне кнопку Debug . Однако такой способ не позволяет точно «попасть» в предполагаемое место ошибки (рис. 8.2.).

Слайд 11

Останова на каждой строке, можно запустить ее в режиме Step Into командой Debug o Step Into (Пошаговое исполнение ) или F8 на клавиатуре .

Слайд 12

Когда программа остановлена, вы можете выполнить следующие действия Просмотреть значения переменных, наведя на них указатель мыши. Продолжить выполнение программы в режиме Step Into — выбрав соответствующую команду меню или нажав клавишу F8 . Отредактировать программу. Продолжить исполнение программы в обычном режиме командой Run o Sub / User Form (Запустить o Процедуру/Форму), нажатием клавиши F5 или соответствующей кнопкой на панели инструментов Остановить выполнение программы командой Run o Reset (Запустить o Перезагрузка) или кнопкой на панели инструментов Воспользоваться другими средствами отладки — окнами Immediate , Locals , Watch . Помимо режима Step Into существуют следующие режимы отладки, доступные в меню Debug . Step Over (Перейти на следующую строку). Эта команда полезна при отладке программы , содержащей вызовы уже отлаженных процедур. В режиме Step Over отладчик не входит в процедуру , выполняя ее без отладки , после чего переходит на следующую строку. Например, вы выполняете программу в режиме Step Into и при очередной остановке видите, что подсвеченная строка содержит вызов процедуры, которую отлаживать не нужно. Вы выбираете команду Step Over , процедура выполняется без остановок на каждой ее строке, после чего следующая остановка происходит на строке вашей программы, которая идет за вызовом процедуры. Step Out (Выполнить процедуру) — эта команда позволяет выполнить текущую процедуру (например, вызванную из кода основной программы при обычной отладке ) без остановки в каждой строке. Следующая остановка будет сделана на строке, которая следует за вызовом процедуры в основном тексте программы. Run To Cursor (Выполнить до курсора) — выполняет программу до позиции, на которой установлен курсор. Аналогично установке одиночной точки останова .

Слайд 13

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

Слайд 14

Для отправки в окно Immediate Debug.Print Команда Print frm_Test.Caption вывела свойство Caption формы frm_Test в окно. Далее , обратите внимание на то, что вместо команды Print можно использовать знак ?.

Слайд 15

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

Слайд 16

Как видите, Immediate — это очень простое, но мощное средство отладки . Однако, его неудобно использовать для быстрого просмотра множества свойств элементов управления, значений многих переменных и т.д. В подобных случаях нам может помочь окно Locals .

Слайд 17

Locals Окно Locals (Локальные переменные) позволяет просматривать и изменять свойства всех объектов приложения и значения переменных.

Слайд 18

Watches Окно Watches (Контролируемые выражения) предназначено для контроля за отдельными выражениями, значениями переменных и т.д. Чтобы добавить такое выражение , щелкните мышью по нему и выберите команду меню Add Watch ( Контро лировать ). Появится окно Add Watch

Слайд 19

Watches В окне Watches отображены следующие данные: Expression — контролируемое выражение. Value — значение выражения. Type — тип данных. Context — контекст (область контроля).

Слайд 20

отредактировать — Edit Watch . Для удаления пункт Delete Watch , Для добавления нового — Add Watch .

Слайд 21

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

Слайд 22

Давайте рассмотрим пример, в котором пользователь должен ввести свой возраст в ответ на запрос программы. Очевидно, что возраст должен удовлетворять следующим условиям . должен быть числом ограничим введенное значение диапазоном значений для типа данных Byte — то есть введенное значение не может быть больше 256 и меньше 0. скорее всего, он не превысит 100 лет, но, учитывая то, что нашей программой могут пользоваться и долгожители (если верить статистике, некоторые доживают и до 150) — переспросим пользователя, уверен ли он в том, что ввел именно это значение, и, если он согласится, примем его.

Слайд 23

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

Слайд 24

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

Слайд 25

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

1. Причины и типы ошибок

ПРИЧИНЫ И ТИПЫ ОШИБОК

2. Классификация ошибок по причине возникновения

• синтаксические ошибки;
• семантические ошибки;
• логические ошибки.

3. Синтаксические ошибки

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

4. Семантические ошибки

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

5. Логические ошибки

• связаны с неправильным применением тех
или иных алгоритмических конструкций.
• Эти ошибки при выполнении программы могут
проявиться явно (выдано сообщение об
ошибке, нет результата или выдан неверный
результат, программа «зацикливается»), но
чаще они проявляют себя только при
определенных сочетаниях параметров или
вообще не вызывают нарушения работы
программы, которая в этом случае выдает
правдоподобные, но неверные результаты.

6. Классификация ошибок по этапу обработки программы

Ошибки, которые могут быть в программе,
принято делить на три группы:
• ошибки компиляции;
• ошибки компоновки;
• ошибки выполнения.

7.

Ошибки компиляции
Ошибки компиляции (Compile-time error) – ошибки,
фиксируемые компилятором (транслятором, интерпретатором)
при выполнении синтаксического и частично семантического
анализа программы;
Наиболее легко устранимы.
Их обнаруживает компилятор, а программисту остается только
внести изменения в текст программы и выполнить повторную
компиляцию.
Компилятор просматривает программу от начала. Если
обнаруживается
ошибка,
то
процесс
компиляции
приостанавливается и в окне редактора кода выделяется строка,
которая, по мнению компилятора, содержит ошибочную
конструкцию.

8.

Ошибки компиляции
В нижнюю часть окна редактора кода компилятор выводит сообщения об
ошибках. Первая ошибка – это первая от начала текста программы
синтаксическая ошибка, обнаруженная компилятором. Наличие в тексте даже
одной синтаксической ошибки приводит к возникновению второй, фатальной
ошибки (Fatal Error) – невозможности генерации исполняемой программы.

9. Наиболее типичные ошибки компиляции

Сообщения компилятора
Undeclared identifier
(Необъявленный
идентификатор)
Вероятная причина
Используется переменная, не объявленная в
разделе var программы;
Ошибка при написании имени переменной;
Ошибка при написании имени инструкции
(оператора).
Unterminated string
При записи строковой константы не
(Незавершенная строка)
поставлена завершающая кавычка.
Incompaible types … and В операторе присваивания тип выражения

не соответствует или не может быть
(Несовместимые типы)
приведен к типу переменной, получающей
значение выражения.
Missing operator or
Не поставлена точка с запятой после
semicolon
инструкции программы.
(Отсутствует оператор или точка
с запятой)

10. Ошибки компоновки

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

11. Ошибки выполнения

Ошибки выполнения – ошибки, обнаруженные
операционной системой, аппаратными средствами или
пользователем при выполнении программы.
Могут иметь разную природу, и соответственно поразному проявляться.
Часть ошибок обнаруживается и документируется
операционной системой.

12. Ошибки выполнения

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

13. Причины ошибок выполнения

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

14. Причины ошибок выполнения

15. Предотвращение и обработка исключений

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

16. Предотвращение и обработка исключений

Инструкция обработки исключения в общем виде:
try // инструкции, выполнение которых может вызвать
исключение
except // начало секции обработки исключений
on ТипИсключения1 do Обработка1;
on ТипИсключения2 do Обработка2;
…;
else // инструкции обработки остальных исключений
end;

17. Предотвращение и обработка исключений

где:
• try — ключевое слово, обозначающее, что далее следуют
инструкции, при выполнении которых возможно
возникновение исключений, и что обработку этих
исключений берет на себя программа;
• except — ключевое слово, обозначающее начало секции
обработки исключений. Инструкции этой секции будут
выполнены, если в программе возникнет ошибка;
• on — ключевое слово, за которым следует тип
исключения, обработку которого выполняет инструкция,
следующая за do;
• else — ключевое слово, за которым следуют инструкции,
обеспечивающие обработку исключений, тип которых не
указаны в секции except.

18. Типичные исключения

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

19. Пример: Обработка исключения типа EZeroDivide

procedure TForm1.Button1Click(Sender: TObject);
Var u, r, i: real; // напряжение , сопротивление, ток
begin
Labels.Caption := ‘ ‘;
try // инструкции, которые могут вызвать исключение (ошибку)
u := StrToFloat(Edit1.Text);
r := StrToFloat(Edit2.Text);
i := u/r;
except // секция обработки исключений
onEZeroDivide do // деление на ноль
begin
ShowMessage(‘Сопротивление не может быть равно нулю!’);
exit;
end;
on EConvertError do // ошибка преобразования строки в число
begin
ShowMessage(‘Напряжение и сопротивление должны быть заданы числом. ‘ );
exit;
end; end;

20. Отладка и тестирование

ОТЛАДКА И ТЕСТИРОВАНИЕ

21.

Немного истории
Долгое время было принято считать, что целью тестирования
является доказательство отсутствия ошибок в программе.
Но полный
перебор
всех
возможных
вариантов
выполнения
программы
находится
за
пределами
вычислительных возможностей даже для очень небольших
программ.
«Тестирование – это процесс выполнения программ с
целью обнаружения ошибок».
Гленфорд Майерс
Майерс, Г. Искусство тестирования программ, 1982

22.

Немного истории
До начала 80-х годов процесс тестирования программного
обеспечения (ПО) был разделен с процессом разработки: вначале
программисты реализовывали заданную функциональность, а
затем тестировщики приступали к проверке качества созданных
программ.
Проблемы:
• разработка программ может оказаться достаточно длительной –
чем в это время должны заниматься тестировщики?
• Плохая предсказуемости результатов такого процесса разработки.
Ключевой вопрос: сколько времени потребуется на завершение
продукта, в котором существует 500 известных ошибок?

23.

Немного истории
Статистика:
Даже
однострочное
изменение
в
программе
с
вероятностью 55 % либо не исправляет старую ошибку,
либо вносит новую. Если же учитывать изменения любого
объема, то в среднем менее 20 % изменений корректны с
первого раза.

24.

Немного истории
В 90-х годах появилась другая методика разработки
(zero-defect mindset), основная идея которой заключается в
том, что качество программ проверяется постоянно в
процессе разработки.
Тестирование становится центральной частью любого
процесса разработки программ
Данная методика предъявляет существенно более высокие требования к
квалификации инженера тестирования: в сферу его ответственности
попадает не только функциональное тестирование, но и организация
процесса разработки (процесс ежедневной сборки, участие в инспекциях,
сквозных просмотрах и обычное чтение исходных текстов тестируемых
программ). Поэтому идеальной кандидатурой на позицию тестировщика
становится наиболее опытный программист в команде.

25. Зависимость вероятности правильного исправления ошибок и стоимости исправления ошибок от этапа разработки

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

26.

Основные понятия, связанные с
тестированием и отладкой
Отладка программного средства – это деятельность,
направленная на обнаружение и исправление ошибок в ПС с
использованием процессов выполнения его программ.
Тестирование программного средства — процесс выполнения
программ на некотором наборе данных, для которого заранее
известен результат применения или известны правила поведения
этих программ.
Отладка = Тестирование + Поиск ошибок + Редактирование

27.

Основные понятия, связанные с
тестированием и отладкой
Процесс отладки включает:
• действия, направленные на выявление ошибок
(тестирование);
• диагностику и локализацию ошибок (определение
характера ошибок и их местонахождение);
• внесение исправлений в программу с целью устранения
ошибок (редактирование).
Отладка = Тестирование + Поиск ошибок + Редактирование
Самым трудоемким и дорогим является тестирование,
затраты на которое приближаются к 45% общих затрат на
разработку ПС и от 30 до 60% общей трудоемкости создания
программного продукта.

28.

Две задачи тестирования
Первая задача тестирования – подготовить набор тестов и
применить к ним ПС, чтобы обнаружить в нём по возможности
большее число несоответсвий.
Вторая задача тестирования — определить момент окончания
отладки ПС (или отдельной его компоненты).

29.

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

30. Требования к программному продукту и тестирование

Разработка любого программного продукта начинается с
выявления требований к этому продукту.
Спецификация (англ. Software Requirements Specification, SRS) документ, в котором отражены все требования к продукту описываются, как функциональные (что должна делать
программа, варианты взаимодействия между пользователями
и программным обеспечением), так и нефункциональные
(например, на каком оборудовании должна работать
программа,
производительность, стандарты качества)
требования.

31. Рекомендуемая стандартом IEEE 830 структура SRS

Введение
– Цели
– Соглашения о терминах
– Предполагаемая аудитория и последовательность восприятия
– Масштаб проекта
– Ссылки на источники
Общее описание
– Видение продукта
– Функциональность продукта
– Классы и характеристики пользователей
– Среда функционирования продукта (операционная среда)
– Рамки, ограничения, правила и стандарты
– Документация для пользователей
– Допущения и зависимости
Функциональность системы
– Функциональный блок X (таких блоков может быть несколько)
• Описание и приоритет
• Причинно-следственные связи, алгоритмы
• Функциональные требования

32. Рекомендуемая стандартом IEEE 830 структура SRS (продолжение)

Требования к внешним интерфейсам
– Интерфейсы пользователя (UX)
– Программные интерфейсы
– Интерфейсы оборудования
– Интерфейсы связи и коммуникации
Нефункциональные требования
– Требования к производительности
– Требования к сохранности (данных)
– Критерии качества программного обеспечения
– Требования к безопасности системы
Прочие требования
– Приложение А: Глоссарий
– Приложение Б: Модели процессов и предметной области и другие
диаграммы
– Приложение В: Список ключевых задач

33.

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

34. Стратегия проектирования тестов

В тестирование ПС входят
• постановка задачи для теста,
• проектирование,
• написание тестов,
• выполнение тестов,
• изучение результатов тестирования.

35.

По объекту тестирования
Функциональное тестирование
Тестирование производительности
Нагрузочное тестирование
Стресс-тестирование
Тестирование стабильности
Конфигурационное тестирование
Юзабилити-тестирование
Тестирование интерфейса пользователя
Тестирование безопасности
Тестирование локализации
Тестирование совместимости
По знанию системы
Тестирование чёрного ящика
Тестирование белого ящика
Тестирование серого ящика
По степени автоматизации –
Ручное тестирование
Автоматизированное тестирование
Полуавтоматизированное тестирование
По степени изолированности компонентов
Модульное тестирование
Интеграционное тестирование
Системное тестирование
По времени проведения тестирования
Альфа-тестирование
Дымовое тестирование
Тестирование новой функции
Подтверждающее тестирование
Регрессионное тестирование
Приёмочное тестирование
Бета-тестирование
По признаку позитивности сценариев
Позитивное тестирование
Негативное тестирование
По степени подготовленности к
тестированию
Тестирование по документации
(формальное тестирование)
Интуитивное тестирование (англ. ad hoc
testing)

36.

Подходы к выработке стратегии
проектирования тестов
Функциональный подход основывается на том, что
структура программного обеспечения не известна (программа
рассматривается как «черный ящик»). В этом случае тесты
проектируют, исследуя внешние спецификации или
спецификации сопряжения программы или модуля, которые
он тестирует.
Логика проектировщика тестов такова: «Меня не
интересует, как выглядит эта программа, и выполнил ли я все
команды. Я удовлетворен, если программа будет вести себя
так, как указано в спецификациях».
В идеале — проверить все возможные комбинации
и значения на входе.

37.

Подходы к выработке стратегии
проектирования тестов
Структурный подход базируется на том, что известна
структура тестируемого программного обеспечения, в том
числе его алгоритмы («стеклянный ящик»). В этом случае
тесты строят так, чтобы проверить правильность реализации
заданной логики в коде программы.
Проектировщики
тестов
стремятся
подготовить
достаточное число тестов, чтобы каждая команда была
выполнена, хотя бы, один раз. Чтобы каждая команда
условного перехода выполнялась в каждом направлении
хотя бы раз.
В идеале — проверить каждый путь, каждую ветвь
алгоритма.

38.

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

39.

Критерии полноты тестирования

40.

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

41. Критерии полноты тестирования

• Функциональные критерии:
• Структурные критерии:
1)
2)
3)
4)
5)
Покрытие операторов
Покрытие условий
Покрытие путей
Покрытие функций
Покрытие вход/выход

42. Критерии полноты тестирования

Критерий тестирования функций

43. Критерии полноты тестирования

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

44. Критерий тестирования функций

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

45. Критерии тестирования входных и выходных данных

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

46. Критерии тестирования входных и выходных данных

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

47. Критерии тестирования входных и выходных данных

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

48. Критерии тестирования входных и выходных данных

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

49. Критерии тестирования входных и выходных данных

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

50. Критерии тестирования входных и выходных данных

Пример. Показывает отличие количества тестов при различных выбранных
структурных критериях.
В случае выбора критерия «Покрытие операторов» достаточен 1 тест
(рис.а)
В случае выбора критерия «Покрытие условий» достаточно двух тестов,
покрывающих пути 1, 4 или 2, 3 (рис.б)
В случае выбора критерия «Покрытие путей необходимо четыре теста
для всех четырех путей (рис.б)

51. Структурные критерии

Покрытие операторов
Пример 1
If ((A>1) and (B =0))
then X := X/A;
If ((A=2) or (X>1))
then X:=X+1;
Можно выполнить каждый оператор,
записав один-единственный тест,
который реализовал бы путь асе.
Иными словами, если бы в точке а были
установлены значения А = 2, В = 0 и Х =
3, каждый оператор выполнялся бы
один раз (в действительности Х может
принимать любое значение)

52.

Покрытие операторов
Пример 2

53. Покрытие операторов

Покрытие условий
Пример 1
If ((A>1) and (B =0))
then X = X/A;
If ((A=2) or (X>1))
then X:=X+1;
Покрытие условий может быть выполнено двумя тестами,
покрывающими либо пути асе и abd, либо пути acd и abe.
Если мы выбираем последнее альтернативное покрытие, то входами двух тестов являются A = 3, В = 0, Х = 1 и A = 2, В = 1, Х = 1.

54. Покрытие операторов

Покрытие условий
Пример 2
a:=7;
while a>x do a:=a-1;
b:=1/a;
a:=7
a>x

b:=1/a
+
a:=a-1
Для того чтобы удовлетворить критерию покрытия ветвей в данном
случае достаточно одного теста. Например такого, чтобы х был равен
6 или 5. Все ветви будут пройдены. Но ошибка в программе
обнаружена так и не будет. Она проявится в единственном случае,
когда х=0. Но такого теста от нас критерий покрытия ветвей не
требует.

55. Покрытие условий

Покрытие путей
Пример 1
If ((A>1) and (B =0))
then X = X/A;
If ((A=2) or (X>1))
then X:=X+1;
Покрытие путей (все возможные пути
через заданную часть кода должны быть
выполнены и протестированы) может быть
выполнено четырьмя тестами:
a,c,e – A=2, B=0, X=3
a,b,e – A=2, B=1, X=1
a,b,d – A=3, B=1, X=1
a,c,d – A=3, B=0, X=1

56. Покрытие условий

Покрытие путей
a
Пример 1
If ((A>1) and (B =0))
then X = X/A;
If ((A=2) or (X>1))
then X:=X+1;
c
b
е
d

57. Покрытие путей

Критерий комбинаторного покрытия условий
Пример 2
If (a=0) or (b=0) or (c=0)
Then d:=1/(a+b)
Else d:=1;
Ошибка будет выявлена только при a=0 и b=0.
Критерий покрытия путей не гарантирует
проверки такой ситуации.
Для решения этой проблемы был предложен критерий комбинаторного
покрытия условий, который требует подобрать такой набор тестов, чтобы
хотя бы один раз выполнялась любая комбинация простых условий.
Критерий значительно более надежен, чем покрытие путей, но обладает
двумя существенными недостатками.
• Во-первых, он может потребовать очень большого числа тестов.
Количество тестов, необходимых для проверки комбинаций n простых
условий, равно 2n.
• Во-вторых, даже комбинаторное покрытие условий не гарантирует
надежную проверку циклов.

58. Покрытие путей

Уровни тестирования
• Модульное тестирование (автономное тестирование,
юнит-тестирование) — тестируется минимально
возможный для тестирования компонент, например,
отдельный класс или функция. Часто модульное
тестирование осуществляется разработчиками ПО.
• Интеграционное тестирование — тестируются
интерфейсы между компонентами, подсистемами. При
наличии резерва времени на данной стадии тестирование
ведётся итерационно, с постепенным подключением
последующих подсистем.
• Системное тестирование — тестируется интегрированная
система на её соответствие требованиям.

59.

Основные этапы разработки
сценария автономного тестирования
1. На основании спецификации отлаживаемого модуля
подготовить тесты для
– каждой логической возможности ситуации;
– каждой границы областей возможных значений всех
входных данных;
– каждой области недопустимых значений;
– каждого недопустимого условия.
2. Проверить текст модуля, чтобы убедиться, что каждое
направление любого разветвления будет пройдено хотя
бы один раз. Добавить недостающие тесты.

60. Два основных вида тестирования

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

61. Уровни тестирования

Основная особенность практики
тестирования ПС
По мере роста числа обнаруженных и исправленных
ошибок в ПС растёт также относительная вероятность
существования в нём необнаруженных ошибок.
Это подтверждает важность предупреждения ошибок на
всех стадиях разработки ПС.

62. Основные этапы разработки сценария автономного тестирования

Творческая работа
1. Разделиться на группы
2. Получить тему (практические работы по Delphi №№ 3, 5, 7,
9, 10)
3. Составить спецификацию
4. Разработать программу тестирования:
4.1. Определить виды тестирования
4.2. Определить объекты тестирования
4.3. Определить субъекты тестирования
4.4. Определить классы входных данных
4.5. Написать тест-кейсы для тестирования функций и ожидаемые
результаты
4.6. Написать тест-кейсы для структурного тестирования и
ожидаемые результаты
Составить чек-листы для проведения всех видов тестирования
5. Провести тестирование
6. Сделать выводы

63. Основные этапы разработки сценария автономного тестирования

Содержание ПЗ к проекту
Титульный лист
Бриф
Спецификация
ТЗ
Пользователи
Интерфейсы
Информационно-логическая схема
Схема БД
Алгоритм одной процедуры
Программа тестирования
Результаты тестирования


1


Отладка программы


2


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


3


Ошибки времени выполнения, (исключения – exception) Они обычно проявляются уже при первых запусках программы и во время тестирования. При возникновении ошибки в программе, запущенной из Delphi, среда разработки прерывает работу программы, и на экране появляется диалоговое окно, которое содержит сообщение об ошибке и информацию о типе (классе) ошибки. После возникновения ошибки программист может – либо прервать выполнение программы, ( Run — Program Reset), – либо продолжить ее выполнение, например, по шагам (Run — Step), наблюдая результат выполнения каждой инструкции.


4


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


5


Трассировка программы В случае неправильной работы программы необходимо видеть реальный порядок выполнения инструкций. Трассировка это процесс выполнения программы по шагам (step-by-step), инструкция за инструкцией. Во время трассировки программист дает команду: выполнить очередную инструкцию программы.


6


2 режима трассировки Step over Режим трассировки без захода в процедуру выполняет трассировку только главной процедуры, при этом трассировка подпрограмм не выполняется, вся подпрограмма выполняется за один шаг. Trace into В режиме трассировки с заходом в процедуру выполняется трассировка всей программы, т. е. по шагам выполняется не только главная программа, но и все подпрограммы.


7


Как начать трассировку Из меню Run выбрать команду Step over или Trace into. В результате в окне редактора кода будет выделена первая инструкция программы Затем выбираем Step over (F8)или Trace into(F7) После выполнения инструкции будет выделена следующая. Таким образом, выбирая нужную команду из меню Run, можно выполнить трассировку программы Если нужна трассировка части программы следует 1. установить курсор на инструкцию программы, с которой надо начать трассировку, 2. из меню Run выбрать команду Run to cursor (F4). 3. нажимая клавишу или клавишу, выполнить трассировку нужного фрагмента программы. Завершить трассировку и продолжить выполнение программы в реальном темпе — из меню Run выбрать команду Run.


8


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


9


Добавление точки останова 1. из меню Run выбрать команду Add Breakpoint 2. затем из меню следующего уровня команду Source Breakpoint. Информация о добавляемой точке останова – в диалоговом окне Add Source Breakpoint Filename содержит имя файла программы Line number номер строки программы, в которую добавляется точка останова. После щелчка на кнопке ОК точка останова добавляется в программу, и строка, в которой находится точка останова, помечается красной точкой и выделяется цветом. Точку останова можно добавить, щелкнув мышью на синей точке, помечающей ту инструкцию программы, перед которой надо поместить точку останова (если в программе нет ошибок, то компилятор помечает выполняемые инструкции программы синими точками).


10


Условия для точки останова Если для точки останова задано условие, то программа приостанавливает свою работу только в том случае, если выражение, находящееся в поле Condition, истинно (его значение равно TRUE). можно задать количество пропусков данной точки. Если во время добавления в программу точки останова в поле Pass count (Число пропусков) диалогового окна Add Source Breakpoint записать отличное от нуля число, то программа приостановит свою работу в этой точке только после того, как инструкция, находящаяся в строке, помеченной точкой останова, будет выполнена указанное число раз.


11


Изменение характеристик точки останова Для этого надо из меню View выбрать команду Debug Windows, затем из меню следующего уровня команду Breakpoints. В открывшемся диалоговом окне Breakpoint List щелкнуть правой кнопкой мыши в строке, содержащей информацию о нужной точке останова, и в появившемся контекстном меню выбрать команду Properties. В результате открывается диалоговое окно Source Breakpoint Properties, в котором можно изменить характеристики точки останова, например, изменить условие (содержимое поля Condition) остановки программы в данной точке. Используя это же контекстное меню, можно быстро перейти к инструкции, в которой находится точка останова; для этого надо выбрать команду Edit Source.


12


Удаление точки останова в диалоговом окне Breakpoint List щелкнуть правой кнопкой мыши в строке, содержащей информацию о точке, которую надо удалить, и в появившемся контекстном меню выбрать команду Delete. Или в окне редактора кода щелкнуть мышью на красной точке, помечающей строку, в которой находится точка останова.


13


Наблюдение значений переменных Для того чтобы во время выполнения программы по шагам иметь возможность контролировать значение переменной, нужно добавить имя этой переменной в список наблюдаемых элементов (Watch List). Для этого надо из меню Run выбрать команду Add Watch и в поле Expression появившегося диалогового окна Watch Properties ввести имя переменной. В результате в список Watch List, будет добавлен новый элемент. Так как переменные программы существуют (и, следовательно, доступны) только во время выполнения программы, то после имени переменной выводится сообщение: process not accessible (процесс недоступен).


14


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


15


Завершить пошаговое выполнение Чтобы завершить процесс пошагового выполнения программы, нужно из меню Run выбрать команду Program Reset.

Понравилась статья? Поделить с друзьями:
  • Виды ошибок методы отладки лекция
  • Виды ошибок мерседес актрос
  • Виды ошибок логика
  • Виды ошибок математика
  • Виды ошибок логические фактические