Перейти к содержимому

Фотография

Тестирование граничных значений. Помогите разобраться.


  • Авторизуйтесь для ответа в теме
Сообщений в теме: 8

#1 Paranoid

Paranoid

    Новый участник

  • Members
  • Pip
  • 6 сообщений

Отправлено 30 марта 2020 - 22:47

Всем привет. Изучаю тестирование. В книге Романа Савина "Тестирование дот ком" есть глава, посвященная тестированию пограничных значений (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.

 

Спасибо!


  • 0

#2 Spock

Spock

    Профессионал

  • Members
  • PipPipPipPipPipPip
  • 1 772 сообщений
  • ФИО:Роман

Отправлено 31 марта 2020 - 08:42

 

 

ЕСЛИ сумма <=200 И сумма >=499,99, ТО скидка = сумма/100*2.

тут видимо скорее:

 

ЕСЛИ сумма <=200 ИЛИ сумма >=499,99, ТО скидка = сумма/100*2

 

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


  • 1

#3 Vasiliy

Vasiliy

    Профессионал

  • Members
  • PipPipPipPipPipPip
  • 2 959 сообщений
  • ФИО:Касимов Василий
  • Город:Москва

Отправлено 31 марта 2020 - 11:17

Я когда-то писал одному начинающему тестировщику на форуме. Думаю, он не обидится, если я обнародую переписку, спустя годы)

 

Изотерика по пункту 2.
Допустим тебе надо проверить диапазон цифр (0 - 9). Ты берешь границы 0 и
9, проверяешь отступы: 1 и 8. Все ок. И говоришь:"Все, проверки окончены.
Программа работает." Следует вопрос:"Цифра 5 работает? Как вы можете
утверждать это, если такой конкретно проверки не было?"
Утверждать мы можем это, основываясь на модели. Вообще все тестирование
(почти все) строится на моделях. В данном случае мы считаем, что
разработчик не враг нам и кодировал диапазон напрямую, без изуверств 0 - 3;
5 -7; 8; 9. Ибо, если мы подозреваем автора программы в подобном, то нам
надо тестирование безопасности! А там другие знания и совсем другие бюджеты)
Еще раз - сначала положительные тесты, потом негативные. Наоборот может
быть в тестировании безопасности для финансовых инструментов, например.


  • 1

#4 Spock

Spock

    Профессионал

  • Members
  • PipPipPipPipPipPip
  • 1 772 сообщений
  • ФИО:Роман

Отправлено 31 марта 2020 - 18:18

а вообще правда в том, что надо все величины внутри проверять, начиная с 200.00, затем 200.01 и так далее до 499.98 и 499.99

 

ведь если понимать как программа работает, то будет понятно что все эти числа в программе хранятся в переменных, часто достаточно в больших, и потом с этими переменными происходят разные рассчёты и конвертации, в конце концов эта сумма приводится обратно к читаемому значению

 

и получается что иногда некоторые значения могут неправильно округляться, например 213.27 может превратиться в 213.28, хотя все числа рядом будут обрабатываться правильно

 

но конечно по методу границ таких проверок не надо делать


  • 1

#5 Paranoid

Paranoid

    Новый участник

  • Members
  • Pip
  • 6 сообщений

Отправлено 31 марта 2020 - 22:58

Spock, Vasiliy
Большое спасибо!

  • 0

#6 Paranoid

Paranoid

    Новый участник

  • Members
  • Pip
  • 6 сообщений

Отправлено 31 марта 2020 - 23:08

Spock, тоже думал над этим вариантом,

 

ЕСЛИ сумма <=200 ИЛИ сумма >=499,99, ТО скидка = сумма/100*2

 


Но и в этом случае тест со "значением в середине" избыточен, так как у нас не прошли бы тесты с 199,99 и 500.

 

Но почему надо делать все равно -- понятно.

 

Спасибо большое!


  • 0

#7 Spock

Spock

    Профессионал

  • Members
  • PipPipPipPipPipPip
  • 1 772 сообщений
  • ФИО:Роман

Отправлено 01 апреля 2020 - 08:40

 

 

Но почему надо делать все равно -- понятно.

наоборот говорят же, не надо его делать

 

перед тестированием надо заглянуть в код пулл-реквеста, и увидеть вот это логическое условие своими глазами, убедиться что никакого трэша там нет


  • 0

#8 Сергей

Сергей

    Профессионал

  • Members
  • PipPipPipPipPipPip
  • 1 245 сообщений
  • Город:Москва

Отправлено 01 апреля 2020 - 20:59

Тест нужен, но не тут. При тестировании электроники, например.
  • 0

"Если ты хороший плотник и делаешь красивую тумбочку, ты не будешь прибивать сзади фанеру, даже несмотря на то, что задняя часть повернута к стене, и никто ее не видит. Ты будешь хорошо спать ночью, только если тебе удалось воплотить в своем произведении эстетическую красоту и качество." © Стив Джобс


#9 Little_CJIOH

Little_CJIOH

    Профессионал

  • Members
  • PipPipPipPipPipPip
  • 1 515 сообщений
  • ФИО:Власкин Павел
  • Город:Санкт-Петербург


Отправлено 03 апреля 2020 - 14:34

 

Spock, тоже думал над этим вариантом,

 

ЕСЛИ сумма <=200 ИЛИ сумма >=499,99, ТО скидка = сумма/100*2

 


Но и в этом случае тест со "значением в середине" избыточен, так как у нас не прошли бы тесты с 199,99 и 500.

 

Но почему надо делать все равно -- понятно.

 

Спасибо большое!

 

Если сумма == 200 или сумма == 499.99

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


  • 0


Количество пользователей, читающих эту тему: 0

0 пользователей, 0 гостей, 0 анонимных