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

Фотография

Влияние типов данных на классы эквивалентности :)


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

#1 Куатор

Куатор

    Постоянный участник

  • Members
  • PipPipPip
  • 247 сообщений
  • ФИО:Комендантов Илья
  • Город:Украина, Одесса

Отправлено 11 ноября 2012 - 19:08

Товарищи!

Вопрос раз.

Такой вот задач: Программа принимает значения возраста от 16 до 85.
Классы эквивалентности (только числовые ибо в них соль):
  • -много, 0
  • 0, ..., 16
  • 16,...,85
  • 85,..., ?
Является ли знание о том, что тип данных для хранения этого значения является без знаковым байтом, достаточным условием для описания нового класса эквивалентности 85, ..., 255 ?
И далее уже последний классец: 255, ..., +много
Или нет тут никакой разницы и тип данных ваще никак ни разу никогда не повлияет на последнюю границу класса эквивалентности?
Собственно сталкивались ли вы с такими ошибками, когда программа принимающая значения в определённом диапазоне, неверно работала именно на границе типов данных (которые не входят в явном виде в какое-либо условие в программе)?

Вопрос два.
Бывают ли разорванные классы эквивалентности?
То есть: 0, ..., N,..., 255 - на всём промежутке от 0 до 255 программа ведёт себя одинаково, кроме числа N (меньшего 255 и большего 0). Если так, то какими будут эти самые классы эквивалентности?
Вопрос возник именно потому, что по моё понимание класса эквивалентности: диапазон входных значений, в которых программа ведёт себя одинаково (имеет одно и тоже состояние, выдаёт одни и те же данные и др одинаково). Является ли этот диапазон вообще-никак неразрывным? А если разрыв есть, то это уже граница класса, и дальше уже другой класс..? Но как же другой, если на значения в нём программа реагирует одинаково?
  • 0
Идеальный тестировщик - человек с золотыми руками, растущими из ж...

#2 ch_ip

ch_ip

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

  • Members
  • PipPipPipPipPipPip
  • 1 097 сообщений
  • ФИО:Павел Абдюшев
  • Город:Москва


Отправлено 11 ноября 2012 - 21:23

Вопрос раз.
Такой вот задач: Программа принимает значения возраста от 16 до 85.
---
Является ли знание о том, что тип данных для хранения этого значения является без знаковым байтом, достаточным условием для описания нового класса эквивалентности 85, ..., 255 ?
И далее уже последний классец: 255, ..., +много

1. Да. Более того, знание о таком типе хороший повод разбить и отрицательную область на 2 класса.

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

Да, и не раз.

Вопрос два.
Бывают ли разорванные классы эквивалентности?

2. Да. Класс эквивалетности это просто набор значений, на которые программа должна реагировать одинаково. А описываться этот набор значений может совершенно произвольным образом, как то:
  • все натуральные числа
  • все натуральные числа в диапазоне 10-100
  • все четные числа
  • простые числа, большие 100
  • числа кратные трем, но не кратные 7
  • ОДЗдля функции тангенс на промежутке от [10, 10]
и т.д.
  • 5

#3 Куатор

Куатор

    Постоянный участник

  • Members
  • PipPipPip
  • 247 сообщений
  • ФИО:Комендантов Илья
  • Город:Украина, Одесса

Отправлено 12 ноября 2012 - 04:58

Спасибо! Оперативно, по существу и, главное, понятно! :friends:
  • 0
Идеальный тестировщик - человек с золотыми руками, растущими из ж...

#4 Vasiliy

Vasiliy

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

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

Отправлено 12 ноября 2012 - 09:06

Да, спасибо, Павел.
Хорошо изложено.
  • 0

#5 negro

negro

    Активный участник

  • Members
  • PipPip
  • 102 сообщений
  • ФИО:Себастьян Переро
  • Город:Скотопригоньевск

Отправлено 16 ноября 2012 - 20:39

Судя по всему

Класс эквивалетности это просто набор значений, на которые программа должна реагировать одинаково.

и т.д., к сожалению, не все товарищи глубоко понимают суть вопроса о КЭ.
Более того, вы задали 8 (два, но по четыре в каждом) вопросов, а вам ответили на 3 (меньше, чем наполовину) и вы говорите

Спасибо! Оперативно, по существу и, главное, понятно!


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

По-моему, требуется важное уточнение в определении, а именно:
Класс эквивалентости это множество тестовых наборов входных значений, на котором, как ожидается, программа должна реагировать соответственно одинаково: негативно на негативные; позитивно на позитивные тестовые наборы.

