<rt id="m4md3"></rt>
  • <bdo id="m4md3"><meter id="m4md3"></meter></bdo>
  • <label id="m4md3"></label>
      <center id="m4md3"><optgroup id="m4md3"></optgroup></center>
      產(chǎn)品分類

      當(dāng)前位置: 首頁 > 工業(yè)電氣產(chǎn)品 > 高低壓電器 > 塑殼斷路器

      類型分類:
      科普知識
      數(shù)據(jù)分類:
      塑殼斷路器

      嵌入式軟件三大潛在問題及其測試技術(shù)

      發(fā)布日期:2022-04-17 點(diǎn)擊率:128

        本文將介紹如何避免那些隱蔽然而常見的錯誤,并介紹的幾個技巧幫助工程師發(fā)現(xiàn)軟件中隱藏的錯誤。大部分軟件開發(fā)項(xiàng)目依靠結(jié)合代碼檢查、結(jié)構(gòu)測試和功能測試來識別軟件缺陷。盡管這些傳統(tǒng)技術(shù)非常重要,而且能發(fā)現(xiàn)大多數(shù)軟件問題,但它們無法檢查出當(dāng)今復(fù)雜系統(tǒng)中的許多共性錯誤。

        結(jié)構(gòu)測試或白盒測試能有效地發(fā)現(xiàn)代碼中的邏輯、控制流、計(jì)算和數(shù)據(jù)錯誤。這項(xiàng)測試要求對軟件的內(nèi)部工作能夠一覽無遺(因此稱為"白盒"或"玻璃盒"),以便了解軟件結(jié)構(gòu)的詳細(xì)情況。它檢查每個條件表達(dá)式、數(shù)學(xué)操作、輸入和輸出。由于需要測試的細(xì)節(jié)眾多,結(jié)構(gòu)測試每次檢查一個軟件單元,通常為一個函數(shù)或類。

        代碼審查也使用與實(shí)現(xiàn)缺陷和潛在問題查找同樣復(fù)雜的技術(shù)。與白盒測試一樣,審查通常針對軟件的各個單元進(jìn)行,因?yàn)橐粋€有效的審查過程要求的是集中而詳盡的檢查。

        與審查和白盒測試不同,功能測試或黑盒測試假設(shè)對軟件的實(shí)現(xiàn)一無所知,它測試由受控輸入所驅(qū)動的輸出。功能測試由測試人員或開發(fā)人員所編寫的測試過程組成,它們規(guī)定了一組特定程序輸入對應(yīng)的預(yù)期程序輸出。測試運(yùn)行之后,測試人員將實(shí)際輸出與預(yù)期輸出進(jìn)行比較,查找問題。黑盒測試可以有效地找出未能實(shí)現(xiàn)的需求、接口問題、性能問題和程序最常用功能中的錯誤。

        雖然將這些技術(shù)結(jié)合起來可以找出隱藏在一個特定軟件程序中的大部分錯誤,但它們也有局限。代碼審查和白盒測試每次只針對一小部分代碼,忽視了系統(tǒng)的其它部分。黑盒測試通常將系統(tǒng)作為一個整體來處理,忽視了實(shí)現(xiàn)的細(xì)節(jié)。一些重要的問題只有在集中考察它們在整個系統(tǒng)內(nèi)相互作用時(shí)的細(xì)節(jié)才能被發(fā)現(xiàn);傳統(tǒng)的方法無法可靠地找出這些問題。必須整體地檢查軟件系統(tǒng),查找具體問題的特定原因。由于詳盡徹底地分析程序中的每個細(xì)節(jié)和它與代碼中所有其它部分之間的相互作用通常是不大可能的,因此分析應(yīng)該針對程序中已經(jīng)知道可能導(dǎo)致問題的特定方面。本文將探討其中三個潛在的問題領(lǐng)域:* 堆棧溢出

        * 競爭條件

        * 死鎖讀者可在網(wǎng)上閱讀本文的第二部分,它將探討下列問題:* 時(shí)序問題

        * 可重入條件在采用多任務(wù)實(shí)時(shí)設(shè)計(jì)技術(shù)的系統(tǒng)中,以上所有問題都相當(dāng)普遍。

        堆棧溢出處理器使用堆棧來存儲臨時(shí)變量、向被調(diào)函數(shù)傳遞參數(shù)、保存線程“狀態(tài)”,等等。如果系統(tǒng)不使用虛擬內(nèi)存(換句話說,它不能將內(nèi)存頁面轉(zhuǎn)移到磁盤上以釋放內(nèi)存空間供其它用途),堆棧將固定為產(chǎn)品出廠時(shí)的大小。如果由于某種原因堆棧越出了編程人員所分配的數(shù)量范圍,程序?qū)⒆兊貌淮_定。這種不穩(wěn)定可能導(dǎo)致系統(tǒng)發(fā)生嚴(yán)重故障。因此,確保系統(tǒng)在最壞情況下能夠分配到足夠的堆棧至關(guān)重要。

        確保永不發(fā)生堆棧溢出的唯一途徑就是分析代碼,確定程序在各種可能情況下的最大堆棧用量,然后檢查是否分配了足夠的堆棧。測試不大可能觸發(fā)特定的瞬時(shí)輸入組合進(jìn)而導(dǎo)致系統(tǒng)出現(xiàn)最壞情況。

        堆棧深度分析的概念比較簡單:1. 為每個獨(dú)立的線程建立一棵調(diào)用樹。

        2. 確定調(diào)用樹中每個函數(shù)的堆棧用量。

        3. 檢查每棵調(diào)用樹,確定從樹根到外部“樹葉”的哪條調(diào)用路徑需要使用的堆棧最多。

        4. 將每個獨(dú)立線程調(diào)用樹的最大堆棧用量相加。

        5. 確定每個中斷優(yōu)先級內(nèi)各中斷服務(wù)程序(ISR)的最大堆棧用量并計(jì)算其總和。但是,如果ISR本身沒有堆棧而使用被中斷線程的堆棧,則應(yīng)將ISR使用的最大堆棧數(shù)加到各線程堆棧之上。

        6. 對于每個優(yōu)先級,加上中斷發(fā)生時(shí)用來保存處理器狀態(tài)的堆棧數(shù)。

        7.如果使用RTOS,則加上RTOS自身內(nèi)部用途需要的最大堆棧數(shù)(與應(yīng)用代碼引發(fā)的系統(tǒng)調(diào)用不同,后者已包含在步驟2中)。

        除此之外,還有兩個重要事項(xiàng)需要考慮。首先,僅僅從高級語言源代碼建立的調(diào)用樹很可能并不完善。大部分編譯器采用運(yùn)行時(shí)庫(run-time library)來優(yōu)化常用計(jì)算任務(wù),如大值整數(shù)的乘除、浮點(diǎn)運(yùn)算等,這些調(diào)用只在編譯器產(chǎn)生的匯編語言中才可見。運(yùn)行時(shí)庫函數(shù)本身可能使用大量的堆棧空間,在分析時(shí)必須將它們包括進(jìn)去。如果使用的是C++語言,則以下所有類型的函數(shù)(方法)也都必須包含到調(diào)用樹內(nèi):結(jié)構(gòu)器、析構(gòu)器、重載運(yùn)算符、復(fù)制結(jié)構(gòu)器和轉(zhuǎn)換函數(shù)。所有的函數(shù)指針也都必須進(jìn)行解析,并且將它們調(diào)用的函數(shù)包含進(jìn)分析之中。

      下一篇: PLC、DCS、FCS三大控

      上一篇: 索爾維全系列Solef?PV

      主站蜘蛛池模板: 国产成人综合久久精品红| 伊人久久大香线蕉综合影 | 亚洲国产综合无码一区二区二三区| 国产色产综合色产在线观看视频| 激情综合婷婷丁香五月蜜桃| 久久丁香五月天综合网| 人人狠狠综合久久亚洲婷婷 | 天天久久影视色香综合网| 久久综合丝袜长腿丝袜| 狠狠色综合一区二区| 亚洲狠狠成人综合网| 区二区三区激情综合 | 久久精品国产91久久综合麻豆自制| 小说区图片区综合久久88| 丁香色欲久久久久久综合网| 2020国产精品亚洲综合网| 日韩综合无码一区二区| 麻豆狠色伊人亚洲综合网站| 九九综合九九综合| 久久五月天综合网| 亚洲综合图片小说区热久久| 伊人色综合久久天天人守人婷| 婷婷四房综合激情五月在线| 综合久久久久久久综合网| 亚洲精品国产综合久久久久紧| 久久九色综合九色99伊人| 色婷婷色综合激情国产日韩| 天天综合网天天做天天受| 色综合久久最新中文字幕| 伊人久久大香线焦综合四虎| 一本色道久久综合狠狠躁| 综合久久一区二区三区| 五月天婷亚洲天综合网精品偷| 色综合综合色综合色综合 | 亚洲av综合av一区| 久久一区二区精品综合| 一本一道久久综合狠狠老| 综合国产精品第一页| 久久99国产综合精品女同| 色综合天天综合中文网| 色综合久久天天综线观看|