Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Основная книга по С++й.doc
Скачиваний:
16
Добавлен:
28.10.2018
Размер:
2.07 Mб
Скачать

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

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

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

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

Пример 6. Проведем трассировку структурного алгоритма на основе цикла с постусловием, приведенного в примере 4 (табл.4).

Таблица 4.

Трассировка(раскрутка) алгоритма

п/п

шага

a

b

h

x

f

x>b

Примечание

1

0

Начало

2

1

1

2

0,2

Ввели в ячейки данные для a, b, h

3

2

1

Записываем в ячейку x := a=1

4

3, 3.1

–0,159

Начало цикла, вычисляем f:=sin 1 – 1

5

3.2

На экран выводzтся ячейки x = 1 и f = –0,159

6

3.3

1,2

x := x + h=1+0,2=1,2

7

3.4

Нет

Проверка условия окончания цикла 1,2>2

8

3.1

–0.209

Вычисляем f:=sin (1,2) – 1,2= –0,209

9

3.2

На экран выводится 1,2 и –0,209

10

3.3

1,4

x := x + h=1,2+0,2=1,4

11

3.4

Нет

Проверка условия окончания цикла 1,4>2

12

3.1

–0.475

Вычисляем f

13

3.2

На экран выводится 1,4 и –0,475

14

3.3

1,6

x := x + h=1,4+0,2=1,6

15

3.4

Нет

Проверка условия окончания цикла 1,6>2

16

3.1

–1.051

Вычисляем f

17

3.2

На экран выводится 1,6 и –1,051

18

3.3

1,8

x := x + h=1,6+0,2=1,8

19

3.4

Нет

Проверка условия окончания цикла 1,8>2

20

3.1

–1.898

Вычисляем f

21

3.2

На экран выводится 1,8 и –1,898

22

3.3

2,0

x := x + h=1,8+0,2=2,0

23

3.4

Нет

Проверка условия окончания цикла 2,0>2

24

3.1

–2.757

Вычисляем f

25

3.2

На экран выводится 2,0 и –2,757

26

3.3

2,2

x := x + h=2,0+0,2=2,2

27

3.4

Да

Проверка условия окончания цикла 2.2>2

28

4

Конец цикла, Конец работы алгоритма

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

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

Можно выделить следующие виды тестирования:

  • автономное (тестирование модулей программистами);

  • комплексное (тестирование общих функций системы программистами);

  • системное (оценочное) – тестирование, как правило, с участием заказчика.