Удаленка для jenkins+selenide+selenoid+allure+docker спецов на 2-3 часа в день. 100% remote! Присоединиться к проекту

Задание: написать тестплан для тестирования функции, возвращающей рандомное число от A до B

job
Теги: #<Tag:0x00007fedb83fab58>

#1

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


(vmaximv) #2

А чем вам параметры А и В не входные данные?


(Богдан Ткаченко) #3

Ну во первых наверное не тест план, а тест кейс наверное, а во вторых задание сводиться к тому, что надо проверить классы эквивалентности и граничащие условия.

P.S. Тест план - это документ который описывает все тестирование т.е. кто что делает, как делать, сроки и т.д и т.п.
Тест кейс - это описание шагов, необходимых для проверки реализации тестируемой функции.

Разбить на 2 тест кейса один положительны другой отрицательный.

  1. Положительный (В положительном проверить значение, которое находится внутри отрезка (A, B), и граничащие условия A, B, A+1, B-1).

  2. Отрицательный (В отрицательном проверить, выход за граничащие условия т.е. (-∞, A) и (B, ∞+)).


(vmaximv) #4

И как вы собираетесь приходить свои два кейса в условиях неопределенности результата?


(vmaximv) #5

Вообще задача хоть и примитивная - но имхо быстро может выявить уровень решающего. Интересно было бы увидеть ещё варианты ответов.


(Богдан Ткаченко) #6

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

Интересно было бы узнать ваше решение этой задачи.


#7

Разбить на 2 тест кейса один положительны другой отрицательный.

  1. Положительный (В положительном проверить значение, которое находится внутри отрезка (A, B), и граничащие условия A, B, A+1, B-1).
  1. Отрицательный (В отрицательном проверить, выход за граничащие условия т.е. (-∞, A) и (B, ∞+)).

А как эти кейсы проверять? Я могу выполнить функцию, но ее результат случаен, я не могу влиять на ее выход.


(Богдан Ткаченко) #8

Выше ответил. Если я не прав напишите как вы думаете.


#9

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

Интересно было бы узнать ваше решение этой задачи.

Если функция условно выдает случайное число от 1 до 5, сколько раз нужно ее запустить? Если я выполню ее 10 раз и каждый раз получу числа от 1 до 5, можно ли считать тестирование оконченными или надо запустить еще 10 раз? Как определить, сколько раз ее надо прогнать?


#10

Я лично вообще затрудняюсь с решением, пытаюсь понять вашу мысль)


(vmaximv) #11

Чуть позже - хотелось бы увидеть больше вариантов.


(Богдан Ткаченко) #12

Ну думаю, чем больше тем лучше:slightly_smiling_face:, а так да 10 раз думаю будет достаточно. Но опять же если хорошо подумать, то надо к примеру еще проверить не возвращает ли эта функция одно и тоже число при каждом вызове. Да и вообще какой механизм реализации данной функции.


#13

А чем вам параметры А и В не входные данные?

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


(Богдан Ткаченко) #14

Не, ты же в конце получаешь рандомное число которое находится на отрезке A, B. Так что A, B это входные данные, а то что между ними или является им это выходные данные.


#15

В любом случае, я не могу ими манипулировать. Обычно задания сводятся к тому, чтобы написать тесты с набором значений, которые нужно подать на вход, а тут на вход ничего не подать, только получать выходные данные и сравнивать, удовлетворяют ли они требованиям. Но как понять, сколько именно раз необходимо и достаточно вызвать функцию. Какой вывод можно сделать, если при N прогонах функция вернула числа в нужном промежутке, но не каждое число из этого промежутка? Можно ли быть уверенным, что если при N прогонах функция вернула числа из промежутка, то на N+1 прогоне она не вернет число вне промежутка? И можно ли вообще сделать что-то кроме как прогнать функцию N раз?


(Богдан Ткаченко) #16

Ну если хотя бы выводится одно число вне этого промежутка то это фэйл и тест не пройден, если мы прошли N прогонов, то вероятность обнаружение неверного числа с каждым последующем прогоном становится меньше, я думаю только прогоном и можно тестировать, ну можно еще посмотреть логику как реализовалась рандомная выборка числа и поискать в ней баги:slightly_smiling_face:.


#17

Тогда вопрос как минимум в том, как определить достаточное количество прогонов)


(Sergey Korol) #18

Что-то у вас фокус идет только на output value. А про input все почему-то позабыли. Мы ведь сами задаем интервал. И тут сразу же можно понять, насколько хорошо кандидат знаком с основами программирования и спецификой самого языка. С целочисленными параметрами, пожалуй, будет самый простой вариант решения. Но даже тут есть нюансы. Ведь можно передать “правильный” диапазон, а можно - “перевернутый”. Ну или A = B. Какова будет реакция на отрицательные числа? Границы типов данных? Что будет, если на вход поступают строки? Какова частота дубликатов и непопаданий на N прогонов? Как ведет себя функция при multithreaded вызовах? А с производительностью что? Про дробные числа вообще молчу. Там еще появляется ряд интересных условий.

Да и вообще, может эта функция - часть веб-сервиса, или большого куска приложения, на котором строится сложная бизнес логика. Только ли речь о unit тестах?

Про тест план все же не зря написали, как мне кажется. :wink:


#19

Интервал сами не задаем, он от 1 до 6 (по заданию)


(Богдан Ткаченко) #20

Ну как говорит автор [quote=“newqa, post:15, topic:19920”]
Обычно задания сводятся к тому, чтобы написать тесты с набором значений, которые нужно подать на вход, а тут на вход ничего не подать, только получать выходные данные и сравнивать, удовлетворяют ли они требованиям.
[/quote]

А так как вы написали, то да можно тестить, тестить и тестить, пока не надоест:laughing:

Отредактирую=) как написал автор, в туже минуту, что и я, интервал уже вшит в функцию:slightly_smiling_face: