Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
testprog / Презентация 5.ppt
Скачиваний:
116
Добавлен:
18.05.2015
Размер:
1.41 Mб
Скачать

Методы тестирования «чёрного ящика»

Эквивалентное разбиение

Анализ граничных значений

Причинно-следственные диаграммы

Прогнозирование ошибок

Методы тестирования

«белого ящика»

Покрытие операторов

Покрытие решений

Покрытие условий

Покрытие решений и условий

Комбинаторное покрытие условий

Модуль Bonus

Увеличивает на $200 размер з/п всем сотрудникам отдела или отделов, обеспечивших реализацию товара на наибольшую сумму. Если текущая з/п такого сотрудника превышает $15000 или он является менеджером, то надбавка к его з/п уменьшается до $100.

При корректной работе модуль возвращает код ошибки, равный 0. Если нет записей в таблице сотрудников или таблице отделов – код ошибки, равный 1. Если среди сотрудников не удаётся найти тех, кто работает в лидирующем отделе, то – равный 2.

Листинг

Department {

int

IDDepartment;

int sales; }

Employee {

string FIOemployee; int IDPost;

int IDDepartment; int wage; }

Int BONUS(){

1int errorCode=0; Department leadingDepartment{0;0} ; int boundaryWage=15000; int minAllowance=100; int maxAllowance=200;

2 If (Departmetns.Lenght <=0 || Employees.Lenght <=0) errorCode=1;

3else {

4for(int i = 1; i <= Departmetns.Lenght; i++)

5

if (Departments[i].sales >= leadingDepartment.sales) leadingDepartment=Department;

6

bool isLeadingDepartmentNull = true;

7

for (int i=1; i<= Employees.Lenght; i++)

8

if (employees[i].department = leadingDepartment.department)

 

{isLeadingDepartmentNull = false;

9if (employees[i].wage >= boundaryWage || employees[i].IDPost ==‘M’)

10

employees[i].wage = minAllowance;

11else employees[i].wage = maxAllowance;}

12if (isLeadingDepartmentNull) errorCode = 2;}

13return errorCode; }

Покрытие операторов

выполнение каждого оператора программы хотя бы один раз. Оператор — наименьшая автономная часть языка программирования (команда).

Int BONUS(){

1int errorCode = 0; Department leadingDepartment{0;0} ; int boundaryWage=15000; int minAllowance=100; int maxAllowance = 200;

2 If (Departmetns.Lenght <=0 || Employees.Lenght <=0) errorCode=1;

3else

4{for(int i=1; i<= Departmetns.Lenght; i++)

5

if (Departments[i].sales>= leadingDepartment.sales)

 

leadingDepartment=Department;

6bool isLeadingDepartmentNull=true;

7for (int i=1; i<= Employees.Lenght; i++)

8

 

if (employees[i].department = leadingDepartment.department)

 

{isLeadingDepartmentNull=false;

9

==‘M’)

if (employees[i].wage >= boundaryWage || employees[i].IDPost

10

 

employees[i].wage = minAllowance;

11

 

else employees[i].wage = maxAllowance;}

12if (isLeadingDepartmentNull) errorCode = 2;}

13return errorCode;}

Int BONUS(){

1int errorCode=0; Department leadingDepartment{0;0} ; int boundaryWage=15000; int minAllowance=100; int maxAllowance=200;

2 If (Departmetns.Lenght <=0 || Employees.Lenght <=0) errorCode=1;

3else

4{for(int i=1; i<= Departmetns.Lenght; i++)

5

if (Departments[i].sales>= leadingDepartment.sales)

 

leadingDepartment=Department;

6bool isLeadingDepartmentNull = true;

7for (int i=1; i<= Employees.Lenght; i++)

8

 

if (employees[i].department= leadingDepartment.department)

 

{isLeadingDepartmentNull=false;

 

 

 

 

 

9

==‘M’)

 

if (employees[i].wage >= boundaryWage || employees[i].IDPost

10

 

 

 

 

 

employees[i].wage = minAllowance;

11

 

 

else employees[i].wage = maxAllowance;}

 

12

 

if (isLeadingDepartmentNull) errorCode = 2;}

 

 

Тест Вход

 

 

 

 

Ожидаемый результат

13

return errorCode;}

 

 

 

 

 

 

1

Departmetns.Lenght = 2, Employees.Lenght = 2 errorCode = 2, таблица отделов не

 

 

Таблица сотрудников

Таблица

меняется

 

 

 

отделов

 

 

 

 

Таблица Сотрудников

 

Иванов М

1

21000

1

10000

Иванов

М

1 21100

 

2

8000

Петров

М

2 14000

 

Петров М

2

14000

 

Сидоро

1

10000

3

10000

Сидоров М

1 10200

 

в

М

 

 

 

 

 

Int BONUS(){

1int errorCode=0; Department leadingDepartment{0;0} ; int boundaryWage=15000; int minAllowance=100; int maxAllowance=200;

2If (Departmetns.Lenght <=0 || Employees.Lenght <=0) errorCode=1;

3else

4{for(int i=1; i<= Departmetns.Lenght; i++)

5

if (Departments[i].sales>= leadingDepartment.sales)

 

leadingDepartment=Department;

6bool isLeadingDepartmentNull=true;

7for (int i=1; i<= Employees.Lenght; i++)

8

 

if (employees[i].department= leadingDepartment.department)

 

{isLeadingDepartmentNull=false;

 

 

 

 

 

9

 

 

if (employees[i].wage >= boundaryWage

|| employees[i].IDPost ==‘M’)

10

 

 

 

 

employees[i].wage = minAllowance;

11

 

 

else employees[i].wage = maxAllowance;}

 

 

12

if (isLeadingDepartmentNull) errorCode=2;}

 

 

13ТестreturnВходerrorCode;}

 

 

 

