Как проверить стек из n элементов? - PullRequest
0 голосов
/ 21 января 2009

Это кажется глупым вопросом, но мне бы очень хотелось, чтобы ваши комментарии, и хотел бы проверить мои мысли тестера ..

I can think of following test cases:
1) Pop element from empty stack should return error
2) Push n+1 elements in stack should return error during insertion of n+1th element
3) validate empty,full and top functions of stack.
4) if stack is used in multithreaded environment , make sure it is synchronized.
5) validate stack functionality: 
    push element (x)
    pop element: it should return x

Комментарии

Если этот вопрос задан в интервью, какие могут быть возможные ответы? Достаточно ли верен мой ответ?

Ответы [ 10 ]

1 голос
/ 21 января 2009

Я думаю, что вы охватили все, кроме проверки 3), что элементы n, переданные ранее, соответствуют вашим ожиданиям. Это отлавливает ошибочную проверку граничных условий, т. Е. Проверяет, заполнен ли стек только после записи нового элемента.

Кроме того, я бы сгруппировал ваши тестовые примеры по-разному и тестировал top, pop, push, empty, full для каждого:

  1. Пустой стек
  2. Стек с одним элементом *
  3. Стек с некоторыми элементами, возможно, вызовите pop / push дважды или чаще
  4. Стек почти заполнен (n-1 элементов) *
  5. Полный стек

* Не обязательно, но может быть угловой случай.

0 голосов
/ 25 октября 2018

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

public class LinkStackTest {
protected StackInterface<String> stack;
protected int size;
@Before public void setUp() {
stack = new LinkStack<String>();
}
@Test public void empty() {
assertTrue(stack.isEmpty());
assertEquals(0, stack.size());
}
0 голосов
/ 13 ноября 2011

Я думаю, что есть еще одна и самая простая вещь, на которую кто-то должен взглянуть. Стек является структурой данных LIFO, поэтому, если вы заполняете (последовательно толкаете) данный стек последовательностью элементов с данными «a, b, c, d ....... w», вы должны получить обратную последовательность (w ...., d, c, b, a) когда вы выталкиваете все элементы стека. Кто-то должен проверить, правильно ли работает главное свойство стека.

0 голосов
/ 21 января 2009

Ладно из комментариев

Тестирование стека можно разделить на

Functionality testing
Performance testing
Security testing: if data pushed onto stack are strings , then we may need to check for buffer overflows
0 голосов
/ 21 января 2009

Многопоточность: было бы хорошо написать тест, в котором по крайней мере 3 потока одновременно забивают структуру данных. И убедитесь, что вы запускаете его на многопроцессорном блоке, чтобы получить истинный параллелизм, а не только временные срезы.

И не забудьте случай, когда:

if( !stack.Empty )
{
    // oops, another thread emptied the stack and now this call will throw an error:
    stack.Pop();
}
0 голосов
/ 21 января 2009

Если есть другие методы, кроме push и pop (например, length и top ), проверьте их тоже.

Для верха, тест:

  • пустой стек (ошибка)
  • полный стек (n-й элемент)
  • повторные вызовы (должно возвращать то же значение, что и элемент не удаляется)

Для длины, проверить на:

  • пустой стек
  • полный стек
  • поведение после push (увеличение на единицу)
  • сообщение (уменьшение на единицу)
  • поведение пост-топ (без изменений)
  • сообщение о пустом стеке (ноль)
  • пост-пуш на полный стек (n).
0 голосов
/ 21 января 2009

Вы хотите стать действительно невротичным по этому поводу? Всегда интересно подтвердить производительность структур данных. Стек должен иметь постоянную производительность. Таким образом, для каждого k в [0, n-1) вы можете нажать k элементов, а затем нажать и вставить (k + 1) -ый элемент 1e8 раз и убедиться, что времена сопоставимы. Я могу представить несколько реализаций с мертвым мозгом, в которых элементу n-1 потребовалось бы в n раз больше времени, чем нажатию элемента 0.

0 голосов
/ 21 января 2009

Я бы улучшил (5) следующим образом: нажмите N различных элементов, выведите N раз и убедитесь, что одни и те же элементы получены в обратном порядке

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

0 голосов
/ 21 января 2009

Я бы также нажал цифры от 101 до 100 + n, а затем вытолкнул их всех, чтобы убедиться, что они выходят в обратном порядке (будут обнаружены проблемы с последовательностью, такие как «иногда pop получает второй элемент, а не первый»). 1001 *

Следующая последовательность должна тщательно проверить все, кроме ваших многопоточных требований:

  • пусто дает истину.
  • полный дает ложь.
  • pop выдает ошибку.
  • top дает ошибку (я полагаю, что это операция просмотра).
  • для n = от 101 до 100 + сз-1:
    • push n works.
    • top дает n.
    • пусто дает ложь.
    • полный дает ложь.
  • push 100 + sz работает.
  • вершина дает 100 + сз.
  • пусто дает ложь.
  • полный дает истину.
  • push 99 дает ошибку.
  • вершина дает 100 + сз.
  • пусто дает ложь.
  • полный дает истину.
  • для n = 100 + сз до 102:
    • поп дает п.
    • top дает n - 1.
    • пусто дает ложь.
    • полный дает ложь.
  • поп дает 101.
  • top дает ошибку.
  • пусто дает истину.
  • полный дает ложь.
  • pop выдает ошибку.
0 голосов
/ 21 января 2009

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...