Главная страница

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


Скачать 115.73 Kb.
НазваниеЗадача наборов тест кейсов повысить эффективность тестирования за счёт ускорения и упрощения выполнения тесткейсов, увеличения глубины исследования некоторой области приложения или функциональности,
Дата11.05.2022
Размер115.73 Kb.
Формат файлаdocx
Имя файлалисты отчета с рамкой .docx
ТипЗадача
#521467




  1. Теоретическая часть.

    1. Логика создания эффективных проверок.

Задача наборов тест – кейсов — повысить эффективность тестирования за счёт ускорения и упрощения выполнения тест-кейсов, увеличения глубины исследования некоторой области приложения или функциональности, следования типичным пользовательским сценариям или удобной последовательности выполнения тест-кейсов.

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

Наиболее типичные подходы к составлению наборов тест-кейсов:

1. На основе чек-листов. Каждый пункт чек - листа можно превратить в несколько тест-кейсов. Получаем готовый набор тест - кейсов.

2. По принципу проверки самых важных, менее важных и всех остальных функций приложения (именно по этому принципу составляли примеры чек-листов).

3. По принципу группировки тест-кейсов для проверки некоторого уровня требований или типа требований. Группы требований или отдельного требования.

4. По принципу частоты обнаружения тест-кейсами дефектов в приложении

5. По архитектурному принципу. Наборы для проверки пользовательского интерфейса и всего уровня представления, для проверки уровня бизнес-логики, для проверки

уровня данных.

6. По области внутренней работы приложения. Например: «тест-кейсы, затрагивающие работу с базой данных», «тест

- кейсы, затрагивающие работу с файловой системой», «тест-кейсы,

затрагивающие работу с сетью», и т.д.

7. По видам тестирования логика создания эффективных проверок. Если у тест-кейса не указаны входные данные, условия выполнения и ожидаемые результаты, и/или не ясна цель, то такой тест – кейс не приведет к результату. Если чётко определено, что и зачем делается, то будет быстро найдена вся остальная недостающая информация и будут сформулированы правильные вопросы. Вся работа тестировщика в конечном итоге направлена на повышение качества.

Что такое качество? Это потребности и ожидания пользователя/заказчика). Качество — это ценность для конечного пользователя (заказчика). Человек в любом случае платит за использование продукта — деньгами, своим временем, какими-то усилиями.

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

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

Есть простая логика:

Тесты ищут ошибки.

Но все ошибки найти невозможно.

Значит, наша задача — найти максимум важных ошибок за имеющееся время.

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

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

Приступая к продумыванию чек-листа, тест-кейса или набора тест-кейсов, задайте себе следующие вопросы и получите чёткие ответы:

Что перед вами? Если вы не понимаете, что предстоит тестировать, то и не выберите, что проверять.

Кому и зачем это нужно (и насколько это важно)? Ответ на этот вопрос позволит вам быстро придумать несколько характерных сценариев использования того, что вы собираетесь тестировать.

Как оно обычно используется? Это уже детализация сценариев и источник идей для позитивного тестирования (их удобно оформить в виде чек-листа).

Как оно может сломаться, т.е. начать работать неверно? Это также детализация сценариев использования, но уже в контексте негативного тестирования (их тоже удобно оформить в виде чек-листа).

Пример создания эффективного чек-листа:

Эффективность вашего теста напрямую зависит от вашего написанного кода. И для тест-кейса лучше всего делить задание на несколько функций каждая из которых имеет собственные обязанности, и мы можем легко проверить ответы каждой функций по отдельности. В моей практической работе есть несколько главных этапов это: вывод игрового поля, запрос ввода у пользователя, ответ на ход пользователя и проверка результата игры. У нас всего 4 результата ответ которых надо проверить с нашим ранее подготовленным ответом. Таким образом каждый наш тест максимально эффективен, мы не берем во внимания ответы промежуточных результатов. Что экономит нам время на написании тестов, в то же время у нас есть необходимый минимум тестов чтобы наша программа работала корректно.

  1. Практическая часть.

    1. Постановка задачи.

