Архитектура Аудит Военная наука Иностранные языки Медицина Металлургия Метрология Образование Политология Производство Психология Стандартизация Технологии |
Что такое тест и тестирование? ⇐ ПредыдущаяСтр 3 из 3
Как бы ни была тщательно отлажена программа, решающим этапом, устанавливающим ее пригодность для работы, является контроль программы по результатам ее выполнения на системе тестов.
Но, как справедливо указывал известный теоретик программирования Э. Дейкстра, тестирование может показать лишь наличие ошибок, но не их отсутствие. Нередки случаи, когда новые входные данные вызывают " отказ" или получение неверных результатов работы программы, которая считалась полностью отлаженной. Для реализации метода тестов должны быть изготовлены или заранее известны эталонные результаты.
В противном случае имеется опасность невольной подгонки вычисляемых значений под желаемые, полученные ранее на машине. Какими должны быть тестовые данные? Тестовые данные должны обеспечить проверку всех возможных условий возникновения ошибок: · должна быть испытана каждая ветвь алгоритма; · очередной тестовый прогон должен контролировать нечто такое, что еще не было проверено на предыдущих прогонах; · первый тест должен быть максимально прост, чтобы проверить, работает ли программа вообще; · арифметические операции в тестах должны предельно упрощаться для уменьшения объема вычислений; · количества элементов последовательностей, точность для итерационных вычислений, количество проходов цикла в тестовых примерах должны задаваться из соображений сокращения объема вычислений; · минимизация вычислений не должна снижать надежности контроля; · тестирование должно быть целенаправленным и систематизированным, так как случайный выбор исходных данных привел бы к трудностям в определении ручным способом ожидаемых результатов; кроме того, при случайном выборе тестовых данных могут оказаться непроверенными многие ситуации; · усложнение тестовых данных должно происходить постепенно. Пример. Система тестов для задачи нахождения корней квадратного уравнения ax2 + bx + c = 0:
Из каких этапов состоит процесс тестирования? Процесс тестирования можно разделить на три этапа. Проверка в нормальных условиях. Проверка в экстремальных условиях. Проверка в исключительных ситуациях. Известно, что все программы разрабатываются в расчете на обработку какого-то ограниченного набора данных. Поэтому важно получить ответ на следующие вопросы: ? Что произойдет, если программе, не расчитанной на обработку отрицательных и нулевых значений переменных, в результате какой-либо ошибки придется иметь дело как раз с такими данными? ? Как будет вести себя программа, работающая с массивами, если количество их элементов певысит величину, указанную в объявлении массива? ? Что произойдет, если числа будут слишком малыми или слишком большими? Наихудшая ситуация складывается тогда, когда программа воспринимает неверные данные как правильные и выдает неверный, но правдоподобный результат.
Каковы характерные ошибки программирования? Ошибки могут быть допущены на всех этапах решения задачи — от ее постановки до оформления. Разновидности ошибок и соответствующие примеры приведены в таблице:
Является ли отсутствие синтаксических ошибок свидетельством правильности программы? Обычно синтаксические ошибки выявляются на этапе трансляции. Многие же другие ошибки транслятору выявить невозможно, так как транслятору неизвестны замыслы программиста.
Примеры синтаксических ошибок: · пропуск знака пунктуации; · несогласованность скобок; · неправильное формирование оператора; · неверное образование имен переменных; · неверное написание служебных слов; · отсутствие условий окончания цикла; · отсутствие описания массива и т.п. Какие ошибки не обнаруживаются транслятором? Существует множество ошибок, которые транслятор выявить не в состоянии, если используемые в программе операторы сформированы верно. Примеры таких ошибок. Логические ошибки: · неверное указание ветви алгоритма после проверки некоторого условия; · неполный учет возможных условий; · пропуск в программе одного или более блоков алгоритма. Ошибки в циклах: · неправильное указание начала цикла; · неправильное указание условий окончания цикла; · неправильное указание числа повторений цикла; · бесконечный цикл. Ошибки ввода-вывода; ошибки при работе с данными: · неправильное задание тип данных; · организация считывания меньшего или большего объёма даных, чем требуется; · неправильное редактирование данных. Ошибки в использов нии переменных: · использование переменных без указания их начальных значений; · ошибочное указание одной переменной вместо другой. Ошибки при работе с массивами: · массивы предварительно не обнулены; · массивы неправильно описаны; · индексы следуют в неправильном порядке. Ошибки арифметических операций: · неверное указание типа переменной (например, целочисленного вместо вещественного); · неверное определение порядка действий; · деление на нуль; · извлечение квадратного корня из отрицательного числа; · потеря значащих разрядов числа. Эти ошибки обнаруживаются с помощью тестирования. В чем заключается сопровождение программы?
Многократное использование разработанной программы для решения различных задач заданного класса требует проведения дополнительных работ, связанных с доработками программы для решения конкретных задач, проведения дополнительных тестовых просчетов и т.п. Программа, предназначеная для длительной эксплуатации, должна иметь соответствующую документацию и инструкцию по её использованию. Вопросы для самоконтроля 8.1. Какие основные этапы включает в себя решение задач на компьютере? 8.2. Какие этапы компьютерного решения задач осуществляются без участия компьютера? 8.3. Что называют математической моделью объекта или явления? 8.4. Почему невозможно точное исследование поведения объектов или явлений? 8.5. Какие способы моделирования осуществляются с помощью компьютера? 8.6. Из каких последовательных действий состоит процесс разработки программы? 8.7. Доказывает ли получение правдоподобного результата правильность программы? 8.8. Какие ошибки могут остаться невыявленными, если не провести проверку (просмотр, прокрутку) программы? 8.9. Чем тестирование программы отличается от её отладки? 8.10. Каким образом программа-отладчик помогает исследовать поведение программы в процессе её выполнения? 8.11. Как следует планировать процесс отладки программы? 8.12. Можно ли с помощью тестирования доказать правильность программы? 8.13. На какой стадии работы над программой вычисляются эталонные результаты тестов? 8.14. Назовите основные этапы процесса тестирования. 8.15. В чём заключается отличие синта ксических ошибок от семантических? 8.16. О чём свидетельствует отсутствие сообщений машины о синтаксических ошибках? 8.17. Какие разновидности ошибок транслятор не в состоянии обнаружить? 8.18. Для чего программам требуется сопровождение?
Упражнения Составьте системы тестов для решения следующих задач: 8.1. Найти наибольший общий делитель двух заданных целых чисел. 8.2. Найти наименьшее общее кратное двух заданных целых чисел. 8.3. Определить, является ли заданное число нечетным двузначным числом. 8.4. Заданы площади квадрата и круга. Определить, поместится ли квадрат в круге. 8.5. Решить биквадратное уравнение. 8.6. Найти среднее арифметическое положительных элементов заданного одномерного массива. 8.7. Элементы заданного одномерного массива разделить на его первый элемент. 8.8. Определить, лежит ли заданная точка на одной из сторон треугольника, заданного координатами своих вершин. 8.9. Определить, имеют ли общие точки две плоские фигуры — треугольник с заданными координатами его вершин и круг заданного радиуса c центром в начале координат. 8.10. Задано целое А > 1. Найти наименьшее целое неотрицательное k, при котором 2k > А. 8.11. Дана последовательность целых чисел. Определить, со скольких чётных чисел она начинается. 8.12. В заданном двумерном массиве найти количество строк, не содержащих нули. 8.13. Определить, сколько строк заданного двумерного массива содержат элементы из заданного диапазона. 8.14. Преобразовать число, заданное в римской системе счисления, в число десятичной системы. |
Последнее изменение этой страницы: 2017-05-05; Просмотров: 762; Нарушение авторского права страницы