Давайте перейдем к трем требованиям по весу: FUN-UNDERWEIGHT, FUNNORMALWEIGHT и FUN-OVERWEIGHT. Сейчас самое время разделить входные и выходные значения на классы эквивалентности, как было объяснено раньше:
< 3 кг → недостаточный вес;
≥ 3 кг и < 6 кг → нормальный вес;
≤ 6 кг → избыточный вес.
Давайте предположим, что котов взвешивают с инкрементом в одну десятую килограмма. Это можно уточнить, обсудив с системными инженерами и другими заинтересованными лицами. Мы можем выбрать явные граничные значения: 2.9, 3.0, 5.9 и 6.0 кг. Теперь давайте добавим внутреннее значение из каждого класса эквивалентности: 1.6 кг для недостаточного веса, 5.0 кг для нормального веса и 10 кг для избыточного веса. Мы также хотим добавить неявные граничные значения — скажем, 0 и 1000 кг. Последнее значение предполагает, что 1000 кг является теоретической верхней границей для кота перед тем, как он превратится в черную дыру в соответствии с моим пониманием физики (замечу, что автор не является физиком). В завершение давайте проверим некоторые угловые случаи: отрицательное число (-13), нечисловую строку (quackadoodle_doo). Посмотрите, как много внимания уделяется определению множества входных значений для этих требований по сравнению с начальным сообщением. Так как определение статуса веса кота является сутью приложения, ему должно уделяться больше внимания с точки зрения тестирования:
ИДЕНТИФИКАТОР: UNDERWEIGHT-INTERNAL
ТЕСТ-КЕЙС: Запустить программу и передать в качестве параметра недостаточный вес кота, составляющий 1.6 кг
ПРЕДУСЛОВИЯ: Нет
ВХОДНЫЕ ЗНАЧЕНИЯ: 1.6
ШАГИ ВЫПОЛНЕНИЯ: В командной строке запустите "catweigher 1.6"
ВЫХОДНЫЕ ЗНАЧЕНИЯ: Нет в наличии
ПОСТУСЛОВИЯ: Программа выводит на экран сообщение "Вес кота недостаточный"
ИДЕНТИФИКАТОР: UNDERWEIGHT-LOWER-BOUNDARY
ТЕСТ-КЕЙС: Запустить программу и передать в качестве параметра вес невесомого кота, составляющий 0 кг
ПРЕДУСЛОВИЯ: Нет
ВХОДНЫЕ ЗНАЧЕНИЯ: 0
ШАГИ ВЫПОЛНЕНИЯ: В командной строке запустите "catweigher 0"
ВЫХОДНЫЕ ЗНАЧЕНИЯ: Нет в наличии
ПОСТУСЛОВИЯ: Программа выводит на экран сообщение "Вес кота недостаточный"
ИДЕНТИФИКАТОР: UNDERWEIGHT-UPPER-BOUNDARY
ТЕСТ-КЕЙС: Запустить программу и передать в качестве параметра недостаточный вес кота, составляющий 2.9 кг
ПРЕДУСЛОВИЯ: Нет
ВХОДНЫЕ ЗНАЧЕНИЯ: 2.9
ШАГИ ВЫПОЛНЕНИЯ: В командной строке запустите "catweigher 2.9"
ВЫХОДНЫЕ ЗНАЧЕНИЯ: Нет в наличии
ПОСТУСЛОВИЯ: Программа выводит на экран сообщение "Вес кота недостаточный"
ИДЕНТИФИКАТОР: NORMALWEIGHT-INTERNAL
ТЕСТ-КЕЙС: Запустить программу и передать в качестве параметра нормальный вес кота, составляющий 5 кг
ПРЕДУСЛОВИЯ: Нет
ВХОДНЫЕ ЗНАЧЕНИЯ: 5
ШАГИ ВЫПОЛНЕНИЯ: В командной строке запустите "catweigher 5"
ВЫХОДНЫЕ ЗНАЧЕНИЯ: Нет в наличии
ПОСТУСЛОВИЯ: Программа выводит на экран сообщение "Вес кота нормальный"
ИДЕНТИФИКАТОР: NORMALWEIGHT-LOWER-BOUNDARY
ТЕСТ-КЕЙС: Запустить программу и передать в качестве параметра нормальный вес кота, составляющий 3 кг
ПРЕДУСЛОВИЯ: Нет
ВХОДНЫЕ ЗНАЧЕНИЯ: 3
ШАГИ ВЫПОЛНЕНИЯ: В командной строке запустите "catweigher 3"
ВЫХОДНЫЕ ЗНАЧЕНИЯ: Нет в наличии
ПОСТУСЛОВИЯ: Программа выводит на экран сообщение "Вес кота нормальный"
ИДЕНТИФИКАТОР: NORMALWEIGHT-UPPER-BOUNDARY
ТЕСТ-КЕЙС: Запустить программу и передать в качестве параметра нормальный вес кота, составляющий 5.9 кг
ПРЕДУСЛОВИЯ: Нет
ВХОДНЫЕ ЗНАЧЕНИЯ: 5.9
ШАГИ ВЫПОЛНЕНИЯ: В командной строке запустите "catweigher 5.9"
ВЫХОДНЫЕ ЗНАЧЕНИЯ: Нет в наличии
ПОСТУСЛОВИЯ: Программа выводит на экран сообщение "Вес кота нормальный"
ИДЕНТИФИКАТОР: OVERWEIGHT-INTERNAL
ТЕСТ-КЕЙС: Запустить программу и передать в качестве параметра избыточный вес кота, составляющий 10 кг
ПРЕДУСЛОВИЯ: Нет
ВХОДНЫЕ ЗНАЧЕНИЯ: 10
ШАГИ ВЫПОЛНЕНИЯ: В командной строке запустите "catweigher 10"
ВЫХОДНЫЕ ЗНАЧЕНИЯ: Нет в наличии
ПОСТУСЛОВИЯ: Программа выводит на экран сообщение "Вес кота избыточный"
ИДЕНТИФИКАТОР: OVERWEIGHT-LOWER-BOUNDARY
ТЕСТ-КЕЙС: Запустить программу и передать в качестве параметра избыточный вес кота, составляющий 6 кг
ПРЕДУСЛОВИЯ: Нет
ВХОДНЫЕ ЗНАЧЕНИЯ: 6
ШАГИ ВЫПОЛНЕНИЯ: В командной строке запустите "catweigher 6"
ВЫХОДНЫЕ ЗНАЧЕНИЯ: Нет в наличии
ПОСТУСЛОВИЯ: Программа выводит на экран сообщение "Вес кота избыточный"
ИДЕНТИФИКАТОР: OVERWEIGHT-UPPER-BOUNDARY
ТЕСТ-КЕЙС: Запустить программу и передать в качестве параметра избыточный вес кота, составляющий 1000 кг
ПРЕДУСЛОВИЯ: Нет
ВХОДНЫЕ ЗНАЧЕНИЯ: 1000
ШАГИ ВЫПОЛНЕНИЯ: В командной строке запустите "catweigher 1000"
ВЫХОДНЫЕ ЗНАЧЕНИЯ: Нет в наличии
ПОСТУСЛОВИЯ: Программа выводит на экран сообщение "Вес кота избыточный"
ИДЕНТИФИКАТОР: WEIGHTSTATUS-INVALID-NEGATIVE
ТЕСТ-КЕЙС: Запустить программу и передать в качестве параметра отрицательный вес кота, составляющий -13 кг
ПРЕДУСЛОВИЯ: Нет
ВХОДНЫЕ ЗНАЧЕНИЯ: -13
ШАГИ ВЫПОЛНЕНИЯ: В командной строке запустите "catweigher -13"
ВЫХОДНЫЕ ЗНАЧЕНИЯ: Нет в наличии
ПОСТУСЛОВИЯ: Программа не отображает информацию о статусе веса кота и прекращает работу
ИДЕНТИФИКАТОР: WEIGHTSTATUS-INVALID-STRING
ТЕСТ-КЕЙС: Запустить программу и передать в качестве параметра неправильный строковый аргумент
ПРЕДУСЛОВИЯ: Нет
ВХОДНЫЕ ЗНАЧЕНИЯ: "quackadoodle_doo"
ШАГИ ВЫПОЛНЕНИЯ: В командной строке запустите "catweigher quackadoodle_doo"
ВЫХОДНЫЕ ЗНАЧЕНИЯ: Нет в наличии
ПОСТУСЛОВИЯ: Программа не отображает информацию о статусе веса кота и прекращает работу
Может показаться, что слишком много текста для этих тестов с их относительной важностью! Впрочем, запомните, что объем требуемой документации будет зависеть от вашей компании, от правовых требований к тестируемой системе и т. д. Хотя мы создали относительно проработанный тест-план, в отважном стартапе могут ограничиться простым списком различных проверяемых значений и неформально ожидаемых поведений программы. Ответственность в определении нужного поведения может оказаться на тестировщике. И хотя это потребует от него больше работы и умственных усилий, а также готовности к возможным ошибкам, компромисс будет состоять в том, что тестовый план окажется более гибким, а разработка его пройдет быстро. В тестировании программного обеспечения, как и во всей сфере разработки, очень редко встречаются "абсолютно правильные" ответы, и часто приходится выбирать правильные компромиссы.
Также имеется некоторое пересечение между двумя последними тест-кейсами (WEIGHTSTATUS-INVALID-NEGATIVE и WEIGHTSTATUS-INVALID-STRING) и предыдущими тест-кейсами по проверке требования FUN-PARAMETER. И хотя они рассматривают немного отличающиеся аспекты системы, в работе все они используют методологию черного ящика. Можно было бы сказать, что они не являются необходимыми, хотя тестирование белого ящика может показать, что различные части системы тестируются различными тест-кейсами.
В зависимости от культуры компании и того, что ожидается от документации тестплана, мы могли бы сжать тест-кейсы таким образом, чтобы каждый из них работал со множеством значений. И хотя я не рекомендую такой подход — проще копировать и вставлять, а большее количество тест-кейсов позволяет им быть более конкретным — это экономит время при написании. Это также позволяет каждому тесткейсу покрыть бóльшую "территорию", но добавляет дополнительный шаг для определения того, где кроется проблема, если тест-кейс завершился неуспешно. Опуская эту оговорку, давайте рассмотрим пример сжатия трех тест-кейсов о недостаточном весе в один:
ИДЕНТИФИКАТОР: UNDERWEIGHT-INTERNAL
ТЕСТ-КЕЙС: Запустить программу и передать ей в качестве параметра значения недостаточного веса кота
ПРЕДУСЛОВИЯ: Нет
ВХОДНЫЕ ЗНАЧЕНИЯ: 0, 1.6, 2.9
ШАГИ ВЫПОЛНЕНИЯ: В командной строке запустите "catweigher n", где n равняется одному из входных значений
ВЫХОДНЫЕ ЗНАЧЕНИЯ: Не доступны
ПОСТУСЛОВИЯ: Для каждого из входных значений программа выводит на экран сообщение "Вес кота недостаточный"