簡體   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