Учебно-методические материалы для студентов кафедры АСОИУ

ЛР №1 Пример обратного выполнения для программы вычисления степени числа x

В программе на Пример 2.4 фиксируются значения всех переменных после выполнения каждого оператора.

// Метод вычисляет неотрицательную
// степень n числа x
static public double PowerNonNeg(double x, int n)
{
double z=1;
Console.WriteLine("x={0} z={1} n={2}", x,z,n);
if (n>0) {
Console.WriteLine("x={0} z={1} n={2}",x,z,n);
for (int i=1;n>=i;i++) {
z = z*x;
Console.WriteLine("x={0} z={1} n={2}" + " i={3}",x,z,n,i);
}
}
else Console.WriteLine("Ошибка ! Степень" + " числа n должна быть больше 0.");
return z;
}

Пример 2.4.1. Исходный код с фиксацией результатов выполнения операторов

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

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

Тестирование заканчивается, когда выполнилось или "прошло" (pass) успешно достаточное количество тестов в соответствии с выбранным критерием тестирования.

Тестирование – это:

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

The process of operating a system or component under specified conditions, observing or recording the results, and making an evaluation of some aspect of the system or component [9].

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

The process of analyzing a software item to detect the differences between existing and required conditions (that is, bugs) and to evaluate features of software items [[IEEE Std.610-12.1990], [9].

Контролируемое выполнение программы на конечном множестве тестовых данных и анализ результатов этого выполнения для поиска ошибок [IEEE Std 829-1983].

Сквозной пример тестирования

Возьмем несколько отличающуюся от Пример 2.4 программу:

// Метод вычисляет степень n числа x
static public double Power(int x, int n)
{
int z=1;
for (int i=1;n>=i;i++)
{
z = z*x;
}
return z;
}
[STAThread]
static void Main(string[] args)
{
int x;
int n;
try
{
Console.WriteLine("Enter x:");
x=Convert.ToInt32(Console.ReadLine());
if ((x>=0)&(x<=999))
{
Console.WriteLine("Enter n:");
n=Convert.ToInt32(Console.ReadLine());
if ((n>=1) & (n<=100))
{
Console.WriteLine("The power n" + " of x is {0}", Power(x,n));
Console.ReadLine();
}
else
{
Console.WriteLine("Error : n " + "must be in [1..100]");
Console.ReadLine();
}
}
else
{
Console.WriteLine("Error : x " + "must be in [0..999]");
Console.ReadLine();
}
}
catch (Exception e)
{
Console.WriteLine("Error : Please enter " + "a numeric argument.");
Console.ReadLine();
}
}

Пример 2.5.1. Другой пример вычисления степени числа

Для приведенной программы, вычисляющей степень числа (Пример 2.5), воспроизведем последовательность действий, необходимых для тестирования.

Спецификация программы

На вход программа принимает два параметра: x — число, n – степень. Результат вычисления выводится на консоль.

Значения числа и степени должны быть целыми.

Значения числа, возводимого в степень, должны лежать в диапазоне – [0..999].

Значения степени должны лежать в диапазоне – [1..100].

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

Разработка тестов

Определим области эквивалентности входных параметров.

Для x – числа, возводимого в степень, определим классы возможных значений:

Для n – степени числа:

Анализ тестовых случаев

Ожидаемый результат: The power n of x is 8.

Ожидаемый результат: Error : x must be in [0..999].

Ожидаемый результат: Error : n must be in [1..100].

Ожидаемый результат: Error : Please enter a numeric argument.

Ожидаемый результат: The power n of x is 999.

Ожидаемый результат: The power n of x is 0.

Выполнение тестовых случаев

Запустим программу с заданными значениями аргументов.

Оценка результатов выполнения программы на тестах

В процессе тестирования Оракул последовательно получает элементы множества (X,Y) и соответствующие им результаты вычислений YВ. В процессе тестирования производится оценка результатов выполнения путем сравнения получаемого результата с ожидаемым.

CC-BY-CA Цыганенко В.Н., 15.10.2012