Всем привет. Изучаю тестирование. В книге Романа Савина "Тестирование дот ком" есть глава, посвященная тестированию пограничных значений (boundary testing). Перейду сразу к делу:
имеем, например, класс "стоимость купленных книг с границами 200,00--499,99 рублей" и скидкой 2 % к сумме. Насколько понял, общепринято делать 5 тест-кейсов:
1. 200 (нижняя граница);
2. 499,99 (верхняя граница);
3. 315,11 (любое значение внутри класса);
4. 199,99 (первое значение ниже нижней границы);
5. 500 (первое значение выше верхней границы).
Вроде бы все понятно, так принятно. Но в книге есть логичные объяснения для чего мы тестируем каждое из вышеназванных значений. Каждое объяснение выглядит логичным, кроме одного. Итак, в книге сказано:
программист кодирует следующую логику: ЕСЛИ сумма >=200 И сумма <=499,99, ТО скидка = сумма/100*2
1. тестируем 200, так как программист может ошибиться в знаке равенства и/или завысив сумму нижнего предела: (ЕСЛИ сумма >200 И сумма <=499,99, ТО скидка = сумма/100*2) или (ЕСЛИ сумма >=250 И сумма <=499,99, ТО скидка = сумма/100*2), в этом случае тест-кейс не будет пройдет -- ВСЕ ПОНЯТНО.
2. тестируем 499,99, так как программист может ошибиться в знаке равенства и/или занизив сумму нижнего предела (ЕСЛИ сумма >=200 И сумма <499,99, ТО скидка = сумма/100*2) или (ЕСЛИ сумма >=200 И сумма <=450, ТО скидка = сумма/100*2), в этом случае тест-кейс не пройдет -- ВСЕ ПОНЯТНО.
3. см. ниже
4. тестируем 199,99, так как программист может ошибиться, занизив сумму нижнего предела или использовать неверный логический оператор (ЕСЛИ сумма >=100 И сумма <=499,99, ТО скидка = сумма/100*2) или (ЕСЛИ сумма >=200 ИЛИ сумма <=499,99, ТО скидка = сумма/100*2), в этом случае тест пройдет, а не должен -- ВСЕ ПОНЯТНО.
5. тестируем 500, так как программист может ошибиться, завысив сумму верхнего предела или использовать неверный логический оператор (ЕСЛИ сумма >=200 И сумма <=599,99, ТО скидка = сумма/100*2) или (ЕСЛИ сумма >=200 ИЛИ сумма <=500, ТО скидка = сумма/100*2), в этом случае тест пройдет, а не должен -- ВСЕ ПОНЯТНО.
А вот с тестированием любого значения внутри класса не понятно. В книге объяснение такое:
3. тестируем 315,11, так как программист может ошибиться в знаках больше и меньше: ЕСЛИ сумма <=200 И сумма >=499,99, ТО скидка = сумма/100*2. Во-первых, здесь логически не подойдет НИ ОДНО значение, потому что ни одно значение не является одновременно менее, чем 200 и более, чем 499,99. Во-вторых, если бы программист перепутал знаки больше и меньше, как указано в книге, у нас бы сразу не прошел ни первый, ни второй тест. То есть в книге явная логическая ошибка.
Пытаясь разобраться самостоятельно, что конкретно покрывает третий тест с любым значением внутри класса, я пришел к выводу, что он может быть признан избыточным, так как необходимы и достаточны 4 теста: нижняя граница, верхняя, сразу под нижней, сразу под верхней.
Помогите, плз, разобраться, верны ли мои рассуждения? Единственное, что думаю, может быть, этот тест делают на всякий случай, во избежание совсем сумасшедшей ошибки, например, если программист вместо диапазона 200--499,99 случайно пропишет, скажем, два 200--250 и 450--499,99.
Спасибо!