Форум программистов, компьютерный форум, киберфорум
Разработка и тестирование
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/15: Рейтинг темы: голосов - 15, средняя оценка - 4.67
0 / 0 / 0
Регистрация: 01.10.2012
Сообщений: 68

Тестирование белым ящиком

12.01.2014, 13:39. Показов 3112. Ответов 7
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Может кто-нибудь понятно объяснить, как им тестировать?
Я не понимаю, что значит "покрытие решений", "покрытие условий и решений" (так написано в Википедии)
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
12.01.2014, 13:39
Ответы с готовыми решениями:

Проблема с почтовым ящиком
Непонятная проблема с почтовыми ящиками пользователей. Проблема возникает периодически у разных пользователей. Письмо пришедшее...

Проверка коннекта с почтовым ящиком
привет, делаю почтовую программу. необходимо при указании данных о почтовом ящике установить соединение с самим ящиком. ну или просто...

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

7
Evg
Эксперт CАвтор FAQ
 Аватар для Evg
21281 / 8305 / 637
Регистрация: 30.03.2009
Сообщений: 22,660
Записей в блоге: 30
12.01.2014, 14:06
Я так понимаю, что речь идёт НЕ о "тестировании белЫМ ящикОМ", а о "тестировании белОГО ящикА"?
0
0 / 0 / 0
Регистрация: 01.10.2012
Сообщений: 68
12.01.2014, 15:03  [ТС]
Вы правильно понимаете.
А помочь мне не можете?
0
Evg
Эксперт CАвтор FAQ
 Аватар для Evg
21281 / 8305 / 637
Регистрация: 30.03.2009
Сообщений: 22,660
Записей в блоге: 30
12.01.2014, 15:50
А чем помочь-то? Я и вопроса-то не увидел
0
0 / 0 / 0
Регистрация: 01.10.2012
Сообщений: 68
12.01.2014, 16:03  [ТС]
Цитата Сообщение от elfinorr Посмотреть сообщение
Я не понимаю, что значит "покрытие решений", "покрытие условий и решений" (так написано в Википедии)
Вот вопрос.
И чем "покрытие условий" от "покрытия решений" отличается, можете объяснить?
0
Evg
Эксперт CАвтор FAQ
 Аватар для Evg
21281 / 8305 / 637
Регистрация: 30.03.2009
Сообщений: 22,660
Записей в блоге: 30
12.01.2014, 17:11
Покрытие условий - нужно, чтобы тест прогнался через все комбинации результатов условных операторов. Например:

C
1
2
3
4
5
6
7
8
9
10
11
void func (int x, int y)
{
  ...
  if (x > 0 && y > 0)
  {
    ...
  } else
  {
    ...
  }
}
Здесь два условия: "x > 0" и "y > 0". Тестовый пример должен быть таким, чтобы перебрались все комбинации условий (т.е. 4 комбинации)

Update:

Судя по статье, вот это называется "Комбинаторное покрытие условий". А то, что ты спрашиваешь - судя по всему это частные случаи. Т.е. для моего теста достаточно двух комбинаций, чтобы пройтись по веткам then и else.

Надо немного вкурить в статью, может я терминологию неправильно понимаю

Добавлено через 19 минут
В общем, судя по всему, "оператором" там называют то, что НЕ является условным оператором. "Условием" - любую отдельно взятую операцию сравнения. "Решением" - логическое выражение. Т.е. в примере

C
int func (int x, int y)
{
  int a, b;
  if (x > 0 && y > 0)
  {
    a = x * y;
    b = x / y;
  } else
  {
    a = x + y;
    b = x - y;
  }
 
  return a - b;
}
Операторы - "a = x * y", "b = x / y", "a = x + y", "b = x - y", "return a - b"
Условия - "x > 0", "y > 0"
Решения - "x > 0 && y > 0"

Покрытие решений - это в данном случае два теста, для которых будут истинный и ложный результат "x > 0 && y > 0"
Покрытие условий и решений - в данном случае 4 теста, для которых будут все комбинации результатов "x > 0" и "y > 0"

Вроде бы так
1
0 / 0 / 0
Регистрация: 01.10.2012
Сообщений: 68
12.01.2014, 19:25  [ТС]
Да, наверное, вы правы.
Спасибо вам большое за помощь!
0
Evg
Эксперт CАвтор FAQ
 Аватар для Evg
21281 / 8305 / 637
Регистрация: 30.03.2009
Сообщений: 22,660
Записей в блоге: 30
13.01.2014, 22:54
Да, вот ещё, вывалилось из головы

