国产毛片a精品毛-国产毛片黄片-国产毛片久久国产-国产毛片久久精品-青娱乐极品在线-青娱乐精品

電子工程網(wǎng)

標(biāo)題: 嵌入式軟件測試的10條秘訣 [打印本頁]

作者: XYD李    時間: 2021-7-18 09:29
標(biāo)題: 嵌入式軟件測試的10條秘訣
很多年前,一位開發(fā)人員為了在對嵌入式有更深層次的理解,詢問了這樣的一個問題:我怎么才能知道并懂得我的系統(tǒng)到底在干些什么呢?
面對這個問題有些吃驚,因為在當(dāng)時沒有人這么問過,而同時代的嵌入式開發(fā)人員問的最多的大都圍繞“我怎么才能使程序跑得更快”、“什么編譯器最好”等膚淺的問題。
所以,面對這個不同尋常卻異乎成熟的問題,信盈達(dá)小編感到欣喜并認(rèn)真回復(fù)了他:你的問題很有深度很成熟,因為只有不斷地去深入理解才有可能不斷地提高水平。為了鼓勵這位執(zhí)著的程序員,把10條關(guān)于嵌入式軟件開發(fā)測試的秘訣告訴了他。下面我們一起來看看。
10條秘訣在業(yè)界廣為流傳,使很多人受益。本文圍繞這10條秘訣展開論述。
1、懂得使用工具
通常嵌入式系統(tǒng)對可靠性的要求比較高。嵌入式系統(tǒng)安全性的失效可能會導(dǎo)致災(zāi)難性的后果,即使是非安全性系統(tǒng),由于大批量生產(chǎn)也會導(dǎo)致嚴(yán)重的經(jīng)濟(jì)損失。這就要求對嵌入式系統(tǒng),包括嵌入式軟件進(jìn)行嚴(yán)格的測試、確認(rèn)和驗證。隨著越來越多的領(lǐng)域使用軟件和微處理器控制各種嵌入式設(shè)備,對日益復(fù)雜的嵌入式軟件進(jìn)行快速有效的測試愈加顯得重要。
就像修車需要工具一樣,好的程序員應(yīng)該能夠熟練運(yùn)用各種軟件工具。不同的工具,有不同的使用范圍,有不同的功能。使用這些工具,你可以看到你的系統(tǒng)在干些什么,它又占用什么資源,它到底和哪些外界的東西打交道。讓你郁悶好幾天的問題可能通過某個工具就能輕松搞定,可惜你就是不知道。
那么為什么那么多的人總是在折騰個半死之后才想到要用測試工具呢?原因很多,主要有兩個:
一個是害怕;
另一個是惰性;
害怕是因為加入測試工具或測試模塊到代碼需要技巧同時有可能引入新的錯誤,所以他們總喜歡寄希望于通過不斷地修改重編譯代碼來消除bug,結(jié)果卻無濟(jì)于事。
懶惰是因為他們習(xí)慣了使用printf之類的簡單測試手段。
2、盡早發(fā)現(xiàn)內(nèi)存問題
內(nèi)存問題危害很大,不容易排查,主要有三種類型:內(nèi)存泄露、內(nèi)存碎片和內(nèi)存崩潰。對于內(nèi)存問題態(tài)度必須要明確,那就是早發(fā)現(xiàn)早“治療”。在軟件設(shè)計中,內(nèi)存泄露的“名氣”最大,主要由于不斷分配的內(nèi)存無法及時地被釋放,久而久之,系統(tǒng)的內(nèi)存耗盡。
即使細(xì)心的編程老手有時后也會遭遇內(nèi)存泄露問題。有測試過內(nèi)存泄露的朋友估計都有深刻地體驗,那就是內(nèi)存泄露問題一般隱藏很深,很難通過代碼閱讀來發(fā)現(xiàn)。有些內(nèi)存泄露甚至可能出現(xiàn)在庫當(dāng)中。有可能這本身是庫中的bug,也有可能是因為程序員沒有正確理解它們的接口說明文檔造成錯用。
在很多時候,大多數(shù)的內(nèi)存泄露問題無法探測,但可能表現(xiàn)為隨機(jī)的故障。程序員們往往會把這種現(xiàn)象怪罪于硬件問題。如果用戶對系統(tǒng)穩(wěn)定性不是很高,那么重啟系統(tǒng)問題也不大;但,如果用戶對系統(tǒng)穩(wěn)定很高,那么這種故障就有可能使用戶對產(chǎn)品失去信心,同時也意味著你的項目是個失敗的項目。
由于內(nèi)存泄露危害巨大,現(xiàn)在已經(jīng)有許多工具來解決這個問題。這些工具通過查找沒有引用或重復(fù)使用的代碼塊、垃圾內(nèi)存收集、庫跟蹤等技術(shù)來發(fā)現(xiàn)內(nèi)存泄露的問題。每個工具都有利有弊,不過總的來說,用要比不用好�?傊�,負(fù)責(zé)的開發(fā)人員應(yīng)該去測試內(nèi)存泄露的問題,做到防患于未然。
內(nèi)存碎片比內(nèi)存泄露隱藏還要深。隨著內(nèi)存的不斷分配并釋放,大塊內(nèi)存不斷分解為小塊內(nèi)存,從而形成碎片,久而久之,當(dāng)需要申請大塊內(nèi)存是,有可能就會失敗。如果系統(tǒng)內(nèi)存夠大,那么堅持的時間會長一些,但最終還是逃不出分配失敗的厄運(yùn)。在使用動態(tài)分配的系統(tǒng)中,內(nèi)存碎片經(jīng)常發(fā)生。
目前,解決這個問題最效的方法就是使用工具通過顯示系統(tǒng)中內(nèi)存的使用情況來發(fā)現(xiàn)誰是導(dǎo)致內(nèi)存碎片的罪魁禍?zhǔn)�,然后改進(jìn)相應(yīng)的部分。由于動態(tài)內(nèi)存管理的種種問題,在嵌入式應(yīng)用中,很多公司干脆就禁用malloc/free的以絕后患。
內(nèi)存崩潰是內(nèi)存使用最嚴(yán)重的結(jié)果,主要原因有數(shù)組訪問越界、寫已經(jīng)釋放的內(nèi)存、指針計算錯誤、訪問堆棧地址越界等等。這種內(nèi)存崩潰造成系統(tǒng)故障是隨機(jī)的,而且很難查找,目前提供用于排查的工具也很少。
總之,如果要使用內(nèi)存管理單元的話,必須要小心,并嚴(yán)格遵守它們的使用規(guī)則,比如誰分配誰釋放。
3、深入理解代碼優(yōu)化
講到系統(tǒng)穩(wěn)定性,人們更多地會想到實時性和速度,因為代碼效率對嵌入式系統(tǒng)來說太重要了。知道怎么優(yōu)化代碼是每個嵌入式軟件開發(fā)人員必須具備的技能。就像女孩子減肥一樣,起碼知道她哪個地方最需要減,才能去購買減肥藥或器材來減掉它。
可見,代碼優(yōu)化的前提是找到真正需要優(yōu)化的地方,然后對癥下藥,優(yōu)化相應(yīng)部分的代碼。
總之,提高運(yùn)行效率的前提是你必須要知道CPU到底干了些什么干的怎么樣。
4、不要讓自己大海撈針
大海撈針只是對調(diào)試的一種生動比喻。經(jīng)常聽到組里有人對自己正在調(diào)試的代碼說shit!可以理解,因為代碼不是他寫的,他有足夠的理由去 shitbug百出的代碼,只要他自己不要寫出這種代碼,否則有一天同組的其它人可能同樣會shit他寫的代碼。為何會有大海撈針呢?肯定是有人把針掉到海里咯;那針為何會掉在海里呢?肯定是有人不小心或草率唄。
所以當(dāng)你在抱怨針那么難找的時候,你是否想過是你自己草率地丟掉的。同樣,當(dāng)你調(diào)試個半死的時候,你是否想過你要好好反省一下當(dāng)初為了尋求捷徑可能沒有嚴(yán)格地遵守好的編碼設(shè)計規(guī)范、沒有檢測一些假設(shè)條件或算法的正確性、沒有將一些可能存在問題的代碼打上記號呢?
怎么來做呢?
盡可能對每個函數(shù)調(diào)用失敗作出處理,盡可能檢測每個參數(shù)輸入輸出的有效性,包括指針以及檢測是否過多或過少地調(diào)用某個過程。錯誤跟蹤能夠讓你知道你大概把針掉在哪個位置。
5、重現(xiàn)并隔離問題
如果你不是把針掉在大海了,而是掉在草堆里,那要好辦些。因為至少我們可以把草堆分成很多塊,一塊一塊的找。對于模塊獨(dú)立的大型項目,使用隔離方法往往是對付那些隱藏極深bug的最后方法。
如果問題的出現(xiàn)是間歇性的,我們有必要設(shè)法去重現(xiàn)它并記錄使其重現(xiàn)的整個過程以備在下一次可以利用這些條件去重現(xiàn)問題。如果你確信可以使用記錄的那些條件去重現(xiàn)問題,那么我們就可以著手去隔離問題。
怎么隔離呢?
我們可以用#ifdef把一些可能和問題無關(guān)的代碼關(guān)閉,把系統(tǒng)最小化到仍能夠重現(xiàn)問題的地步。如果還是無法定位問題所在,那么有必要打開“工具箱”了�?梢栽囍�ICE或數(shù)據(jù)監(jiān)視器去查看某個可疑變量的變化;可以使用跟蹤工具獲得函數(shù)調(diào)用的情況包括參數(shù)的傳遞;檢查內(nèi)存是否崩潰以及堆棧溢出的問題。
6、以退為進(jìn)
獵人為了不使自己在森林里迷路,他常常會在樹木上流下一些標(biāo)記,以備自己將來有一天迷路時可以根據(jù)這些標(biāo)記找到出路。對過去代碼的修改進(jìn)行跟蹤記錄對將來出現(xiàn)問題之后的調(diào)試很有幫助。
假如有一天,你最近一次修改的程序跑了很久之后忽然死掉了,那么你這時的第一反映就是我到底改動了些什么呢,因為上次修改之前是好的。那么如何檢測這次相對于上次的修改呢?沒錯,代碼控制系統(tǒng)SCS或稱版本控制系統(tǒng) VCS可以很好地解決這個問題。
7、確定測試的完整性
你怎么知道你的測試有多全面呢?覆蓋測試可以回答這個問題。覆蓋測試工具可以告訴你CPU到底執(zhí)行了哪些代碼。好的覆蓋工具通�?梢愿嬖V你大概20%40% 代碼沒有問題,而其余的可能存在bug.覆蓋工具有不同的測試級別,用戶可以根據(jù)自己的需要選擇某個級別。
8、提高代碼質(zhì)量意味著節(jié)省時間
有研究表明軟件開發(fā)的時間超過80%被用在下面幾個方面:調(diào)試自己的代碼(單元測試)。調(diào)試自己和其他相關(guān)的代碼(模塊間測試)。調(diào)試整個系統(tǒng)(系統(tǒng)測試),更糟糕的是你可能需要花費(fèi)10-200倍的時間來找一個 bug,而這個bug在開始的時候可能很容易就能找到。
一個小bug可能讓你付出巨大的代價,即使這個bug對整個系統(tǒng)的性能沒有太大的影響,但很可能會影響讓那些你可以看得到的部分。所以我們必須要養(yǎng)成良好的編碼和測試手段以求更高的代碼質(zhì)量,以便縮短調(diào)試的代碼。
9、發(fā)現(xiàn)它,分析它,解決它
這世界沒有萬能的膏藥。profile再強(qiáng)大也有力不從心的時候;內(nèi)存監(jiān)視器再好,也有無法發(fā)現(xiàn)的時候;覆蓋工具再好用,也有不能覆蓋的地方。
一些隱藏很深的問題即使用盡所有工具也有可能無法查到其根源,這時我們能做的就是通過這些問題所表現(xiàn)出來的外在現(xiàn)象或一些數(shù)據(jù)輸出來發(fā)現(xiàn)其中的規(guī)律或異常。一旦發(fā)現(xiàn)任何異常,一定要深入地理解并回溯其根源,直到解決為止。
10、請利用初學(xué)者思維
有人這樣說過:“有些事情在初學(xué)者的腦子里可能有各種各樣的情況,可在專家的頭腦里可能就很單一”。有時候,有些簡單的問題會被想得很復(fù)雜,有些簡單的系統(tǒng)被設(shè)計得很復(fù)雜,就是由于你的“專家思維”。當(dāng)你被問題難住時,關(guān)掉電腦,出去走走,把你的問題和你的朋友甚至你的小狗說說,或許他們可以給你意想不到的啟發(fā)。
總結(jié)
嵌入式調(diào)試也是一門藝術(shù)。就想其它的藝術(shù)一樣,如果你想取得成功,你必須具備智慧、經(jīng)驗并懂得使用工具。只要我們能夠很好地領(lǐng)悟Oracle這十條秘訣,我相信我們在嵌入式測試方面就能夠取得成功。
課程咨詢:C語言,單片機(jī),Linux電路設(shè)計,PCB軟件測試,python,JAVA,C++,QT等課程培訓(xùn)提升,面授線上學(xué)習(xí),有需要加18025267692(微信)私聊






歡迎光臨 電子工程網(wǎng) (http://www.qingdxww.cn/) Powered by Discuz! X3.4
主站蜘蛛池模板: 青青草原国产在线观看 | 国产色产综合色产在线观看视频 | 伊人狼人在线 | 95老司机免费福利 | 在线免费观看福利 | 免费五级在线观看日本片 | 精品肉动漫资源在线观看 | 日本中文字幕一区二区三区不卡 | 青青视频免费在线 | 亚洲国产精品成人午夜在线观看 | 免费黄色在线播放 | 最新国产一区二区精品久久 | 国产黄在线免费观看 | 毛片视频网站 | 国产午夜亚洲精品 | 高清在线一区二区三区亚洲综合 | 中文字幕1区2区 | 国产1024在线永久免费观看 | 99热精品久久只有精品黑人 | 狠狠亚洲 | 免费高清在线观看a网站 | 884hutv四虎永久7777 | 日韩在线观看第一页 | 精品一本久久中文字幕 | 男女一边摸一边做羞羞视频免费 | 久久精品国产精品青草不卡 | 色综合色狠狠天天久久婷婷基地 | 欧美成人全部免费观看1314色 | 手机看片日韩高清国产欧美 | 欧美一区二区三区免费播放 | 国产精品极品美女自在线观看 | 天堂网在线最新版官网 | 麻豆成人在线观看 | 国产精品盗摄一区二区在线 | 九色视频在线观看 | 欧美一区二区三区不卡片 | 欧美精品久久一区二区三区 | 蜜柚在线观看免费高清 | 国产小视频在线观看免费 | 网友自拍区一区二区三区 | 国内精品久久久久影院一蜜桃 |