qileilove

          blog已經(jīng)轉(zhuǎn)移至github,大家請(qǐng)?jiān)L問 http://qaseven.github.io/

          軟件測(cè)試bug收集策略

            Error = 0 的程序是不存在的,怎樣收集和處理程序中的錯(cuò)誤?怎樣更好地利用錯(cuò)誤信息的收集和反饋來協(xié)助程序的調(diào)試?怎樣讓產(chǎn)品發(fā)布后,用戶能夠反饋出更有價(jià)值的問題 信息?這些問題是本文將要涉及的,最近對(duì)自己所做項(xiàng)目中的錯(cuò)誤處理機(jī)制做了一些總結(jié)與思考,故在此討論,希望對(duì)大家有所幫助。

            目前,按照我個(gè)人的理解,軟件中的錯(cuò)誤收集和反饋方式主要有如下幾種:

            第一種方式:使用常用的信息輸出語句。

            對(duì)于控制臺(tái)程序,可以使用 printf 語句或者 std::cout 將錯(cuò)誤信息打印出來;對(duì)于MFC程序,可以使用 TRACE 宏,將錯(cuò)誤信息輸出到 output 窗口,或者使用 MessageBox直接彈出對(duì)話框?qū)㈠e(cuò)誤信息告知用戶 。

            這些處理策略往往針對(duì)于 “交互性” 的代碼段,可以實(shí)現(xiàn) 實(shí)時(shí)反饋錯(cuò)誤信息,以供用戶實(shí)時(shí)地進(jìn)行處理,以免后面產(chǎn)生更大的錯(cuò)誤。

            第二種方式:使用錯(cuò)誤日志方式

            思想:將程序中的所有錯(cuò)誤信息輸出到錯(cuò)誤日志文件中,這樣有以下這些好處:

            1、當(dāng)程序發(fā)布后,客戶在使用中遇到問題后,可以直接將錯(cuò)誤日志發(fā)送給程序員,將極大地方便了問題的定位及原因的分析。

             2、便于調(diào)試多線程或者涉及網(wǎng)絡(luò)通信等復(fù)雜的程序,因?yàn)樵谶@樣的程序中,設(shè)置斷點(diǎn)的調(diào)試方式非常地不方便,一旦暫停在斷點(diǎn)處,往往為引起線程異常或者 網(wǎng)絡(luò)連接斷開等問題,極大影響了調(diào)試的效率。如果將錯(cuò)誤信息打印到文件中,錯(cuò)誤描述詳細(xì)豐富一些,可以極大地提高調(diào)試的效率。

            3、便于程序進(jìn)行大規(guī)模的性能測(cè)試。例如:C/S模式的系統(tǒng),進(jìn)行100個(gè)客戶端對(duì)服務(wù)器的訪問測(cè)試,使用這種錯(cuò)誤收集策略可以方便地通過分析錯(cuò)誤日志文件來推測(cè)系統(tǒng)的性能。

             下面思考這樣一個(gè)問題:很多軟件的設(shè)計(jì)上都有一個(gè)類似TCP/IP協(xié)議的應(yīng)用層的模塊,該模塊一般是直接與客戶端交互的一層,它隔離了核心代碼模塊與客 戶端的耦合,那么,對(duì)于這樣一種層次結(jié)構(gòu)比較深設(shè)計(jì)方案,最底層發(fā)生的錯(cuò)誤信息怎樣傳遞到最上層?每一層都提供獲取錯(cuò)誤信息的接口?這樣開銷太大,也往往 不夠理想,那該怎樣處理呢?

            我想應(yīng)該主要有以下兩種處理策略,也就是我即將引出的錯(cuò)誤收集和反饋的第三種和第四種策略:

            第三種方式:C++異常機(jī)制

            C++異常處理機(jī)制是一個(gè)用來有效地處理運(yùn)行錯(cuò)誤的非常強(qiáng)大且靈活的工具,它提供了更多的彈性、安全性和穩(wěn)固性,克服了傳統(tǒng)方法所帶來的問題.

            異常的拋出和處理主要使用了以下三個(gè)關(guān)鍵字: try、 throw 、 catch 。

            拋出異常、捕獲異常 ,這些是C++提供的極其方便地處理異常策略,可以實(shí)現(xiàn)在最底層拋出異常,由最上層捕獲,并且處理。

             說實(shí)話,C++異常機(jī)制的確是一種處理錯(cuò)誤和異常的很好的策略,如果需要使用該機(jī)制,需要從軟件架構(gòu)和設(shè)計(jì)時(shí)就要開始考慮,一旦軟件結(jié)構(gòu)和代碼寫到一定 程度后,再引入異常機(jī)制將很難達(dá)到很好的效果。其實(shí),要想用好c++異常機(jī)制,不是一件很容易的事,特別是對(duì)于項(xiàng)目組里面有大量新人的時(shí)候,故使用成本還 是挺高的。

            關(guān)于C++異常機(jī)制很多C++書籍都有介紹,我也不在此贅述,本博客也有一篇C++異常機(jī)制的入門示例代碼,有興趣可以看看http://www.51testing.com/html/17/n-209117.html

            第四種方式:GetLastError模式

            經(jīng)常開發(fā)windows程序的人應(yīng)該都了解,windows程序有一個(gè)API:GetLastError,它其實(shí)代表著一種錯(cuò)誤收集處理機(jī)制。

             當(dāng)一個(gè)Windows函數(shù)檢測(cè)到一個(gè)錯(cuò)誤時(shí),它會(huì)使用一個(gè)稱為線程本地存儲(chǔ)器(thread-localstorage)的機(jī)制。當(dāng)函數(shù)返回時(shí),它的返 回值為flase就能指明一個(gè)錯(cuò)誤已經(jīng)發(fā)生。若要確定這是個(gè)什么錯(cuò)誤,可以調(diào)用GetLastError函數(shù)來獲取:該函數(shù)只返回線程的32位錯(cuò)誤代碼。

            WinError.h頭文件包含了Microsoft公司定義的錯(cuò)誤代碼的列表。

            當(dāng)Windows函數(shù)運(yùn)行失敗時(shí),應(yīng)該立即調(diào)用GetLastError函數(shù)。如果調(diào)用另一個(gè)Windows函數(shù),它的值很可能被改寫。

            Visual studio還配有一個(gè)小的實(shí)用程序,稱為Error Lookup.

            如果在編寫的應(yīng)用程序中發(fā)現(xiàn)一個(gè)錯(cuò)誤,可能想要向用戶顯示該錯(cuò)誤的文本描述。Windows提供了一個(gè)函數(shù),可以將錯(cuò)誤代碼轉(zhuǎn)換成它的文本描述。該函數(shù)稱為FormatMessage。

             以上就是GetLastError模式的介紹,可以簡(jiǎn)單地把它想象成為這樣一種模式:有一個(gè)全局的變量,可以用來存放32位錯(cuò)誤代碼,一旦 Windows函數(shù)運(yùn)行失敗,就將錯(cuò)誤代碼賦值給這個(gè)全局的變量,每當(dāng)調(diào)用GetLastError,則將該錯(cuò)誤代碼返回出來以供外部分析原因。

             其實(shí),我們自己也可以實(shí)現(xiàn)這樣一個(gè)GetLastError模式的錯(cuò)誤收集機(jī)制,收集整個(gè)程序中最新的錯(cuò)誤信息,供上層及時(shí)調(diào)用查詢,定義自己的錯(cuò)誤代 碼和錯(cuò)誤描述信息串,那么,怎樣才能更好地實(shí)現(xiàn)屬于自己的類似的錯(cuò)誤收集反饋機(jī)制呢?怎樣使它具有更好地移植性、健壯性(支持多線程等)和易擴(kuò)展性(加入 新的錯(cuò)誤代碼和信息)呢?我將在后面的文章中介紹我的思考和設(shè)計(jì)。

            以上就是我對(duì)軟件中的錯(cuò)誤收集策略的思考和總結(jié),希望對(duì)各位有所幫助,也歡迎大家提出意見和建議。

          posted on 2012-07-04 09:33 順其自然EVO 閱讀(237) 評(píng)論(0)  編輯  收藏 所屬分類: 測(cè)試學(xué)習(xí)專欄

          <2012年7月>
          24252627282930
          1234567
          891011121314
          15161718192021
          22232425262728
          2930311234

          導(dǎo)航

          統(tǒng)計(jì)

          常用鏈接

          留言簿(55)

          隨筆分類

          隨筆檔案

          文章分類

          文章檔案

          搜索

          最新評(píng)論

          閱讀排行榜

          評(píng)論排行榜

          主站蜘蛛池模板: 拜城县| 温州市| 阿城市| 方山县| 长兴县| 叶城县| 无为县| 宁陕县| 通渭县| 成武县| 成都市| 仲巴县| 静宁县| 清流县| 诸城市| 米泉市| 通山县| 五寨县| 阳山县| 磐安县| 沁水县| 永顺县| 浦城县| 林芝县| 定远县| 天祝| 留坝县| 西藏| 麻城市| 轮台县| 青川县| 精河县| 金寨县| 沅江市| 宜黄县| 章丘市| 广丰县| 醴陵市| 周口市| 兖州市| 普兰店市|