【NCTS峰會(huì)回顧】360搜索彭興強(qiáng):360搜索質(zhì)量保障體系介紹
2019年10月26日,由Testin主辦的第二屆NCTS中國(guó)云測(cè)試行業(yè)峰會(huì)在京召開(kāi),此次峰會(huì)以“AI+未來(lái)”為主題,匯聚來(lái)自國(guó)內(nèi)外測(cè)試領(lǐng)域的知名專(zhuān)家學(xué)者、領(lǐng)先企業(yè)決策者、高層技術(shù)管理者、媒體從業(yè)者等,共同探討高端云測(cè)試技術(shù),幫助測(cè)試從業(yè)者了解最前沿行業(yè)趨勢(shì),及最新的行業(yè)實(shí)踐。
會(huì)上,360搜索測(cè)試總監(jiān)彭興強(qiáng)做《360搜索質(zhì)量保障體系介紹》。彭興強(qiáng)分享了360搜索業(yè)務(wù),通過(guò)CI/CD全流程自動(dòng)化、功能、性能、接口測(cè)試自動(dòng)化,再加上業(yè)務(wù)監(jiān)控、線上產(chǎn)品質(zhì)量的自動(dòng)化分析、AB實(shí)驗(yàn)以及一套完善的數(shù)據(jù)分析系統(tǒng)來(lái)保障線上服務(wù)質(zhì)量。
以下為彭興強(qiáng)演講實(shí)錄:
大家上午好!360剛剛舉辦了一場(chǎng)測(cè)試嘉年華,當(dāng)時(shí)有很多同學(xué)參加并提出了一個(gè)問(wèn)題,測(cè)試未來(lái)的方向在哪里?今天聽(tīng)了徐琨總的分享,我覺(jué)得Testin確實(shí)走在了行業(yè)的前列,對(duì)我很有啟發(fā)。下面我為大家分享一下360搜索在質(zhì)量保障體系建設(shè)上的一些經(jīng)驗(yàn)。
我之前在阿里工作了四年,之后到360,在360待了七年,這期間一直負(fù)責(zé)搜索業(yè)務(wù)的測(cè)試,經(jīng)過(guò)七年時(shí)間,打造出一套質(zhì)量保障體系。今天主要從業(yè)務(wù)介紹、質(zhì)量保障體系實(shí)踐經(jīng)驗(yàn)、問(wèn)答三個(gè)環(huán)節(jié)進(jìn)行介紹。
第一,業(yè)務(wù)情況。在搜索領(lǐng)域,大家應(yīng)該都接觸過(guò)360搜索。
搜索的基本流程是這樣的,首先,我們會(huì)積累一批鏈接庫(kù),spider通過(guò)鏈接庫(kù)中的鏈接獲取線上網(wǎng)頁(yè)數(shù)據(jù)進(jìn)入網(wǎng)頁(yè)庫(kù),再經(jīng)過(guò)篩選、過(guò)濾,最后成為我們線上索引數(shù)據(jù),用戶通過(guò)前端搜索框查詢?cè)L問(wèn)索引庫(kù)數(shù)據(jù)得到需要的結(jié)果。
搜索業(yè)務(wù)有什么特點(diǎn)呢?首先是系統(tǒng)龐大,整套服務(wù)需要上萬(wàn)臺(tái)服務(wù)器、數(shù)十個(gè)在線業(yè)務(wù)模塊、數(shù)億的日PV、核心業(yè)務(wù)單例運(yùn)行需要幾百臺(tái)服務(wù)器、多個(gè)團(tuán)隊(duì)開(kāi)發(fā)維護(hù);其次業(yè)務(wù)邏輯復(fù)雜,大規(guī)模的線上服務(wù)互相依賴(lài)、完整的一套業(yè)務(wù)流程需要經(jīng)歷十幾個(gè)業(yè)務(wù)模塊、結(jié)果展現(xiàn)需要經(jīng)歷數(shù)十個(gè)算法策略模塊;第三,數(shù)據(jù)量大且變化快,百億的離線數(shù)據(jù),時(shí)刻都在更新的實(shí)時(shí)數(shù)據(jù),特型展現(xiàn)的結(jié)構(gòu)化數(shù)據(jù),垂直領(lǐng)域的專(zhuān)項(xiàng)數(shù)據(jù),所有數(shù)據(jù)都要能及時(shí)準(zhǔn)確的滿足用戶需求;第四,測(cè)試場(chǎng)景復(fù)雜,系統(tǒng)的龐大和復(fù)雜造成幾十個(gè)關(guān)聯(lián)服務(wù)需要把控,眾多模塊由不同團(tuán)隊(duì)開(kāi)發(fā)完成,線上query多樣性造成case場(chǎng)景的千變?nèi)f化。
征對(duì)這樣的業(yè)務(wù),我們是如何保證質(zhì)量的呢?下面給大家簡(jiǎn)單講一下。
首先,我們?cè)诹鞒套詣?dòng)化方面做了全流程的自動(dòng)化體系建設(shè)。在項(xiàng)目管理上,我們也做了很多事情,比如把時(shí)光軸、項(xiàng)目時(shí)間節(jié)點(diǎn)都和數(shù)據(jù)關(guān)聯(lián)起來(lái)。在功能自動(dòng)化、前端自動(dòng)化、接口自動(dòng)化都有自己的一套平臺(tái)。在專(zhuān)項(xiàng)測(cè)試上,有性能測(cè)試平臺(tái)和DIFF平臺(tái)。
最近也有人問(wèn)我一個(gè)問(wèn)題,人工測(cè)試能不能被替代?經(jīng)過(guò)這么多年的實(shí)踐,我們發(fā)現(xiàn)人工測(cè)試是沒(méi)有辦法被替代的,自動(dòng)化流程只是一些固有的、已實(shí)現(xiàn)的流程的自動(dòng)化,人工測(cè)試在新功能驗(yàn)證上仍然必不可少。
在整個(gè)編譯打包發(fā)布流程中,由于系統(tǒng)復(fù)雜,核心功能單列運(yùn)行就需要幾百臺(tái)機(jī)器,開(kāi)發(fā)、測(cè)一個(gè)項(xiàng)目要熟悉所有模塊難度很大。我們?cè)跍y(cè)試之初面臨過(guò)一個(gè)問(wèn)題,很多同學(xué),特別是新來(lái)的同學(xué)在不熟悉項(xiàng)目的時(shí)候,部署環(huán)境非常耗時(shí),要把整個(gè)模塊摸透,他至少需要一周的時(shí)間。而通過(guò)自動(dòng)化的構(gòu)建,實(shí)現(xiàn)全流程自動(dòng)化之后,任何一個(gè)新同學(xué),只要關(guān)心自己模塊的變化,通過(guò)自動(dòng)化系統(tǒng)部署自己需要的環(huán)境,這樣就可以快速的切入到業(yè)務(wù),使整體工作效率得到大幅提升。另外,很多既有功能的自動(dòng)化,包括自動(dòng)化發(fā)布,整個(gè)發(fā)布基本不用人工干涉,功能的自動(dòng)化回歸也有一套平臺(tái),另外,線上會(huì)出現(xiàn)一些badcase,很多并不是因?yàn)闇y(cè)試漏測(cè)引起的,可能是數(shù)據(jù),或新產(chǎn)品類(lèi)型的出現(xiàn),導(dǎo)致結(jié)果不能滿足用戶需求,這些都是通過(guò)線上質(zhì)量的自動(dòng)化分析系統(tǒng)進(jìn)行保障。產(chǎn)品質(zhì)量的好壞最終衡量者是用戶,通過(guò)A/B實(shí)驗(yàn)分流讓一部分用戶先用起來(lái),快速上線,多實(shí)驗(yàn)版本的對(duì)比,再通過(guò)詳細(xì)的數(shù)據(jù)指標(biāo)分析,了解實(shí)驗(yàn)產(chǎn)品的用戶使用情況,發(fā)現(xiàn)一些不好的版本,把優(yōu)質(zhì)版本推到線上。還有監(jiān)控,我們的業(yè)務(wù)這么復(fù)雜,接口這么多,流程這么長(zhǎng),靠人去盯是不現(xiàn)實(shí)的,必須有一套自動(dòng)化的監(jiān)控模式,通過(guò)一整套的監(jiān)控體系發(fā)現(xiàn)整個(gè)流程中存在的問(wèn)題。
我們的測(cè)試開(kāi)發(fā)比是比較高的,這么高的測(cè)試開(kāi)發(fā)比怎么保證質(zhì)量?首先是項(xiàng)目管理,剛才也有老師提到了測(cè)試前置,測(cè)試的極致是沒(méi)有測(cè)試,完全由開(kāi)發(fā)自己保證質(zhì)量,但由于開(kāi)發(fā)水平參差不齊,業(yè)務(wù)也很復(fù)雜,不同的開(kāi)發(fā)團(tuán)隊(duì),很難通過(guò)開(kāi)發(fā)自己保證質(zhì)量,需要測(cè)試建立整套的測(cè)試流程。在項(xiàng)目管理上,項(xiàng)目一定要規(guī)范立項(xiàng),我們發(fā)現(xiàn)前期測(cè)試,溝通過(guò)程中會(huì)出現(xiàn)很多問(wèn)題,比如需求不明確,低級(jí)問(wèn)題不斷出現(xiàn),中間反復(fù)溝通,消耗了很多精力,其實(shí)大多數(shù)項(xiàng)目在整個(gè)項(xiàng)目周期里留給測(cè)試的時(shí)間并不多,如果前期規(guī)劃不好,會(huì)浪費(fèi)很多時(shí)間,所以項(xiàng)目的合規(guī)性非常重要,必須要建立規(guī)范流程、有項(xiàng)目說(shuō)明、有項(xiàng)目文檔。另外,全周期的平臺(tái)化管理,任何一個(gè)節(jié)點(diǎn),任何一個(gè)事項(xiàng),在平臺(tái)里可以追溯,所有的項(xiàng)目都有一個(gè)時(shí)光軸,可以追溯到任何一個(gè)節(jié)點(diǎn),暫停,打回,bug修復(fù),或者測(cè)試通過(guò),我們都可以看到,可以快速定位到某一個(gè)節(jié)點(diǎn),比如項(xiàng)目延期,為什么延期,哪個(gè)環(huán)節(jié)出了什么問(wèn)題,通過(guò)平臺(tái)上的記錄我們都能夠很清楚的知道。通過(guò)將項(xiàng)目管理平臺(tái)和數(shù)據(jù)分析平臺(tái)進(jìn)行綁定,可以了解項(xiàng)目上線之后是什么狀況,進(jìn)而進(jìn)一步的掌控線上產(chǎn)品質(zhì)量。測(cè)試的極限就是沒(méi)有測(cè)試,要保證質(zhì)量,減少后期測(cè)試的投入,就要盡可能的加強(qiáng)開(kāi)發(fā)自身質(zhì)量建設(shè),不能出現(xiàn)低級(jí)的Bug,要在前期質(zhì)量建設(shè)上做好鋪墊。
在流程方面,我們做了很多事情,比如編譯打包自動(dòng)化、環(huán)境部署自動(dòng)化、基本功能測(cè)試自動(dòng)化,前端的,性能的,接口的,整個(gè)體系都有自動(dòng)化建設(shè)來(lái)支撐。
傳統(tǒng)流程是開(kāi)發(fā),開(kāi)發(fā)之后是自測(cè),提測(cè),冒煙測(cè)試,如果不通過(guò)就打回,冒煙測(cè)試通過(guò)就進(jìn)入QA測(cè)試環(huán)節(jié)。我們做了一件事情,將前面的所有部分抽象出來(lái),都放在全自動(dòng)化測(cè)試流程,編譯打包,提測(cè),冒煙測(cè)試和自動(dòng)化測(cè)試,所有都放到一個(gè)全自動(dòng)化測(cè)試流程里。這個(gè)環(huán)節(jié)目前不需要測(cè)試來(lái)參與,現(xiàn)在成為開(kāi)發(fā)全自動(dòng)化測(cè)試,提測(cè)這兩個(gè)環(huán)節(jié),然后有兩種情況,如果是性能測(cè)試QA直接確認(rèn)結(jié)果,同意上線,另外一種是有新功能需要驗(yàn)證,測(cè)試同學(xué)完成新功能的測(cè)試,比如某版塊進(jìn)行了新的優(yōu)化,因?yàn)槲覀冋麄€(gè)流程是全自動(dòng)化的,并不需要測(cè)試同學(xué)去參與,只需要走完所有的自動(dòng)化驗(yàn)證,我們能夠支持自動(dòng)化上線。
全自動(dòng)化的流程,一個(gè)項(xiàng)目提出來(lái)之后,首先會(huì)進(jìn)行公共代碼的檢查,因?yàn)樗赡軙?huì)影響到其它模塊,公共代碼是我們必須要檢查的,其次是配置文件的檢查,在配制文件方面,很多開(kāi)發(fā)同學(xué)有一個(gè)誤區(qū),改配制不需要測(cè)試,我們后來(lái)發(fā)現(xiàn)這是一個(gè)很大的誤區(qū),因?yàn)楦呐渲茖?dǎo)致項(xiàng)目出現(xiàn)了很多問(wèn)題。因此,我們把配制的驗(yàn)證作為自動(dòng)化建設(shè)的一個(gè)基本環(huán)節(jié)。另外是功能的回歸,功能、接口、模塊,離線建庫(kù),性能測(cè)試,DIFF測(cè)試,兼容性測(cè)試等,因?yàn)榫€上可能存在不同的版本,版本上線之后,對(duì)當(dāng)前版本是支持的,對(duì)上下版本的兼容需要進(jìn)行測(cè)試,所有環(huán)節(jié)都是在自動(dòng)化的過(guò)程中來(lái)實(shí)現(xiàn)的。
接口自動(dòng)化,我們對(duì)線上的數(shù)據(jù)進(jìn)行收集,成為我們的測(cè)試用例,當(dāng)然這些是不夠的,還需要構(gòu)造特定場(chǎng)景下自己的測(cè)試數(shù)據(jù),公共層對(duì)常用的函數(shù)進(jìn)行封裝,比如抓取函數(shù)、日志分析、寫(xiě)數(shù)據(jù)、發(fā)郵件的基本功能,配置層進(jìn)行配制項(xiàng)的管理,通過(guò)這個(gè)平臺(tái)實(shí)現(xiàn)接口的自動(dòng)化測(cè)試。
服務(wù)端也有一套自動(dòng)化的程序,完成對(duì)測(cè)試架構(gòu)及基本功能封裝達(dá)到業(yè)務(wù)測(cè)試人員不用關(guān)心測(cè)試架構(gòu)代碼,只需要按照格式,把case輸入進(jìn)去運(yùn)行就可以得到自動(dòng)化的結(jié)果。把測(cè)試框架跟case分離,降低測(cè)試人員參與自動(dòng)化測(cè)試的難度,讓大眾都能參與進(jìn)去。
前端自動(dòng)化平臺(tái),主要是通過(guò)python+shell+selenium實(shí)現(xiàn)。
性能測(cè)試自動(dòng)化,搜索有一個(gè)特點(diǎn),對(duì)性能要求特別嚴(yán)格,我們很多工作都是對(duì)系統(tǒng)性能進(jìn)行測(cè)試。之前所有的性能測(cè)試都是測(cè)試同學(xué)來(lái)做的,工作量比較大,工作內(nèi)容相似。我們開(kāi)發(fā)了自動(dòng)化性能測(cè)試平臺(tái),把測(cè)試人員釋放出來(lái),讓開(kāi)發(fā)同學(xué)自己去做性能測(cè)試,我們只做平臺(tái)功能和數(shù)據(jù)分析和最后結(jié)果的確認(rèn)和檢驗(yàn),降低測(cè)試人員的工作量。
通用性能測(cè)試平臺(tái)的測(cè)試結(jié)果,主要是關(guān)注機(jī)器的資源消耗情況,平臺(tái)使用簡(jiǎn)單,只需要提供相應(yīng)的地址,選擇需要的數(shù)據(jù),平臺(tái)全自動(dòng)化的運(yùn)行。我們還有定制化的,比如引擎,有時(shí)候會(huì)關(guān)注特定的指標(biāo),我們將基準(zhǔn)版的數(shù)據(jù)指標(biāo)集成到自動(dòng)化里面去,把基本的指標(biāo)標(biāo)準(zhǔn)化后和原有的數(shù)據(jù)進(jìn)行對(duì)比,如果發(fā)生變化了,就需要人工去進(jìn)行分析,定位看是哪里出了問(wèn)題。
性能測(cè)試自動(dòng)化的平臺(tái),它是數(shù)據(jù)定制化的,針對(duì)每塊業(yè)務(wù),我們可以定制化數(shù)據(jù),開(kāi)發(fā)不用關(guān)心數(shù)據(jù),只要選擇做什么業(yè)務(wù),選擇什么樣的數(shù)據(jù),點(diǎn)擊確認(rèn)就可以。平臺(tái)支持?jǐn)?shù)據(jù)上傳,有特定的數(shù)據(jù)去驗(yàn)證,可以自己上傳需要的數(shù)據(jù)。另外,支持多機(jī)器、多機(jī)房的發(fā)壓,我們要對(duì)不同的機(jī)房發(fā)壓,平臺(tái)也可以支持。另外是實(shí)時(shí)日志,如果測(cè)試需要觀察實(shí)時(shí)數(shù)據(jù)的狀況,有些性能測(cè)試不需要把整個(gè)測(cè)試做完之后再看結(jié)果,比如10分鐘,20分鐘,發(fā)現(xiàn)問(wèn)題了可以停止測(cè)試,去排查問(wèn)題,我們支持秒級(jí)的數(shù)據(jù)察看。另外是歷史任務(wù)管理,指標(biāo)變化情況,都可以在平臺(tái)里進(jìn)行察看。進(jìn)程監(jiān)控,在特定的任務(wù)里面需要關(guān)注某些進(jìn)程的情況,需要把進(jìn)程名稱(chēng)填進(jìn)去,可以通過(guò)平臺(tái)察看。
結(jié)果Diff,搜索引擎的case非常多,全覆蓋非常困難,每次測(cè)試,到底關(guān)注哪些query?我們只關(guān)注變化的那部分,只關(guān)注當(dāng)前這一版本到底結(jié)果發(fā)生了哪些不同的變化,比如Diff不同位置的占比。
前面講的是搜索業(yè)務(wù)線是很長(zhǎng)的,不僅有現(xiàn)場(chǎng)的流程,還有復(fù)雜的線下流程,怎么能夠保證?業(yè)務(wù)監(jiān)控這塊是非常重要的一個(gè)環(huán)節(jié)。我們分下面幾個(gè)方面,一個(gè)是基礎(chǔ)數(shù)據(jù)的監(jiān)控,從抓取萬(wàn)億級(jí)的到百億級(jí)的網(wǎng)頁(yè)庫(kù),這是非常復(fù)雜的過(guò)程,整個(gè)數(shù)據(jù)是什么狀況,有可能中間某個(gè)環(huán)節(jié)出現(xiàn)了問(wèn)題,數(shù)據(jù)突然停止更新了,或者突然消失了,我們需要通過(guò)監(jiān)控來(lái)判斷這個(gè)數(shù)據(jù)是不是存在。另外,每一個(gè)新的數(shù)據(jù)都有時(shí)間標(biāo)識(shí),我們要判斷這個(gè)時(shí)間戳是不是最新的。另外,數(shù)據(jù)的大小,如果發(fā)生了明顯的變化,是需要去關(guān)注的。還有,字段值是不是發(fā)生變化,都要通過(guò)監(jiān)控來(lái)發(fā)現(xiàn)。接口的監(jiān)控,接口的變化率,接口的正確性也是需要關(guān)注的。還有是查詢失敗率,我們控制在百分之一,甚至千分之一以內(nèi),如果超過(guò)了可能就出現(xiàn)了問(wèn)題。還有時(shí)效性,新聞查詢有最新的結(jié)果。泛時(shí)效性,比如購(gòu)房新政,都會(huì)有最新的消息,我們只關(guān)注近幾年的結(jié)果,你再出幾年前的數(shù)據(jù)就沒(méi)什么用處,所以這些信息也需要判斷。還有事件查詢有特型展現(xiàn)結(jié)果,比如國(guó)慶閱兵這樣的專(zhuān)題,是很新的事件,需要有特型展現(xiàn)的,給客戶更好的體驗(yàn)。另外是官網(wǎng)及高質(zhì)量url,比如淘寶、京東,如果最優(yōu)質(zhì)的結(jié)果沒(méi)有排在前面,有可能是我們的數(shù)據(jù)環(huán)節(jié),索引環(huán)節(jié),甚至數(shù)據(jù)篩選環(huán)境出現(xiàn)了問(wèn)題,也是需要關(guān)注。
上面是測(cè)試基本環(huán)節(jié)應(yīng)該做的事情,測(cè)試完了之后呢?效果怎么樣?最終還是用戶說(shuō)了算,你如果覺(jué)得做的是非常好的產(chǎn)品,但是用戶不使用,有可能說(shuō)明產(chǎn)品質(zhì)量還是有問(wèn)題的,怎么驗(yàn)證呢?A/B實(shí)驗(yàn)就是很好的檢驗(yàn)方式。
AB實(shí)驗(yàn)是很重要的環(huán)節(jié),一個(gè)是分流,另外是數(shù)據(jù)。把我們整個(gè)搜索流量分成不同的桶,根據(jù)實(shí)驗(yàn)配置進(jìn)行分流,決定某個(gè)實(shí)驗(yàn)到底命中哪些用戶,再通過(guò)后面的數(shù)據(jù)分析,看整個(gè)效果的好壞。AB實(shí)驗(yàn)也是全自動(dòng)化的流程,全方位、多角度的對(duì)產(chǎn)品數(shù)據(jù)指標(biāo)進(jìn)行分析。
上面都做完了可能還是不能完全保證質(zhì)量,為什么?因?yàn)槲覀冞€是會(huì)收到用戶反饋,使用過(guò)程中還會(huì)有各種問(wèn)題,并不是測(cè)試漏測(cè)出現(xiàn)的,而是因?yàn)楫a(chǎn)品復(fù)雜,query千變?nèi)f化,很難覆蓋每一個(gè)場(chǎng)景,所以我們開(kāi)發(fā)了線上自動(dòng)化的分析系統(tǒng)。
從效果上來(lái)看,我們做了一些嘗試,比如截圖聚類(lèi),把我們的頁(yè)面截取下來(lái),去掉無(wú)關(guān)的信息進(jìn)行機(jī)器學(xué)習(xí)的訓(xùn)練,把一些特征更好的結(jié)果篩選出來(lái),把特征不好的結(jié)果也篩選出來(lái),發(fā)現(xiàn)我們?cè)谠O(shè)計(jì)方面的質(zhì)量問(wèn)題。
另外是sug,就是我們的智能推薦,也有可能出現(xiàn)badcase。我們會(huì)進(jìn)行語(yǔ)料的處理,進(jìn)行主題向量變換,相似度的計(jì)算,找出推薦的badcase。比如推薦出現(xiàn)了重復(fù),比如2399小游戲,有很多重復(fù)性的數(shù)據(jù),通過(guò)數(shù)據(jù)處理之后,發(fā)現(xiàn)有些很相似的去掉。整個(gè)自動(dòng)化分析涉及一些比較好的技術(shù),比如圖片處理,機(jī)器學(xué)習(xí),包括算法。
現(xiàn)在大家都在探討測(cè)試左移,左移最重要的事情就是更好的去提升正式測(cè)試前版本的質(zhì)量,減少測(cè)試無(wú)謂的消耗。
還有就是測(cè)試右移,左移是提升開(kāi)發(fā)的質(zhì)量,右移是基于用戶數(shù)據(jù)去做分析,做預(yù)測(cè),做質(zhì)量的自動(dòng)化建設(shè)。
這就是我今天要講的所有內(nèi)容,謝謝大家!