Добрый день, при трудоустройстве на работу было выдано задание протестировать калькулятор при условии ввода только целых чисел от одного до десяти и возможности сложить только 3 пары чисел. Нужно указать какие
Мой ответ был
1) 0+1
2) 4+11
3) 9+3
Интересно услышать замечания, спасибо !
Доброго времени суток,
Я бы начинал решение задачи с уточняющих вопросов, потому как контекст данной задачи неизвестен. Бросаться решать задачу, которую не до конца понимаешь - не сильно хорошая идея :)
Далее, допустим мы не смогли вообще ничего узнать, собеседующий убежал куда-то, ок.
Исследуем то, что есть (условие): Целый числа (а это и отрицательные тоже), от 1 до 10-ти (предположу, что 10-ть включено в диапазон, но это конечно же вопрос надо хотя бы упомянуть в ответе, если его некому задать).
Операция - сложение. Три кейса.
Сразу скажу результат, который у меня получился:
-10 + -10 = -20
-1 + 1 = 0
10 + 10
Три кейса, именно в этом порядке
Размышления:
Ну, я бы не заморачивался на 3х кейсах, если я увижу необходимость в бОльшем количестве (то есть, смогу это количество обосновать), то я распишу их все.
Когда в задаче вижу числа на входе и на выходе, для меня это сразу сигнал - доменное тестирование (или упрощённый вариант - анализ граничных значений и классы эквивалентности).
Разбиваем входные данные на домены:
-1 ... -10
1 ... 10
Обращаем внимание, что 0-ль в них отсутствует!
Разбиваем выходные данные на домены:
-20 ... 20
Обращаем внимание, что 0-ль тут есть и эта ситуация обязательно должна быть включена в проверки!
Предполагаю, что данные однородны и ни одно из чисел в каждом домене не отличается от другого (то есть, входят в один класс эквивалентности). Это риск, его надо указать в ответе.
Далее, при таких исходных данных у нас есть три ситуации (думается, посему и три кейса):
- Сложение двух отрицательных чисел
- Сложение отрицательного и положительного чисел
- Сложение двух положительных чисел
Первый кейс:
-10 + -10 = -20, проверяет сразу несколько вещей:
- Возможность калькулятора сложить два отрицательных числа (в результате получить число меньше любого из слагаемых)
- Максимальные значения входных данных первого домена
- Максимальное значение выходных данных (нижняя граница)
- Возможность результата хранить знак, указывающий, что число отрицательное
Второй кейс:
-1 + 1 = 0, проверяет также несколько вещей:
- Возможность калькулятора сложить отрицательное и положительное число
- Минимальные границы обоих входных доменов
- Уникальное значение выходного домена
Третий кейс:
10 + 10 = 20, проверяет тоже несколько вещей:
- Возможность калькулятора сложить два положительных числа (получить результат больший любого из слагаемых)
- Максимальную границу второго входного домена
Уже по количеству проверяемых вещей можно понять очерёдность проверок.
Последний кейс конечно слабоват, потому как возможность переполнения уже была проверена первым кейсом, там ситуация была сильнее ибо необходимо было хранить к этому в добавок ещё и знак.
Ещё кейсы: 1 + 1 = 2, -1 + -1 = -2 .. проверяют только нижние границы, которые в условиях сложения, не очень-то и важны. Я бы их не делал.
Почему нет негативных кейсов, из условия задачи вообще не понятно как числа вводятся. Нигде не указано, что их можно ввести с клавиатуры, возможно эти данные предоставляет другая программа или они читаются из файла или напрямую из памяти (и интерпретируются как числа от одного до десяти), или ...
Даже, если числа всё же вводятся с клавиатуры, проверки входного фильтра по приоритету ниже проверки логики. Опять же, сейчас они с клавы вводятся, а завтра, уже сервис предоставляет, логика же может оставаться неизменной.
Также, нигде не указано, что программа выполняется на PC, может она заточена под какой-то микроконтроллер со своим ассемблером, регистрами памяти и прочей лабудой. Посему мы можем получить переполнение где-то после 16-ти (4 бита), -16 (5 бит), следовательно проверка границ более чем оправдана (+ к тому, что там возможны сбои из-за того, что это вообще граница).
Но при этом возрастает риск, что данные таки не сильно однородные ;)
Все свои предположения и вопросы, необходимо указать в ответе, желательно вместе с объяснениями почему именно такие кейсы, как написано выше, например ;)
Идеальный тестировщик - человек с золотыми руками, растущими из ж...