Ожидаемый результат

1

Departmetns.Lenght = 2, Employees.Lenght = 3 errorCode = 0, таблица отделов не

 

 

Таблица сотрудников

Таблица

меняется

 

 

 

отделов

 

 

 

 

Таблица Сотрудников

 

Иванов М

1

21000

1

10000

Иванов

М

1 21100

 

Петров М

2

14000

2

8000

Петров

М

2 14000

 

Сидоро

1

10000

 

 

Сидоров М

1 10200

 

в

М

 

 

 

 

 

2 Departmetns.Lenght = 0, Employees.Lenght = 0 errorCode = 1, таблицы отделов и сотрудников не меняются

Покрытие решений

(ветвлений)

• Чтобы удовлетворить критерию покрытия ветвлений, необходимо построить тесты, охватывающие каждый чтобы каждое условие в программе хотя бы раз принимало как значение true, так и значение false. Т.е. каждая логическая ветвь каждой инструкции ветвления в программе должна быть выполнена хотя бы один раз.

• Примеры управляющих конструкций ветвления: switch-case, if-

elseInt .BONUS(){

1 int errorCode=0; Department leadingDepartment{0;0} ; int boundaryWage=15000; int minAllowance=100; int maxAllowance=200;

2If (Departmetns.Lenght <=0 || Employees.Lenght <=0) errorCode=1;

3else

4{for(int i=1; i<= Departmetns.Lenght; i++)

5

if (Departments[i].sales>= leadingDepartment.sales)

 

leadingDepartment=Department;

6bool isLeadingDepartmentNull=true;

7for (int i=1; i<= Employees.Lenght; i++)

8

if (employees[i].department= leadingDepartment.department)

 

{isLeadingDepartmentNull=false;

9

if (employees[i].wage >= boundaryWage ||

 

employees[i].IDPost ==‘M’)

10

employees[i].wage = minAllowance;

11

else employees[i].wage = maxAllowance;}

12if (isLeadingDepartmentNull) errorCode=2;}

13return errorCode;}

Int BONUS(){

1int errorCode=0; Department leadingDepartment{0;0} ; int boundaryWage=15000; int minAllowance=100; int maxAllowance=200;

2If (Departmetns.Lenght <=0 || Employees.Lenght <=0) errorCode=1;

3else

4{for(int i=1; i<= Departmetns.Lenght; i++)

5

if (Departments[i].sales>= leadingDepartment.sales)

 

leadingDepartment=Department;

6bool isLeadingDepartmentNull=true;

7for (int i=1; i<= Employees.Lenght; i++)

8

if (employees[i].department= leadingDepartment.department)

 

{isLeadingDepartmentNull=false;

 

9

if (employees[i].wage >= boundaryWage || employees[i].IDPost

 

==‘M’)

 

10

employees[i].wage = minAllowance;

11

else employees[i].wage = maxAllowance;}

Операт Результат true

Результат false

12

if (isLeadingDepartmentNull) errorCode=2;}

ор

Если в таблицах Отделов или Сотрудников нет

Если в таблицах Отделов и Сотрудников есть за

13

return errorCode;}

 

2

записей

 

 

 

Int BONUS(){

1int errorCode=0; Department leadingDepartment{0;0} ; int boundaryWage=15000; int minAllowance=100; int maxAllowance=200;

2If (Departmetns.Lenght <=0 || Employees.Lenght <=0) errorCode=1;

3else

4{for(int i=1; i<= Departmetns.Lenght; i++)

5

if (Departments[i].sales >= leadingDepartment.sales)

 

leadingDepartment=Department;

6bool isLeadingDepartmentNull=true;

7for (int i=1; i<= Employees.Lenght; i++)

8

if (employees[i].department= leadingDepartment.department)

9

if (employees[i].wage >= boundaryWage || employees[i].IDPost

10

==‘M’)

employees[i].wage = minAllowance;

 

11

else employees[i].wage = maxAllowance;

12

if (isLeadingDepartmentNull) errorCode=2;}

Операт Результат true

Результат false

13

return errorCode;}

 

ор

 

 

2Если в таблицах Отделов или Сотрудников нет записейСлучится не менее одного раза

5

Если в таблицах Отделов и Сотрудников В таблице Отделов есть записи есть записи упорядочиваются так, чтобы отдел с

меньшей суммой продаж следовал за отделом с большей суммой продаж

Int BONUS(){

1int errorCode=0; Department leadingDepartment{0;0} ; int boundaryWage=15000; int minAllowance=100; int maxAllowance=200;

2If (Departmetns.Lenght <=0 || Employees.Lenght <=0) errorCode=1;

3else

4{for(int i=1; i<= Departmetns.Lenght; i++)

5

if (Departments[i].sales>= leadingDepartment.sales)

 

leadingDepartment=Department;

6bool isLeadingDepartmentNull=true;

7for (int i=1; i<= Employees.Lenght; i++)

8

if (employees[i].department= leadingDepartment.department)

9

if (employees[i].wage >= boundaryWage || employees[i].IDPost

10

==‘M’)

employees[i].wage = minAllowance;

 

11

else employees[i].wage = maxAllowance;

12

if (isLeadingDepartmentNull) errorCode=2;}

Операт Результат true

Результат false

13

return errorCode;}

 

ор

 

 

2Если в таблицах Отделов и Сотрудников нет записей

5Случится не менее одного раза

Сотрудник числится в лидирующем отделе

Если в таблицах Отделов и Сотрудников есть записи

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

8