• <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>
    • 軟件測試技術
    • 軟件測試博客
    • 軟件測試視頻
    • 開源軟件測試技術
    • 軟件測試論壇
    • 軟件測試沙龍
    • 軟件測試資料下載
    • 軟件測試雜志
    • 軟件測試人才招聘
      暫時沒有公告

    字號: | 推薦給好友 上一篇 | 下一篇

    在嵌入式軟件設計過程中查找缺陷的技巧

    發布: 2009-6-01 13:31 | 作者: 不詳 | 來源: 測試時代采編 | 查看: 90次 | 進入軟件測試論壇討論

    領測軟件測試網

    堆棧深度分析的概念比較簡單:

      1. 為每個獨立的線程建立一棵調用樹。

      2. 確定調用樹中每個函數的堆棧用量。

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

      4. 將每個獨立線程調用樹的最大堆棧用量相加。

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

      6. 對于每個優先級,加上中斷發生時用來保存處理器狀態的堆棧數。

      7.如果使用RTOS,則加上RTOS自身內部用途需要的最大堆棧數(與應用代碼引發的系統調用不同,后者已包含在步驟2中)。

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

      第二,編譯器使用一個C庫來實現memcpy()、cos()和atof ()等標準函數,而這些例程的源代碼可能無法得到。如果能夠得到它們的源代碼,就有可能確定程序用到的每個庫調用在最壞情況下的堆棧使用數量。如果這些庫只包含在目標文件中,則編譯器廠商必須提供每個庫例程使用的堆棧數。如果沒有這些信息,就無法通過分析來確定最壞情況下程序使用的最大堆棧數。幸運的是,許多面向嵌入式系統的編譯器廠商都提供這些信息。

      通常,每次一個函數被調用時,編譯器將使用堆棧來保存返回地址并傳遞函數參數。函數的自動(局部)變量通常也在堆棧當中。不過,由于編譯器會盡可能通過將參數或局部變量放入寄存器來優化代碼,因此檢查匯編語言以精確地確定堆棧用量非常重要。編譯器也有可能在代碼中的其它地方選擇使用堆棧,如用堆棧來保存中間計算結果。

      有些與編譯器一起打包銷售的開發環境包含生成調用樹的工具,還有許多第三方的調用樹生成工具。但是,除非它們能夠對匯編語言進行分析,否則這些工具可能會遺漏運行時庫和C庫的調用。不過無論在哪種情況下,開發分析匯編語言文件并提取函數名稱以及各函數內部調用的腳本都比較簡單。分析的結果可寫入一個文件,而這個文件能夠方便地輸入到表格之中。

      確定了各個函數的堆棧用量之后,必須計算每個線程所需的最大堆棧數。由于一般程序通常涉及數百個函數,調用跨越多層深度,處理這些信息的一種簡便方法就是采用分析表格。如表1所示,表格的各行包含了函數名稱、該函數使用的最大堆棧數(包括調用其它函數所需的堆棧數),以及它調用的所有函數的清單。通過編程控制,這個表格從每個函數的"根"開始迭代循環,計算該函數及其調用的所有函數需要的堆棧。這些信息存放在堆棧路徑列中,這樣,采用每個線程根函數(如main)的堆棧路徑數據就可以方便地計算出需要的最大堆棧數了。這個過程包含了先前介紹的堆棧分析過程中的前四個步驟。

      有時候,采用堆棧深度分析過程可能是無法做到,或者是不實際的。如果無法得到運行時庫或C庫的源代碼,而編譯器廠商又沒有提供任何堆棧使用信息,就不可能進行完整的堆棧分析。在這種情況下,有兩種選擇:

      

    文章來源于領測軟件測試網 http://www.kjueaiud.com/

    32/3<123>

    關于領測軟件測試網 | 領測軟件測試網合作伙伴 | 廣告服務 | 投稿指南 | 聯系我們 | 網站地圖 | 友情鏈接
    版權所有(C) 2003-2010 TestAge(領測軟件測試網)|領測國際科技(北京)有限公司|軟件測試工程師培訓網 All Rights Reserved
    北京市海淀區中關村南大街9號北京理工科技大廈1402室 京ICP備2023014753號-2
    技術支持和業務聯系:info@testage.com.cn 電話:010-51297073

    軟件測試 | 領測國際ISTQBISTQB官網TMMiTMMi認證國際軟件測試工程師認證領測軟件測試網

    老湿亚洲永久精品ww47香蕉图片_日韩欧美中文字幕北美法律_国产AV永久无码天堂影院_久久婷婷综合色丁香五月

  • <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>