qileilove

          blog已經(jīng)轉(zhuǎn)移至github,大家請(qǐng)?jiān)L問(wèn) http://qaseven.github.io/

          一枚小Bug的獨(dú)白(挺有意思的~)

          我是一枚潛藏在數(shù)據(jù)庫(kù)引擎深處的Bug,躲在一個(gè)黑暗的角落很久了,歷經(jīng)多個(gè)版本、N輪回歸測(cè)試的風(fēng)雨洗禮,我存在,我驕傲。還記得那天,我懷著激動(dòng)而忐忑的心情等待一位QA新人把我發(fā)布出去……

            產(chǎn)品發(fā)布在即,一位頗有經(jīng)驗(yàn)的QA在無(wú)意間寫(xiě)了一條短小精悍的用例讓QA新人來(lái)執(zhí)行一遍,就是這條不起眼的用例,使我原形畢露。這個(gè)用例看起來(lái)很簡(jiǎn)單:就是向數(shù)據(jù)庫(kù)里插入一條null記錄(還記得我們的Mr Null嗎?),一條字符串記錄;再一條null記錄,一條同樣的字符串記錄……如此反復(fù),來(lái)個(gè)5000次,然后啟用創(chuàng)建數(shù)據(jù)字典的功能,將這若干條看似規(guī)律的記錄進(jìn)行壓縮。好歹咱也算經(jīng)歷過(guò)風(fēng)風(fēng)雨雨的,每天的持續(xù)回歸測(cè)試也沒(méi)有拿我怎么樣,可就在執(zhí)行這條小用例時(shí),神奇的事情發(fā)生了------數(shù)據(jù)庫(kù)發(fā)生了崩潰。

            原因分析:

            這個(gè)難題先后困擾過(guò)好幾個(gè)人,直到一位研究“炸彈”的開(kāi)發(fā)GG,他對(duì)我進(jìn)行了好好的剖析,終于發(fā)現(xiàn)了問(wèn)題的緣由。具體要從數(shù)據(jù)庫(kù)引擎的壓縮機(jī)制開(kāi)始講起:

            ● 記錄壓縮:是基于數(shù)據(jù)字典的壓縮。所謂數(shù)據(jù)字典,就是數(shù)據(jù)庫(kù)表所有記錄中出現(xiàn)頻率最大的字符串集合。壓縮時(shí),將記錄中與數(shù)據(jù)字典相同的字符串進(jìn)行替換,替換為數(shù)據(jù)字典的下標(biāo)。由于數(shù)據(jù)字典的下標(biāo)一定會(huì)遠(yuǎn)遠(yuǎn)小于字典所代表的字符串,因此就達(dá)到了記錄壓縮的效果。

            ● 實(shí)現(xiàn)流程:該引擎的數(shù)據(jù)字典在采集時(shí),是將所有的記錄拼成一條長(zhǎng)長(zhǎng)的字符串流,然后從字符串流中采集出現(xiàn)頻率最高的子串,作為數(shù)據(jù)字典,而拼接記錄時(shí)并未在記錄間添加分隔符。這種一行null記錄、一行字符串記錄的方式,會(huì)使數(shù)據(jù)庫(kù)引擎采集的數(shù)據(jù)字典的長(zhǎng)度超過(guò)記錄的最大長(zhǎng)度,導(dǎo)致系統(tǒng)內(nèi)部驗(yàn)證報(bào)錯(cuò)。

            解決辦法:

            知道了問(wèn)題的本質(zhì),解決起來(lái)就很方便了,在將記錄拼接為長(zhǎng)字符串流時(shí),在每個(gè)記錄的拼接處添加分隔符。不能跨越分隔符采集數(shù)據(jù)字典,從而保證了數(shù)據(jù)字典的長(zhǎng)度一定小于等于記錄的長(zhǎng)度限制,問(wèn)題解決!

            經(jīng)驗(yàn)總結(jié):

            ● 注意邊界問(wèn)題。問(wèn)題往往出現(xiàn)在邊界情況下,比如最大值/最小值/0值。如果在代碼中加入一些邊界斷言,可以幫助提早發(fā)現(xiàn)問(wèn)題。

            ● 注意“null”的使用。不論開(kāi)發(fā)還是測(cè)試,注意“null”的使用都可以幫助我們少犯一些錯(cuò)誤,或者多發(fā)現(xiàn)一些問(wèn)題。

            ● “殺蟲(chóng)劑困境”的思考。再?lài)?yán)密的單一性測(cè)試也不可能發(fā)現(xiàn)100%的Bug。將不同的測(cè)試思路和方法相結(jié)合,采用探索式的測(cè)試思維或許能幫助發(fā)現(xiàn)更多潛在問(wèn)題。

            說(shuō)了這么多,我得閉嘴了,不低調(diào)的Bug是不厚道的,最后把一句很喜歡的佛語(yǔ)送給大家:“你見(jiàn),或者不見(jiàn)我,我就在那里”,但是我們始終敵不過(guò)開(kāi)發(fā)和測(cè)試的協(xié)同努力。

          posted on 2013-04-03 09:57 順其自然EVO 閱讀(179) 評(píng)論(0)  編輯  收藏 所屬分類(lèi): 測(cè)試學(xué)習(xí)專(zhuān)欄

          <2013年4月>
          31123456
          78910111213
          14151617181920
          21222324252627
          2829301234
          567891011

          導(dǎo)航

          統(tǒng)計(jì)

          常用鏈接

          留言簿(55)

          隨筆分類(lèi)

          隨筆檔案

          文章分類(lèi)

          文章檔案

          搜索

          最新評(píng)論

          閱讀排行榜

          評(píng)論排行榜

          主站蜘蛛池模板: 科尔| 青岛市| 宜君县| 洛隆县| 宁河县| 高碑店市| 威宁| 来凤县| 平罗县| 新密市| 同德县| 繁峙县| 红安县| 游戏| 密山市| 县级市| 隆昌县| 乌恰县| 五原县| 溧水县| 罗定市| 涟源市| 揭东县| 咸丰县| 新巴尔虎右旗| 察雅县| 荣昌县| 团风县| 肃南| 宣威市| 武城县| 平陆县| 金昌市| 新密市| 云南省| 双鸭山市| 泽库县| 白城市| 云安县| 冕宁县| 塘沽区|