天天看點

軟體測試思考系列[6]:測試環境和配置管理自動化

不同角色之間的劃分往往有助于在角色的沖突中将問題暴露,實作透明,最終改進和保證品質。任何的軟體開發團隊都離不開兩個基本角色:開發與測試。 你可以沒有項目經理,可以沒有架構師,也可以沒有設計師;但是不能沒有開發,否則沒有人可以幫你實作産品;也不能沒有測試,否則沒有人可以決定你的産品是 否能夠傳遞。這就好像你往杯子裡面倒水必須要用眼睛看着,沒有眼睛回報的資訊,你永遠不知道何時該停下來,也不知道停在那裡;我們不希望水太少,更不希望 水溢出來。眼睛與手的回報循環就是我們實作倒水這一動作高品質的必要系統,而開發和測試的有效循環就是我們實作高品質軟體的必須環節。

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

  測試:這個軟體需要的環境太複雜,沒有辦法為每種情況都建立測試環境.

  測試:我沒有辦法保證測試的一緻性,因為環境在不停地變化,恢複到原來的狀态很麻煩.

  開發:你是怎麼測出這個bug的,我怎麼沒法重制?測試:我忘記步驟了.

  其實這些問題都和測試人員本身的定位有關系,測試人員的首要目标是發現軟體中的問題,要做到這一點他們往往專注于軟體的反應而忽視了造成這種響應的原因,如:硬體軟體環境,系統配置情況,操作一緻性等等;測試用例失敗有幾種原因:

  功能缺陷bug;

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

  測試環境有問題;

  而這些正是開發人員修複bug最需要的内容。但是測試人員不關心,或者沒有更多的精力來關心這些内容,造成了非常多的“不可重制”的bug的出現。

  我們可以通過持續內建以及對代碼進行版本管理控制來定位變更和導緻功能缺陷的原因,同樣的,我們也可以對測試環境的變更進行控制和版本管理。之前提到過持續內建要求對一切進行版本管理,其中也包括測試環境。

  初看上去,測試環境的管理是一個非常複雜的問題,之前是否遇到過下面一類問題?

  “要測一個什麼東西,需要什麼軟體,然後手動安裝一遍,結果發現另外一個機器上其實已經有這個軟體了。” ——測試環境的複用和共享問題。

   “有一個測試用例失敗了,可是之前測試的時候一直通過的,開發人員在開發環境下測試也沒有問題,測試人員費了九牛二虎之力,借助開發人員的調試幫助,結 果發現是測試環境中的一個配置參數改變了。 此時,另外一個測試人員冒了一句,我之前測試另外一個問題的時候将這個參數改掉了。” ——測試人員花了大量時間确定環境變更,測試環境的變更控制問題。

  “有一個機器,你也在裡面裝個東西,我也在裡面裝個東西,結果這個機 器的環境越來越亂,桌面上亂起八糟,最後誰也不記得機器裡面的一些檔案有什麼用處了,當初是因為什麼原因使用的,又不敢删除,怕其他人有用,可是又不知道 會是誰。” 測試環境的管理和記錄問題,好一些的會漸漸使用一些文檔進行記錄并共享,但是還是經常出現問題,畢竟文檔也會過期。

  “一個測試mm突然大喊, 誰把我的模闆和資料删除啦,給我出來!!! 四周鴉雀無聲。我小聲的問一句,你上傳到svn上了嗎,上次不是說過一切都要版本控制嗎?” 測試環境和資料的備份和删除,廣義上說這個也屬于變更。

   “我這裡需要再安裝針對ubuntu和suse作業系統的測試,并且需要32位和64位都有,而且還要設定一大堆配置。可是現有的5台機器都安裝滿了, 總不能重裝來重裝去的吧,每次重裝都要了我的老命了...” 測試硬體資源的利用,和環境管理的效率問題。自動配置技術和利用虛拟化技術解決,測試環境資料化,配置化,然後才能版本控制和管理。

  開發人員:“我在自己機器上測試了沒問題啊”, 測試人員:“可我在測試環境下面就是有問題啊。” 統一的測試環境問題。

  以上的這些問題,都指向了一個關鍵點,測試環境的管理,分而細之,又包括幾個重要的因素:變更、自動化、資料化、虛拟化、共享。

  虛拟化技術

  虛拟化技術可以幫助将測試環境資料化,自動化,并借此達到重複利用的目的。虛拟化技術有很多,比較優秀的有vmware和virtual box。比如,很多測試環境是寄生在作業系統中的,我們可以将這些作業系統做成作業系統基線,平時不需要測試時可以不開着,要用的時候再開。這些作業系統基線可以進行版本控制,因為檔案比較大,用svn之類的管理可能會遇到一些問題,可以針對性設計一些大檔案版本控制軟體(比如:結合svn和ftp的優點)。

  配置管理自動化

   先後研究了幾種配置管理的工具,chef, cfengine, puppet,最後用的比較多的是chef。chef比較好的一點是提供opensouce chef server,可以自己搭建伺服器,也是這幾個裡面最先搭成功的,算是比較容易上手吧。就像一個大廚(chef)使用刀(knife)實驗各種不同的菜單 (recipes),制成各種食譜(cookbook)一樣,一個配置管理工程師就是用它來制作不同的測試環境。

繼續閱讀