Создать игру «крестики – нолики». Где игрок играет с ботом. Первым начинает игрок. На поле с размером 3 на 3, где игрок может поставить свою фигуру на свободное место. В процессе игры выводится игровое поле с номерами клеток от 1 до 9, и игрок сделает свой ход на свободную клетку. Имеется три результата игры: победа игрока, победа бота и ничья. Для победы 3 фигуры должны встать в ряд или по диагонали. Ничьей будет считаться, когда поле будет заполнено и ни у кого не будет 3 фигуры в ряд или по диагонали.

Примеры:

В ряд: По диагонали:

Ничья:


    1. Алгоритм решения.

Язык – С++.

Компилятор - https://www.programiz.com/cpp-programming/online-compiler/.

Режим – консольный.

Для решения задачи лучше всего разделить задачу на несколько подзадач. У игры должно быть: игровое поле, возможность корректно ставить фигурки, ответ на ход игрока и проверка результата игры. Для этого мы создадим 3 разных функций: board –будет выводить игровое поле, checkwin – будет возвращать значение в зависимости от исхода игры и bot – будет возвращать ответ на ход игрока.

board – выводит игровое поле игровое поле будет рисоваться из «_» и «|». А клетки будут заполняться из массива символьного массива square который заполнен цифрами от 0 до 9. Которое будет заменяться на «О» при вводе игрока и на «Х» при ответе бота.

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

checkwin – может возвращать 4 значений. Они: «-1» при том что игра не может быть закончена, «1» при победе игрока, «2» при победе бота, «0» при ничье. Проверка победы состоит из всех возможных условий победы, условие ничьей – если поле будет заполнено, но ни у кого не будет результата победы.

bot – функция возвращает случайное значение. Если же клетка с возвращаемым значением занята, то функция выполняется заново с помощью оператора goto.

    1. Листинг программы.

Код программы:

#include

using namespace std;

char square[10] = {'O','1','2','3','4','5','6','7','8','9'};
int checkwin();

void board();

int bot();

int main()

{

int player = 1,i,choice;

char mark;

do{

board();

player=(player%2)?1:2;

cout<< "Your move...\n";

if (player%2 == 1){

cin>> choice;}

if (player%2 == 0){

choice = bot();}

mark=(player == 1) ? 'X' : 'O';

if (choice == 1 &&square[1] == '1')

square[1] = mark;

else if (choice == 2 &&square[2] == '2')

square[2] = mark;

else if (choice == 3 &&square[3] == '3')

square[3] = mark;

else if (choice == 4 &&square[4] == '4')

square[4] = mark;

else if (choice == 5 &&square[5] == '5')

square[5] = mark;

else if (choice == 6 &&square[6] == '6')

square[6] = mark;

else if (choice == 7 &&square[7] == '7')

square[7] = mark;

else if (choice == 8 &&square[8] == '8')

square[8] = mark;

else if (choice == 9 &&square[9] == '9')

square[9] = mark;

else{

cout<<"Invalid move";

player--;

cin.ignore();

cin.get();}

i=checkwin();

player++;}

while(i==-1);

board();

if(i==1) cout<<"You won, congratulitions!!!";

else if(i == 2)cout<<"Bot won, good luck next time.";

elsecout<<"==>\aDraw!";

cin.ignore();

cin.get();

return 0;}
int checkwin(){

if (square[1] == square[2] && square[2] == square[3] && square [1] == 'X')

return 1;

else if (square[4] == square[5] && square[5] == square[6] && square [4] == 'X')

return 1;

else if (square[7] == square[8] && square[8] == square[9] && square [7] == 'X')

return 1;

else if (square[1] == square[4] && square[4] == square[7] && square [1] == 'X')

return 1;

else if (square[2] == square[5] && square[5] == square[8] && square [2] == 'X')

return 1;

else if (square[3] == square[6] && square[6] == square[9] && square [3] == 'X')

return 1;

else if (square[1] == square[5] && square[5] == square[9 ]&& square [1] == 'X')

return 1;

else if (square[3] == square[5] && square[5] == square[7] && square [3] == 'X')

return 1;

/*for 0*/

else if (square[1] == square[2] && square[2] == square[3] && square [1] == 'O')

return 2;

else if (square[4] == square[5] && square[5] == square[6] && square [4] == 'O')

return 2;

else if (square[7] == square[8] && square[8] == square[9] && square [7] == 'O')

return 2;

else if (square[1] == square[4] && square[4] == square[7] && square [1] == 'O')

return 2;

else if (square[2] == square[5] && square[5] == square[8] && square [2] == 'O')

return 2;

else if (square[3] == square[6] && square[6] == square[9] && square [3] == 'O')

return 2;

else if (square[1] == square[5] && square[5] == square[9 ]&& square [1] == 'O')

return 2;

else if (square[3] == square[5] && square[5] == square[7] && square [3] == 'O')

return 2;

else if (square[1] != '1' && square[2] != '2' && square[3] != '3'&&

square[4] != '4' && square[5] != '5' && square[6] != '6'&&

square[7] != '7' && square[8] != '8' && square[9] != '9') return 0;

else return -1;}
void board(){

system("cls");/*очистить консоль*/

cout<< "\n\nTik - Tak Toe\n\n";

cout<< "You (X) - BOT (O)" <
cout<
cout<< " | | " <
cout<<" "<< square[1] << " | " << square[2] << " | " << square[3] <
cout<< "_____|_____|_____" <
cout<< " | | " <
cout<<" "<< square[4] << " | " << square[5] << " | " << square[6] <
cout<< "_____|_____|_____" <
cout<< " | | " <
cout<<" "<< square[7] << " | " << square[8] << " | " << square[9] <
cout<< " | | " <int bot(){

redolabel:

int toReturn = 1;

srand((unsigned) time(NULL));

toReturn = rand()%10;

if(toReturn == 0)goto redolabel;

if (square[toReturn] == 'X' || square[toReturn] == 'O')goto redolabel;

return toReturn;}

    1. Разработка чек-листа

Для разработки чек листа нам сначала надо понять части программы, которые непосредственно надо проверить.

Важными в этой программе являются следующие пункты:

  1. Вывод игрового поля.

  2. Принять ход от игрока.

  3. Проверить корректен ли ввод.

  4. Ответить на ход игрока.

  5. Проверить исход игры.

    1. Тестирование пользовательского интерфейса.

Результат программы:


Изменение в игровом поле после ввода значения.

«Чистое» игровое поле.



Победа игрока. Победа бота. Ничья.
2.6. Трассировка программы.

Шагом выполнения программы является ввод пользователя/ответ бота.

Трассировка программы:

Шаг выполнения программы

Значение переменной (choice)

Значение переменной square[choice]

1

1

Х

2

2

O

3

3

X

4

9

O

5

7

X



Игра закончена победой игрока.


Программа закончена.

3. Заключение.

В этой практике я создавал игру «Крестики – нолики» с консольным режимом с помощью онлайн компилятора. В процессе работы я научился проектировать программу уже с более широким функционалом. Так же для того, чтобы программа работала корректно я научился создавать эффективно работающею систему тестирования для корректной работы программы, также логику их создания.

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

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

Список использованной литературы.

  1. Шилдт Герберт. / «С++. Базовый курс.» 2018 г.

  2. Шилдт Герберт. / «С++. Полное руководство.» 2019 г.

  3. Кетков, Юлий Практика программирования: Visual Basic, C++ Builder, Delphi. Самоучитель / Юлий Кетков , Александр Кетков. - М.: БХВ-Петербург, 2012. - 464 c.

  4. Полубенцева, М. C/C++. Процедурное программирование / М. Полубенцева. - М.: БХВ-Петербург, 2014. - 448 c.

  5. Поляков, А. Методы и алгоритмы компьютерной графики в примерах на Visual C++ / А. Поляков, В. Брусенцев. - М.: БХВ-Петербург, 2011. - 560 c.

  6. Понамарев, В. Программирование на C++/C# в Visual Studio .NET 2003 / В. Понамарев. - М.: БХВ-Петербург, 2015. - 917 c.




Заключение


написать администратору сайта