在測(cè)試過(guò)程中,除了版本本身功能的修改外,還存在環(huán)境的變化,比如移動(dòng)端會(huì)時(shí)不時(shí)的出來(lái)一個(gè)新的系統(tǒng)。由市場(chǎng)的使用率來(lái)看,一般人類都比較喜歡嘗鮮,同時(shí) 根據(jù)測(cè)試規(guī)范需要有一定的系統(tǒng)匹配率,所以測(cè)試人員對(duì)新的系統(tǒng)都會(huì)全面的進(jìn)行版本測(cè)試。因?yàn)橛行ь惖膬?nèi)容比較多,而項(xiàng)目時(shí)間又有限,一般不同的人會(huì)根據(jù)自 己的習(xí)慣進(jìn)行優(yōu)先測(cè)試,而個(gè)人喜歡把一些其它系統(tǒng)不支持軟件還是能正常使用的內(nèi)容在新系統(tǒng)中跑一下,看是否會(huì)出現(xiàn)異常。不巧,在一次android新出來(lái) 的4.4系統(tǒng)中,為了驗(yàn)證音樂(lè)識(shí)別功能,點(diǎn)擊添加一首無(wú)法匹配的本地歌曲到歌單,提示程序崩潰。
問(wèn)題出現(xiàn)了,而且是大問(wèn)題,如果說(shuō)書(shū)的話,本人一定會(huì)吊足各位看官的胃口,對(duì)你們說(shuō)欲知問(wèn)題緣由,請(qǐng)聽(tīng)下回分解。NO,NO,NO,我們不來(lái)這套,我們直 接切入主題--為啥會(huì)崩潰?拿著手機(jī),保存著崩潰現(xiàn)場(chǎng)找到對(duì)應(yīng)的研發(fā)人員進(jìn)行問(wèn)題分解:先看是否測(cè)試資源有問(wèn)題?歌曲正常。再看功能代碼是否有異常?邏輯 等都正常。那是什么緣由造了這個(gè)bug?后來(lái)對(duì)比發(fā)現(xiàn)被測(cè)軟件在其它系統(tǒng)做同類操作都正常,android4.4系統(tǒng)出問(wèn)題,難道是 android4.4系統(tǒng)跟其它系統(tǒng)有區(qū)別?經(jīng)過(guò)一步步的分解,發(fā)現(xiàn)在android新虛擬機(jī)art下,NDK方法 FindClass 不能再使用通用的類型簽名 java/lang/Object作為參數(shù)獲取 java類別,這導(dǎo)致之前NDK編譯的so中部分FindClass方法失效,導(dǎo)致軟件異常。
原因找到了,那么bug的解決方案容易多了,方法是將程序中所有使用通用的類型簽名 java/lang/Object作為參數(shù)的FindClass方法的參數(shù) 修改為正確的類型簽名。
經(jīng)過(guò)這個(gè)bug的發(fā)現(xiàn)-解決,讓我們不得不深思,像類似這種開(kāi)源軟件的使用,應(yīng)該采取怎么樣的策略呢?是否需要考慮風(fēng)險(xiǎn)性?應(yīng)該如何采取策略以保證確認(rèn)對(duì)市場(chǎng)上新系統(tǒng)的及時(shí)跟進(jìn)?