代碼審查也使用與實(shí)現缺陷和潛在問(wèn)題查找同樣復雜的技術(shù)。與白盒測試一樣,審查通常針對軟件的各個(gè)單元進(jìn)行,因為一個(gè)有效的審查過(guò)程要求的是集中而詳盡的檢查。
與審查和白盒測試不同,功能測試或黑盒測試假設對軟件的實(shí)現一無(wú)所知,它測試由受控輸入所驅動(dòng)的輸出。功能測試由測試人員或開(kāi)發(fā)人員所編寫(xiě)的測試過(guò)程組成,它們規定了一組特定程序輸入對應的預期程序輸出。測試運行之后,測試人員將實(shí)際輸出與預期輸出進(jìn)行比較,查找問(wèn)題。黑盒測試可以有效地找出未能實(shí)現的需求、接口問(wèn)題、性能問(wèn)題和程序最常用功能中的錯誤。
雖然將這些技術(shù)結合起來(lái)可以找出隱藏在一個(gè)特定軟件程序中的大部分錯誤,但它們也有局限。代碼審查和白盒測試每次只針對一小部分代碼,忽視了系統的其它部分。黑盒測試通常將系統作為一個(gè)整體來(lái)處理,忽視了實(shí)現的細節。一些重要的問(wèn)題只有在集中考察它們在整個(gè)系統內相互作用時(shí)的細節才能被發(fā)現;傳統的方法無(wú)法可靠地找出這些問(wèn)題。必須整體地檢查軟件系統,查找具體問(wèn)題的特定原因。由于詳盡徹底地分析程序中的每個(gè)細節和它與代碼中所有其它部分之間的相互作用通常是不大可能的,因此分析應該針對程序中已經(jīng)知道可能導致問(wèn)題的特定方面。本文將探討其中三個(gè)潛在的問(wèn)題領(lǐng)域:
* 堆棧溢出
* 競爭條件
* 死鎖
讀者可在網(wǎng)上閱讀本文的第二部分,它將探討下列問(wèn)題:
* 時(shí)序問(wèn)題
* 可重入條件
在采用多任務(wù)實(shí)時(shí)設計技術(shù)的系統中,以上所有問(wèn)題都相當普遍。
堆棧溢出
處理器使用堆棧來(lái)存儲臨時(shí)變量、向被調函數傳遞參數、保存線(xiàn)程“狀態(tài)”,等等。如果系統不使用虛擬內存(換句話(huà)說(shuō),它不能將內存頁(yè)面轉移到磁盤(pán)上以釋放內存空間供其它用途),堆棧將固定為產(chǎn)品出廠(chǎng)時(shí)的大小。如果由于某種原因堆棧越出了編程人員所分配的數量范圍,程序將變得不確定。這種不穩定可能導致系統發(fā)生嚴重故障。因此,確保系統在最壞情況下能夠分配到足夠的堆棧至關(guān)重要。
確保永不發(fā)生堆棧溢出的唯一途徑就是分析代碼,確定程序在各種可能情況下的最大堆棧用量,然后檢查是否分配了足夠的堆棧。測試不大可能觸發(fā)特定的瞬時(shí)輸入組合進(jìn)而導致系統出現最壞情況。
延伸閱讀
文章來(lái)源于領(lǐng)測軟件測試網(wǎng) http://kjueaiud.com/