До 30 ноября

Скидки до 81 000 руб и вторая профессия в подарок!

Главная | Все статьи | Дневник студента

Хекслет, я ищу первую работу #2

Время чтения статьи ~3 минуты
Статья написана студентом Хекслета. Мнение автора может не совпадать с позицией редакции
Хекслет, я ищу первую работу #2 главное изображение

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

На почту пришло письмо с заданием, которое я, признаюсь, не особо понимал как выполнять. В текстовом файле было описание программы «cubes», запускающейся из командной строки, и принимающей на вход 3 параметра: количество бросков, минимальное и максимальное количество кубиков, кидаемых за раз. Далее программа имитирует броски кубика нужное количество раз, каждый раз кидая рандомное количество кубиков и высчитывая определенным образом количество очков. Написать такую программу можно в 10 - 15 строчек кода, что я изначально и собирался сделать. Но тестировать... Это обошлось бы в куда большее количество строк.

Прежде чем приступать к выполнению, я спросил, в каком виде нужно было присылать решение. Оказалось, что достаточно просто описать словами тесты: как, на что и зачем тестировать. Тут я конечно обрадовался. До появления в моей практике проектов Хекслета, я даже не особо представлял, как нормально использовать import и export в js, потому что Nodejs постоянно ругался (благо, сейчас я знаю в чем была проблема). Хотя, чтобы повысить свои шансы, все же стоило попытаться лучше.

Вот решение, которое я выслал:

Тест 1: проверка на броски. Программа должна бросать кубики ровно столько, сколько задано. Поскольку результат работы программы выводится только на консоль, нужно чтобы стандартный поток ввода программы с тестами совпадал со стандартным потоком вывода программы. В данном случае количество строк вывода программы должно совпадать с первым переданным аргументом. То есть $ ./cubik 65 1 4 должно вывести ровно 65 строк.

Тест 2: проверка на количество кубиков. Количество кубиков, бросаемых каждый раз, должно находиться в пределах от 2 до 3 аргумента, переданного программе. При этом количество брошенных кубиков в одном броске не должно превышать 5. Если количество кубиков больше 5, то программа должна выкинуть исключение.

Обычно для тестирования рандомных функций используют так называемое «семя». Тогда результат работы программы заранее будет известен. В нашем случае мы не знаем, как устроен рандом в программе, так что будем проверять вывод работы программы. Поскольку программа недетерминирована, т.е. нельзя гарантировать один и тот же результат при одних и тех же данных, этот тест можно и нужно запускать внутри каждого следующего. Но сначала можно запустить проверку по циклу, например $ ./cubik n i j, где n – количество бросков; i – минимальное количество кубиков, j – максимальное количество кубиков; i,j [1, 5].

Тест 3: проверка на корректность броска кубика. Опять же мы не знаем, как устроен рандом в броске кубика. Результаты броска каждого кубика должны быть (по-хорошему) равновероятны и должны лежать в пределах от 1 до 6. Тест должен на вводе получить поочередно каждую строку вывода программы, разбить ее на подстроки и проверить их, чтобы значение каждой подстроки (по сути, результат броска кубика) было в пределах от 1 до 6. Если вдруг при броске может выпасть значение выше 6 (например, 7) и при этом каждый результат броска равновероятен, то при вызове программы со значениями $ ./cubik 10 5 5 вероятность, что мы не обнаружим баг меньше половины процента. Однако если результаты броска неравновероятны, мы не сможем гарантировать корректность работы программы. Поэтому лучше проводить проверку при большем количестве итераций.

Тест 4: проверка на корректность подсчета баллов. Тест должен на вводе получить поочередно каждую строку вывода программы, разбить ее на подстроки, создать объект (словарь), в котором будет вестись подсчет выпавших результатов по типу {‘’1’’ : 0, ''2'' : 3, ‘’5’’ : 2}. Эта конструкция поможет эффективно подсчитывать количество баллов как при обычном раскладе, так и при выпадении специальной комбинации. Если словарь = {‘’1’’ : 1, ‘’2’’ : 1, ‘’3’’ : 1, ‘’4’’ : 1, ‘’5’’ : 1}, то результат должен быть 150. Иначе результат сравнивается со значением (словарь[''1''] * 10 + словарь[‘’5’’] * 5).

Не знаю насколько правильно я решил, но я все же получил приглашение на собеседование. Расскажу о нем чуть позже.

Аватар пользователя Uru Uru
Uru Uru 09 февраля 2021
3
Рекомендуемые программы
профессия
Осваивайте разработку веб-страниц, оживляйте дизайн макетов, публикуйте сайты и приложения. Отслеживайте ошибки в интерфейсе и устраняйте их
10 месяцев
с нуля
Старт 28 ноября
профессия
Обучитесь разработке бэкенда сайтов и веб-приложений — серверной части, которая отвечает за логику и базы данных
10 месяцев
с нуля
Старт 28 ноября
профессия
Выполняйте ручное тестирование веб-приложений, находите ошибки в продукте. Узнайте все о тест-дизайне.
4 месяца
с нуля
Старт 28 ноября
профессия
Научитесь разработке веб-приложений, сайтов и программного обеспечения на языке Java, программируйте и используйте структуры данных
10 месяцев
с нуля
Старт 28 ноября
профессия
новый
Собирайте, анализируйте и интерпретируйте данные, улучшайте бизнес-процессы и продукт компании. Обучитесь работе с библиотеками Python
9 месяцев
с нуля
Старт 28 ноября
профессия
Занимайтесь созданием сайтов, веб-приложений, сервисов и их интеграцией с внутренними бизнес-системами на бекенд-языке PHP
10 месяцев
с нуля
Старт 28 ноября
профессия
Создание веб-приложений со скоростью света
5 месяцев
c опытом
Старт 28 ноября
профессия
Обучитесь разработке визуальной части сайта — фронтенда, а также реализации серверной — бэкенда. Освойте HTML, CSS, JavaScript
16 месяцев
с нуля
Старт 28 ноября
профессия
Разработка бэкенд-компонентов для веб-приложений
10 месяцев
с нуля
Старт 28 ноября
профессия
новый
Организовывайте процесс автоматизации тестирования на проекте, обучитесь языку программирования JavaScript, начните управлять процессом тестирования
8 месяцев
c опытом
Старт 28 ноября