Поясню на вашей задаче. Представляете, если программа будет реагировать одинаково позитивно, т.е. обрабатывать входные негативные значения -430; -200; 320; 530 (типа корректные) как позитивные значения от 16 до 85. Они что, из одного класса эквивалентности?!
А вот и иллюстрация (Problem.java - ящик с проблемой преобразования типов, кстати корректно работающий на интервале [-128; 127]):
public class Problem{
public static void main(String[] args) {
/*Входные значения*/
int [] input = {-430, -200, 50, 320, 530};
for(int i : input){
System.out.print("i = " + i + "; ");
byte age = (byte)i;
if(16 <= age && age <= 85){
System.out.println("Ok: " + age);
/*Блок обработки входных значений, успешно прошедших проверку
...
*/
}else{
System.out.println("Fail: " + age);
}}}}
Результат работы:
i = -430; Ok: 82
i = -200; Ok: 56
i = 50; Ok: 50
i = 320; Ok: 64
i = 530; Ok: 18

Хороший вопрос!
  • 0

#6 Куатор

Куатор

    Постоянный участник

  • Members
  • PipPipPip
  • 247 сообщений
  • ФИО:Комендантов Илья
  • Город:Украина, Одесса

Отправлено 17 ноября 2012 - 05:35

ch_ip, целиком и полностью ответил на оба мои вопроса! И с КЭ стало понятно, во всяком случае для меня)

Представляете, если программа будет реагировать одинаково позитивно, т.е. обрабатывать входные негативные значения -430; -200; 320; 530 (типа корректные) как позитивные значения от 16 до 85. Они что, из одного класса эквивалентности?!

Нет, они не из одного класса эквивалентности. То, как работает программа, описанная вами - это просто дефект, который сложно выявить с помощью КЭ.
КЭ это набор значений, который программа ДОЛЖНА обрабатывать одинаково (по требованиям к ней), а то, что она "чудит", так это дефект ;)

Если бы в требованиях к программе было указано, что она должна принимать значения -430; -200; 320; 530 и обрабатывать их также как и числа от 16 до 85, тогда бы это был один КЭ ;)
  • 0
Идеальный тестировщик - человек с золотыми руками, растущими из ж...

#7 negro

negro

    Активный участник

  • Members
  • PipPip
  • 102 сообщений
  • ФИО:Себастьян Переро
  • Город:Скотопригоньевск

Отправлено 17 ноября 2012 - 14:39

КЭ это набор значений, который программа ДОЛЖНА обрабатывать одинаково (по требованиям к ней)

Замечание 1: пож-та, не выделяйте регистром слова (например, "ДОЛЖНА"), их смысл не зависит от размера.
Замечание 2: своей иллюстрацией я ничего не утверждал, только хотел понять вашу логику.
По существу: с вашим определением не согласен.

Практические соображения: а что, за рамками требований невозможен (не существует) "набор значений, который программа ДОЛЖНА обрабатывать одинаково" и, самое главное, адекватно? где вы видели идеальные требования, где всё, что должна и не должна делать программа, прописано? тем более, в реализации всегда существуют особенности, которые Заказчику недоступны для понимания и никогда не описываются в требованиях.

Отделите одно от другого: то, что должно отвечать требованиям - то программа, а то - КЭ - описание всего множества входных значений, определяемое для соответствующего ожидаемого результата обработки.
  • 0

#8 Vasiliy

Vasiliy

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

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

Отправлено 19 ноября 2012 - 07:32

Поясню на вашей задаче. Представляете, если программа будет реагировать одинаково позитивно, т.е. обрабатывать входные негативные значения -430; -200; 320; 530 (типа корректные) как позитивные значения от 16 до 85. Они что, из одного класса эквивалентности?!

Это разные классы.
Есть размерность int, есть размерность byte. Соответственно и набор классов должен быть другой.
  • 0

#9 negro

negro

    Активный участник

  • Members
  • PipPip
  • 102 сообщений
  • ФИО:Себастьян Переро
  • Город:Скотопригоньевск

Отправлено 21 ноября 2012 - 21:20

Есть размерность int, есть размерность byte. Соответственно и набор классов должен быть другой.

Чтобы не путать неопытных читателей типами (особенно размерностями), а яснее донести подход к определению КЭ для числовых значений в общем случае, надо иметь в виду: диапозон (непрерывный или с правилом дискретизации); точность (порядок целой или дробной части с учётом правила округления); формат (представление в соответствии с локалью и единицами измерения и т.п.).
  • 0


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

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