標題?? 游戲測試過程???? cwj007 [原作]?
關鍵字?? 游戲測試過程
出處???
游戲測試過程
游戲測試起因
?近兩年,IT業一直經歷著“寒冬”,但是游戲軟件業卻呈現出了勃勃生機。網絡游戲僅在中國游戲市場出現不過兩年,到今年1月,正式投入商業運營的游戲數目已超過100款,但眾所周知,都是國外的(主要是韓國的游戲)統治著國內大部分的市場,國內游戲軟件想要突圍而出,主要從二個方面,一是可玩性,由于中國有上下五千年的傳統文化,博大精深,是我們得天獨厚的優勢,二是游戲的質量,游戲測試作為游戲開發中質量保證的最重要的環節,在游戲設計與開發的過程中發揮著越來越重要的作用。
游戲測試與軟件測試的差異
?游戲測試作為軟件測試的一部分,它具備了軟件測試所有的一切共同的特性:
?測試的目的是發現軟件中存在的缺陷。
?測試都是需要測試人員按照產品行為描述來實施。產品行為描述可以是書面的規格說明書,需求文檔,產品文件,或是用戶手冊,源代碼,或是工作的可執行程序。
?每一種測試都需要產品運行于真實的或是模擬環境之下。
?每一種測試都要求以系統方法展示產品功能,以證明測試結果是否有效,以及發現其中出錯的原因,從而讓程序人員進行改進。
總而言之,測試就是發現問題并進行改進,從而提升軟件產品的質量。游戲測試也具備了以上的所有特性,不過由于游戲的特殊性,所以游戲測試則主要分為兩部分組成,一是傳統的軟件測試,二游戲本身的測試,由于游戲特別是網絡游戲,它相當于網上的虛擬世界,是人類社會的另一種方式的體現,所以也包含了人類社會的一部分特性,同時它又是游戲所以還涉及到娛樂性,可玩性等獨有特性,所以測試的面相當的廣。 我們稱之為游戲世界測試,主要有以下幾個特性:
?游戲情節的測試,主要指游戲世界中的任務系統的組成,有人也稱為游戲世界的事件驅動,我喜歡稱為游戲情感世界的測試。
?游戲世界的平衡測試,主要表現在經濟平衡,能力平衡(包含技能,屬性等等),保證游戲世界競爭公平。
?游戲文化的測試,比如整個游戲世界的風格,是中國文化主導,還是日韓風格等等,大到游戲整體,小到NPC(游戲世界人物)對話,比如一個書生,他的對話就必需斯文,不可以用江湖語言J。
游戲測試概述
?很多人有這樣一個關點:“就是在軟件開發完畢后,再進行測試。”殊不知,這種關點是有悖于軟件開發的生命周期的,軟件缺陷的發現必須是越早越好,這樣才可以有效的規避風險,而在“最后進行測試”的測試觀念的指導下測試工作必將會產生很多問題,這種觀念的錯誤在于:生命周期中的“測試階段”表明在該階段測試工作是主要的工作,而不是說,測試工作只發生在“測試階段”。通常,到了測試階段,測試的主要任務是運行測試,形成測試報告。而想要提高游戲的質量,則必需要做到測試的早期介入,諸如測試計劃,測試用例的確定以及測試代碼的編寫等等都是要在更早的階段進行。如果你把測試完全放在最后階段,就錯過了發現構架設計和游戲邏輯設計中存在嚴重問題的最好時機,到那時,要修復這些缺陷將很不方便,因為缺陷已經擴散到系統中去了,所以這樣的錯誤將很難尋找與修復,代價更高。
?要了解如何測試游戲必需了解如何做游戲,了解它的開發過程,才能真正的測好游戲。游戲要成功,其基本的必要條件有三。分別為Vision(設計)、technoogy(技術)和Process(過程)。三個條件,缺一不可如圖所示:
Vision
Technoogy
Process
?
?
圖:游戲開發三大基石
?Vision則是對游戲還沒有實現的總體上的把握,前瞻性的理解與策略的考量。
?Technoogy:有了vision,如果沒有技術的話,則各種美妙的想法只能停留在虛無縹緲的階段,通過技術來實現Vision。
?Process:有了Vision作為指導,有了技術作為保證,也不一定能夠把好的想法轉換成高質量的游戲。要創造高品質的游戲,尚缺重要的一環,即過程,制造游戲是一個非常是一個長時間的動態過程。游戲產品的質量則是要靠動態過程的動態質量來進行保證。過程由很多復雜的相互牽制的環節與部件組成,如果任意的環節或者是部件出了問題都會對最終的產品形成質量上的影響。因此對這個動態的過程,一定要有規劃與控制,以保證按部就班,按質按時完成工作。
游戲測試與開發過程的關系
CMM(Software Capabiity Maturity Mode)軟件成熟模型,大家都比較熟悉了,但在實施的過程中卻存在這樣那樣的問題,對于游戲開發就更沒有一個固定的路可以講了,我們的團隊是一個長期的游戲開發團隊,對游戲開發有著很深的認識,我們認為游戲的Process(過程)實際上也是軟件過程,不過是特殊的游戲軟件開發過程,各個生命周期還是相通的。所以我們總結一套以測試作為質量驅動的、屬于自己的開發過程。下圖是游戲的迭代式開發過:
?
?
圖:游戲迭代式開發與測試
由于網絡游戲的生命周期也是3、4年,所以采用迭代式的開發過程,既可以適應網絡游戲本身這種長周期的開發,又可以利用RUP的迭代式開發的優點與CMM的里程碑控制,從而達到對游戲產品的全生命周期的保證。
在游戲開發過程中,通用軟件的需求分析階段被策劃所代替,但起的作用是一樣的,明確游戲的設計目標(包括風格,游戲玩家群),游戲世界的組成,為后期的程序設計,美工設計,測試提出的明確的要求。由于開發是一個階段的過程,所以測試與開發的結合就比較容易,從圖上我們可以看到測試的工作與游戲的開發是同步進行的,每一個開發階段中測試都進行了參與,能夠深入的了解到系統的整體與大部分的技術細節,從而從很大程度上提高了測試人員對錯誤問題判斷的準確性,并且可以有效的保證重要游戲系統的穩定。
游戲策劃與測試計劃
?測試過程不可能在真空中進行。如果測試人員不了解游戲是由那幾個部分組成的,那么執行測試就非常的困難,同時測試計劃可以明確測試的目標,需要什么資源,進度的安排,通過測試計劃,既可以讓測試人員了解此次游戲測試中那些是測試重點,又可以與產品開發小組進行交流。在企業開發中,測試計劃書來源于需求說明文檔,同樣在游戲開發過程中,測試計劃的來源則是策劃書。策劃書包含了游戲定位,風格,故事情節,要求的配制等等。在策劃評審中我們的高級測試人員可以參與進來,得到詳細的游戲策劃書,從里面了解到游戲的組成,可玩性,平衡(經濟與能力),與形式(單機版還是網絡游戲),而我們測試在這一階段主要的事情就是通過策劃書來制定詳細的測試計劃,主要分兩個方面一是游戲程序本身的測試計劃,比如任務系統,聊天,組隊,地圖等等由程序來實現的功能測試計劃,二是游戲可玩性有測試計劃,比如經濟平衡標準是否達到要求,各個門派技能平衡測試參數與方法,游戲風格的測試,三是關于性能測試的計劃,比如客戶端的要求,網絡版的對服務器的性能要求。同時測試計劃書中還寫明了基本的測試方法,要設計的自動化工具的需求,為后期的測試打下良好的基礎。同時由于測試人員參與到策劃評審,資深的游戲測試人員與產品經理由于對游戲也有很深入的了解,會對策劃提出自己的看法,包含可玩性,用戶群,性能要求等等并形成對產品的風險評估分析報告,但這份報告不同于策劃部門自己的風險分析報告,主要從旁觀者的角度對游戲本身的品質作充分的論證,從而更有效的對策劃起到控制的作用。
游戲設計與測試
?設計階段是做測試案例設計的最好時機。很多組織要么根本不做測試計劃和測試設計,要么在即將開始執行測試之前才飛快地完成測試計劃和設計。在這種情況下,測試只是驗證了程序的正確性,而不是驗證整個系統本該實現的東西。而我們的測試則會很明確,因為我們的測試計劃已經寫的很明確,需要測試那些游戲系統,但是我們還需要了解系統的組成,而設計階段則是設計系統的過程,所有的重要系統均是用UM狀態圖進行了詳細的描述,比如用戶登陸情況。
?
圖2用戶登陸情況
在我們的團隊中資深的測試人員要具備的一項基本的素質就是可以針對UM的用例圖,時序圖,狀態圖來設計出重要系統的測試案例,只有重要系統的質量得到充分的測試,游戲程序的質量才可以得到充分的保證。比如上圖中就是一個用戶登陸游戲系統的時序圖。從這里我們可以很明確的了解玩家是如何驗證并登陸系統的,在這個過程中要與那些對象進行交互,比如這里我們就是三個系統之間的交互,客戶端(玩家部分),網關,賬號服務之間的一個時序變化關系,為了能夠完整的對這個流程進行測試,我們必需設計出可以覆蓋整個流程的測試案例,并考慮其中可能的非法情況,因為這個時序圖只是考慮了用戶正常登陸成功的情況,并沒有考慮密碼錯誤,通信失敗等許多可能存有的情況,并形成完整的測試案例庫,從而對登陸系統的系統化測試做了充分的準備。同時通過這張圖,性能分析人員還可以分析出可能存的性能瓶頸,比如這里可能有的瓶頸如下,總網關是否可以達到多少用戶的并發,是如果達不到,是否可以采用分布式部署或是支持負載平衡,三者之間的網絡帶寬的比例分配,賬號服務器是否可以承載多個網關的連接請求,最大連接請求可以達到多少等等,同時會針對這些風險做性能測試的設計,并提出自動化測試的需求,比如模擬玩家登陸的壓力工具等等。
同時在設計評審時,測試人員的介入可以充分的對當前的系統構架發表自己的意見,由于測試人員的眼光是最苛刻的,并且有多年的測試經驗,可以比較早的發現曾經出現的設計上的問題,比如在玩家轉換服務器時是否作了事務的支持與數據的校驗,在過去設計中由于沒有事務支持與數據的校驗從而導致玩家數據丟失,而這些風險可以在早期就規避掉。上面所說的是對游戲程序本身的測試設計,對于游戲情節的測試則可以從策劃獲得,由于前期的策劃階段只是對游戲情節大方向上的描述,并沒有針對某一個具體的情節進行設計,進入設計階段時,某個游戲情節邏輯已經完整的形成了,策劃可以給出情節的詳細設計說明書,稱為任務說明書,通過任務說明書我們可以設計出任務測試案例,比如某一個門派的任務由那些組成,我們可以設計出完整的任務測試案例,從而保證測試可能最大化的覆蓋到所有的任務邏輯,如果是簡單任務,還可以提出自動化需求,采用機器人自動完成。
游戲測試與開發
?開發與測試一直有人認為是不可以平行進行的,必需要先開發后測試,但是軟件的開發過程又要求測試必須早期介入,但在這里這種矛盾得到了很好的解決。我們采用了每日編譯,將測試執行和開發結合在一起,并在開發階段以編碼--測試--編碼--測試的方式來體現。也就是說,程序片段一旦編寫完成,就會立即進行測試。普通情況下,先進行的測試是單元測試,但是一個程序片段也需要相關的集成測試,甚至有時還需要一些特殊測試。特別是關于接口測試,像游戲程序與任務角本、圖片的結合,大家都認為需要提前測試,通過每日編你可以把已經寫好的程序片段接合起來,形成部分的集成測試,從而有效的體現的接口優先測試的原則。同時由于軟件測試與開發是并行進行的,并且實行的是軟件缺陷優先修改的策略,所以很少會出現缺陷后期無法修改的情況,并且由于前期的測試案例的設計與自動化工具的準備,我們不需要投入太多的人力就可以極高的保證游戲軟件的產品質量,特別是重要系統的質量。由于我們的游戲程序是每日不斷的完善,所以集成測試也在同步的進行之中,當開發進入最后階段時,集成測試也同步的完成了。這里有一個原則,也就是我前面所說的,測試的主體方法和結構應在游戲設計階段完成,并在開發階段進行補充(比如在游戲開發中會有相應的變動,或是某個轉移變地址的變化,這就需要實時的更新)。這種方法會對基于代碼的測試(開發階段與集成階段)產生很重要的影響,但是不管在那個階段,如果在執行前多做一點計劃和設計,都會大幅度的提高測試效率,改善測試結果,同時還有利于測試案例的重用與測試數據的分析,所以我們的測試計劃是在策劃時就形成了,為后繼的測試形成了良好的基礎。
集成測試階段
集成測試是對整個系統的測試。由于前期測試與開發的并行,集成測試已經基本完成,這時只需要對前期在設計階段中設計的系統測試案例運行一下就OK了。我們主要的重心在集成測試中的兼容性測試,由于游戲測試的特殊性,對兼容性的要求特別高,所以我們采用了外部與內部同部進行的方式,內部我們有自己的平臺試驗室,搭建主流的硬軟件測試環境,同時我們還通過一些專業的兼容性測試機構對我們的游戲軟件做兼容性分析,讓我們的游戲軟件可以跑在更多的機器上。
游戲可玩性測試
游戲可玩性測試也是非常重要的一塊,主要包含四個方面:
1. 游戲世界的搭建,包含聊天功能,交易系統,組隊等可以讓玩家在游戲世界交互的平臺。
2. 游戲世界事件的驅動,主要指任務。
3. 游戲世界的競爭與平衡。
4. 游戲世界文化蘊涵,游戲的風格與體現。
這種測試主要體現在游戲可玩性方面,雖然策劃時我們對可玩性作了一定的評估,但這是總體上的,但一些具體的涉及到某個數據的分析,比如PK參數的調整,技能的增加等一些增強可玩性的測試則需要職業玩家對它進行分析,這里我們主要通過三種方式來進行:
1. 內部的測試人員,他們都是精選的職業玩家分析人員,對游戲有很深的認識,在內部測試時,對上面的四點進行分析。
2. 利用外部游戲媒體專業人員對游戲作分析與介紹,既可以達到宣傳的效果,又可以達到測試的目的,通常這種方式是比較好的。
3. 利用外部一定數量的玩家,對外圍系統的測試,他們是普通的玩家,但卻是我們最主要的目標,主要的來源是大中院校的學生等等,主要測試游戲的可玩性與易用性,發現一些外圍的Bug。
4. 游戲進入到最后階段時,還要做內測,公測,有點像應用軟件的beta版的測試,讓更多的人參與測試,測試大量玩家下的運行情況。
可玩性測試是游戲最重要的一塊,只有玩家的認同,我們才可能成功。
性能測試與優化
?最后要單獨提一下的是性能優化,在單機版的時代,性能的要求并不是很高,但是在網絡版的時代,則是兩個完全不同的概念,主要包含了以下幾個方面:應用在客戶端性能的測試、應用在網絡上性能的測試和應用在服務器端性能的測試。通常情況下,三方面有效、合理的結合,可以達到對系統性能全面的分析和瓶頸的預測。不過在測試過程中有這樣一個原則,就是由于測試是在集成測試完成或接近完成時進行,要求測試的功能點能夠走通,這時你首先要進行優化的是數據庫或是網絡本身的配制,只有這樣才可以規避改動程序的風險。同時性能的測試與優化是一個逐步完善的過程,需要前期的很多的工作,比如性能需求,測試工具等等,不過由于前期工作的完善,這些都在前期完成了。這里我只做原則性的描述。
?數據庫的優化的原則主要是這樣的,首先是索引進行優化,由于索引的優化不需要對表結構進行任何改動,是最簡單的一種,又不需要改動程序就可能提升性能若干倍,不過要注意的是索引不是萬能的,若是無限的增加會對增刪改造成很大的影響。其次是對表,視圖,存儲過程的優化。不過在分析之前需要知道優化的目標,客戶行為中那些SQ是執行的最多的,所以我們必需借助些SQ的跟蹤分析工具,例如SQProfie,SQExpert,等工具,這樣會迅速的定位問題。
?關于網絡的優化,這里我所說的并不是針對網絡本身的優化,而是對游戲本身的網絡通信的優化,所以它是與程序的優化是結合在一起的,首先也是發現問題,通過Monitor與Sniff先定位是什么應用占用了較多的網絡流量,由于網絡游戲的用戶巨大,所以這也是一個重在的問題。對于程序的性能優化,最主要的是找到運行時間最長的函數,只有優化它,性能才有大幅度的提升,具體的方法我就不做詳細的描述了。
總述
?游戲測試是一個新的領域,它既有通用測試的特點,又有自己的特點,有許多未知的路要走,每天都在總結,希望給大家帶來一些幫助,同時在這里也謝謝所有支持我的同事。