摘要:嵌入式軟件的應用與開發是當今計算機軟件發展的一個熱點。本文首先分析了在嵌入式系統開發中軟件開發的重要性,接著分析了傳統測試方式的缺點,并在此基礎上介紹了AMC公司的CODETEST嵌入式軟件在線分析與測試解決方案。
關鍵字: 嵌入式 軟件分析 軟件測試 動態測試 實時 白盒測試
引言:隨著嵌入式技術的發展,嵌入式應用的不斷增長以及嵌入式系統復雜性不斷提高,要求嵌入式軟件的規模和復雜性也不斷提高,嵌入式軟件的質量和開發周期對產品的最終質量和上市時間起到決定性的影響,嵌入式軟件的開發、分析與測試成為了研究的熱點。針對這一變化,本文提出了一種為嵌入式軟件的開發、分析與測試特別設計的一種測試方法。
嵌入式軟件分析與測試的重要性
隨著計算機硬件技術的進步和元件質量逐步提高,元件的集成量也大大增加,從而使嵌入式設備的硬件性能得到了極大的提高;與此同時,通過采用成熟的商用操作系統,使系統運行在一個高性能的、可靠的軟件平臺上,為實現各種大型的復雜的應用打下了良好的基礎。面對系統復雜性的增加,自然需要功能強大、性能穩定的應用軟件與之相適應。所以,在嵌入系統開發中軟件的代碼量也越來越大,電子類產品的代碼量以每兩年就翻一翻的速度增長。同時,系統又要求應用也要精簡高效、穩定可靠,使軟件的開發在整個系統開發中所占的時間也越來越長,軟件的質量對產品的最終質量起到了決定性的作用。但是事實上由于軟件的開發缺乏科學的管理手段,開發的軟件得不到很好的測試與分析,所編寫的程序沒有得到有效的測試就交付給用戶使用。那些沒有運行過的代碼帶著潛在的危險交付到客戶手中,經常會給用戶帶來巨大的經濟損失、為產品供應商帶來信譽上的損失,在一些特殊的領域甚至會危及人的生命安全。
綜上所述,隨著嵌入式系統的發展,我們迫切需要一種工具能夠在軟件開發的單板階段、集成階段、系統階段等各階段對嵌入式系統的軟件進行實時在線的測試與分析,以保證系統的性能和可靠性。
市面上流行的測試工具大致分為純軟件的測試工具和純硬件的測試工具(如邏輯分析儀和仿真器等),下面我們從原理上分析使用傳統的測試工具對嵌入式軟件進行分析和測試的優缺點。
純軟件的測試工具
純軟件的測試工具采用的是軟件打點技術,在被測代碼中插入一些函數,用這些函數來完成數據的生成,并上送數據到目標系統的共享內存中。同時在目標系統中運行一個預處理任務,完成這些數據的預處理,將處理后的數據通過目標機的網口或串口上送到主機平臺。這一切都需借助于用戶的目標處理器完成。通過以上過程,測試者得以知道程序當前的運行狀態。 從上述分析可知,純軟件的測試工具的測試原理有兩個必然存在的特點——插樁函數和預處理任務。
由于插入插樁函數和預處理任務的存在,使系統的代碼增大,更嚴重的是這些代碼會對系統的運行效率有很大的影響(超過50%)。函數本身要有它的實現過程,它要完成數據的生成和暫存,而且這些函數在它的實現過程中還可能被其他優先級更高的中斷程序所中斷,預處理任務需要占用目標系統CPU處理時間、共享內存和通信通道完成數據的處理、數據的上送。由于這些弊端的存在,當采用純軟件測試工具對目標系統進行測試時,用戶目標系統是在一種不真實的環境下運行的,我們所捕獲的數據也是不夠精確。
所以采用純軟件的測試工具缺乏性能分析,它不能對用戶目標系統中的函數和任務運行的時間指標進行精確的分析。
當做覆蓋率分析的時候,因為要大量打點,而打點多于200時就會影響系統的運行,所以只能做單元覆蓋率分析且單元的程序量不能太大。
它不能對內存的動態分配進行動態的觀察。
純硬件的測試工具
純硬件工具通常用于系統的硬件設計與測試工作。當它用于軟件的分析測試時,卻無法滿足用戶的基本要求。
以邏輯分析儀為例,邏輯分析儀是通過監控系統在運行時總線上的指令周期,并以一定的頻率捕獲這些信號,通過對捕獲的信號進行分析來判斷程序當前運行的狀況。由于它使用的是采樣的方式,難免會遺失一些重要的信號;同時,分析的范圍也及其有限。以性能分析為例,當使用某種邏輯分析儀進行性能分析時,我們只能以抽樣的方式,同時對80個函數做性能分析,得到一個不精確的結果;而若使用CodeTEST,我們可以同時對128000個函數做性能分析,得到一個精確的結果。
當對程序做覆蓋率分析時,因為硬件工具是從系統總線捕獲數據的,如當CACHE打開我們會采用指令預取技術,從外存中讀一段代碼到一級CACHE 中,這時邏輯分析儀在總線上監視到這些代碼被讀取的信號,就會報告這些代碼已經被執行了,但實際上被送到CACHE中的代碼可能根本沒有被命中。為了避免這種誤差必須把CACHE關閉掉,而CACHE關掉就不是系統真實的運行環境了,有時甚至會由于CACHE關閉而導致系統無法正常運行。
而仿真器通常采用內存標記技術,它所關心的也是處理器從外存的代碼段讀取數據的情況。所以也無法在CACHE打開的方式下工作。而它的性能分析也是以仿真器的時間系統以抽樣的方式進行的,也無法時實對系統進行真實的分析。所以我們所得出的結果也是不精確的。
純硬件工具根本不能對內存分配進行分析和檢查的能力。
CodeTEST對軟件分析測試功能的實現原理
AMC公司吸取了純軟件測試工具和純硬件測試工具的優點,并對它們進行改善和提升后推出了CodeTEST。
由此可知,CodeTEST是一個硬件輔助軟件的測試與分析工具,它一方面吸取軟件打點技術,并對這種技術進行了改善,純軟件工具插入的是一個函數,而CodeTEST插入的是一條賦值語句,它在匯編級也是一條語句,所以它執行的時間非常短,同時避免了被其它的中斷所中斷,所以它對目標系統的影響非常。1%-15%)。另一方面, CodeTEST從純硬件的測試工具那里吸取了從總線捕獲數據的技術并且對它進行了改善,CodeTEST不再是采樣的方式,它是通過監視系統總線,當程序運行到插入的特殊的點的時候才會主動的到數據總線上把數據捕獲回來,借此,在同樣的處理能力下,CodeTEST可以做到精確的數據觀察。
CodeTEST強大的測試分析功能。
由于CodeTEST對軟件打點技術和從總線捕獲數據進行了改善和提升,正是這種原理上的優勢,所以CodeTEST具有強大的性能分析、內存分析、高級覆蓋率分析和代碼跟蹤功能。
1.強大的性能分析:CodeTEST能同時對128000個函數和1000個任務進行性能分析,可以精確的得出每個函數或任務執行的最大時間、最小時間和平均時間,精確度達到50ns;能夠精確的顯示各函數或任務之間的調用情況,幫助你發現系統瓶頸、優化系統和提升你的系統性能。
2. 強大的覆蓋率分析。 CodeTEST可以在系統真實的環境下,可以從單元級、集成級、系統級以及產品終端現場階段進行嵌入式軟件的分析與測試。幫助測試工程師掌握當前的測試覆蓋率數據,指導測試用例的編寫。
3. 強大的內存分析。CodeTEST可以動態追蹤內存分配,報告內存出錯和相應的原始數據。他不僅可以在程序運行時報告為每條語句分配多少字節的內存,而且他可以鑒別20多種內存分配的錯誤。例如:CodeTEST可以捕捉“釋放空指針(freeing a null pointer)”一樣常見的程序錯誤,報告發生錯誤的函數和代碼行幫,助你盡早發現動態內純泄漏,而無需到系統崩潰時。
4. 強大的代碼跟蹤分析。CodeTEST提供400K的追蹤緩沖空間,能追蹤150萬行的源代碼。我們可以設置觸發器來追蹤自己感興趣的事件,可以顯示運行過程中程序運行的實際情況,幫助你查找程序的BUG所在。
結束語
隨著后PC時代的到來,嵌入式應用將會迅速增長,應用的復雜性也急劇增加,傳統的軟件分析和測試手段已不能滿足嵌入式軟件分析測試的基本要求,與此相比,AMC公司以其公司的幾項專利技術,為我們提供的針對嵌入式軟件分析測試的解決方案,為廣大的嵌入式系統開發者提供了新的技術手段,使我們可以以全新的視角審視我們原有的開發過程,發現一切可以變的如此快捷、簡單。
文章來源于領測軟件測試網 http://www.kjueaiud.com/