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

0
hkasera 16 Фев 2011 в 10:57
Здесь разрешены домашние задания, но вы должны пометить их homework.
 – 
Konerak
16 Фев 2011 в 11:00
2
При правильной реализации - работает, при неправильной реализации - нет.
 – 
davin
16 Фев 2011 в 11:00
2
Стек не всегда реализуется со связным списком. Его также можно создать с помощью простого массива ..
 – 
ardiyu07
16 Фев 2011 в 11:01

2 ответа

Лучший ответ

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

  1. Можно положить элемент в стек и вытащить его.
  2. При добавлении нескольких отдельных элементов в стек повторное выталкивание возвращает их в обратном порядке.
  3. Неинициализированный стек пуст.
  4. Стек, в который помещен элемент, не пуст.
  5. Стопка, в которую помещены и впоследствии удаляются элементы, пуста.
  6. Попытка вытолкнуть, когда нет элементов, приводит к задокументированному типу сбоя, будь то возврат NULL, выдача исключения или прерывание программы.

Обобщить:

  • Базовый функционал.
  • Заказать недвижимость.
  • Инвариант пустоты.
  • Режим отказа.

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

5
Michael Aaron Safyan 16 Фев 2011 в 11:04
У нас может быть стек с разными типами данных, поэтому в тестовых примерах мы также можем включить его, не так ли?
 – 
hkasera
16 Фев 2011 в 18:26
Да. Это будет еще один пример того, что вы можете проверить.
 – 
Michael Aaron Safyan
18 Фев 2011 в 09:05

Что ж, подумайте, что вы хотите, чтобы ваш стек делал. Создайте API (или посмотрите на API существующий стек) и проверьте, каждая ли функция выполняет то, что должна. Вам следует взглянуть на Модульное тестирование.

Пример: в вашем базовом стеке должны быть push() и pop(), поэтому:

  • создать элемент A,
  • поместите A в стек,
  • вытолкнуть элемент
  • посмотрим, является ли это элементом А.

Особенно проверьте крайние случаи: удаление последнего элемента, двойная вставка элемента, вставка недопустимых объектов, ссылки на сам стек, удаление объектов, находящихся в стеке.

1
Konerak 16 Фев 2011 в 11:03