亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

游戲項目中的自動化測試和持續集成

2019-11-17 04:51:13
字體:
來源:轉載
供稿:網友
現在,許多游戲項目要么跳票嚴重,要不就是發布時Bug多多。當然,這樣的現象并不僅存于游戲工業。例如,根據2001Standish集團發表的那份 聲名狼藉的報告“極度混亂”所表述的,70%以上的軟件項目要么被取消,要么嚴重的超時和超支。然而,游戲是軟件開發復雜性的最佳代表,不同技能的人需要 協同工作,這也就是某些人所說的游戲項目中高風險因素所在。軟件項目延期、Bug滿天飛和失敗的原因是多種多樣的,但看起來除了隨產品特性不斷變化之外,測試和品質治理是永恒的問題。以我們的經驗來看,相當多數的游戲開發工作室完全依靠人工的方式來測試游戲引擎、開發工具和游戲代碼,幾乎沒有采用自動化過程測試。很巧,在2002GDC的圓桌會議:游戲中的純軟件工 程,只有18%的與會者表示他們參與的項目采用了自動化測試。在2000年,我們的客戶,當時新成立的中間件公司對我們的3D引擎的穩定性和大量的BUG抱怨頻頻,我們第一次想到了自動化測試。直到那時,每當完成一 個新特征,我們還是依靠人工測試,并且使用這些特征開發出技術演示供市場部使用。我們在徹底分析了情況后得出以下結論,我們的軟件質量問題主要和我們測試 方法有關:*人工測試不夠全面和徹底,因為它僅僅花費了很多時間。 代碼在修改或添加之后,它本應運行預定義的人工測試集來保證修改不會產生新的問題。人工測試花費的時間越來越多,并給開發者帶來挫折感,打擊他們執行測試 的積極性。而且,測試的工作量使得開發者不愿意改進或優化現有的代碼。*當開發者測試他們自己的代碼時,他們總是不愿意(潛意識?)執行最苛刻的測試用例,因此就導致了最有可能出錯之處也是最不可能被全面測試到這樣的情形。因此,我們決定采用自動化測試,從開發一個新SDK部件開始。結果是鼓舞人心的,最終我們把它推廣到所有的SDK部件開發中去。測試框架極限編程,由Kent Beck和Martin Fowler總結的一系列方法和經驗,帶來了自動化測試的流行。一般來說,自動化測試指無需用戶干預,用來驗證軟件產品中的功能子集的代碼和數據。它可以是用來測試某個特定類方法(通常稱為單元測試),也可以是用來測試程序功能性的集成測試(功能測試)。為了促進自動化測試進程,有許多開源代碼的單元測試框架,比如CPPunit(C++專用)或Nunit(.Net專用)。這些測試框架提供了GUI來 運行測試集并提供測試結果反饋。根據你的項目,也許需要根據你的游戲進行一些額外的功能擴展和自定義,例如支持跨平臺。這些測試框架的內容,一個單元測試 對應一個函數,測試類由多個單元測試組成,并且包含一個開始和結束測試的方法(例如載入和卸載一幅地圖)。這些測試類可以放在分離的執行文件中,例如 DLL文件,也可以與主項目在一起。除此之外,測試類應該存放在產品代碼之外的文件中,這樣的話,他們就可以很方便的從版本發布中移除。物理引擎的簡單測試代碼,假如任何一個VTEST條件沒有滿足,那么測試就失敗。該測什么?當要決定測試的范圍時,實用第一。一般來說,為簡單的功能編寫單元測試是沒有意義的,比如常見的getter和setter方法。為了讓自動化測試物有 所值,被測試的代碼至少應該是可能會產生錯誤的,比如,發射一束穿透游戲場景的光線并且返回它穿過的任何幾何物體的方法(光線測試),然后將返回的結果與 編寫測試用例的作者提供的預期結果作比較。到底是只為類的公用 接口編寫測試用例(黑盒測試)還是要兼顧類的私有成員(白盒測試),是一個有爭議的問題。通常來說,黑盒測試比白盒測試粗糙,它們只能檢查一個操作的最終 結果,不能檢查內部中間狀態,它們對于被修改的測試代碼比較遲鈍。剛才提到的光線測試功能可能被全部重寫(比如原先的版本運行效率不夠),但是它返回的結果沒有變化。這時,白盒測試用例就需要跟著重寫,然而黑盒測試可以繼續用來檢測代碼修改后,所產生的結果是否與原先一致。 因此,我們認為自動化測試中,測試范圍只要包括類的公有成員就夠了,究竟,類的內部修改比它接口修改要頻繁得多。回歸測試 非凡是在游戲開發領域,大多數情況下,把測試結果和用例編寫者提供的數據手工作比較是不太現實的。例如,檢測與復雜的幾何體碰撞的交點,人工提供相關測 試數據幾乎不可能。相反,將測試結果與早期代碼產生的結果數據相比較,被稱為“回歸測試”。用例編寫者可以評審參考數據,例如,使用簡化圖形的碰撞物體,假如被證實是正確的,它就可以一直用于測試。這樣,自動化測試可以幫助你確認新代碼產生的結果與原先的一致。代碼功能測試會生成非常復雜的輸出數據,比如游戲的圖形渲染引擎,回歸測試是唯一可行的自動化測試。以圖形渲染引擎為例,所有圖形測試以輸出最終平臺相關的圖形文件為結果。一旦自動化測試開始運行,渲染出來的圖形文件與樣本圖形文件逐一像素的進行比較,假如有差異,那么測試失敗。為了減少樣本圖形文件的存占用,你可以使用圖形快照來進行測試。圖形回歸測試的優勢在于即使是肉眼難以發現的微小差異也不會被漏掉。除非人們對這個場景非常熟悉,否則很難會有人注重到場景中缺失的一個陰影或一個物體或者某個光源的R值與B值被錯換了。而回歸測試就不會放過任何一個這樣的錯誤。必須注重到,任何情況下,回歸測試的樣本數據都是自動生成的。樣本數據也許是平臺相關,非凡涉及到渲染輸出的時候,因此,它也許要被生成多次,即使是這樣,當渲染通道發生變化導致生成的圖形文件有所改變,樣本數據也要重新生成。為了不打擊開發者編寫回歸測試的積極性,要做到只需點擊框架用戶界面上一個按鈕就可以重新生成新的參考數據。
如何把所有的整合在一起包括游戲在內的所有應用,完整的測試集合包括單元測試和回歸測試。單元測試適合于測試底層功能性、基礎庫文件和平臺類庫。上層的各種功能特征集成測試可以使用回歸測試。根據結果,你可以有選擇的重構或優化你的邏輯或引擎代碼,回歸測試一旦失敗,你會馬上發現出問題的地方,單元測試失敗可以讓你精確的定位出錯之處。知道代碼被你編寫的自動化測試覆蓋得范圍是非常有好 處的,你可以使用代碼覆蓋率調查工具(BullseyeCoverage/AQtime)。代碼覆蓋率分析會告訴你,你的代碼哪些被調用,也可以提示你測 試集合中的疏漏之處。測試覆蓋率應該是多少,無法精確定量,盡管它取決于被測試的代碼。細小的方法無需測試,調試用的函數也不必測試。并且,幾乎所有的項 目都會包括一些“死”代碼,也就是不會被調用到的代碼,那么,這些代碼自然也不用測試。總而言之,現實中,我們見過的使用自動化測試的游戲和中間件項目中 測試覆蓋率大致是55%到70%。編寫友好的測試代碼必須承認,并不是所有的代碼都能使用自動化測試。以單元測試為例,嚴格的面向對象,良好的類和函數模塊化封裝設計可以大大提高它的測試效率。類的接口越多,為它編寫的單元測試就越多。同樣,過多的使用C++的友元也會增加編寫的難度,甚至無法為該類編寫(黑盒)單元測試用例。在寫代碼的時候,要時刻牢記保持良好的測試性。在開發過程中,就會變成可行但是單調乏味的工作,有時候它需要很好的結構性。要在游戲開發中使用,以下幾點必須牢記:*所有的回歸測試都取決于明確的行為。比如,使用隨計算法的尋徑系統可以提供一個初始化隨機種子的公共方法使得角色的行動決策更復雜多變。這個方法在隨后的測試中可以被用來確保角色始終選取同樣的路徑。*同樣,回歸測試中要避免與幀數相關的情況;否則,有真實物理特性的物體或渲染輸出也許會和以前的數據不同,非凡是當結果來自不同的機器或者不同的編譯條件(debug 和release)。在測試時,使用恒定的虛擬幀數就可以避免這樣的問題。* 嚴重依靠于用戶輸入的軟件很難測試,比如游戲內置的編輯系統或者游戲工具。這樣的話,把UI 和邏輯代碼嚴格的區分開會有所幫助。在我們的游戲工具里, UI界面里每個用戶動作會執行一條或多條簡單的腳本指令。每條腳本指令可以很明確的重現用戶的原意。這樣,測試用例可以簡單的執行這些指令并且與樣本數據 作比較就可以(比如導出地形文件)。也可以使用GUI捕捉工具來測試UI,但我們發現這并不是個好辦法。UI會經常改變,哪怕一個按鈕僅僅移動幾個像素也會使捕捉軟件失效,GUI捕捉工具也許會幫倒忙。關于測試的疑問:我們真的可以節省時間么?多數情況下,一個開發團隊想要在開發過程中使用自動化測試,大多數成員都會對它抱以質疑的態度。究竟,與其花這點時間寫測試用例,還不如去寫邏輯和引擎 的代碼。根據我們在游戲和其他領域的工作中使用自動化測試的經驗來看,編寫測試代碼會額外增加30%工作量。初看,在時間和資金上這也許是很大的開銷,然而,你要意識到這樣做,省去了人工測試所花費的時間。自動化測 試可以看作在開發前期投入,在開發過程中贏利。大多數的代碼修改,包括Bug修改,都可能會引入更多問題導致程序宕機。所以,理論上說,一旦代碼有所改變,就必須測試所有可能被影響的代碼。自動化測試無需人工干預就可以完成,它們縮短了開發過程。而且由于自動化測試可以簡單快速的發現修改的代碼是否能有效地運行,因此也就鼓勵開發者優化和改進現有的代碼。對我們來說,自動化測試幫助開發者編寫更穩定和可靠的代碼。哪怕是一開始對它抱有懷疑態度的開發成員也欣賞它所提供早期反饋的特性,在開發過程中,它也可以更早的 發現Bug。開發者的工作壓力和負荷隨著項目的開展日益加大,盡早的發現和解決Bug也可以避免給開發要害時期帶來額外的壓力。在開發Vision引擎的時候,我們收集了一些數據來研究為提高代碼穩定性而實施自動化測試的有效性。2001年早期,全部依靠人工測試的引擎第一個 release版本開發完成,盡管我們已經進行了很全面的測試,但是每個月,我們的在線技術支持數據庫依然會收到上百個來自客戶的Bug報告。2001年 9月,我們對已有的引擎功能和新增的特征實施自動化測試。這樣,即使我們現在的工作量很大,開發進展也很正常,每月Bug報告的數量銳減(現在大概是5到10個)。必須強調,這些圖表只是反映了單元測試用例數量和每月Bug數量兩者之間的相互關系,不能將它理解為必然的因果關系。當然,從2001年到2004年,我們在如何編寫健壯的代碼上學到了很多,在這段時間內,開發團隊的人數變動頻頻,但是,這些明顯的差異足以說明穩定性的提升部分歸功于使用了自動化測試。 QQread.com 推出各大專業服務器評測 linux服務器的安全性能
SUN服務器 HP服務器 DELL服務器 IBM服務器 聯想服務器 浪潮服務器 曙光服務器 同方服務器 華碩服務器 寶德服務器 游戲中自動化測試的局限性 盡管使用自動化測試對于游戲開發來說獲益匪淺,但是也有其局限之處。顯然,很難用它來測試游戲的平衡性,也不太可能用它來測試游戲性和畫面的美觀性。在這幾年里,我們總結了一些編寫自動化測試的要點,重點如下:*測試最重要的模塊(比如,最復雜和最常用的)。對那些最有可能出問題或者不會破壞原先設計的重構任務進行自動化測試,性價比最高。*當上層功能性測試難以進行的時候,把精力集中在不同的子系統上。例如,你也許不能通過自動化測試來驗證AI系統是否正常工作,但你可以測試當一個怪獸的體力低于一定數值的時候,它是否會“投降”。*用壓力測試來驗證你的代碼的強壯性。假如你的游戲在極端條件下運行的很好,比如,每秒有2000個怪獸出生和死亡,一個場景中同時放入500個有真實物理特性的物體,一幅地圖輪流載入200次,那么玩家作一些異常操作時,宕機的可能性就會小很多。*在修改Bug前,也為它編寫測試用例。這樣的話,可以確保這些Bug在今后的版本中不會重現。*回歸測試。例如,圖像或狀態比較的話,使用指定的測試場景要比使用產品地圖更輕易維護。假如你認為測試用產品數據可能會經常變動,那么你最好使用小的測試場景。否則,不斷的生成新的參考數據會使得開發團隊產生倦怠和厭煩的情緒。* 測試用例越簡單越好,不要奢望有非常大的覆蓋面。搭建一個易維護和可擴展的自動化測試是一個長期的任務。一般來說,“底層”代碼,例如算術、碰撞檢測和渲染,更輕易進行自動化測試,對于游戲性和完整的游戲測試來說,還是需要經過QA人員親自測試。當然,QA部門的注重力也要從技術轉移到與游戲性相關的問題上去?!暗紸房間后,因為通風口前面的箱子太高了,所以出不去”這樣的報告就會取代“當我的角色轉動的時候,屏幕上出現了很多扭曲的三角面”。持續集成在一個復雜的軟件項目中引入自動化測試,你會發覺運行它也需要一定的時間,我們看到的一些項目甚至需要幾個小時。假如讓開發者在他們的開發用機上運行的話,測試會完全占用他們的機器,影響工作,那么結果就是他們不去運行測試用例,很顯然,沒有被運行的用例是沒有任何價值的。解決方法就是搭建一臺或多臺專用的自動化測試機。它同時還運行版本治理軟件(Subversion/CVS/Perforce),一旦發現提交了新代 碼,那么代碼就會被Check out并編譯,測試用例也會自動運行。最后,系統會將測試結果報告以email的形式自動發送給最近提交代碼的開發者。完全自動化、重復的 build和測試過程,這種過程天天運行多次,在極限編程中,我們把它稱為:持續集成。為了更好的實行持續集成,像 Cruise Control或者Anthill這樣的開源代碼工具可以將版本治理軟件和自動build工具,例如ANT,整合起來。使用這樣的工具, 可以很輕松的搭建適合自己的持續集成系統。我們發現搭建專用持續集成服務器使得開發過程變得更順暢,開發者可以更專注于自己的工作。與此同時,測試可以被很好的運行,一旦提交了錯誤的代碼,持續集成系統會自動通知開發者和項目經理,因此開發者也可不必為此分心。自動化,自動化!自動化測試和持續集成的使用為我們在游戲和工具的開發上帶來了極大的收益。例如,持續集成服務器根據Wiki中的變化,天天自動生成CHF (windows幫助文件)文件。而且,使用ANT和CruiseControl來制作軟件自動分發包會非常輕易。這樣一來,用最新的代碼(或最新的 tag)創建一個完整的分發包就是舉手之勞。自動化過程中的自 動化測試執行,例如測試框架中的常規單元和回歸測試,他們不是用來檢查錯誤,而是用在相同環境下得到測試結果來衡量和比較引擎的性能(系統配置的結果以 xml文件格式存放在版本治理軟件系統上)。假如當前的結果比參考結果差很多,那么測試失敗,反之,它就成為了新的參考結果。性能測試是一種非凡的回歸測試。當引擎代碼被重構,我們通過它來確保修改不會降低引擎原有的性能。這樣,就迫使我們時刻關注代碼的運行效率和對代碼的優化工作,可以避免碰到在實際運行中,速度忽然變慢的現象發生。結論根據我們的經驗,使用自動化測試和持續集成可以使開發團隊工作更有效而開發出更好、穩定、簡單的軟件。而且,減少人工測試也可以減少開發團隊的壓力和工作負荷,可以在開發過程中盡早的發現Bug。當然,自動化測試不會使你的游戲想當然成為暢銷品。但毋庸置疑,它會使各類開發人員甚至玩家活得更安閑。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
精品久久久久久国产| 日本午夜精品理论片a级appf发布| 2019中文在线观看| 亚洲综合在线播放| 91亚洲精品久久久久久久久久久久| 日韩中文字幕免费视频| 欧美日韩精品在线播放| …久久精品99久久香蕉国产| 亚洲石原莉奈一区二区在线观看| 日韩中文字幕精品| 亚洲精品大尺度| 欧美精品久久久久久久免费观看| 亚洲第一区中文99精品| 欧美日韩在线第一页| 亚洲精品国产电影| 成人观看高清在线观看免费| 日韩在线观看网址| 国产成人精品电影久久久| 亚洲最大福利视频| 亚洲一区二区三区在线视频| 久久天天躁狠狠躁夜夜爽蜜月| 欧美日韩另类字幕中文| 亚洲精品久久视频| 欧美高清视频在线| 欧美中文在线字幕| 成人日韩在线电影| 亚洲精品乱码久久久久久金桔影视| 国模视频一区二区三区| 色婷婷久久一区二区| 亚洲aaa激情| 国产欧美日韩丝袜精品一区| 亚洲free性xxxx护士hd| 国产精品对白刺激| 欧美性生交大片免网| 色爱精品视频一区| 色小说视频一区| 91久久精品久久国产性色也91| 精品久久久久久久大神国产| 亚洲成人激情在线观看| 韩国一区二区电影| 中文字幕一区电影| 中文字幕久久久| 欧美国产日韩一区| 国产精品久久久久77777| 91情侣偷在线精品国产| 国产精品扒开腿做| 国产99久久精品一区二区| 欧美与欧洲交xxxx免费观看| 中文字幕欧美日韩va免费视频| 琪琪第一精品导航| 中文字幕亚洲专区| 国产一区二区三区在线观看网站| 亚洲а∨天堂久久精品喷水| 欧美精品在线观看91| 久久人人爽亚洲精品天堂| 国产福利精品在线| 亚洲视频在线播放| 精品一区精品二区| 中国china体内裑精亚洲片| 97人人模人人爽人人喊中文字| 日韩精品欧美激情| 538国产精品视频一区二区| 国产91精品久久久久久| 亚洲美女动态图120秒| 国产精品久久婷婷六月丁香| 中文字幕亚洲二区| 欧美中文字幕视频在线观看| 日韩在线免费视频观看| 成人黄色免费片| 国模吧一区二区| 久久久久久国产精品三级玉女聊斋| 久久九九有精品国产23| 亚洲欧美在线第一页| 91精品国产91久久久久福利| 日韩在线观看免费全集电视剧网站| 免费97视频在线精品国自产拍| 色偷偷av一区二区三区| 亚洲激情视频网| 日韩电影大全免费观看2023年上| 国产精品人成电影在线观看| 亚洲欧美中文日韩在线v日本| 欧美激情乱人伦一区| 欧美一区二区三区四区在线| 亚洲成人精品视频| 精品欧美一区二区三区| 欧美日韩国产专区| 欧美激情国产高清| 色爱av美腿丝袜综合粉嫩av| 国产欧美欧洲在线观看| 另类专区欧美制服同性| 亚洲精品国偷自产在线99热| 亚洲精品视频免费在线观看| 亚洲美女在线观看| 日韩精品在线免费观看视频| 中文字幕精品一区二区精品| 成人国产在线视频| 精品国产一区二区在线| 亚洲欧美日韩综合| 亚洲第一福利网站| 午夜欧美大片免费观看| 精品国产31久久久久久| 日本韩国在线不卡| 911国产网站尤物在线观看| 欧美亚洲国产日韩2020| 精品色蜜蜜精品视频在线观看| 亚洲成人网在线| 久久久久久久久国产| 国产精品欧美亚洲777777| 在线亚洲男人天堂| 亚洲精品v欧美精品v日韩精品| 日韩小视频在线| 亚洲欧美中文字幕在线一区| 久久久久久国产精品| 亚洲国产精品女人久久久| 久久久久久久久久久网站| 久久亚洲精品成人| 成人黄色生活片| 中文字幕在线观看日韩| 久久精品久久精品亚洲人| 欧美精品在线视频观看| 日韩久久精品电影| 国内免费精品永久在线视频| 国产91成人video| 欧美裸身视频免费观看| 91久久久久久| 精品中文视频在线| 亚洲黄在线观看| 欧美精品久久久久久久| 日本电影亚洲天堂| 色av中文字幕一区| 久久综合色影院| 国产不卡在线观看| 久久影视电视剧免费网站清宫辞电视| 国产www精品| 国产精品xxxxx| 亚洲精品狠狠操| 一本一本久久a久久精品综合小说| 夜色77av精品影院| 中文字幕9999| 奇米成人av国产一区二区三区| 日韩av三级在线观看| 91免费国产视频| 91精品免费看| 亚洲精品自拍第一页| 亚洲第五色综合网| 在线视频欧美日韩| 欧美日韩美女在线观看| 亚洲欧美一区二区三区四区| 亚洲美女av在线播放| 爽爽爽爽爽爽爽成人免费观看| 精品国产一区av| 国产精品偷伦视频免费观看国产| 不卡在线观看电视剧完整版| 日韩中文字幕网站| 在线播放国产一区二区三区| 亚洲男子天堂网| 亚洲一区二区黄| 欧美成人免费播放| 国产在线观看精品| 青草青草久热精品视频在线网站| 亚洲精品在线视频| 亚洲高清久久网| 久热精品视频在线观看| 一本色道久久综合亚洲精品小说|