張 琪
(上海市軟件評測中心有限公司(軟件測試部),上?!?00233)
大數(shù)據(jù)處理是指不能通過傳統(tǒng)計算技術(shù)處理的海量數(shù)據(jù)集合的數(shù)據(jù)創(chuàng)建、存儲、檢索和分析等操作,具有大批量、多樣性、復(fù)雜性、實時性、交互性等特性。在大數(shù)據(jù)背景下,隨著互聯(lián)網(wǎng)、政府、企業(yè)、個人用戶需求量的增加,基于大數(shù)據(jù)技術(shù)的應(yīng)用系統(tǒng)越來越多,對軟件測試工作提出了很大的挑戰(zhàn)。只有轉(zhuǎn)變傳統(tǒng)的測試思維,合理利用多種技術(shù)和框架、各種自動化工具的融合,并不斷開拓創(chuàng)新測試方法和技術(shù),優(yōu)化改進(jìn)測試策略和流程,才能夠獲得更好的發(fā)展。
Google于 2004年提出的大數(shù)據(jù)處理框架Map-Reduce已得到了廣泛的應(yīng)用,用戶在設(shè)計分布式應(yīng)用程序時只需要實現(xiàn) map()和 reduce()兩個函數(shù),不需關(guān)注數(shù)據(jù)分片、任務(wù)調(diào)度、機(jī)器間通信、機(jī)器容錯等方面是如何實現(xiàn)的,雖然簡化了數(shù)據(jù)密集型應(yīng)用的數(shù)據(jù)處理過程,但是用戶功能不如框架本身功能豐富,也給測試工作帶來了難度。并且該框架采用分布式特性,無法知道任務(wù)被動態(tài)分配到集群中的哪個節(jié)點執(zhí)行;無法預(yù)知map或reduce任務(wù)在哪個節(jié)點執(zhí)行;無法在錯誤發(fā)生前設(shè)置斷點等,而傳統(tǒng)軟件測試是基于軟件規(guī)格說明書等文檔進(jìn)行測試,有預(yù)先確定的流程圖、數(shù)據(jù)關(guān)系、數(shù)據(jù)的輸入/輸出,大數(shù)據(jù)處理框架的分布式特性給傳統(tǒng)軟件測試帶來了難度[1]。
傳統(tǒng)數(shù)據(jù)一般采用結(jié)構(gòu)化數(shù)據(jù),存儲在關(guān)系型數(shù)據(jù)庫表中或結(jié)構(gòu)化文件中,軟件測試時可以用來驗證軟件輸入和輸出的正確性。大數(shù)據(jù)處理的數(shù)據(jù)包含結(jié)構(gòu)化、半結(jié)構(gòu)化、非結(jié)構(gòu)化三種。半結(jié)構(gòu)化數(shù)據(jù)沒有預(yù)定義格式,需要根據(jù)數(shù)據(jù)模式推導(dǎo)出其基本機(jī)構(gòu)。非結(jié)構(gòu)數(shù)據(jù)沒有任何格式,存儲在文件或Web頁面中,需要抽取、轉(zhuǎn)化成結(jié)構(gòu)化數(shù)據(jù),由于數(shù)據(jù)的異?;驍?shù)據(jù)格式轉(zhuǎn)換錯誤導(dǎo)致的問題,使軟件測試對數(shù)據(jù)輸入和輸出正確性的驗證變得非常困難。
大數(shù)據(jù)是對所有數(shù)據(jù)集進(jìn)行分析處理,而不是隨機(jī)樣本,找到其中最有價值的數(shù)據(jù)。這就對測試設(shè)計時的評價模型提出了更高的要求,能否構(gòu)造與原始數(shù)據(jù)集等價的數(shù)據(jù)集?是否所有數(shù)據(jù)覆蓋了所有可能性?都是需要考慮的問題[2]。
傳統(tǒng)的B/S或C/S性能測試一般通過客戶端測試負(fù)載器模擬向服務(wù)器發(fā)送請求來實現(xiàn)對服務(wù)器的壓力測試。在大數(shù)據(jù)背景下,數(shù)據(jù)處理平臺一般架構(gòu)在可動態(tài)擴(kuò)展的PaaS平臺,傳統(tǒng)的局域網(wǎng)環(huán)境下開展壓力測試模式,已無法滿足需求,難以實現(xiàn)負(fù)載器數(shù)量的擴(kuò)展,也無法采取有效的控制措施[3]。在大數(shù)據(jù)時代背景下,云計算系統(tǒng)分布范圍較廣,測試客戶端需要設(shè)置分布式特征,在大量用戶數(shù)據(jù)的驅(qū)動下,控制設(shè)備的監(jiān)控壓力也在不斷增加,受到負(fù)載器數(shù)據(jù)及狀態(tài)的影響,很大程度上會對軟件性能測試造成影響。并且由于大數(shù)據(jù)應(yīng)用所涉及的技術(shù)、環(huán)境的復(fù)雜性,對于問題的診斷調(diào)優(yōu)也存在難度。
Map-Reduce對來自不同數(shù)據(jù)源的數(shù)據(jù)進(jìn)行處理過程中可能會出現(xiàn)編碼問題,如在單一節(jié)點上運(yùn)行正確,在多個節(jié)點上運(yùn)行不正確的問題,包括不正確的聚合、節(jié)點配置、輸出格式等??刹捎靡韵路绞竭M(jìn)行驗證:a.驗證梳理數(shù)據(jù)處理過程是否完成并輸出文件;b.在單個節(jié)點上驗證大數(shù)據(jù)的業(yè)務(wù)邏輯后,在多節(jié)點上進(jìn)行相同驗證;c.驗證Map-Reduce處理過程的Key/Value對是否正確生產(chǎn);d.在reduce過程結(jié)束后驗證數(shù)據(jù)的聚集合并是否正確;e.通過源文件驗證輸出數(shù)據(jù)來保證數(shù)據(jù)處理正確完成;f.驗證輸出數(shù)據(jù)文件格式是否符合大數(shù)據(jù)業(yè)務(wù)要求[4]。
測試是為了保證數(shù)據(jù)的正確性、業(yè)務(wù)邏輯的正確性。首先,需要進(jìn)行需求的調(diào)研,必須要清楚整個業(yè)務(wù)處理流程,每個數(shù)據(jù)的流轉(zhuǎn),每個步驟的輸入和輸出,才能判斷最后的輸出結(jié)果是否正確。然后,結(jié)合不同業(yè)務(wù)場景設(shè)計測試用例,不僅限于數(shù)據(jù)的邊界要求、屬性要求等,更多需要考慮數(shù)據(jù)的樣本及大小,樣本集的分布特征。需要考慮:數(shù)據(jù)量;數(shù)據(jù)唯一性;數(shù)據(jù)完整性;數(shù)據(jù)一致性;數(shù)據(jù)邊界;數(shù)據(jù)精度和格式化;數(shù)據(jù)區(qū)間和分布;數(shù)據(jù)空值替換及格式化特征等,可結(jié)合自動化測試工具或手工編寫測試腳本等方式,導(dǎo)入測試數(shù)據(jù),提高測試數(shù)據(jù)覆蓋率和測試效率[5]。
目前業(yè)界暫無通用、標(biāo)準(zhǔn)的大數(shù)據(jù)性能測試工具,要自行開發(fā)或整合多種相關(guān)測試工具才可能實現(xiàn)性能測試及問題診斷。首先搭建測試環(huán)境,需要考慮:是否有足夠的存儲設(shè)備來存儲和處理大數(shù)據(jù);有足夠的CPU、內(nèi)存資源保障高性能處理;有集群處理分布式節(jié)點和數(shù)據(jù)等[6]。接著準(zhǔn)備測試數(shù)據(jù)、設(shè)計測試場景、編寫測試腳本,需要考慮:各業(yè)務(wù)的占比;各節(jié)點測試數(shù)據(jù)量的準(zhǔn)備;并發(fā)線程/用戶量的需求;超時時間/參數(shù)/消息隊列長度設(shè)置;選用測試工具或測試腳本開發(fā)等。最后執(zhí)行性能測試,可通過 Hadoop性能監(jiān)控器來監(jiān)測平均響應(yīng)時間、吞吐量、資源占用率等運(yùn)行狀態(tài)性能指標(biāo)和瓶頸問題[7]。
在大數(shù)據(jù)背景下,云計算、虛擬化技術(shù)得到了較好的應(yīng)用。結(jié)合相關(guān)資料,大數(shù)據(jù)背景下軟件測試展望主要如下:
(1)完善與改進(jìn)測試技術(shù),在大數(shù)據(jù)背景下,測試技術(shù)只有朝著多元化方向發(fā)展,才能夠?qū)崿F(xiàn)突破。將已知測試技術(shù)、測試方法相互結(jié)合,并進(jìn)行綜合利用。針對數(shù)據(jù)儲存模糊認(rèn)知,導(dǎo)致影響測試精準(zhǔn)性的情況,其解決措施為:在應(yīng)用數(shù)據(jù)庫前,必須要反復(fù)測試數(shù)據(jù)庫,降低數(shù)據(jù)錯誤率帶來的影響,全面提升數(shù)據(jù)的準(zhǔn)確性、一致性、完整性,為后期的測試奠定基礎(chǔ)。除了功能測試,還要兼顧性能效率、容錯性、可用性、擴(kuò)展性、穩(wěn)定性、兼容性、數(shù)據(jù)一致性等方面的測試[9]。
(2)加入智能化技術(shù),提升數(shù)據(jù)處理質(zhì)量,在實際應(yīng)用時,其設(shè)計工作不僅需要對輸入的數(shù)據(jù)進(jìn)行界定,分析數(shù)據(jù)的屬性,還需要依據(jù)數(shù)據(jù)的樣本、數(shù)據(jù)采集情況、數(shù)據(jù)分布規(guī)模等選擇正確的評價方式。在數(shù)據(jù)輸入時,需要確保數(shù)據(jù)屬性的規(guī)范性,綜合分析、考慮數(shù)據(jù)輸入的大小、輸出樣式,在大數(shù)據(jù)背景下,應(yīng)用智能化技術(shù)能夠消除輸入、輸出數(shù)據(jù)之間的差異性,逐步規(guī)范操作,全面提升軟件測試質(zhì)量[10]。
(3)基于大數(shù)據(jù)背景下,在各類數(shù)據(jù)處理中云計算、虛擬化的應(yīng)用十分有必要,為了更好的滿足大數(shù)據(jù)時代的性能測試需求,就必須要構(gòu)建客戶端與服務(wù)器端需求相匹配的自動化運(yùn)行環(huán)境,發(fā)揮負(fù)載器的作用,研究并發(fā)環(huán)境,強(qiáng)化監(jiān)控,逐步探索全新的測試手段。
綜上所述,當(dāng)前的時代屬于大數(shù)據(jù)時代,軟件測試面臨著很多的挑戰(zhàn),為了更好應(yīng)對大數(shù)據(jù)環(huán)境下對軟件測試帶來的問題,提出了一些解決措施,并對未來的軟件測試發(fā)展提出展望,需要從以下幾方面改善:(1)測試技術(shù)需朝著多元化方向發(fā)展,多元化的測試技術(shù)能夠有效避免“殺蟲劑效應(yīng)”,在已知測試技術(shù)基礎(chǔ)上,探索出全新的測試技術(shù)。(2)大數(shù)據(jù)的智能化處理,需更多去考慮輸入數(shù)據(jù)樣本的大小、特性、輸出評判方法等。(3)構(gòu)建自動化云測試環(huán)境,更好的滿足大戶數(shù)據(jù)背景下性能測試需求,強(qiáng)化客戶端的處理能力,提升與服務(wù)端需求之間的匹配度,進(jìn)而探索、創(chuàng)新更多的測試方法。(4)采用大數(shù)據(jù)的思維方式,通過全面的測試來提高大數(shù)據(jù)應(yīng)用軟件的質(zhì)量、容錯性、可擴(kuò)展性、穩(wěn)定性、安全性。