Практика 1 Алгоритмизация Тестирование алгоритмов




























Практика.ppt
- Количество слайдов: 28
Практика 1 Алгоритмизация Тестирование алгоритмов
Этапы решения задачи на ЭВМ 1. Постановка задачи: • сбор информации о задаче; • формулировка условия задачи; • определение конечных целей решения задачи; • определение формы выдачи результатов; • описание данных (их типов, диапазонов величин, структуры и т. п. ). 2. Анализ и исследование задачи, модели: • анализ существующих аналогов; • анализ технических и программных средств; • разработка математической модели; • разработка структур данных. 3. Разработка алгоритма: • выбор метода проектирования алгоритма; • выбор формы записи алгоритма (блок-схемы, псевдокод и др. ); • выбор тестов и метода тестирования; • проектирование алгоритма. 4. Программирование: • выбор языка программирования; • уточнение способов организации данных; • запись алгоритма на выбранном языке программирования. 5. Тестирование и отладка: • синтаксическая отладка; • отладка семантики и логической структуры; • тестовые расчеты и анализ результатов тестирования; • совершенствование программы. 6. Анализ результатов решения задачи и уточнение в случае необходимости математической модели с повторным выполнением этапов 2 -5. 7. Сопровождение программы: • доработка программы для решения конкретных задач; • составление документации к решенной задаче, к математической модели, к алгоритму, к программе, к набору тестов, к использованию.
Этап 5 - Тестирование программы. Виды тестов Тестирование – это процесс выполнения программы с целью обнаружения допущенных в ней ошибок. Тестирование не является иллюстрацией работоспособности программы. Такой подход в значительной мере обеспечивает успех тестирования, обусловленный психологическим настроем обнаружить ошибки, а не продемонстрировать их отсутствие. По степени охвата проекта различают: • изолированное тестирование • промежуточное тестирование • комплексное тестирование
Стратегии тестирования Практика работы позволяет выделить две стратегии тестирования: • Черного ящика (функциональное тестирование) • Белого ящика (структурное тестирование) Стратегия черного ящика - тестирование с управлением по данным (по входу - выходу). Целью тестирования является выяснение обстоятельств, при которых поведение программы не соответствует спецификации. При таком подходе обнаружение ошибок может быть достигнуто путем исчерпывающего входного тестирования, т. о. в качестве тестовых наборов используются все возможные наборы входных данных. Простейшие примеры показывают, что это практически невозможно. Поэтому чтобы не перебирать все возможные значения применяются методы: • Эквивалентного разбиения, • Анализа граничных значений, • Гипотез ошибок.
Метод эквивалентного разбиения Метод эквивалентного разбиения состоит в разбиении входной области программы на конечное число классов эквивалентности, при котором каждый тест данного класса эквивалентен в смысле обнаружения ошибок любому другому тесту этого класса. Разработка тестов методом эквивалентного разбиения происходит в два этапа: выделение классов эквивалентности и построение тестов. Классы эквивалентности выделяются на основе анализа входных условий спецификации программы, при этом разделяют два типа классов эквивалентности: правильные (соответствуют правильным входным данным) и неправильные (представляющие ошибочные входные данные). Хотя выделение классов является эвристическим процессом, существует ряд правил, позволяющих его формализировать. Например, если входное условие описывает ситуацию "должно быть", то определяется один правильный класс и по крайней мере один неправильный.
Пример. Программа рассчитывает функцию f(x)= Область допустимых входных значений по определению логарифма Область допустимых значений данных (сокращенно ОДЗ) х (2. 3333, 18)
Пример. Выделим 3 класса эквивалентности на основе ОДЗ: Из каждого класса берется одно значение на Ваше усмотрение. Так для класса 1 можно было, с таким же успехом, взять значение 0 или - 0. 5. Графа "ожидаемый результат" просчитывается вручную или на калькуляторе. Графа "результат" заполняется при тестировании набранной программы. В дальнейшем сравнение ожидаемого результата и результата работы программы позволит Вам сделать вывод, о правильной или неправильной работе Вашей программы.
Метод граничных значений - это дополненный анализом граничных значений входных условий метод эквивалентного разбиения. Для каждого класса эквивалентности выбирается значение, которое входит в класс ("изнутри" класса), значения находящиеся на границе и значения с незначительным отклонением от границы ("рядом" с границей). Когда мы рассматриваем два смежных класса, граничное значение должно войти только в один из этих класса. В нашем примере границы между классами - это значения x=2. 3333 (входит в класс 1) и x=18 (входит в класс 3)
Пример. Предыдущий пример дополнится новыми значениями В класс 1 добавилось граничное значение х=2. 333333 и значение расположенное рядом с границей x=2. 32 В класс 2 добавились два значения расположенные рядом с границей x=2. 34 и x=17. 99 В класс 3 добавилось граничное значение х=18 и значение расположенное рядом с границей x=18. 01
Метод гипотез ошибок Применение метода гипотез ошибок основано на интуитивном предположении об ошибках. Составляется список возможных ошибок и исключительных ситуаций, которые могут появиться в программах данного класса. Достаточное научное обоснование метода возможно на основе широкого анализа предметной области и классификации ошибок и исключительных ситуаций. Пример. Пусть необходимо рассчитать функцию f(x)=log Гипотеза: для расчета функции f(x) необходимо рассчитывать При больших значения x может произойти переполнение и, следовательно, может возникнуть ошибка. В качестве теста рассчитаем f(3. 3*1038)=1. 9844908
Стратегия белого ящика - это тестирование с управляемое логикой программы. Стратегия основана на анализе внутренней структуры программы. Стратегия белого ящика включает проверку (покрытие) операторов, решений, условий, покрытие решений / условий, комбинированное покрытие. Покрытие операторов. Набор текстов должен быть таким, чтобы каждый оператор программы выполнился хотя бы один раз. Составим программу для расчета функции f(x)=
#include
Тесты по методу покрытия операторов Достаточно взять два значения х. При 2. 33333<х<18 (например, х=3), выполняться все операторы, кроме cout <<"n Некорректные входные данные"; Для его проверки достаточно взять х>=18 или x<=2. 3333, например, x=0.
Метод покрытия решений При покрытии всех решений каждый маршрут выполнения программы должен быть реализован хотя бы один раз. В данном случае существует 4 маршрут выполнения программы: ac, ad, bc, bd. Набор тестов должен быть таким, чтобы каждый маршрут был реализован хотя бы один раз.
Пример По координатам точки (х, y) определить принадлежит ли точка осям координат. Фрагмент программы: if ( x =0) cout <<"n. Точка на оси ОY"; if ( y = 0 ) cout < <"n. Точка на оси ОX"; Тесты: Значения х и у могут быть произвольными. Единственное требование, чтобы они позволяли проверить нужный маршрут.
Метод покрытия условий Для каждого условия необходимо проверить его выполнение и невыполнение хотя бы один раз Пример. По координатам точки (х, y) определить в какой координатной четверти лежит точка. if ((x > 0) && ( y > 0)) cout <<"n первая четверть"; if ((x < 0) && ( y > 0)) cout <<"n вторая четверть"; if ((x < 0) && ( y > 0)) cout <<"n третья четверть"; if ((x > 0) && ( y > 0)) cout <<"n четвертая четверть"; Возьмем такие точки, чтобы условия x>0 и y>0 выполнялись (кодируются +), например x=2 и y=4, при этом условия x < 0 и y < 0 будут не выполнены (кодируются -). Теперь, наоборот, возьмем такие точки, чтобы условия x < 0 и y < 0 не выполнялись (кодируются -), например x= -3 и y= -3, при этом условия x > 0 и y > 0 будут выполнены (кодируются +).
Пример 2 Для фрагмента программы: do ( (k <=50) && ( j+k < Q) ) {. . . } необходимо проверять условия k<=50, k>50, j+k=Q. Несмотря на очевидные преимущества, критерий покрытия условий не всегда удовлетворяет критерию покрытия решений. Пример, пусть тестируется фрагмент программы: if (a b) { блок операторов 1 } Для покрытия условий требуется два теста: (а - истинно , b -ложно) и (a -ложно, b истинно). Однако эти тесты не проверяют выполнение блока оператор 1. Улучшенный тест - покрытие решений/условий. Он требует, чтобы были покрыты все решения и все условия. Получается объединением наборов тестов по методу покрытия решений и покрытия условий.
Комбинированное покрытие требует, чтобы хотя бы один раз выполнялись все возможные комбинации условий.
Соотношения между различными покрытиями • Для программ содержащих только одно условие на каждом принятии решения минимальным является набор тестов покрытие решений. • Для программ содержащих более одного условия на принятии решения минимальным является тест на покрытие условий/решений.
Условные обозначения блоков схем алгоритмов. Наименование 0 бозначенне Функции Выполнение операции или группы операции, в результате которых Процесс изменяется значение, форма представления или расположение данных. Преобразование данных в форму, пригодную для обработки (ввод) или Ввод-вывод отображения результатов обработки (вывод). Выбор направления выполнения алгоритма в зависимости от некоторых Решение переменных условии. Предопределен- Использование ранее созданных и отдельно написанных программ ный процесс (подпрограмм). Документ Вывод данных на бумажный носитель. Пуск-останов Начало, конец, прерывание процесса обработки данных. Соединитель Указание связи между прерванными линиями, соединяющими блоки. Комментарий Связь между элементом схемы и пояснением.
Следование • Нарисовать в виде блок -схемы алгоритм расчета соотношения Пифагора: соотношение между объемами цилиндра и шара
Нарисовать в виде блок-схемы и придумать тесты для линейных алгоритмов расчета следующих задач: 1) Поменять значения переменных a и b местами. 2) Выделить 1 и 3 цифры в записи трехзначного числа. 3) Определить h – полное количество часов и m – полное количество минут, прошедших от начала суток до f-ой секунды. 4) Пешеход шел по пересеченной местности. Его скорость движения по равнине v 1 км/ч, в гору — v 2 км/ч и под гору — v 3 км/ч. Время движения соответственно t 1, t 2 и t 3 ч. Какой полный путь прошел пешеход? 5) Дана величина A, выражающая объем информации в байтах. Перевести А в более крупные единицы измерения информации( Килобайты – К, Мегабайты – М, Гигабайты – Г). 6) Скорость первого автомобиля V 1 км/ч, второго - V 2 км/ч, начальное расстояние между ними S км. Определить расстояние между ними через T часов, если автомобили удаляются друг от друга. 7) Вычислить периметр и площадь прямоугольного треугольника по заданным длинам двух катетов a и b. 8) Вычислить произведения цифр четырехзначного числа. 9) Найти площадь кольца с внутренним радиусом r и внешним радиусом R. 10) В исходном четырёхзначном числе поменять местами первую и предпоследнюю цифру местами. Например: входное число 1234 выходное – 3214.
Нарисовать в виде блок- Условные схемы алгоритмы вычисления значения функции А:
Нарисовать в виде блок-схемы с использованием разветвляющегося алгоритма и придумать тесты для решения следующих задач: 1) Для нормального разведения золотых рыбок необходимо, чтобы на каждую рыбку в аквариуме приходилось не менее 3 -х литров воды. По известным объему аквариума и количеству рыбок, в нем содержащихся, определить, является ли аквариум "перенаселенным" или нет, и указать количество рыбок, которых в случае перенаселенности необходимо поместить в другой аквариум. 2) Даны две переменные целого типа: A и B. Если их значения не равны, то присвоить каждой переменной сумму этих значений, а если равны, то присвоить переменным нулевые значения. Вывести новые значения переменных A и B. 3) Даны три переменные вещественного типа: A, B, C. Если их значения упорядочены по возрастанию, то удвоить их; в противном случае заменить значение каждой переменной на противоположное. Вывести новые значения переменных A, B, C. 4) На числовой оси расположены три точки: A, B, C. Определить, какая из двух последних точек (B или C) расположена ближе к A, и вывести эту точку и ее расстояние от точки A. 5) Даны три вещественных числа. Выбрать те из них, которые принадлежат интервалу [1, 3]. 6) Даны три действительных числа. Возвести в квадрат те из них, значения которых неотрицательны. 7) Составьте алгоритм, определяющую, пройдет ли график функции y = 5 x 2 – 7 x + 2 через заданную точку с координатами (a, b). 8) Даны три вещественных числа x, y, z. Вычислить значения выражений x + y + z и x*y*z и вывести максимальное из них. 9) Даны две точки: А(x 1, y 1) и B(x 2, y 2). Составить алгоритм, определяющий, которая точка находится ближе к началу координат. 10) В кубический, наполненный на 70% аквариум со стороной a метров выпустили рыбу-шар диаметром b см. Определить, выплеснется ли вода из аквариума (хвост и плавники рыбы не учитывайте).
Повторение (цикл) Цикл «С предпроверкой условия» Разложить целое число, вводимое с клавиатуры, на простые множители. Определим переменную X для ввода разлагаемого числа, m - переменная, используемая в качестве делителя. Для задания алгоритма будем использовать цикл с предпроверкой условия.
Повторение (цикл) Вычислить значение суммы Цикл «С постпроверкой условия»
Дано действительное число x. Повторение (цикл) Вычислить сумму ряда sin 2 x+sin 3 x+…+ sin 10 x. Начало Цикл «С параметром» Вывод подсказки: «Введите х» Ввод х S=0 i=2; 10 Тело цикла S=S+sin(i*x) Вывод S Конец
Нарисовать в виде блок-схемы с использованием циклических алгоритмов и придумать тесты для решения следующих задач: 1. Составить алгоритм, определяющую сумму 2. Вычислить значения функции F(x)=sin 2 x на отрезке [0, 1] с шагом 0, 2. 3. Вычислить, используя цикл с постусловием (1+sin 0, 1)(1+sin 0, 2)…(1+sin 10). 4. Напишите алгоритм вывода всех четных чисел от 2 до 100 включительно. 5. Даны два целых числа A и B (A < B). Найти сумму квадратов всех целых чисел от A до B включительно. 6. Дано целое число N (> 0). Найти произведение 1. 1 * 1. 2 *1. 3 * … (N сомножителей). 7. Дано целое число N (> 0). Найти значение выражения 1. 1 – 1. 2 + 1. 3 – … (N слагаемых, знаки чередуются). 8. Начав тренировки, спортсмен в первый день пробежал 10 км. Каждый день он увеличивал дневную норму на 10% нормы предыдущего дня. Какой суммарный путь пробежит спортсмен за 7 дней? В какой день впервые спортсмен пробежит более 20 км? В какой день впервые суммарный путь превысит 60 км? 9. С клавиатуры вводятся действительные числа и последовательно суммируются. Когда их сумма превысит 150, найти количество введенных чисел и их сумму. 10. С клавиатуры вводится десять чисел – положительных и отрицательных. Заменить все отрицательные числа их модулями, подсчитать количество таких замен.

