Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
НПО - ПОИТ (Бахтизин).doc
Скачиваний:
2
Добавлен:
01.07.2025
Размер:
5 Мб
Скачать
☆
  1. Компонент пользовательского интерфейса:

#include <stdio.h>

#include <stdlib.h>

#include <conio.h>

#include "matemat.cpp"

float Input_float()

{ unsigned char str[256];

int i = -1;

do{str[++i] = getchar();

}while(str[i] != '\n');

str[i] = '\0';

return atof(str);}

void NewParam(float *a,float *b,float *c)

{ printf("Введите значение 1-й стороны:");

*a = Input_float();

printf("Введите значение 2-й стороны:");

*b = Input_float();

printf("Введите значение 3-й стороны:");

*c = Input_float();}

int ValidationParam(float a,float b,float c)

{ if(a<=0 || b<=0 || c<=0)

{ printf("Значение стороны треугольника не может быть >=0\n");

return 0; } else

if(a+b<c)

{printf("Введённая фигура не является треугольником\n");

return 0; }

return 1;}

void begin_program()

{ float st1,st2,st3,result;

NewParam(&st1,&st2,&st3);

if(ValidationParam(st1,st2,st3))

{ result=AreaGeron(st1,st2,st3);

printf("Ответ: %f",result); }}

void main(void)

{ begin_program();

char c;

scanf("%c",&c);}

  1. Компонент математического расчёта:

#include <math.h>

float sqr(float operand)

{ return operand*operand;}

float AreaGeron(float st1, float st2, float st3)

{ float PoluPer,Area;

PoluPer = (st1+st2+st3)/2;

Area = sqrt((PoluPer-st1)*(PoluPer-st2)* (PoluPer-st3)*(PoluPer));

return Area;}

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

  • Руководствуясь спецификацией требований к модулю, необходимо подготовить тесты для входных и выходных условий;

  • Необходимо обеспечить прохождение всех условных операторов в тексте модуля во всех направлениях;

  • Если в тексте модуля есть циклы, то необходимо включить в список тесты, которые будут соответствовать путям:

  • без выполнения тела цикла;

  • с однократным выполнением тела цикла;

  • с максимальным выполнением тела цикла.

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

Драйвер - это управляющая программа, которая:

  1. принимает тесты и эталонные результаты;

  2. запускает в работу тестируемый модуль;

  3. получает из модуля реальные результаты;

  4. формирует информацию о результатах тестирования.

Заглушка - это фиктивная программа, которая замещает модули, вызываемые тестируемым модулем.

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

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

Суть метода заключается в последовательном выполнении следующих правил:

  1. Если условие ввода задаёт диапазон [a, b], то необходимо задать тесты:

  • Для значений a и b;

  • Для значений чуть левее a и чуть правее b.

Например, если a = 1 и b = 5, тогда необходимо разработать тесты для значений 1 и 5 , 0,5 и 5,5;

  1. Если условие ввода задаёт дискретное множество значений то:

  • Для проверки минимального и максимального значений;

  • Для значений чуть больше максимума и чуть меньше минимума;

  1. Правила 1 и 2 применяются также к условиям вывода.

В результате проектирования тестов получаем набор, который иллюстрирует таблица 8.3.

Таблица 8.3.

Набор тестов

№ теста

Значение стороны A

Значение стороны B

Значение стороны C

Реакция программного средства

1

Min (float) - 1

Min (float) - 1

Min (float) - 1

Ошибка входных данных

2

Min (float)

Min (float)

Min (float)

Нет результата (переполнение)

3

1

1

1

Площадь = 0,433013

4

0

58

58

Ошибка (одна из сторон = 0)

5

1.00004

0.00934

0.073483

Ошибка (одна из сторон больше суммы других)

6

-41.9

-34

-67

Ошибка (введено отрицательное значение длины стороны)

7

Max (float)

Max (float)

Max (float)

Переполнение в результате

8

Max (float)+1

Max (float)+1

Max (float)+1

Ошибка входных данных

В данном наборе тестов, согласно выбранному методу, реализованы тесты, позволяющие проверить реакцию ПС, получающего данные, которые имеют значения в заданном диапазоне (тесты 3, 4, 5, 6), на его границах (тесты 2, 7) и значения, выходящие за рамки диапазона (тесты 1, 8).

Поскольку входные данные имеют тип float (числа с плавающей запятой), то:

  • Граничные значения a и b соответственно имеют значения 1.175494351 е–38 и 3.402823466 е+ 38 (для удобства обозначены Min (float) и Max (float) соответственно).

  • Значениями же, выходящими за рамки диапазона, можно считать значения 1.175494351 е–38–1 и 3.402823466 е+ 38+1 (для удобства обозначены Min(float)-1 и Max(float)+1 соответственно).

Для демонстрации реакции программного средства на ввод корректных данных был разработан тест 3. Значения сторон были выбраны случайно.

Для проверки реакции программного средства на ввод некорректных данных разработаны тесты 4, 5, 6:

  • Реакция ПС на ввод нулевого значения одной из длин сторон треугольника. В результате такого ввода ПС выдаёт соответствующее сообщение (тест 4).

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

  • Реакция ПС на ввод отрицательных значений длин сторон треугольника (тест 6).