記憶體測試的需求來源
作為計算機不可缺少的一部分,記憶體性能的好壞對整個計算機系統有著極其重要的影響,隨著電子技術的不斷革新,計算機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的語義分析技術
PolySpace使用的是目前最新的語義分析技術,它依靠大量的數學定理提供的規則去分析軟體的動態行為。語義分析技術沒有使用簡單的窮舉法,卻有能力在更普通的模式下去表達程式的狀態,還能提供規則巧妙的去處理它。當套用在運行時錯誤的檢測時,語義分析技術會對所有危險的操作,執行一個詳細的分析,儘早發現其中的運行時錯誤。
語義分析檢查包括如下幾個方面:
1)類型檢查。如果操作符作用於不相容的運算元,編譯程式必須報告出錯信息。
2)控制流檢查。控制流語句必須使控制轉移到合法的地方。例如,在C語言中break語句使控制跳離包括該語句的最小while ,for或switch語句。如果不存在包括它的這樣的語句,則應報錯。
3)一致性檢查。在很多場合要求對象只能被定義一次。
4)相關名字檢查。有時,同一名字必須出現兩次或多次,此時必須要檢查這幾個地方用的名字是相同的。
5)作用域分析。對元素的作用域分析,確保元素使用不出現問題。