
- •Методы тестирования «чёрного ящика»
- •Модуль Bonus
- •Листинг
- •Покрытие операторов
- •Int BONUS(){
- •Int BONUS(){
- •Покрытие решений
- •Int BONUS(){
- •Int BONUS(){
- •Int BONUS(){
- •Int BONUS(){
- •Int BONUS(){
- •Покрытие условий
- •Int BONUS(){
- •Int BONUS(){
- •Int BONUS(){
- •Int BONUS(){
- •Операт
- •условий
- •Комбинаторное покрытие
- •Выводы по покрытию
Методы тестирования «чёрного ящика»
•Эквивалентное разбиение
•Анализ граничных значений
•Причинно-следственные диаграммы
•Прогнозирование ошибок
Методы тестирования
«белого ящика»
•Покрытие операторов
•Покрытие решений
•Покрытие условий
•Покрытие решений и условий
•Комбинаторное покрытие условий

Модуль 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