資料介紹
本文將介紹如何避免那些隱蔽然而常見的錯誤,并介紹的幾個技巧幫助工程師發(fā)現(xiàn)軟件中隱藏的錯誤。大部分軟件開發(fā)項目依靠結(jié)合代碼檢查、結(jié)構(gòu)測試和功能測試來識別軟件缺陷。盡管這些傳統(tǒng)技術(shù)非常重要,而且能發(fā)現(xiàn)大多數(shù)軟件問題,但它們無法檢查出當今復雜系統(tǒng)中的許多共性錯誤。
結(jié)構(gòu)測試或白盒測試能有效地發(fā)現(xiàn)代碼中的邏輯、控制流、計算和數(shù)據(jù)錯誤。這項測試要求對軟件的內(nèi)部工作能夠一覽無遺(因此稱為“白盒”或“玻璃盒”),以便了解軟件結(jié)構(gòu)的詳細情況。它檢查每個條件表達式、數(shù)學操作、輸入和輸出。由于需要測試的細節(jié)眾多,結(jié)構(gòu)測試每次檢查一個軟件單元,通常為一個函數(shù)或類。
代碼審查也使用與實現(xiàn)缺陷和潛在問題查找同樣復雜的技術(shù)。與白盒測試一樣,審查通常針對軟件的各個單元進行,因為一個有效的審查過程要求的是集中而詳盡的檢查。
與審查和白盒測試不同,功能測試或黑盒測試假設(shè)對軟件的實現(xiàn)一無所知,它測試由受控輸入所驅(qū)動的輸出。功能測試由測試人員或開發(fā)人員所編寫的測試過程組成,它們規(guī)定了一組特定程序輸入對應的預期程序輸出。測試運行之后,測試人員將實際輸出與預期輸出進行比較,查找問題。黑盒測試可以有效地找出未能實現(xiàn)的需求、接口問題、性能問題和程序最常用功能中的錯誤。
雖然將這些技術(shù)結(jié)合起來可以找出隱藏在一個特定軟件程序中的大部分錯誤,但它們也有局限。代碼審查和白盒測試每次只針對一小部分代碼,忽視了系統(tǒng)的其它部分。黑盒測試通常將系統(tǒng)作為一個整體來處理,忽視了實現(xiàn)的細節(jié)。一些重要的問題只有在集中考察它們在整個系統(tǒng)內(nèi)相互作用時的細節(jié)才能被發(fā)現(xiàn);傳統(tǒng)的方法無法可靠地找出這些問題。必須整體地檢查軟件系統(tǒng),查找具體問題的特定原因。由于詳盡徹底地分析程序中的每個細節(jié)和它與代碼中所有其它部分之間的相互作用通常是不大可能的,因此分析應該針對程序中已經(jīng)知道可能導致問題的特定方面。本文將探討其中三個潛在的問題領(lǐng)域:
* 堆棧溢出
* 競爭條件
* 死鎖
讀者可在網(wǎng)上閱讀本文的第二部分,它將探討下列問題:
* 時序問題
* 可重入條件
在采用多任務實時設(shè)計技術(shù)的系統(tǒng)中,以上所有問題都相當普遍。
堆棧溢出
處理器使用堆棧來存儲臨時變量、向被調(diào)函數(shù)傳遞參數(shù)、保存線程“狀態(tài)”,等等。如果系統(tǒng)不使用虛擬內(nèi)存(換句話說,它不能將內(nèi)存頁面轉(zhuǎn)移到磁盤上以釋放內(nèi)存空間供其它用途),堆棧將固定為產(chǎn)品出廠時的大小。如果由于某種原因堆棧越出了編程人員所分配的數(shù)量范圍,程序?qū)⒆兊貌淮_定。這種不穩(wěn)定可能導致系統(tǒng)發(fā)生嚴重故障。因此,確保系統(tǒng)在最壞情況下能夠分配到足夠的堆棧至關(guān)重要。
確保永不發(fā)生堆棧溢出的唯一途徑就是分析代碼,確定程序在各種可能情況下的最大堆棧用量,然后檢查是否分配了足夠的堆棧。測試不大可能觸發(fā)特定的瞬時輸入組合進而導致系統(tǒng)出現(xiàn)最壞情況。
堆棧深度分析的概念比較簡單:
1. 為每個獨立的線程建立一棵調(diào)用樹。
2. 確定調(diào)用樹中每個函數(shù)的堆棧用量。
3. 檢查每棵調(diào)用樹,確定從樹根到外部“樹葉”的哪條調(diào)用路徑需要使用的堆棧最多。
4. 將每個獨立線程調(diào)用樹的最大堆棧用量相加。
5. 確定每個中斷優(yōu)先級內(nèi)各中斷服務程序(ISR)的最大堆棧用量并計算其總和。但是,如果ISR本身沒有堆棧而使用被中斷線程的堆棧,則應將ISR使用的最大堆棧數(shù)加到各線程堆棧之上。
6. 對于每個優(yōu)先級,加上中斷發(fā)生時用來保存處理器狀態(tài)的堆棧數(shù)。
7.如果使用RTOS,則加上RTOS自身內(nèi)部用途需要的最大堆棧數(shù)(與應用代碼引發(fā)的系統(tǒng)調(diào)用不同,后者已包含在步驟2中)。
除此之外,還有兩個重要事項需要考慮。首先,僅僅從高級語言源代碼建立的調(diào)用樹很可能并不完善。大部分編譯器采用運行時庫(run-time library)來優(yōu)化常用計算任務,如大值整數(shù)的乘除、浮點運算等,這些調(diào)用只在編譯器產(chǎn)生的匯編語言中才可見。運行時庫函數(shù)本身可能使用大量的堆??臻g,在分析時必須將它們包括進去。如果使用的是C++語言,則以下所有類型的函數(shù)(方法)也都必須包含到調(diào)用樹內(nèi):結(jié)構(gòu)器、析構(gòu)器、重載運算符、復制結(jié)構(gòu)器和轉(zhuǎn)換函數(shù)。所有的函數(shù)指針也都必須進行解析,并且將它們調(diào)用的函數(shù)包含進分析之中。
?
結(jié)構(gòu)測試或白盒測試能有效地發(fā)現(xiàn)代碼中的邏輯、控制流、計算和數(shù)據(jù)錯誤。這項測試要求對軟件的內(nèi)部工作能夠一覽無遺(因此稱為“白盒”或“玻璃盒”),以便了解軟件結(jié)構(gòu)的詳細情況。它檢查每個條件表達式、數(shù)學操作、輸入和輸出。由于需要測試的細節(jié)眾多,結(jié)構(gòu)測試每次檢查一個軟件單元,通常為一個函數(shù)或類。
代碼審查也使用與實現(xiàn)缺陷和潛在問題查找同樣復雜的技術(shù)。與白盒測試一樣,審查通常針對軟件的各個單元進行,因為一個有效的審查過程要求的是集中而詳盡的檢查。
與審查和白盒測試不同,功能測試或黑盒測試假設(shè)對軟件的實現(xiàn)一無所知,它測試由受控輸入所驅(qū)動的輸出。功能測試由測試人員或開發(fā)人員所編寫的測試過程組成,它們規(guī)定了一組特定程序輸入對應的預期程序輸出。測試運行之后,測試人員將實際輸出與預期輸出進行比較,查找問題。黑盒測試可以有效地找出未能實現(xiàn)的需求、接口問題、性能問題和程序最常用功能中的錯誤。
雖然將這些技術(shù)結(jié)合起來可以找出隱藏在一個特定軟件程序中的大部分錯誤,但它們也有局限。代碼審查和白盒測試每次只針對一小部分代碼,忽視了系統(tǒng)的其它部分。黑盒測試通常將系統(tǒng)作為一個整體來處理,忽視了實現(xiàn)的細節(jié)。一些重要的問題只有在集中考察它們在整個系統(tǒng)內(nèi)相互作用時的細節(jié)才能被發(fā)現(xiàn);傳統(tǒng)的方法無法可靠地找出這些問題。必須整體地檢查軟件系統(tǒng),查找具體問題的特定原因。由于詳盡徹底地分析程序中的每個細節(jié)和它與代碼中所有其它部分之間的相互作用通常是不大可能的,因此分析應該針對程序中已經(jīng)知道可能導致問題的特定方面。本文將探討其中三個潛在的問題領(lǐng)域:
* 堆棧溢出
* 競爭條件
* 死鎖
讀者可在網(wǎng)上閱讀本文的第二部分,它將探討下列問題:
* 時序問題
* 可重入條件
在采用多任務實時設(shè)計技術(shù)的系統(tǒng)中,以上所有問題都相當普遍。
堆棧溢出
處理器使用堆棧來存儲臨時變量、向被調(diào)函數(shù)傳遞參數(shù)、保存線程“狀態(tài)”,等等。如果系統(tǒng)不使用虛擬內(nèi)存(換句話說,它不能將內(nèi)存頁面轉(zhuǎn)移到磁盤上以釋放內(nèi)存空間供其它用途),堆棧將固定為產(chǎn)品出廠時的大小。如果由于某種原因堆棧越出了編程人員所分配的數(shù)量范圍,程序?qū)⒆兊貌淮_定。這種不穩(wěn)定可能導致系統(tǒng)發(fā)生嚴重故障。因此,確保系統(tǒng)在最壞情況下能夠分配到足夠的堆棧至關(guān)重要。
確保永不發(fā)生堆棧溢出的唯一途徑就是分析代碼,確定程序在各種可能情況下的最大堆棧用量,然后檢查是否分配了足夠的堆棧。測試不大可能觸發(fā)特定的瞬時輸入組合進而導致系統(tǒng)出現(xiàn)最壞情況。
堆棧深度分析的概念比較簡單:
1. 為每個獨立的線程建立一棵調(diào)用樹。
2. 確定調(diào)用樹中每個函數(shù)的堆棧用量。
3. 檢查每棵調(diào)用樹,確定從樹根到外部“樹葉”的哪條調(diào)用路徑需要使用的堆棧最多。
4. 將每個獨立線程調(diào)用樹的最大堆棧用量相加。
5. 確定每個中斷優(yōu)先級內(nèi)各中斷服務程序(ISR)的最大堆棧用量并計算其總和。但是,如果ISR本身沒有堆棧而使用被中斷線程的堆棧,則應將ISR使用的最大堆棧數(shù)加到各線程堆棧之上。
6. 對于每個優(yōu)先級,加上中斷發(fā)生時用來保存處理器狀態(tài)的堆棧數(shù)。
7.如果使用RTOS,則加上RTOS自身內(nèi)部用途需要的最大堆棧數(shù)(與應用代碼引發(fā)的系統(tǒng)調(diào)用不同,后者已包含在步驟2中)。
除此之外,還有兩個重要事項需要考慮。首先,僅僅從高級語言源代碼建立的調(diào)用樹很可能并不完善。大部分編譯器采用運行時庫(run-time library)來優(yōu)化常用計算任務,如大值整數(shù)的乘除、浮點運算等,這些調(diào)用只在編譯器產(chǎn)生的匯編語言中才可見。運行時庫函數(shù)本身可能使用大量的堆??臻g,在分析時必須將它們包括進去。如果使用的是C++語言,則以下所有類型的函數(shù)(方法)也都必須包含到調(diào)用樹內(nèi):結(jié)構(gòu)器、析構(gòu)器、重載運算符、復制結(jié)構(gòu)器和轉(zhuǎn)換函數(shù)。所有的函數(shù)指針也都必須進行解析,并且將它們調(diào)用的函數(shù)包含進分析之中。
?
下載該資料的人也在下載
下載該資料的人還在閱讀
更多 >
- 【測試】嵌入式軟件測試VS一般軟件測試
- 嵌入式軟件概述及相關(guān)測試特點
- 嵌入式軟件測試
- 嵌入式軟件接口怎么測試,嵌入式系統(tǒng)接口測試策略.doc
- 嵌入式軟件測試研究意義,嵌入式軟件測試的研究
- 嵌入式軟件測試參考書籍
- 嵌入式測試
- 基于Python的實時嵌入式軟件測試腳本總結(jié)
- TI的嵌入式分析技術(shù)使設(shè)備更加智能 13次下載
- 基于仿真的嵌入式C語言軟件覆蓋測試分析 0次下載
- 嵌入式軟件的基本測試方法 3次下載
- 嵌入式軟件技術(shù)應用設(shè)計方案匯總 4次下載
- 基于CodeTEST的嵌入式軟件測試技術(shù)
- 嵌入式實時系統(tǒng)軟件測試實踐
- 基于模塊化設(shè)計的嵌入式軟件測試方法
- 嵌入式軟件開發(fā)和軟件開發(fā)的區(qū)別 2357次閱讀
- 基于功能安全的汽車嵌入式軟件單元驗證技術(shù)研究 1086次閱讀
- 聊聊嵌入式軟件分層 700次閱讀
- 嵌入式軟件的設(shè)計模式(上) 1352次閱讀
- 基于UML嵌入式軟件開發(fā)環(huán)境的自動取款機系統(tǒng)的應用方案 3777次閱讀
- 基于嵌入式軟件的JNI技術(shù)應用解析 1106次閱讀
- 嵌入式測試系統(tǒng)設(shè)計全方面介紹 1149次閱讀
- 什么是嵌入式技術(shù) 1w次閱讀
- 嵌入式軟件開發(fā)編程規(guī)范介紹 4403次閱讀
- 嵌入式軟件工程師職業(yè)規(guī)劃必知 6620次閱讀
- 關(guān)于嵌入式軟件系統(tǒng)測試策略和方案設(shè)計詳解 9318次閱讀
- PSoC嵌入式系統(tǒng)設(shè)計的三大優(yōu)勢 3341次閱讀
- 嵌入式行業(yè)發(fā)展狀況_嵌入式行業(yè)人才需求_嵌入式系統(tǒng)就業(yè)前景分析 2.4w次閱讀
- 嵌入式軟件工程師和嵌入式硬件工程師有什么區(qū)別 7.1w次閱讀
- 嵌入式開發(fā)就業(yè)前景分析_嵌入式領(lǐng)域的職業(yè)發(fā)展方向 1.8w次閱讀
下載排行
本周
- 1TC358743XBG評估板參考手冊
- 1.36 MB | 330次下載 | 免費
- 2開關(guān)電源基礎(chǔ)知識
- 5.73 MB | 6次下載 | 免費
- 3100W短波放大電路圖
- 0.05 MB | 4次下載 | 3 積分
- 4嵌入式linux-聊天程序設(shè)計
- 0.60 MB | 3次下載 | 免費
- 5基于FPGA的光纖通信系統(tǒng)的設(shè)計與實現(xiàn)
- 0.61 MB | 2次下載 | 免費
- 6基于FPGA的C8051F單片機開發(fā)板設(shè)計
- 0.70 MB | 2次下載 | 免費
- 751單片機窗簾控制器仿真程序
- 1.93 MB | 2次下載 | 免費
- 8基于51單片機的RGB調(diào)色燈程序仿真
- 0.86 MB | 2次下載 | 免費
本月
- 1OrCAD10.5下載OrCAD10.5中文版軟件
- 0.00 MB | 234315次下載 | 免費
- 2555集成電路應用800例(新編版)
- 0.00 MB | 33564次下載 | 免費
- 3接口電路圖大全
- 未知 | 30323次下載 | 免費
- 4開關(guān)電源設(shè)計實例指南
- 未知 | 21548次下載 | 免費
- 5電氣工程師手冊免費下載(新編第二版pdf電子書)
- 0.00 MB | 15349次下載 | 免費
- 6數(shù)字電路基礎(chǔ)pdf(下載)
- 未知 | 13750次下載 | 免費
- 7電子制作實例集錦 下載
- 未知 | 8113次下載 | 免費
- 8《LED驅(qū)動電路設(shè)計》 溫德爾著
- 0.00 MB | 6653次下載 | 免費
總榜
- 1matlab軟件下載入口
- 未知 | 935054次下載 | 免費
- 2protel99se軟件下載(可英文版轉(zhuǎn)中文版)
- 78.1 MB | 537796次下載 | 免費
- 3MATLAB 7.1 下載 (含軟件介紹)
- 未知 | 420026次下載 | 免費
- 4OrCAD10.5下載OrCAD10.5中文版軟件
- 0.00 MB | 234315次下載 | 免費
- 5Altium DXP2002下載入口
- 未知 | 233046次下載 | 免費
- 6電路仿真軟件multisim 10.0免費下載
- 340992 | 191185次下載 | 免費
- 7十天學會AVR單片機與C語言視頻教程 下載
- 158M | 183278次下載 | 免費
- 8proe5.0野火版下載(中文版免費下載)
- 未知 | 138040次下載 | 免費
評論