qileilove

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

          軟件測試思考系列[6]:測試環(huán)境和配置管理自動化

            不同角色之間的劃分往往有助于在角色的沖突中將問題暴露,實(shí)現(xiàn)透明,最終改進(jìn)和保證質(zhì)量。任何的軟件開發(fā)團(tuán)隊(duì)都離不開兩個(gè)基本角色:開發(fā)與測試。 你可以沒有項(xiàng)目經(jīng)理,可以沒有架構(gòu)師,也可以沒有設(shè)計(jì)師;但是不能沒有開發(fā),否則沒有人可以幫你實(shí)現(xiàn)產(chǎn)品;也不能沒有測試,否則沒有人可以決定你的產(chǎn)品是 否能夠交付。這就好像你往杯子里面倒水必須要用眼睛看著,沒有眼睛反饋的信息,你永遠(yuǎn)不知道何時(shí)該停下來,也不知道停在那里;我們不希望水太少,更不希望 水溢出來。眼睛與手的反饋循環(huán)就是我們實(shí)現(xiàn)倒水這一動作高質(zhì)量的必要系統(tǒng),而開發(fā)和測試的有效循環(huán)就是我們實(shí)現(xiàn)高質(zhì)量軟件的必須環(huán)節(jié)。

            但是開發(fā)和測試本身的角色的局限性造成了他們往往沒有辦法有效地形成循環(huán),比如我們經(jīng)常會聽到這樣的抱怨:

            測試:這個(gè)軟件需要的環(huán)境太復(fù)雜,沒有辦法為每種情況都創(chuàng)建測試環(huán)境.

            測試:我沒有辦法保證測試的一致性,因?yàn)榄h(huán)境在不停地變化,恢復(fù)到原來的狀態(tài)很麻煩.

            開發(fā):你是怎么測出這個(gè)Bug的,我怎么沒法重現(xiàn)?測試:我忘記步驟了.

            其實(shí)這些問題都和測試人員本身的定位有關(guān)系,測試人員的首要目標(biāo)是發(fā)現(xiàn)軟件中的問題,要做到這一點(diǎn)他們往往專注于軟件的反應(yīng)而忽視了造成這種響應(yīng)的原因,如:硬件軟件環(huán)境,系統(tǒng)配置情況,操作一致性等等;測試用例失敗有幾種原因:

            功能缺陷BUG;

            測試用例本身寫的有問題(ST或者ET腳本問題);

            測試環(huán)境有問題;

            而這些正是開發(fā)人員修復(fù)Bug最需要的內(nèi)容。但是測試人員不關(guān)心,或者沒有更多的精力來關(guān)心這些內(nèi)容,造成了非常多的“不可重現(xiàn)”的Bug的出現(xiàn)。

            我們可以通過持續(xù)集成以及對代碼進(jìn)行版本管理控制來定位變更和導(dǎo)致功能缺陷的原因,同樣的,我們也可以對測試環(huán)境的變更進(jìn)行控制和版本管理。之前提到過持續(xù)集成要求對一切進(jìn)行版本管理,其中也包括測試環(huán)境。

            初看上去,測試環(huán)境的管理是一個(gè)非常復(fù)雜的問題,之前是否遇到過下面一類問題?

            “要測一個(gè)什么東西,需要什么軟件,然后手動安裝一遍,結(jié)果發(fā)現(xiàn)另外一個(gè)機(jī)器上其實(shí)已經(jīng)有這個(gè)軟件了。” ——測試環(huán)境的復(fù)用和共享問題。

             “有一個(gè)測試用例失敗了,可是之前測試的時(shí)候一直通過的,開發(fā)人員在開發(fā)環(huán)境下測試也沒有問題,測試人員費(fèi)了九牛二虎之力,借助開發(fā)人員的調(diào)試幫助,結(jié) 果發(fā)現(xiàn)是測試環(huán)境中的一個(gè)配置參數(shù)改變了。 此時(shí),另外一個(gè)測試人員冒了一句,我之前測試另外一個(gè)問題的時(shí)候?qū)⑦@個(gè)參數(shù)改掉了。” ——測試人員花了大量時(shí)間確定環(huán)境變更,測試環(huán)境的變更控制問題。

            “有一個(gè)機(jī)器,你也在里面裝個(gè)東西,我也在里面裝個(gè)東西,結(jié)果這個(gè)機(jī) 器的環(huán)境越來越亂,桌面上亂起八糟,最后誰也不記得機(jī)器里面的一些文件有什么用處了,當(dāng)初是因?yàn)槭裁丛蚴褂玫模植桓覄h除,怕其他人有用,可是又不知道 會是誰。” 測試環(huán)境的管理和記錄問題,好一些的會漸漸使用一些文檔進(jìn)行記錄并共享,但是還是經(jīng)常出現(xiàn)問題,畢竟文檔也會過期。

            “一個(gè)測試MM突然大喊, 誰把我的模板和數(shù)據(jù)刪除啦,給我出來!!! 四周鴉雀無聲。我小聲的問一句,你上傳到svn上了嗎,上次不是說過一切都要版本控制嗎?” 測試環(huán)境和數(shù)據(jù)的備份和刪除,廣義上說這個(gè)也屬于變更。

             “我這里需要再安裝針對ubuntu和suse操作系統(tǒng)的測試,并且需要32位和64位都有,而且還要設(shè)置一大堆配置。可是現(xiàn)有的5臺機(jī)器都安裝滿了, 總不能重裝來重裝去的吧,每次重裝都要了我的老命了...” 測試硬件資源的利用,和環(huán)境管理的效率問題。自動配置技術(shù)和利用虛擬化技術(shù)解決,測試環(huán)境數(shù)據(jù)化,配置化,然后才能版本控制和管理。

            開發(fā)人員:“我在自己機(jī)器上測試了沒問題啊”, 測試人員:“可我在測試環(huán)境下面就是有問題啊。” 統(tǒng)一的測試環(huán)境問題。

            以上的這些問題,都指向了一個(gè)關(guān)鍵點(diǎn),測試環(huán)境的管理,分而細(xì)之,又包括幾個(gè)重要的因素:變更、自動化、數(shù)據(jù)化、虛擬化、共享。

            虛擬化技術(shù)

            虛擬化技術(shù)可以幫助將測試環(huán)境數(shù)據(jù)化,自動化,并借此達(dá)到重復(fù)利用的目的。虛擬化技術(shù)有很多,比較優(yōu)秀的有VMWare和Virtual Box。比如,很多測試環(huán)境是寄生在操作系統(tǒng)中的,我們可以將這些操作系統(tǒng)做成操作系統(tǒng)基線,平時(shí)不需要測試時(shí)可以不開著,要用的時(shí)候再開。這些操作系統(tǒng)基線可以進(jìn)行版本控制,因?yàn)槲募容^大,用svn之類的管理可能會遇到一些問題,可以針對性設(shè)計(jì)一些大文件版本控制軟件(比如:結(jié)合SVN和FTP的優(yōu)點(diǎn))。

            配置管理自動化

             先后研究了幾種配置管理的工具,Chef, CfEngine, puppet,最后用的比較多的是Chef。Chef比較好的一點(diǎn)是提供OpenSouce Chef Server,可以自己搭建服務(wù)器,也是這幾個(gè)里面最先搭成功的,算是比較容易上手吧。就像一個(gè)大廚(Chef)使用刀(Knife)實(shí)驗(yàn)各種不同的菜單 (Recipes),制成各種食譜(CookBook)一樣,一個(gè)配置管理工程師就是用它來制作不同的測試環(huán)境。

          posted on 2012-04-28 12:58 順其自然EVO 閱讀(210) 評論(0)  編輯  收藏


          只有注冊用戶登錄后才能發(fā)表評論。


          網(wǎng)站導(dǎo)航:
           
          <2012年4月>
          25262728293031
          1234567
          891011121314
          15161718192021
          22232425262728
          293012345

          導(dǎo)航

          統(tǒng)計(jì)

          常用鏈接

          留言簿(55)

          隨筆分類

          隨筆檔案

          文章分類

          文章檔案

          搜索

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 唐海县| 兴隆县| 宜丰县| 临夏市| 花莲市| 百色市| 福泉市| 阿合奇县| 桐庐县| 孝昌县| 门源| 革吉县| 永年县| 固原市| 洪雅县| 卢龙县| 延长县| 南川市| 临澧县| 灯塔市| 宁夏| 梁山县| 铜山县| 册亨县| 锦州市| 甘孜县| 临桂县| 霍州市| 扎囊县| 新沂市| 杂多县| 天镇县| 齐河县| 永仁县| 新宾| 杭锦后旗| 兴城市| 松阳县| 苏尼特右旗| 永兴县| 商城县|