內存測試
內存測試
徠內存測試是指內存在生產過程中經歷的多次檢測,這些檢測包括:焊接檢測、PCB外觀檢測、功能檢測和整體外觀檢測等。另一方面也指軟體內存測試。它還需要測試軟體的最大內存等資源的佔用率,防止軟體使用的資源超出系統的限制。同時還需要測試系統資源在極端情況下的軟體行為,如系統內存資源被別的應用程序消耗時程序長時間運行后的情況等。
作為計算機不可缺少的一部分,內存性能的好壞對整個計算機系統有著極其重要的影響,隨著電子技術的不斷革新,計算機CPU的性能、匯流排帶寬和主頻不斷提高,而CPU所需的處理數據是直接從內存中獲取的,為了匹配CPU的運行速率,不讓CPU長時間處於等待狀態,造成硬體資源浪費,就需要內存不斷更新換代,不斷提高工作速度和存儲容量。
隨著內存條的不斷更新換代,高性能的內存已經成為存儲器發展的主流,然而隨著內存顆粒容量的增大,單元密度增加,生產製造工藝越來越複雜,生產出的內存產品良率明顯下降。因此,必須對內存條進行故障檢測,測試的意義:一方面判斷DDR2及DDR3 SDRAM內存條產品質量的好壞;另一方面對計算機內存系統的設計也很關鍵,內存條質量的好壞直接影響到內存系統的穩定性和可靠性。只有一個性能優良的DDR2 SDRAM或DDR3 SDRAM內存條才能使伺服器、PC等各種高速系統工作正常[。由此可見對DDR2及DDR3 SDRAM內存的故障測試是極其重要的。
隨著DDR2和DDR3 SDRAM的廣泛應用,方便快捷的檢測內存系統成為了行業需求,內存在生產過程中經歷了很多次檢測,這些檢測包括:焊接檢測、PCB外觀檢測、功能檢測和整體外觀檢測。焊接檢測是在內存基本成型時利用X光線檢測WLCSP(晶圓級晶元封裝)或BGA(球珊陣列結構)封裝的內存顆粒的錫球;PCB外觀檢測是人工以目測方式在放大鏡下進行;功能檢測的測試內容有容量、數據存取、SPD信息等;整體外觀檢測是對內存的整體外觀進行的最後一次檢測。這樣就完成了內存出廠前的整個測試工序,當然不同的廠家在功能測試方面採用的方法不同。
現在內存廠商,大多採用內存自動測試設備(Automated Test Equipment, ATE)對內存條進行測試,目前運用最多的是Advantest測試系統。例如在內存市場一直有較好聲譽的宇瞻(Apacer),就是通過最高端的Advantest測試系統進行檢測。除了Advantest測試系統以外,還有Keysight的V5500測試系統,它們都是檢測SDRAM晶元或內存條的性能和質量的設備。ATE測試設備測試項目包括交、直流參數測試及功能測試。其中的功能測試是對SDRAM晶元的讀、寫及數據保持等功能的檢測,可以通過改變數據讀、寫的定址順序以及數據圖案信息來檢測這些功能是否正確。
目前高檔的ATE測試設備有:Verigy公司的93K系統、Advantest公司的T5581/T5585/T5592系統以及KINGTIGER公司的KT-2APR0系統。這些測試系統的特點為:測試速度快;測試精度高;具有完整的時序、電性能和功能測試及分析;供專業的廠商使用;購買價格昂貴。以Advantest公司生產的T5592為例,該測試系統能夠對各種專用存儲器進行測試,最高可達到1.066GHz的測試頻率,最大可測64顆存儲晶元,同時還對存儲器的驅動口與雙向口分開測試進行了專門的設計,降低測試成本。
除了ATE測試設備測試內存以外,還有一些軟體工具能夠測試內存,如RST ( Ram Stress Test)內存測試軟體,RST是美國Ultra-X公司的一個維修級系統檢測工具,此檢測工具是專門給內存生產廠商使用的,RST在目前內存生產業使用非常普遍,因為此工具能檢測出內存出現的大部分問題,所以是非常好用的一個測試工具,同時此測試軟體與x86系列計算機相匹配,只要BIOS系統能識別的內存容量它都能檢測,但是只能檢測DDR內存;如果要檢測DDR2內存,需要“微軟內存檢測工具”,此測試工具對內存有6項測試方法,每項都有其獨特的測試演演算法來測試內存故障,但是一般情況下,一項測試就能檢測出內存是否有故障四。
另外還有一款優秀的基於Linux核心的內存測試軟體Memtest86,該軟體對內存故障的檢測準確率較高,其測試不僅僅局限於檢測內存條的好與壞,還能檢測出內存的隱性問題以及內存和系統的穩定性。
與此同時,板載BIOS固化的內存測試程序、以及基於ISA或PCI匯流排的內存測試卡也可對內存進行測試,但這幾種測試方法的缺點是需計算機主板晶元組支持,且必須要在能點亮的情況下才能進行測試。
軟體內存測試 是提高軟體質量的一個重要手段,據統計,國外軟體開發機構40%的工作量花在軟體測試上,軟體開發費用的近1/2用於軟體測試。對於一些要求高可靠、高安全的軟體,如核反應監控軟體、航天軟體,測試費用可能相當於軟體工程其它費用總和的3-5倍。
嵌入式軟體和一般的應用軟體測試相比,具有自身的特點(特別是對於沒有操作系統的嵌入式應用軟體而言):
1)嵌入式軟體是在特定的硬體環境下才能運行的軟體。因此,嵌入式軟體測試最重要的目的就是保證嵌入式軟體能在其特定的硬體環境下更可靠地運行。
2)嵌入式軟體測試除了要保證嵌入式軟體在特定硬體環境中運行的高可靠性,還要保證嵌入式軟體的實時性。比如在工業控制中,如徠果某些特定環境下的嵌入式軟體不具備實時響應的能力,就可能造成巨大的損失。
3)嵌入式軟體產品為了滿足高可靠性的要求,不允許內存在運行時有泄漏等情況發生,因此嵌入式軟體測試除了對軟體進行性能測試、GUI測試、覆蓋分析測試之外,還需要對內存進行測試。
內存測試需要測試軟體中的內存越界訪問、內存資源泄漏情況。內存越界主要包括數組越界讀寫、“野指針操作”和堆棧溢出等幾種。內存資源泄漏情況則包含較多的種類,如分配的內存沒有釋放、打開的文件沒有關閉、socket沒有關閉、Windows窗口句柄沒有關閉等。內存越界和內存資源泄漏是普遍存在的嚴重問題,可以說如果解決了內存越界和內存資源泄漏問題,軟體中的Bug就消除了一大半以上。
內存測試還需要測試軟體的最大內存等資源的佔用率,防止軟體使用的資源超出系統的限制。同時還需要測試系統資源在極端情況下的軟體行為如系統內存資源被別的應用程序消耗時程序長時間運行后的情況等。
傳統軟體內存測試技術分為靜態測試和動態測試。
靜態測試可以檢查軟體代碼的編程規範,分析程序的靜態結構,對軟體進行質量度量(如Testbed等)。藉助於靜態測試技術,可以使代碼更加規範,結構更加清晰,但不能分析各個變數之間的關係,當程序動態運行時,可能出現的運行時錯誤不能檢查出來。因此,傳統測試時靜態測試要和動態測試結合起來做。但動態測試具有太大的人為因素,導致動態測試不可能達到完全測試,只能達到測試用例覆蓋的程度,保證測試過的用例輸入不會出問題。同時,動態測試發現的問題僅局限於現象,測試人員提交BUG后,開發人員還需要對BUG進行重現並使用調試工具對BUG進行定位,這需要一定的時間。尤其對於偶出現的問題,需要更多的時間去調試、定位。
PolySpace使用的是目前最新的語義分析技術,它依靠大量的數學定理提供的規則去分析軟體的動態行為。語義分析技術沒有使用簡單的窮舉法,卻有能力在更普通的模式下去表達程序的狀態,還能提供規則巧妙的去處理它。當應用在運行時錯誤的檢測時,語義分析技術會對所有危險的操作,執行一個詳細的分析,儘早發現其中的運行時錯誤。
語義分析檢查包括如下幾個方面:
1)類型檢查。如果操作符作用於不相容的操作數,編譯程序必須報告出錯信息。
2)控制流檢查。控制流語句必須使控制轉移到合法的地方。例如,在C語言中break語句使控制跳離包括該語句的最小while ,for或switch語句。如果不存在包括它的這樣的語句,則應報錯。
3)一致性檢查。在很多場合要求對象只能被定義一次。
4)相關名字檢查。有時,同一名字必須出現兩次或多次,此時必須要檢查這幾個地方用的名字是相同的。
5)作用域分析。對元素的作用域分析,確保元素使用不出現問題。