C
int func (int x, int y)
{
  int a, b;
 
  if (x > 0)
    a = 1;
  else
    a = 0;
 
  if (y > 0)
    b = 1 / a;
  else
    b = 2;
 
  return a + b;
}
Допустим, мы создадим два теста на такую функцию: "x = 1, y = 1" и "x = -1, y = -1". Несложно заметить, что для двух тестов мы получим 100% покрытие по операторам и 100% покрытие по условиям/решениям, т.к. по результату двух запусков мы пробежимся по каждому из линейных участков графа управления и по каждой дуге графа управления. Тем не менее это не даёт гарантии, что мы проверили всё. Для теста "x = -1, y = 1" наш тест сломается, несмотря на, казалось бы, 100%-ное покрытие.

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

Code
.   A
   / \
  B   C
   \ /
    D
   / \
  E   F
   \ /
    G
 
A: "x > 0"
B: "a = 1"
C: "a = 0"
D: "y > 0"
E: "b = 1/a"
F: "b = 2"
G: "return a + b"
Первоначальные два теста проверят только пути ABDEG и ACDFG. Но в функции ещё возможны пути ABDFG и ACDEG. А потому для полноты нужно как минимум 4 теста, которые пройдутся по всем путям.

Для данного примера четырёх тестов достаточно, но в общем случае покрытие по всем явным путям тоже не даёт гарантии полноты:

C
int func (int x)
{
  if (x > 0)
    return x;
  else
    return 1/x;
}
Здесь всего два явных пути. Если мы сделаем тесты "x = 1" и "x = -1", то по результату их исполнения получим 100%-ное покрытие по операторам, условиям/решениям и путям. Но и это нам не гарантирует полноты. Операция 1/x из-за возможного undefined behaviuor обладает виртуальным управлением, которое можно разделить на две ветки: ветка "x = 0" и ветка "x != 0". Таким образом, в нашей программе при двух явных путях, на самом деле существуют три виртуальных пути и для полноты нужно иметь три теста: "x = 1", "x = 0" и "x = -1".

Как по научному называется то, что я назвал "виртуальным путём" - я не знаю. Но таких случаев на самом деле много (типа корень из отрицательного числа, арксинус от величины, по модулю большей единицы, всяческие переполнения и т.п.). Ну и, в реальности никогда не интересно покрытие отдельно взятой функции, реально нужно покрытие целой программы.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
13.01.2014, 22:54
Помогаю со студенческими работами здесь

Занести в таблицу массив элементов с 0 по 5, далее с 6 по 9, т.е., поле с почтовым ящиком уникально
Здравствуйте! Подскажите пожалуйста как это реализовать? Есть массив элементов: 0 -> igorek@mail.ru 1 -> Игорёк 2 ->...

Удаленное тестирование приложение/Пересылка на тестирование
Если кто-то написал приложение под андроид и захочет показать другому человеку, то достаточно отослать apk. А как обстоит с этим дело в...

Unit -тестирование или автоматизированное тестирование
Доброго времени суток. Я программирую «для себя» второй год, на выходе получаются разного рода приложения от постоянно подающих с...

Тестирование (или Юнит тестирование)
Доброго времени суток, возник такой вопрос, раньше встречался на фронтенде с js тестированием, сейчас задался вопросом по поводу...

Тести́рование програ́ммного обеспе́чения(Модульное тестирование, или юнит-тестирование)
Извиняюсь перед администрацией что разместил тему в несоответствующем разделе, не мог найти про тестирование ПО. На днях встал вопрос о...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Новые блоги и статьи
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL3_image
8Observer8 27.01.2026
Содержание блога SDL3_image - это библиотека для загрузки и работы с изображениями. Эта пошаговая инструкция покажет, как загрузить и вывести на экран смартфона картинку с альфа-каналом, то есть с. . .
влияние грибов на сукцессию
anaschu 26.01.2026
Бифуркационные изменения массы гриба происходят тогда, когда мы уменьшаем массу компоста в 10 раз, а скорость прироста биомассы уменьшаем в три раза. Скорость прироста биомассы может уменьшаться за. . .
Воспроизведение звукового файла с помощью SDL3_mixer при касании экрана Android
8Observer8 26.01.2026
Содержание блога SDL3_mixer - это библиотека я для воспроизведения аудио. В отличие от инструкции по добавлению текста код по проигрыванию звука уже содержится в шаблоне примера. Нужно только. . .
Установка Android SDK, NDK, JDK, CMake и т.д.
8Observer8 25.01.2026
Содержание блога Перейдите по ссылке: https:/ / developer. android. com/ studio и в самом низу страницы кликните по архиву "commandlinetools-win-xxxxxx_latest. zip" Извлеките архив и вы увидите. . .
Вывод текста со шрифтом TTF на Android с помощью библиотеки SDL3_ttf
8Observer8 25.01.2026
Содержание блога Если у вас не установлены Android SDK, NDK, JDK, и т. д. то сделайте это по следующей инструкции: Установка Android SDK, NDK, JDK, CMake и т. д. Сборка примера Скачайте. . .
Использование SDL3-callbacks вместо функции main() на Android, Desktop и WebAssembly
8Observer8 24.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru