繁体   English   中英

如何测试n个元素的堆栈?

[英]How to test a stack of n elements?

这似乎是一个愚蠢的问题,但我真的很想您的评论,并希望验证我的测试人员的想法。

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

评论?

如果在面试中提出这个问题,可能的答案是什么? 我的答案足够有效吗?

我认为您已经涵盖了所有内容,除了可能检查3)之前推送的n元素是您期望的方式。 这将捕获错误的边界条件检查,即仅在写入新元素之后检查堆栈是否已满。

另外,我将对您的测试用例进行不同的分组,并对每个用例的top,pop,push,empty,full测试:

  1. 空栈
  2. 一元素堆叠*
  3. 堆叠一些元素,可能两次或更多次调用pop / push
  4. 堆叠将近满(n-1个元素)*
  5. 全栈

*不是必需的,但可能是一个小案例。

在我看来很好。 只需确保在验证功能时,确保以正确的顺序返回多个项目,每次弹出并推动后top即可正常工作,并且在弹出最后一个元素后可正确报告为空。

我还将数字101推到100 + n,然后将它们全部弹出以确保它们以相反的顺序出现(将捕获排序问题,例如“有时pop将获得第二个元素,而不是第一个元素”)。

以下序列应彻底测试除多线程需求以外的所有需求:

  • 空给出真。
  • 全给假。
  • 弹出提示错误。
  • top给出了错误(我假设这是一个偷看操作)。
  • 对于n = 101至100 + sz-1:
    • 推n作品。
    • 顶部给出n。
    • 空为假。
    • 全给假。
  • 推动100 + sz的作品。
  • 顶部给出100 + sz。
  • 空为假。
  • 全给真。
  • 推送99报错。
  • 顶部给出100 + sz。
  • 空为假。
  • 全给真。
  • 对于n = 100 + sz降至102:
    • 流行音乐给出n。
    • top给出n-1。
    • 空为假。
    • 全给假。
  • 弹出给出101。
  • 顶部给出错误。
  • 空给出真。
  • 全给假。
  • 弹出提示错误。

我将增强(5)的内容:推入N个不同的元素,弹出N次,并确保以相反的顺序检索相同的元素

检查此单词是否包含排序列表,反向排序列表和未排序列表中的元素也可能是明智的选择。

您是否想对此感到神经过敏? 确认数据结构的性能总是很有趣的。 堆栈应具有恒定的性能。 因此,对于[0,n-1)中的每个k,您可以推入k个元素,然后将第(k + 1)个元素推入并弹出1e8次,并确保时间可比。 我可以想象几种脑瘫的实现方式,其中元素n-1的推入和弹出要比元素0花费n倍的时间。

如果除了push和pop之外还有其他方法(例如, length和top ),也请进行测试。

对于顶部,测试:

  • 空堆栈(错误)
  • 全栈(第n个元素)
  • 重复调用(应返回与未删除元素相同的值)

对于长度,请测试:

  • 空栈
  • 全栈
  • 推送后的行为(增加一)
  • 弹出后(递减1)
  • 行为居首(不变)
  • 在空堆栈上弹出(零)
  • 后推全栈(n)。

多线程:最好编写一个测试,其中至少3个线程同时锤击数据结构。 并确保在多处理器机器上运行它,这样您才能获得真正的并发,而不仅仅是时间分割。

并且不要忘记以下情况:

if( !stack.Empty )
{
    // oops, another thread emptied the stack and now this call will throw an error:
    stack.Pop();
}

好的,来自评论

堆栈测试可以分为

Functionality testing
Performance testing
Security testing: if data pushed onto stack are strings , then we may need to check for buffer overflows

如果您正在谈论编写测试用例以弄清堆栈是否是示例性的,那么就是这样

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());
}

我认为还有其他事情应该是最简单的事情。 Stack是一种LIFO数据结构,因此,如果您使用给定的序列“ a,b,c,d ....... w”填充(随后推动)给定的堆栈,则应该获得相反的顺序(w ,....,d,c,b,a)弹出堆栈中的所有元素。 有人应该检查堆栈的main属性是否正确。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM