第一篇:bug分析報(bào)告
一、整體bug分布
1、模塊分布圖
2、嚴(yán)重程度分布圖
3、Bug時(shí)間分布-模塊-嚴(yán)重程度分布圖等
二、功能模塊bug分布
1、嚴(yán)重程度分布
2、Bug時(shí)間分布
三、測試階段bug分布
1、模塊分布圖
2、嚴(yán)重程度分布圖
3、Bug時(shí)間分布-模塊-嚴(yán)重程度分布圖等
四、bug出現(xiàn)原因總結(jié)
分析bug出現(xiàn)的原因,對bug原因進(jìn)行歸類整理等
第二篇:Bug 報(bào)告的流程以及要素分析
Bug 報(bào)告的流程以及要素分析
前提:標(biāo)準(zhǔn)的對日項(xiàng)目中使用
Bug發(fā)行和處理流程
1. 測試中發(fā)現(xiàn)問題
2. 尋找參照文檔即發(fā)行依據(jù)。3. 進(jìn)行對比信息采集
4. 進(jìn)行不重復(fù)bug的自我確認(rèn) 5. 進(jìn)行bug發(fā)行確認(rèn)(pl確認(rèn))6. 書寫bug report-〉submit 7. 項(xiàng)目組長check, 測試員再現(xiàn)操作-〉bug report 狀態(tài)便更為open 8. 開發(fā)方-〉確認(rèn)-〉1.待確認(rèn)(缺少信息)-> bug report 打回6,進(jìn)行信息添加。
2.分析修改
9. bug report待測試狀態(tài)-〉測試員進(jìn)行測試—〉測試OK->closed —〉 測試NG-〉等待繼續(xù)修改。
Bug 報(bào)告的要素
1. 概要
用最精簡的話語,最好是一句來描述你發(fā)現(xiàn)的問題。一般邏輯為,哪里,進(jìn)行了什么操作,本該出現(xiàn)什么,結(jié)果出現(xiàn)了什么。(比較嚴(yán)重的缺陷不需要說明期望結(jié)果)2. 步驟
從第一步開始書寫你的操作手順。一般原則為:讓一個(gè)不熟悉此操作的人,按照你的步驟能夠再現(xiàn)這個(gè)bug.**需要注意的是。需要書寫的步驟不能含有冗余。也就是說,需要測試員在發(fā)現(xiàn)問題后對自己已經(jīng)確定的再現(xiàn)操作步驟進(jìn)行排除和分析。只保留缺一不可的步驟。3. 再現(xiàn)率
一般為 X/Y的格式。即再現(xiàn)次數(shù)/操作次數(shù)。
4. 發(fā)行依據(jù),就是參考文件,你是依據(jù)什么文件(權(quán)威,一般為需求文檔或者開發(fā)方的說明文檔等)而發(fā)行的這個(gè)bug.5. 對比信息。包括類比和對比信息。6. 測試環(huán)境
7. 使用的測試數(shù)據(jù)
8. 測試附件 圖片,錄影(圖片無法說明的),log文件。9. 其他
以上是書寫bug的重要要素。當(dāng)然,一個(gè)bug報(bào)告的組成還有以下:
bug的概要分析。分析這個(gè)bug屬于什么范圍的問題,什么模塊的問題。是進(jìn)行了什么操作而造成的。
Bug的優(yōu)先級。有三級與五級這兩種不同的區(qū)分。依據(jù)項(xiàng)目而定。這種級別一般是測試員沒有權(quán)限決定但是有權(quán)利進(jìn)行建議的。Bug的分析過程。一般由開發(fā)和分析人員填寫。
Bug的再測試紀(jì)錄,一般由測試人員填寫測試經(jīng)過,測試時(shí)間,步驟,結(jié)果然后會由PL進(jìn)行確認(rèn)和提交。
Bug的結(jié)束時(shí)間以及結(jié)束原因。
分四種情況,一種是因?yàn)闇y試員測試OK的,原因一般為修改完成等
一種是開發(fā)人員覺得有風(fēng)險(xiǎn)不修改,覺得沒有必要修改,或者其他的原因不與修改的。這時(shí)候的原因就比較多,例如,延遲修改,不修改等。
第三種情況一般是因?yàn)闇y試人員自己的原因發(fā)行的誤bug.比如說式樣,需求,設(shè)計(jì)已經(jīng)修改但是測試員沒有及時(shí)參照。此時(shí)的結(jié)束原因就會是:操作錯誤,需求理解錯誤,涉及理解錯誤,數(shù)據(jù)錯誤等等。
最后一種其實(shí)也不算是bug.但是不能將結(jié)束原因歸咎于測試員的誤操作。比如需求變更,環(huán)境原因等。
以上這些都是在系統(tǒng)中進(jìn)行,如果大家在實(shí)際的測試中沒有測試工具來進(jìn)行分析,就只好采用手工了。但是有了這些要素。估計(jì)會對工作有很大的幫助。
對日項(xiàng)目相對歐美比較復(fù)雜,但是對于后期的bug的分析以及測試的分析有很大幫助。
第三篇:有效地報(bào)告BUG
如何有效地報(bào)告Bug------------------引言
為公眾寫過軟件的人,大概都收到過很拙劣的bug(計(jì)算機(jī)程序代碼中的錯誤或程序運(yùn)行時(shí)的瑕疵??譯者注)報(bào)告,例如: 在報(bào)告中說“不好用”; 所報(bào)告內(nèi)容毫無意義;
在報(bào)告中用戶沒有提供足夠的信息; 在報(bào)告中提供了虛假信息;
所報(bào)告的問題是由于用戶的過失而產(chǎn)生的; 所報(bào)告的問題是由于其他程序的錯誤而產(chǎn)生的; 所報(bào)告的問題是由于網(wǎng)絡(luò)錯誤而產(chǎn)生的;
這便是為什么“技術(shù)支持”被認(rèn)為是一件可怕的工作,因?yàn)橛凶玖拥腷ug報(bào)告需要處理。然而并不是所有的bug報(bào)告都令人生厭:我在業(yè)余時(shí)間維護(hù)自由軟件,有時(shí)我會收到非常清晰、有幫助并且內(nèi)容豐富的bug報(bào)告。
在這里我會盡力闡明如何寫一個(gè)好的bug報(bào)告。我非常希望每一個(gè)人在報(bào)告bug之前都讀一下這篇短文,當(dāng)然我也希望用戶在給我報(bào)告bug之前已經(jīng)讀過這篇文章。
簡單地說,報(bào)告bug的目的是為了讓程序員看到程序的錯誤。您可以親自示范,也可以給出能導(dǎo)致程序出錯的、詳盡的操作步驟。如果程序出錯了,程序員會收集額外的信息直到找到錯誤的原因;如果程序沒有出錯,那么他們會請您繼續(xù)關(guān)注這個(gè)問題,收集相關(guān)的信息。
在bug報(bào)告里,要設(shè)法搞清什么是事實(shí)(例如:“我在電腦旁”和“XX出現(xiàn)了”)什么是推測(例如:“我想問題可能是出在??”)。如果愿意的話,您可以省去推測,但是千萬別省略事實(shí)。
當(dāng)您報(bào)告bug的時(shí)候(既然您已經(jīng)這么做了),一定是希望bug得到及時(shí)修正。所以此時(shí)針對程序員的任何過激或褻瀆的言語(甚至謾罵)都是與事無補(bǔ)的??因?yàn)檫@可能是程序員的錯誤,也有可能是您的錯誤,也許您有權(quán)對他們發(fā)火,但是如果您能多提供一些有用的信息(而不是激憤之詞)或許bug會被更快的修正。除此以外,請記?。喝绻敲赓M(fèi)軟件,作者提供給我們已經(jīng)是出于好心,所以要是太多的人對他們無禮,他們可能就要“收起”這份好心了?!俺绦虿缓糜谩?/p>
程序員不是弱智:如果程序一點(diǎn)都不好用,他們不可能不知道。他們不知道一定是因?yàn)槌绦蛟谒麄兛磥砉ぷ鞯煤苷?。所以,或者是您作過一些與他們不同的操作,或者是您的環(huán)境與他們不同。他們需要信息,報(bào)告bug也是為了提供信息。信息總是越多越好。
許多程序,特別是自由軟件,會公布一個(gè)“已知bug列表”。如果您找到的bug在列表里已經(jīng)有了,那就不必再報(bào)告了,但是如果您認(rèn)為自己掌握的信息比列表中的豐富,那無論如何也要與程序員聯(lián)系。您提供的信息可能會使他們更簡單地修復(fù)bug。
本文中提到的都是一些指導(dǎo)方針,沒有哪一條是必須恪守的準(zhǔn)則。不同的程序員會喜歡不同形式的bug報(bào)告。如果程序附帶了一套報(bào)告bug的準(zhǔn)則,一定要讀。如果它與本文中提到的規(guī)則相抵觸,那么請以它為準(zhǔn)。
如果您不是報(bào)告bug,而是尋求幫助,您應(yīng)該說明您曾經(jīng)到哪里找過答案,(例如:我看了第四章和第五章的第二節(jié),但我找不到解決的辦法。)這會使程序員了解用戶喜歡到哪里去找答案,從而使程序員把幫助文檔做得更容易使用?!把菔窘o我看”
報(bào)告bug的最好的方法之一是“演示”給程序員看。讓程序員站在電腦前,運(yùn)行他們的程序,指出程序的錯誤。讓他們看著您啟動電腦、運(yùn)行程序、如何進(jìn)行操作以及程序?qū)δ妮斎胗泻畏磻?yīng)。
他們對自己寫的軟件了如指掌,他們知道哪些地方不會出問題,而哪些地方最可能出問題。他們本能地知道應(yīng)該注意什么。在程序真的出錯之前,他們可能已經(jīng)注意到某些地方不對勁,這些都會給他們一些線索。他們會觀察程序測試中的每一個(gè)細(xì)節(jié),并且選出他們認(rèn)為有用的信息。
這些可能還不夠。也許他們覺得還需要更多的信息,會請您重復(fù)剛才的操作。他們可能在這期間需要與您交流一下,以便在他們需要的時(shí)候讓bug重新出現(xiàn)。他們可能會改變一些操作,看看這個(gè)錯誤的產(chǎn)生是個(gè)別問題還是相關(guān)的一類問題。如果您不走運(yùn),他們可能需要坐下來,拿出一堆開發(fā)工具,花上幾個(gè)小時(shí)研究。但是最重要的是在程序出錯的時(shí)候讓程序員在電腦旁。一旦他們看到了問題,他們通常會找到原因并開始試著修改?!案嬖V我該怎么做”
如今是網(wǎng)絡(luò)時(shí)代,是信息交流的時(shí)代。我可以點(diǎn)一下鼠標(biāo)把自己的程序送到俄羅斯的某個(gè)朋友那里,當(dāng)然他也可以用同樣簡單的方法給我一些建議。但是如果我的程序出了什么問題,我不可能在他旁邊?!把菔尽笔呛芎玫霓k法,但是常常做不到。
如果您必須報(bào)告bug,而此時(shí)程序員又不在您身邊,那么您就要想辦法讓bug重現(xiàn)在他們面前。當(dāng)他們親眼看到錯誤時(shí),就能夠進(jìn)行處理了。
確切地告訴程序員您做了些什么。如果是一個(gè)圖形界面程序,告訴他們您按了哪個(gè)按鈕,依照什么順序按的。如果是一個(gè)命令行程序,精確的告訴他們您鍵入了什么命令。您應(yīng)該盡可能詳細(xì)地提供您所鍵入的命令和程序的反應(yīng)。
把您能想到的所有的輸入方式都告訴程序員,如果程序要讀取一個(gè)文件,您可能需要發(fā)一個(gè)文件的拷貝給他們。如果程序需要通過網(wǎng)絡(luò)與另一臺電腦通訊,您或許不能把那臺電腦復(fù)制過去,但至少可以說一下電腦的類型和安裝了哪些軟件(如果可以的話)。
“哪兒出錯了?在我看來一切正常哦!”
如果您給了程序員一長串輸入和指令,他們執(zhí)行以后沒有出現(xiàn)錯誤,那是因?yàn)槟鷽]有給他們足夠的信息,可能錯誤不是在每臺計(jì)算機(jī)上都出現(xiàn),您的系統(tǒng)可能和他們的在某些地方不一樣。有時(shí)候程序的行為可能和您預(yù)想的不一樣,這也許是誤會,但是您會認(rèn)為程序出錯了,程序員卻認(rèn)為這是對的。
同樣也要描述發(fā)生了什么。精確的描述您看到了什么。告訴他們?yōu)槭裁茨X得自己所看到的是錯誤的,最好再告訴他們,您認(rèn)為自己應(yīng)該看到什么。如果您只是說:“程序出錯了”,那您很可能漏掉了非常重要的信息。
如果您看到了錯誤消息,一定要仔細(xì)、準(zhǔn)確的告訴程序員,它們很重要。在這種情況下,程序員只要修正錯誤,而不用去找錯誤。他們需要知道是什么出問題了,系統(tǒng)所報(bào)的錯誤消息正好幫助了他們。如果您沒有更好的方法記住這些消息,就把它們寫下來。只報(bào)告“程序出了一個(gè)錯”是毫無意義的,除非您把錯誤消息一塊報(bào)上來。
特殊情況下,如果有錯誤消息號,一定要把這些號碼告訴程序員。不要以為您看不出任何意義,它就沒有意義。錯誤消息號包含了能被程序員讀懂的各種信息,并且很有可能包含重要的線索。給錯誤消息編號是因?yàn)橛谜Z言描述計(jì)算機(jī)錯誤常常令人費(fèi)解。用這種方式告訴您錯誤的所在是一個(gè)最好的辦法。
在這種情形下,程序員的排錯工作會十分高效。他們不知道發(fā)生了什么,也不可能到現(xiàn)場去觀察,所以他們一直在搜尋有價(jià)值的線索。錯誤消息、錯誤消息號以及一些莫名其妙的延遲,都是很重要的線索,就像辦案時(shí)的指紋一樣重要,保存好。
如果您使用UNIX系統(tǒng),程序可能會產(chǎn)生一個(gè)內(nèi)核輸出(core dump)。內(nèi)核輸出是特別有用的線索來源,別扔了它們。另一方面,大多數(shù)程序員不喜歡收到含有大量內(nèi)核輸出文件的EMAIL,所以在發(fā)郵件之前最好先問一下。還有一點(diǎn)要注意:內(nèi)核輸出文件記錄了完整的程序狀態(tài),也就是說任何秘密(可能當(dāng)時(shí)程序正在處理一些私人信息或秘密數(shù)據(jù))都可能包含在內(nèi)核輸出文件里?!俺隽藛栴}之后,我做了??”
當(dāng)一個(gè)錯誤或bug發(fā)生的時(shí)候,您可能會做許多事情。但是大多數(shù)人會使事情變的更糟。我的一個(gè)朋友在學(xué)校里誤刪了她所有的Word文件,在找人幫忙之前她重裝了Word,又運(yùn)行了一遍碎片整理程序,這些操作對于恢復(fù)文件是毫無益處的,因?yàn)檫@些操作搞亂了磁盤的文件區(qū)塊??峙略谶@個(gè)世界上沒有一種反刪除軟件能恢復(fù)她的文件了。如果她不做任何操作,或許還有一線希望。
這種人仿佛一只被逼到墻角的鼬(黃鼠狼、紫貂一類的動物??譯者注):背靠墻壁,面對死亡的降臨奮起反撲,瘋狂攻擊。他們認(rèn)為做點(diǎn)什么總比什么都不做強(qiáng)。然而這些在處理計(jì)算機(jī)軟件問題時(shí)并不適用。不要做鼬,做一只羚羊。當(dāng)一只羚羊面對料想不到的情況或受到驚嚇時(shí),它會一動不動,是為了不吸引任何注意,與此同時(shí)也在思考解決問題的最好辦法(如果羚羊有一條技術(shù)支持熱線,此時(shí)占線。)。然后,一旦它找到了最安全的行動方案,它便去做。
當(dāng)程序出毛病的時(shí)候,立刻停止正在做的任何操作。不要按任何按鈕。仔細(xì)地看一下屏幕,注意那些不正常的地方,記住它或者寫下來。然后慎重地點(diǎn)擊 “確定” 或“取消”,選擇一個(gè)最安全的。學(xué)著養(yǎng)成一種條件反射??一旦電腦出了問題,先不要動。要想擺脫這個(gè)問題,關(guān)掉受影響的程序或者重新啟動計(jì)算機(jī)都不好,一個(gè)解決問題的好辦法是讓問題再次產(chǎn)生。程序員們喜歡可以被重現(xiàn)的問題,快樂的程序員可以更快而且更有效率的修復(fù)bug?!拔蚁肓W拥能S遷與錯誤的極化有關(guān)”
并不只是非專業(yè)的用戶才會寫出拙劣的bug報(bào)告,我見過一些非常差的bug報(bào)告出自程序員之手,有些還是非常優(yōu)秀的程序員。
有一次我與另一個(gè)程序員一起工作,他一直在找代碼中的bug,他常常遇到一個(gè)bug,但是不會解決,于是就叫我?guī)兔?。“出什么毛病了?”我問。而他的回答卻總是一些關(guān)于bug的意見。如果他的觀點(diǎn)正確,那的確是一件好事。這意味著他已經(jīng)完成了工作的一半,并且我們可以一起完成另一半工作。這是有效率并有用的。
但事實(shí)上他常常是錯的。這就會使我們花上半個(gè)小時(shí)在原本正確的代碼里來回尋找錯誤,而實(shí)際上問題出在別的地方。我敢肯定他不會對醫(yī)生這么做?!按蠓?,我得了Hydroyoyodyne(真是怪病??譯者),給我開個(gè)方子”,人們知道不該對一位醫(yī)生說這些。您描述一下癥狀,哪個(gè)地方不舒服,哪里疼、起皮疹、發(fā)燒??讓醫(yī)生診斷您得了什么病,應(yīng)該怎樣治療。否則醫(yī)生會把您當(dāng)做疑心病或精神病患者打發(fā)了,這似乎沒什么不對。
做程序員也是一樣。即便您自己的“診斷”有時(shí)真的有幫助,也要只說“癥狀”?!霸\斷”是可說可不說的,但是“癥狀”一定要說。同樣,在bug報(bào)告里面附上一份針對bug而做出修改的源代碼是有用處的,但它并不能替代bug報(bào)告本身。
如果程序員向您詢問額外的信息,千萬別應(yīng)付。曾經(jīng)有一個(gè)人向我報(bào)告bug,我讓他試一個(gè)命令,我知道這個(gè)命令不好用,但我是要看看程序會返回一個(gè)什么錯誤(這是很重要的線索)。但是這位老兄根本就沒試,他在回復(fù)中說“那肯定不好用”,于是我又花了好些時(shí)間才說服他試了一下那個(gè)命令。
多動動腦筋對程序員是有幫助的。即使您的推斷是錯誤的,程序員也應(yīng)該感謝您,您的嘗試使他們的工作變的更簡單。不過千萬別忘了報(bào)告“癥狀”,否則只會使事情變得更糟?!罢媸瞧婀?,剛才還不好用,怎么現(xiàn)在又好了?”
“間歇性錯誤”著實(shí)讓程序員發(fā)愁。相比之下,進(jìn)行一系列簡單的操作便能導(dǎo)致錯誤發(fā)生的問題是簡單的。程序員可以在一個(gè)便于觀察的條件下重復(fù)那些操作,觀察每一個(gè)細(xì)節(jié)。太多的問題在這種情況下不能解決,例如:程序每星期出一次錯,或者偶然出一次錯,或者在程序員面前從不出錯(程序員一離開就出錯。??譯者)。當(dāng)然還有就是程序的截止日期到了,那肯定要出錯。
大多數(shù)“間歇性錯誤”并不是真正的“間歇”。其中的大多數(shù)錯誤與某些地方是有聯(lián)系的。有一些錯誤可能是內(nèi)存泄漏產(chǎn)生的,有一些可能是別的程序在不恰當(dāng)?shù)臅r(shí)候修改某個(gè)重要文件造成的,還有一些可能發(fā)生在每一個(gè)小時(shí)的前半個(gè)小時(shí)中(我確實(shí)遇到過這種事情)。
同樣,如果您能使bug重現(xiàn),而程序員不能,那很有可能是他們的計(jì)算機(jī)和您的計(jì)算機(jī)在某些地方是不同的,這種不同引起了問題。我曾寫過一個(gè)程序,它的窗口可以蜷縮成一個(gè)小球停在屏幕的左上角,它在別的計(jì)算機(jī)上只能在 800x600 解析度工作,但是在我的機(jī)器上卻可以在 1024x768 工作。
程序員想要了解任何與您發(fā)現(xiàn)的問題相關(guān)的事情。有可能的話您到另一臺機(jī)器上試試,多試幾次,兩次,三次,看看問題是不是經(jīng)常發(fā)生。如果問題出現(xiàn)在您進(jìn)行了一系列操作之后,不是您想讓它出現(xiàn)它就會出現(xiàn),這就有可能是長時(shí)間的運(yùn)行或處理大文件所導(dǎo)致的錯誤。程序崩潰的時(shí)候,您要盡可能的記住您都做了些什么,并且如果您看到任何圖形, 也別忘了提一下。您提供的任何事情都是有幫助的。即使只是概括性的描述(例如:當(dāng)后臺有EMACS運(yùn)行時(shí),程序常常出錯),這雖然不能提供導(dǎo)致問題的直接線索,但是可能幫助程序員重現(xiàn)問題。
最重要的是:程序員想要確定他們正在處理的是一個(gè)真正的“間歇性錯誤”呢,還是一個(gè)在另一類特定的計(jì)算機(jī)上才出現(xiàn)的錯誤。他們想知道有關(guān)您計(jì)算機(jī)的許多細(xì)節(jié),以便了解您的機(jī)器與他們的有什么不同。有許多細(xì)節(jié)都依仗特定的程序,但是有一件東西您一定要提供??版本號。程序的版本、操作系統(tǒng)的版本以及與問題有關(guān)的程序的版本?!拔野汛疟P裝進(jìn)了我的Windows??”
表意清楚在一份bug報(bào)告里是最基本的要求。如果程序員不知道您說的是什么意思,那您就跟沒說一樣。我收到的bug報(bào)告來自世界各地,有許多是來自非英語國家,他們通常為自己的英文不好而表示歉意??偟膩碚f,這些用戶發(fā)來的bug報(bào)告通常是清晰而且有用的。幾乎所有不清晰的bug報(bào)告都是來自母語是英語的人,他們總是以為只要自己隨便說說,程序員就能明白。
精確。
如果做相同的事情有兩種方法,請說明您用的是哪一種。例如:“我選擇了‘載入’”,可能意味著“我用鼠標(biāo)點(diǎn)擊‘載入’”或“我按下了‘ALT+L’”,說清楚您用了哪種方法,有時(shí)候這也有關(guān)系。詳細(xì)。
信息寧多毋少!如果您說了很多,程序員可以略去一部分,可是如果您說的太少,他們就不得不回過頭再去問您一些問題。有一次我收到了一份bug報(bào)告只有一句話,每一次我問他更多事情時(shí),他每次的回復(fù)都是一句話,于是我花了幾個(gè)星期的時(shí)間才得到了有用的信息。
謹(jǐn)慎使用代詞。
諸如“它”,“窗體”這些詞,當(dāng)它們指代不清晰的時(shí)候不要用。來看看這句話:“我運(yùn)行了FooApp,它彈出一個(gè)警告窗口,我試著關(guān)掉它,它就崩潰了?!边@種表述并不清晰,用戶究竟關(guān)掉了哪個(gè)窗口?是警告窗口還是整個(gè)FooApp程序?您可以這樣說,“我運(yùn)行FooApp程序時(shí)彈出一個(gè)警告窗口,我試著關(guān)閉警告窗口,F(xiàn)ooApp崩潰了?!边@樣雖然羅嗦點(diǎn),但是很清晰不容易產(chǎn)生誤解。檢查。
重新讀一遍您寫的bug報(bào)告,您覺得它是否清晰?如果您列出了一系列能導(dǎo)致程序出錯的操作,那么照著做一遍,看看您是不是漏寫了一步。
小結(jié):
bug報(bào)告的首要目的是讓程序員親眼看到錯誤。如果您不能親自做給他們看,給他們能使程序出錯的詳細(xì)的操作步驟。
如果首要目的不能達(dá)成,程序員不能看到程序出錯。這就需要bug報(bào)告的第二個(gè)目的來描述程序的什么地方出毛病了。詳細(xì)的描述每一件事情:您看到了什么,您想看到什么,把錯誤消息記下來,尤其是“錯誤消息號”。
當(dāng)您的計(jì)算機(jī)做了什么您料想不到的事,不要動!在您平靜下來之前什么都別做。不要做您認(rèn)為不安全的事。
盡量試著自己“診斷”程序出錯的原因(如果您認(rèn)為自己可以的話)。即使做出了“診斷”,您仍然應(yīng)該報(bào)告“癥狀”。
如果程序員需要,請準(zhǔn)備好額外的信息。如果他們不需要,就不會問您要。他們不會故意為難自己。您手頭上一定要有程序的版本號,它很可能是必需品。
表述清楚,確保您的意思不能被曲解。
總的來說,最重要的是要做到精確。程序員喜歡精確。
第四篇:編寫優(yōu)秀Bug報(bào)告的藝術(shù)
編寫優(yōu)秀Bug報(bào)告的藝術(shù)
前言
在Quality week上的一次演講中,微軟的一個(gè)測試經(jīng)理,Roger Sherman指出了由于“不可重現(xiàn)”導(dǎo)致bug關(guān)閉的主要原因。這是一個(gè)非??上У那闆r,因?yàn)檫@樣的bug report浪費(fèi)了緊張的開發(fā)計(jì)劃中的寶貴時(shí)間,增加了對產(chǎn)品質(zhì)量完全是無關(guān)緊要的事情,同時(shí)導(dǎo)致了在開發(fā)人員和測試之間的挫敗感和差的感覺。有時(shí),bug report是由于短暫的或隨機(jī)的事件,測試和開發(fā)之間不一致的工具和配置,或者在測試的環(huán)境下對正確的行為的模糊定義而產(chǎn)生的,但是許多的由于不可重現(xiàn)而被關(guān)閉的測試報(bào)告是因?yàn)槊枋霾磺逦?,被誤解,或者只是文字的錯誤。
幸運(yùn)的是,我學(xué)習(xí)到一些能夠引起管理層注意,更清楚的和開發(fā)人員溝通并得到修復(fù)的編寫優(yōu)秀bug report的訣竅。這些技巧不僅僅提供了是在被修復(fù)的問題的比例方面得到了可靠的回報(bào),而且在同開發(fā)人員和管理層的通過中也得到了回報(bào)。在我管理的項(xiàng)目中使用這種方法編寫bug report,8份bug report中大約只有一個(gè)沒有被修復(fù)。
這篇文章的思想只有當(dāng)你的報(bào)告針對的測試執(zhí)行過程是專業(yè)的質(zhì)量工作才可以發(fā)揮作用。聰明地執(zhí)行完整的測試包是產(chǎn)生可靠的測試狀況信息的基礎(chǔ)的其中一個(gè)因素。在許多的測試文獻(xiàn)中廣泛地介紹了多種多樣的關(guān)于如何構(gòu)建這樣的測試包的方法。選擇和你質(zhì)量風(fēng)險(xiǎn)管理需求相一致的技術(shù)并且使之適應(yīng)你的具體情況,敏捷地監(jiān)督已計(jì)劃的測試的執(zhí)行過程,這樣你就可以擁有可靠的測試執(zhí)行過程。
另外一個(gè)關(guān)鍵的因素-bug report,卻沒有得到太多的關(guān)注。這是非常令人遺憾的,因?yàn)閮?yōu)秀的bug report對反映測試小組真實(shí)的和可理解的工作質(zhì)量同測試本身一樣都是非常重要的。試想一下:如果你不能用開發(fā)人員能夠理解的術(shù)語和能夠用于調(diào)試的方法給開發(fā)人員解釋一個(gè)錯誤,他怎么能夠修復(fù)問題呢?如果你不能夠在bug report中提出象“保險(xiǎn)桿標(biāo)簽”(bumper sticker)一樣的錯誤總結(jié)來引起管理層的注意,你又如何讓他們關(guān)心你們發(fā)現(xiàn)的問題呢?
Bug report的核心是對錯誤的描述。表格1中是一個(gè)關(guān)于好和差的錯誤描述的例子。編寫好的bug report是一種好的藝術(shù)形式。采用以下的10條技巧可以幫助你的小組提高編寫bug report的質(zhì)量:
1.組織Structure:測試人員應(yīng)該采用深思熟慮的,小心謹(jǐn)慎的方法執(zhí)行測試,并且做詳盡的記錄。這樣可以促使他們對測試下的系統(tǒng)有很好的認(rèn)識。當(dāng)錯誤發(fā)生的時(shí)候,一個(gè)有組織的測試人員能夠知道最早出現(xiàn)問獾牡胤健?
2.重現(xiàn)Reproduce:測試人員在編寫bug report之前必須在檢查問題是否可重現(xiàn)。如果錯誤不可再重現(xiàn),仍然應(yīng)該寫下來,但是必須說明問題的偶然性。一個(gè)好的處理原則就是在編寫bug report之前反復(fù)嘗試3次。
3.隔離Isolate:在嘗試編寫bug report之前,必須試著隔離錯誤??梢圆捎酶淖円恍?/p>
變量的方法,如系統(tǒng)的配置,它可能可以改變錯誤的癥狀。這些信息可以為開發(fā)人員著手調(diào)試提供思路。
4.歸納Generalize:在測試人員發(fā)現(xiàn)了一個(gè)已隔離的,可重現(xiàn)的問題后,應(yīng)該對問題
進(jìn)行歸納。同一個(gè)問題是否出現(xiàn)在其他的模塊或其他的地方?同一個(gè)故障是否有更加嚴(yán)重的問題?
5.對比Compare:如果測試人員以前曾經(jīng)驗(yàn)證過現(xiàn)在出錯的測試用例,那么他就應(yīng)該
檢查以前的測試結(jié)果以檢查相同的條件是否通過以前的測試。如果是的話,那么這個(gè)問題就象是一個(gè)回歸的錯誤。注意由于同一測試條件有可能出現(xiàn)在多個(gè)測試用例中,這個(gè)步驟就不僅僅只是檢查一個(gè)測試用例在以前的多個(gè)結(jié)果。
6.總結(jié)Summarize:在bug report的第一行寫上錯誤的總結(jié)是非常關(guān)鍵的。測試人
員要花些時(shí)間思考已發(fā)現(xiàn)的錯誤對客戶有何影響。這不僅僅要求測試人員編寫的報(bào)告要能夠吸引讀者,使和管理層的溝通清晰,還要能夠幫助設(shè)置錯誤修復(fù)的優(yōu)先級別。
7.精簡Condense:在bug report的初稿完成后,測試人員應(yīng)該反復(fù)閱讀它,集中剔
除那些沒有關(guān)系的步驟或詞語。隱含的或模糊的說明和那些由于對沒有任何關(guān)系的細(xì)節(jié)或者那些在重現(xiàn)錯誤過程中不需要的步驟而消磨報(bào)告歡迎程度的無窮嘮叨都不是bug report的目標(biāo)。
8.消除歧義Disambiguate:測試人員在精簡空話的同時(shí)或其之后隨即應(yīng)該再仔細(xì)檢
查報(bào)告是否有會產(chǎn)生誤解的地方。測試人員應(yīng)該盡量避免使用模糊的,會產(chǎn)生歧義的和主觀的詞語。目標(biāo)是使用能夠表述事實(shí),清楚的,不會產(chǎn)生爭執(zhí)的詞語。
9.中立Neutralize:如文中所述,作為壞消息的傳遞人,和善地提交消息是一個(gè)挑戰(zhàn)。
如同所有的錯誤總結(jié)一樣,獨(dú)立的bug report在措辭方面應(yīng)該保持公正。攻擊開發(fā)人員,指責(zé)潛在的錯誤,企圖詼諧或使用挖苦將引起開發(fā)人員的憎惡,并且使注意力從“提高產(chǎn)品質(zhì)量”這個(gè)大的目標(biāo)上轉(zhuǎn)移開了。謹(jǐn)慎的測試人員只用Bug report來描述事實(shí)。
10.檢查Review:一旦測試人員感覺bug report是他能夠編寫的最好版本,他應(yīng)該將
報(bào)告再給一個(gè)或多個(gè)同行進(jìn)行檢查。他的同事們也應(yīng)該給出一些建議,為了澄清問題不斷地提問,如果適當(dāng)?shù)脑挘踔量梢蕴魬?zhàn)“錯誤成災(zāi)”的結(jié)論。在允許的時(shí)間里,測試小組應(yīng)該盡可能提交最好的bug report。
以上10條技巧可以幫助你和你的小組提交準(zhǔn)確簡潔的,徹底校訂的,精心構(gòu)思的,高質(zhì)量的技術(shù)文檔。測試小組應(yīng)該集中編寫bug report的任務(wù),測試組長和經(jīng)理應(yīng)該讓測試組成員清楚地認(rèn)識到編寫優(yōu)秀的bug report是一項(xiàng)首要的工作任務(wù)。衡量優(yōu)秀的bug report的質(zhì)量指標(biāo)應(yīng)該包括如下:
對管理層來說,是清晰明了的,特別是在概要這一級;
對于開發(fā)部門是有用的,主要是給出能夠讓開發(fā)人員高效地調(diào)試問題的相關(guān)信息
可以很快的將bug從“Opened”狀態(tài)轉(zhuǎn)變成“Closed”狀態(tài),減少為得到更多的信息從開發(fā)人員打回的差的bug report并導(dǎo)致測試人員返工的時(shí)間。
改進(jìn)bug報(bào)告的流程是需要花費(fèi)一些時(shí)間的,但是也給予了效果顯著的回報(bào)。首先,簡單的流程改進(jìn)了測試小組和高層、平行管理層之間的溝通,增強(qiáng)小組的信任度,名望和鼓勵管理層給測試投資更多的資源。第二,平穩(wěn)地遞交報(bào)告給開發(fā)人員促進(jìn)了測試和開發(fā)人員之間積極的關(guān)系。第三,更短的bug生命周期是更加有效的,在時(shí)間上之前花費(fèi)在編寫優(yōu)秀bug report上的時(shí)間和后期由于返工差的bug report花費(fèi)的時(shí)間相抵消。這些回報(bào)幫助開發(fā)流程通過有效的溝通和高效率的流程獲得更好的產(chǎn)品質(zhì)量。
第五篇:BUG 復(fù)現(xiàn)方法總結(jié)
BUG復(fù)現(xiàn)技巧與方法
● 確保所有的步驟都被記錄。記錄下所做的每一件事、每一個(gè)步驟、每一個(gè)停頓。無意間丟失一個(gè)步驟或者增加一個(gè)多余步驟,可能導(dǎo)致無法再現(xiàn)軟件缺陷。在嘗試運(yùn)行測試用例時(shí),可以利用錄制工具確切地記錄執(zhí)行步驟。所有的目標(biāo)是確保導(dǎo)致軟件缺陷所需的全部細(xì)節(jié)是可見的。
● 特定條件和時(shí)間。軟件缺陷僅在特定時(shí)刻出現(xiàn)嗎?軟件缺陷在特定條件下產(chǎn)生嗎?產(chǎn)生軟件缺陷是網(wǎng)絡(luò)忙嗎?在較差和較好的硬件設(shè)備上運(yùn)行測試用例會有不同的結(jié)果嗎?
● 壓力和負(fù)荷、內(nèi)存和數(shù)據(jù)溢出相關(guān)的邊界條件。執(zhí)行某個(gè)測試能導(dǎo)致產(chǎn)生缺陷的數(shù)據(jù)被覆蓋,而只有在試圖使用臟數(shù)據(jù)時(shí)才會再現(xiàn)。在重啟機(jī)器后,軟件缺陷消失,當(dāng)執(zhí)行其他測試之后又出現(xiàn)這類軟件缺陷,需要注意某些軟件缺陷可能是在無意中產(chǎn)生的。
● 考慮資源依賴性包括內(nèi)存、網(wǎng)絡(luò)和硬件共享的相互作用等。軟件缺陷是否僅在運(yùn)行其他軟件并與其他硬件通信的“繁忙”系統(tǒng)上出現(xiàn)?軟件缺陷可能最終證實(shí)跟硬件資源、網(wǎng)絡(luò)資源有相互的作用,審視這些影響有利于分離和再現(xiàn)軟件缺陷。
● 不能忽視硬件。與軟件不同,硬件Hi按預(yù)定方式工作。板卡松動、內(nèi)存條損壞或者CPU過熱都可能導(dǎo)致像是軟件缺陷的失敗。設(shè)法在不同硬件不再現(xiàn)軟件缺陷。在執(zhí)行配置或者兼容性測試時(shí)特別重要。判定軟件缺陷是在一個(gè)系統(tǒng)上還是在多個(gè)系統(tǒng)上產(chǎn)生。