發(fā)布時(shí)間:2017-05-12 15:38 | 標(biāo)簽:
Unite 2017 Shanghai
微信掃一掃:分享
微信里點(diǎn)“發(fā)現(xiàn)”,掃一下
二維碼便可將本文分享至朋友圈
Unite 2017 Shanghai將于5月11日-13日在上?!?guó)際會(huì)議中心舉辦,國(guó)內(nèi)技術(shù)專(zhuān)場(chǎng)演講中Unity開(kāi)發(fā)工程師蔡元星分享《A Bug’s Life》主題,介紹Unity是如何處理用戶(hù)提交Bug到解決Bug,到發(fā)布Bug整個(gè)完整過(guò)程。
以下為VR陀螺整理的演講實(shí)錄:(略有刪減)
蔡元星:
我是Unity開(kāi)發(fā)工程師,我今天給大家講的題目叫做A Bug’s Life,為什么叫這個(gè)名字呢?我想借這個(gè)機(jī)會(huì)給大家講一下Unity是如何處理用戶(hù)提交Bug到解決Bug,到發(fā)布Bug整個(gè)完整過(guò)程。
Unity從5.3版本之后投入了大量資源在穩(wěn)定性上,我們希望和用戶(hù)一起配合,把產(chǎn)品質(zhì)量做得更好,所以其實(shí)我們是需要大家在Bug上面的反饋。
我會(huì)教大家如何報(bào)告bug,Unity是如何處理bug報(bào)告以及修復(fù)bug的,然后用戶(hù)如何追蹤bug修復(fù)的進(jìn)度,以及最后我們Unity是如何發(fā)布bug fix的。
首先,用戶(hù)如何向Unity報(bào)告bug。
我們有一個(gè)叫做Unity Bug Reporter的工具,從 Help 到Report a Bug啟動(dòng),編輯器崩潰它會(huì)自動(dòng)啟動(dòng)。在報(bào)一個(gè)Bug的操作界面,帶星號(hào)的選項(xiàng)都是要填的。
What is the problem related to,Crash bug - Unity編輯器或者發(fā)布的游戲崩潰,A problem with the Editor - 編輯器使用中的問(wèn)題,A problem with the Player - 發(fā)布游戲運(yùn)行中的問(wèn)題。
第二個(gè)是This is the first time - 當(dāng)你不知道如何重現(xiàn)問(wèn)題時(shí)選擇,Sometimes but not always - 偶爾發(fā)生或者隨機(jī)發(fā)生,Always - 100%重現(xiàn)。
另外你需要填你的email地址,因?yàn)槲覀儠?huì)通過(guò)郵件聯(lián)系你告知bug處理的進(jìn)度,或者詢(xún)問(wèn)有關(guān)這個(gè)bug的更多信息。
接下來(lái)是一個(gè)Bug的描述,要用英語(yǔ)寫(xiě),第一個(gè)是說(shuō)你覺(jué)得你的Bug你認(rèn)為的錯(cuò)誤行為是什么,以及什么時(shí)候它發(fā)生。
這里有一個(gè)例子,這個(gè)是數(shù)據(jù)庫(kù)里面已經(jīng)有的一個(gè)Bug,叫做Editor crashes when adding text component to game object in play mode via script,自動(dòng)建議可能相關(guān)的問(wèn)題。
當(dāng)你輸入的時(shí)候,無(wú)論是論壇還是Bug追蹤工具已經(jīng)有的Bug和你輸入的關(guān)鍵字匹配的話相關(guān)會(huì)列在這里。
接下來(lái)最重要的是你這個(gè)Bug呈現(xiàn)的步驟。
你要盡量寫(xiě)的詳細(xì),每一步如何最終觸發(fā)這個(gè)Bug,你要寫(xiě)清楚你期待的它的正確行為是什么,它實(shí)際錯(cuò)誤的行為是什么。
另外一個(gè)很重要的一步是,我們需要一個(gè)你可以重現(xiàn)Bug的項(xiàng)目,如果你的bug是和項(xiàng)目中具體的資源或者腳本相關(guān)的,所以需要大家的項(xiàng)目文件,這個(gè)僅需包含重現(xiàn)bug所必須的文件,不要包含Library文件夾。
另外我們保證是對(duì)用戶(hù)上傳的文件絕對(duì)保密的,所以不會(huì)用作重現(xiàn)bug之外的其他用途,所以大家這一點(diǎn)可以放心,除了項(xiàng)目文件本身,你還可以上傳一些描述重現(xiàn)步驟的視頻或者視頻、截圖,最后點(diǎn)擊Send。
最后是上傳重現(xiàn)項(xiàng)目的步驟,如果大家的項(xiàng)目比較大的話,傳起來(lái)可能非常慢,我們官方有兩個(gè)很小的工具幫助大家精簡(jiǎn)項(xiàng)目。
第一個(gè)叫做Repro Project Wizard,是你導(dǎo)入package后選擇Window->Repro Project Wizard,原理很簡(jiǎn)單,就是把發(fā)生bug的場(chǎng)景加入到Assets to Copy中,場(chǎng)景中引用的其他資源會(huì)自動(dòng)添加,加入其他運(yùn)行該場(chǎng)景所必須的文件,紋理尺寸可以選擇縮小紋理尺寸,最后按Create Project會(huì)在指定路徑創(chuàng)建出新的一個(gè)文件。
另一個(gè)Project Stripping Tool比較簡(jiǎn)單,有選擇的把特定類(lèi)型的資源從項(xiàng)目中刪除,操作可撤銷(xiāo),導(dǎo)入package后在任意文件或文件夾上右鍵單擊。
下面告訴大家怎樣才是優(yōu)質(zhì)的Bug報(bào)告。
可重現(xiàn)性是最重要的,如果能重現(xiàn),我們敢保證有99%的把握可以修復(fù)bug,如果上傳項(xiàng)目文件的話對(duì)我們修復(fù)Bug有非常大的幫助,你們可以提供更好的相關(guān)信息幫助我們更好的修復(fù)Bug。
另外必須要用英語(yǔ),因?yàn)槲覀儧](méi)有人力處理非英語(yǔ)的報(bào)告。
提交Bug以后, Unity如何處理bug報(bào)告以及修復(fù)bug。
這里面提到一個(gè)概念是incident,用戶(hù)每發(fā)送一個(gè)bug報(bào)告,我們的系統(tǒng)中就會(huì)自動(dòng)創(chuàng)建一個(gè)對(duì)應(yīng)的incident。
Unity工程師只關(guān)注bug,你的incident成功轉(zhuǎn)為bug之后會(huì)收到郵件通知,我們盡力處理所有的incident,但數(shù)量太多時(shí)做不到,所以用一個(gè)評(píng)級(jí)系統(tǒng)來(lái)確定優(yōu)先級(jí)。
它是從0排到5,0就是你的Bug報(bào)告寫(xiě)的不清楚,沒(méi)有重現(xiàn)步驟,或者垃圾郵件的話就是0;5就是你有完整的重現(xiàn)項(xiàng)目,寫(xiě)了非常詳細(xì)明確的描述這是5,評(píng)級(jí)越高就越有可能被處理并轉(zhuǎn)化為bug,企業(yè)級(jí)支持用戶(hù)的incident有最高優(yōu)先級(jí)。
接下來(lái),我們內(nèi)部工程師到底怎么修Bug,一個(gè)incident轉(zhuǎn)為bug時(shí),會(huì)根據(jù)影響的模塊分配給相應(yīng)的工程師團(tuán)隊(duì),我們會(huì)計(jì)算一個(gè)叫做“用戶(hù)痛苦”指數(shù)決定優(yōu)先級(jí),依據(jù)是這個(gè)Bug的嚴(yán)重性,潛在影響的用戶(hù)數(shù)量,影響的平臺(tái),還有它是否之前的版本是正常的現(xiàn)在壞了,Issue Tracker上面可以投票,投票數(shù)越多影響用戶(hù)越多,還有是否來(lái)自企業(yè)級(jí)支持用戶(hù)。
報(bào)了Bug之后要怎么追蹤我們處理的進(jìn)度。
首先是會(huì)有郵件的溝通,你提交bug后會(huì)收到確認(rèn)郵件,告知bug ID。
另外bug被成功重現(xiàn)之后,就是incident轉(zhuǎn)成 bug之后,bug被resolve,你可以回復(fù)任何一封通知郵件,附加更多信息,我們內(nèi)部的QA和工程師收到這封郵件,可以與Unity QA或工程師交流,也可以通過(guò)這種形式給你的Bug附加更多的信息。
下面來(lái)介紹我們Issue Tracker,當(dāng)你的incident被轉(zhuǎn)為bug,相關(guān)信息有可能會(huì)公布在 https://issuetracker.unity3d.com這個(gè)網(wǎng)站上面。
這個(gè)其實(shí)是相當(dāng)于我們一個(gè)對(duì)外公開(kāi)的Bug數(shù)據(jù)庫(kù),所有QA重現(xiàn)的Bug大家在這里可以查到。
另外,如果你在你的Bug報(bào)告里面提到你自己的郵件地址、公司名稱(chēng)、項(xiàng)目信息,我們的QA會(huì)人工把這些信息過(guò)濾掉不會(huì)公開(kāi),另外你上傳的項(xiàng)目文件也不會(huì)公開(kāi),你收到搜索確認(rèn)郵件里的bug ID,另外有投票的功能,每個(gè)有10票,如果你看到哪一個(gè)Bug是你遇到的,你想提高它修復(fù)的速度或者機(jī)率的話可以給它投票,所以一個(gè)Bug在這里面的票數(shù)越多,它的優(yōu)先級(jí)越高,就越有可能被修復(fù),大家不報(bào)Bug,在這里面看到你的問(wèn)題,也可以通過(guò)投票的方式來(lái)加快它被修復(fù)的速度。
接下來(lái)就是Issue Tracker具體Bug打開(kāi)的一個(gè)界面,可以看到這20個(gè)Votes是說(shuō)20個(gè)不同用戶(hù)遇到相同的問(wèn)題給它的投票,這個(gè)投票越高優(yōu)先級(jí)越高,還可以看到它在哪一個(gè)版本發(fā)現(xiàn)的,還有這個(gè)ID就是剛才說(shuō)的Bug ID,最后Regression看一下是不是在5.6之前的版本是正常的,在5.6壞了,這個(gè)也可以。
另外,Issue Tracker里面大家看到上面黑的是這個(gè)Bug目前的狀態(tài),用戶(hù)報(bào)告的每一個(gè)Bug其實(shí)都是有7個(gè)狀態(tài),Active是說(shuō)這個(gè)Bug正在調(diào)查或修復(fù)中,新報(bào)的Bug默認(rèn)都是這個(gè)狀態(tài)。
另外六個(gè)就是你的Bug被解決之后,會(huì)被解決成以下六種不同的狀態(tài)。
Fixed就是確實(shí)是一個(gè)Bug,已經(jīng)修好了
Postponed是說(shuō)確定是一個(gè)問(wèn)題但目前不打算修復(fù),可以預(yù)見(jiàn)的未來(lái)之內(nèi)不打算修復(fù);
Duplicate就是你這個(gè)Bug和另外一個(gè)bug是相同的問(wèn)題,為了減少大家處理的時(shí)間,把相同的Bug直接解決Duplicate;
Not Reproducible是Unity的工程師我們嘗試修復(fù)時(shí)此bug已無(wú)法再重現(xiàn)。
Won’ t Fix這個(gè)比較少見(jiàn)但是也是會(huì)出現(xiàn),由于某些合理的原因我們決定不修這個(gè)bug。
By Design不是bug。
如果bug resolve的結(jié)果不是Fixed或Duplicate,我們會(huì)郵件告訴你具體的原因,為什么結(jié)果是這樣的。
最后說(shuō)一下我們Unity如何發(fā)布Bug修復(fù)。
我們有三種版本,所謂的重要版本比如說(shuō)5.6.0大的重要版本,這種是包含新功能,以及對(duì)已有功能改進(jìn)以及對(duì)bug修復(fù),三個(gè)月一次,另外我們有補(bǔ)丁版本,需要到 https://unity3d.com/unity/qa/patch-releases網(wǎng)站直接下載安裝文件。
還有一種版本就是所謂的公開(kāi)版本,就是每四個(gè)補(bǔ)丁版本中所有的bug修復(fù),五個(gè)星期一次,這種版本在編輯器中Check for Updates會(huì)通知。
另外如果大家報(bào)的Bug最終是修復(fù)狀態(tài),肯定想到底是在哪一個(gè)具體版本里面修復(fù)的,一般情況下Unity的工程師修復(fù)的bug會(huì)發(fā)布在下一個(gè)重要版本中,這是一般的Bug;但是我們?nèi)绻J(rèn)為這個(gè)Bug比較嚴(yán)重,我們會(huì)選擇后向移植到之前的版本中。
稍微總結(jié)一下,我們說(shuō)到要使用Unity Bug Reporter工具來(lái)報(bào)告bug,我是我們向Unity提交Bug最主要的方式;還有使用我們提供的工具精簡(jiǎn)你的項(xiàng)目并發(fā)給我們,幫助我們重現(xiàn)bug;另外你提供越多的信息,你的incident就越有可能被重現(xiàn)被轉(zhuǎn)為真正的bug,最后被真正的修復(fù);
另外,我們內(nèi)部根據(jù)bug帶給用戶(hù)的痛苦來(lái)決定優(yōu)先級(jí);還有就是我們Bug修復(fù)的進(jìn)度,如果是你自己報(bào)的Bug會(huì)通過(guò)email跟你溝通;也可以到Issue Tracker鼓勵(lì)大家多用一些,歷史上所有的Bug在里面都有記錄,所以你遇到真正的Bug,其實(shí)有非常大的可能是在這里面查到的;另外我最后講到我們發(fā)布補(bǔ)丁版本的方式,如果有非常緊急的Bug,可以到那個(gè)網(wǎng)站去下載最新的補(bǔ)丁版本。
謝謝大家!
投稿/爆料:tougao@youxituoluo.com
稿件/商務(wù)合作: 六六(微信 13138755620)
加入行業(yè)交流群:六六(微信 13138755620)