編寫(xiě)優(yōu)秀Bug報(bào)告的藝術(shù)

字號(hào):

在Quality week上的一次演講中,微軟的一個(gè)測(cè)試經(jīng)理,Roger Sherman指出了由于“不可重現(xiàn)”導(dǎo)致bug關(guān)閉的主要原因。這是一個(gè)非常可惜的情況,因?yàn)檫@樣的bug report浪費(fèi)了緊張的開(kāi)發(fā)計(jì)劃中的寶貴時(shí)間,增加了對(duì)產(chǎn)品質(zhì)量完全是無(wú)關(guān)緊要的事情,同時(shí)導(dǎo)致了在開(kāi)發(fā)人員和測(cè)試之間的挫敗感和差的感覺(jué)。有時(shí),bug report是由于短暫的或隨機(jī)的事件,測(cè)試和開(kāi)發(fā)之間不一致的工具和配置,或者在測(cè)試的環(huán)境下對(duì)正確的行為的模糊定義而產(chǎn)生的,但是許多的由于不可重現(xiàn)而被關(guān)閉的測(cè)試報(bào)告是因?yàn)槊枋霾磺逦?,被誤解,或者只是文字的錯(cuò)誤。
    幸運(yùn)的是,我學(xué)習(xí)到一些能夠引起管理層注意,更清楚的和開(kāi)發(fā)人員溝通并得到修復(fù)的編寫(xiě)優(yōu)秀bug report的訣竅。這些技巧不僅僅提供了是在被修復(fù)的問(wèn)題的比例方面得到了可靠的回報(bào),而且在同開(kāi)發(fā)人員和管理層的通過(guò)中也得到了回報(bào)。在我管理的項(xiàng)目中使用這種方法編寫(xiě)bug report,8份bug report中大約只有一個(gè)沒(méi)有被修復(fù)。
    這篇文章的思想只有當(dāng)你的報(bào)告針對(duì)的測(cè)試執(zhí)行過(guò)程是專(zhuān)業(yè)的質(zhì)量工作才可以發(fā)揮作用。聰明地執(zhí)行完整的測(cè)試包是產(chǎn)生可靠的測(cè)試狀況信息的基礎(chǔ)的其中一個(gè)因素。在許多的測(cè)試文獻(xiàn)中廣泛地介紹了多種多樣的關(guān)于如何構(gòu)建這樣的測(cè)試包的方法。選擇和你質(zhì)量風(fēng)險(xiǎn)管理需求相一致的技術(shù)并且使之適應(yīng)你的具體情況,敏捷地監(jiān)督已計(jì)劃的測(cè)試的執(zhí)行過(guò)程,這樣你就可以擁有可靠的測(cè)試執(zhí)行過(guò)程。
    另外一個(gè)關(guān)鍵的因素-bug report,卻沒(méi)有得到太多的關(guān)注。這是非常令人遺憾的,因?yàn)閮?yōu)秀的bug report對(duì)反映測(cè)試小組真實(shí)的和可理解的工作質(zhì)量同測(cè)試本身一樣都是非常重要的。試想一下:如果你不能用開(kāi)發(fā)人員能夠理解的術(shù)語(yǔ)和能夠用于調(diào)試的方法給開(kāi)發(fā)人員解釋一個(gè)錯(cuò)誤,他怎么能夠修復(fù)問(wèn)題呢?如果你不能夠在bug report中提出象“保險(xiǎn)桿標(biāo)簽”(bumper sticker)一樣的錯(cuò)誤總結(jié)來(lái)引起管理層的注意,你又如何讓他們關(guān)心你們發(fā)現(xiàn)的問(wèn)題呢?
    Bug report的核心是對(duì)錯(cuò)誤的描述。表格1中是一個(gè)關(guān)于好和差的錯(cuò)誤描述的例子。編寫(xiě)好的bug report是一種好的藝術(shù)形式。采用以下的10條技巧可以幫助你的小組提高編寫(xiě)bug report的質(zhì)量:
    組織Structure:測(cè)試人員應(yīng)該采用深思熟慮的,小心謹(jǐn)慎的方法執(zhí)行測(cè)試,并且做詳盡的記錄。這樣可以促使他們對(duì)測(cè)試下的系統(tǒng)有很好的認(rèn)識(shí)。當(dāng)錯(cuò)誤發(fā)生的時(shí)候,一個(gè)有組織的測(cè)試人員能夠知道最早出現(xiàn)問(wèn)題的地方。
    重現(xiàn)Reproduce:測(cè)試人員在編寫(xiě)bug report之前必須在檢查問(wèn)題是否可重現(xiàn)。如果錯(cuò)誤不可再重現(xiàn),仍然應(yīng)該寫(xiě)下來(lái),但是必須說(shuō)明問(wèn)題的偶然性。一個(gè)好的處理原則就是在編寫(xiě)bug report之前反復(fù)嘗試3次。
    隔離Isolate:在嘗試編寫(xiě)bug report之前,必須試著隔離錯(cuò)誤??梢圆捎酶淖円恍┳兞康姆椒?,如系統(tǒng)的配置,它可能可以改變錯(cuò)誤的癥狀。這些信息可以為開(kāi)發(fā)人員著手調(diào)試提供思路。
    歸納Generalize:在測(cè)試人員發(fā)現(xiàn)了一個(gè)已隔離的,可重現(xiàn)的問(wèn)題后,應(yīng)該對(duì)問(wèn)題進(jìn)行歸納。同一個(gè)問(wèn)題是否出現(xiàn)在其他的模塊或其他的地方?同一個(gè)故障是否有更加嚴(yán)重的問(wèn)題?
    對(duì)比Compare:如果測(cè)試人員以前曾經(jīng)驗(yàn)證過(guò)現(xiàn)在出錯(cuò)的測(cè)試用例,那么他就應(yīng)該檢查以前的測(cè)試結(jié)果以檢查相同的條件是否通過(guò)以前的測(cè)試。如果是的話(huà),那么這個(gè)問(wèn)題就象是一個(gè)回歸的錯(cuò)誤。注意由于同一測(cè)試條件有可能出現(xiàn)在多個(gè)測(cè)試用例中,這個(gè)步驟就不僅僅只是檢查一個(gè)測(cè)試用例在以前的多個(gè)結(jié)果。
    總結(jié)Summarize:在bug report的第一行寫(xiě)上錯(cuò)誤的總結(jié)是非常關(guān)鍵的。測(cè)試人員要花些時(shí)間思考已發(fā)現(xiàn)的錯(cuò)誤對(duì)客戶(hù)有何影響。這不僅僅要求測(cè)試人員編寫(xiě)的報(bào)告要能夠吸引讀者,使和管理層的溝通清晰,還要能夠幫助設(shè)置錯(cuò)誤修復(fù)的優(yōu)先級(jí)別。
    精簡(jiǎn)Condense:在bug report的初稿完成后,測(cè)試人員應(yīng)該反復(fù)閱讀它,集中剔除那些沒(méi)有關(guān)系的步驟或詞語(yǔ)。隱含的或模糊的說(shuō)明和那些由于對(duì)沒(méi)有任何關(guān)系的細(xì)節(jié)或者那些在重現(xiàn)錯(cuò)誤過(guò)程中不需要的步驟而消磨報(bào)告歡迎程度的無(wú)窮嘮叨都不是bug report的目標(biāo)。
    消除歧義Disambiguate:測(cè)試人員在精簡(jiǎn)空話(huà)的同時(shí)或其之后隨即應(yīng)該再仔細(xì)檢查報(bào)告是否有會(huì)產(chǎn)生誤解的地方。測(cè)試人員應(yīng)該盡量避免使用模糊的,會(huì)產(chǎn)生歧義的和主觀(guān)的詞語(yǔ)。目標(biāo)是使用能夠表述事實(shí),清楚的,不會(huì)產(chǎn)生爭(zhēng)執(zhí)的詞語(yǔ)。
    中立Neutralize:如文中所述,作為壞消息的傳遞人,和善地提交消息是一個(gè)挑戰(zhàn)。如同所有的錯(cuò)誤總結(jié)一樣,獨(dú)立的bug report在措辭方面應(yīng)該保持公正。攻擊開(kāi)發(fā)人員,指責(zé)潛在的錯(cuò)誤,企圖詼諧或使用挖苦將引起開(kāi)發(fā)人員的憎惡,并且使注意力從“提高產(chǎn)品質(zhì)量”這個(gè)大的目標(biāo)上轉(zhuǎn)移開(kāi)了。謹(jǐn)慎的測(cè)試人員只用Bug report來(lái)描述事實(shí)。
    檢查Review:一旦測(cè)試人員感覺(jué)bug report是他能夠編寫(xiě)的版本,他應(yīng)該將報(bào)告再給一個(gè)或多個(gè)同行進(jìn)行檢查。他的同事們也應(yīng)該給出一些建議,為了澄清問(wèn)題不斷地提問(wèn),如果適當(dāng)?shù)脑?huà),甚至可以挑戰(zhàn)“錯(cuò)誤成災(zāi)”的結(jié)論。在允許的時(shí)間里,測(cè)試小組應(yīng)該盡可能提交的bug report。
    以上10條技巧可以幫助你和你的小組提交準(zhǔn)確簡(jiǎn)潔的,徹底校訂的,精心構(gòu)思的,高質(zhì)量的技術(shù)文檔。測(cè)試小組應(yīng)該集中編寫(xiě)bug report的任務(wù),測(cè)試組長(zhǎng)和經(jīng)理應(yīng)該讓測(cè)試組成員清楚地認(rèn)識(shí)到編寫(xiě)優(yōu)秀的bug report是一項(xiàng)首要的工作任務(wù)。衡量?jī)?yōu)秀的bug report的質(zhì)量指標(biāo)應(yīng)該包括如下:
    對(duì)管理層來(lái)說(shuō),是清晰明了的,特別是在概要這一級(jí);
    對(duì)于開(kāi)發(fā)部門(mén)是有用的,主要是給出能夠讓開(kāi)發(fā)人員高效地調(diào)試問(wèn)題的相關(guān)信息
    可以很快的將bug從“Opened”狀態(tài)轉(zhuǎn)變成“Closed”狀態(tài),減少為得到更多的信息從開(kāi)發(fā)人員打回的差的bug report并導(dǎo)致測(cè)試人員返工的時(shí)間。
    改進(jìn)bug報(bào)告的流程是需要花費(fèi)一些時(shí)間的,但是也給予了效果顯著的回報(bào)。首先,簡(jiǎn)單的流程改進(jìn)了測(cè)試小組和高層、平行管理層之間的溝通,增強(qiáng)小組的信任度,名望和鼓勵(lì)管理層給測(cè)試投資更多的資源。第二,平穩(wěn)地遞交報(bào)告給開(kāi)發(fā)人員促進(jìn)了測(cè)試和開(kāi)發(fā)人員之間積極的關(guān)系。第三,更短的bug生命周期是更加有效的,在時(shí)間上之前花費(fèi)在編寫(xiě)優(yōu)秀bug report上的時(shí)間和后期由于返工差的bug report花費(fèi)的時(shí)間相抵消。這些回報(bào)幫助開(kāi)發(fā)流程通過(guò)有效的溝通和高效率的流程獲得更好的產(chǎn)品質(zhì)量。