對(duì)測(cè)試人員來(lái)講惭蟋,什么事情比較尷尬苗桂?
——線上出問(wèn)題。
再尷尬一點(diǎn)兒呢告组?
——沒(méi)測(cè)到煤伟,線上出問(wèn)題。
最尷尬呢木缝?
——明明測(cè)到了便锨,線上還是出問(wèn)題。
場(chǎng)景1:沒(méi)測(cè)到我碟,生產(chǎn)環(huán)境出問(wèn)題
意料之內(nèi)情理之中放案,這太正常了。沒(méi)測(cè)到出了問(wèn)題不該驚訝怎囚,沒(méi)出問(wèn)題才該燒香卿叽。此時(shí)不應(yīng)指責(zé)出問(wèn)題桥胞,而應(yīng)思考沒(méi)測(cè)到的原因是什么恳守。第一反應(yīng)是測(cè)試人員遺漏了,好像也沒(méi)更多原因贩虾。但當(dāng)我們把視角切換到真實(shí)研發(fā)過(guò)程中催烘,就會(huì)發(fā)現(xiàn)沒(méi)測(cè)到的原因?qū)嵲谔嗔耍?/p>
沒(méi)考慮到,測(cè)試漏測(cè)了
這真是測(cè)試的鍋缎罢,測(cè)試人員確實(shí)應(yīng)該全面理解業(yè)務(wù)伊群,設(shè)計(jì)高效覆蓋的用例集。但在功能設(shè)計(jì)時(shí)如有良好規(guī)劃策精,可以減少?zèng)]想到造成的漏測(cè)舰始。考慮到了,但還是沒(méi)測(cè)
一般是時(shí)間緊任務(wù)急咽袜,來(lái)不及測(cè)丸卷,但又沒(méi)向團(tuán)隊(duì)暴露風(fēng)險(xiǎn)。多半也是測(cè)試的失職询刹。不可抗力必須上線谜嫉,來(lái)不及測(cè)
大家清楚的知道風(fēng)險(xiǎn),但遇到不可抗力凹联,如法律法規(guī)等沐兰,無(wú)法完成全部測(cè)試就必須上線,這種情況我們且上且觀察蔽挠,共同承擔(dān)風(fēng)險(xiǎn)住闯,并充分思考線上事故的緊急預(yù)案。流程問(wèn)題,未經(jīng)測(cè)試就上線
開(kāi)發(fā)自己上線了功能寞秃,沒(méi)經(jīng)過(guò)測(cè)試人員測(cè)試斟叼,也沒(méi)有充分自測(cè)。這種鬼故事在過(guò)去的職業(yè)生涯中我至少見(jiàn)過(guò)5次春寿。還是不能寄希望于人的專(zhuān)業(yè)性朗涩,更多應(yīng)依賴(lài)于可控可追溯的流程體系來(lái)保證。大家認(rèn)同不需要測(cè)绑改,直接上
比如修改文案谢床,或做簡(jiǎn)單的圖片替換等。越是認(rèn)為沒(méi)問(wèn)題的厘线,往往越出幺蛾子识腿。就好比我們埋頭苦干往往沒(méi)人看,剛要?jiǎng)澦熳常ь^就是老板清靜如水的目光渡讼。軟件就跟成精了一樣,分分鐘教你做人耳璧,質(zhì)量工作真是一絲都不能倦怠成箫。所有人都沒(méi)想到,就沒(méi)測(cè)
之前的一個(gè)項(xiàng)目上旨枯,既有常規(guī)功能的迭代上線蹬昌,又有特殊功能只迭代不上線,為了好區(qū)分攀隔,我們?yōu)椴簧暇€的功能做了開(kāi)關(guān)皂贩,其實(shí)代碼都上去了,只是Feature沒(méi)打開(kāi)昆汹。一次規(guī)模稍大的常規(guī)上線部署完成后明刷,按照慣例驗(yàn)證生產(chǎn)環(huán)境,測(cè)試人員驚訝地發(fā)現(xiàn)本該關(guān)著的功能被打開(kāi)了满粗,不該出現(xiàn)的功能出現(xiàn)了辈末。于是連忙把開(kāi)關(guān)關(guān)掉,并排查原因败潦,發(fā)現(xiàn)是有一個(gè)數(shù)據(jù)庫(kù)腳本把開(kāi)關(guān)數(shù)據(jù)導(dǎo)到生產(chǎn)環(huán)境了本冲。從此以后,每次上線我們都會(huì)檢查所有Feature Toggle的狀態(tài)劫扒。
以上列舉了一些原因檬洞,可能還有其他更多原因。不管什么原因沒(méi)測(cè)到沟饥,終究還是讓缺陷逃逸到生產(chǎn)了添怔。但只要我們找到?jīng)]測(cè)到的原因湾戳,有針對(duì)性的改進(jìn),還是比較容易避免這類(lèi)問(wèn)題的广料。
場(chǎng)景2:明明測(cè)了砾脑,生產(chǎn)環(huán)境還出問(wèn)題
常在河邊走哪有不濕鞋,測(cè)了還出事兒艾杏,這才是該懷疑人生的場(chǎng)景韧衣。這種情況往往問(wèn)題也不好排查,通常是先趕緊排查問(wèn)題购桑,一定時(shí)間窗內(nèi)找不到問(wèn)題或無(wú)法快速解決畅铭,哪怕先回滾呢,事后我們?cè)僮屑?xì)復(fù)盤(pán)勃蜘。測(cè)了還出事兒其實(shí)并不少見(jiàn)硕噩,原因也同樣有很多。
以為測(cè)了缭贡,其實(shí)沒(méi)測(cè)
由于測(cè)試人員對(duì)業(yè)務(wù)理解不夠充分炉擅,或者測(cè)試設(shè)計(jì)能力不足,以為已經(jīng)充分測(cè)試了阳惹,但其實(shí)遺漏了比較關(guān)鍵的測(cè)試用例谍失。這類(lèi)問(wèn)題可以直接等同于場(chǎng)景1中的某種情況。環(huán)境差異性
由于生產(chǎn)環(huán)境和測(cè)試環(huán)境的差異性導(dǎo)致測(cè)試結(jié)果的失效穆端。不妨腦洞一下袱贮,都有哪些因素造成了環(huán)境差異性仿便?比如軟件配置上的差異:數(shù)據(jù)庫(kù)賬戶(hù)体啰、接口配置、服務(wù)和端口嗽仪、第三方插件荒勇、集成服務(wù)、不同的應(yīng)用渠道等……或者其他硬件上的差異闻坚。這種情況下可能并不是被測(cè)軟件本身的缺陷沽翔,但由于環(huán)境差異性導(dǎo)致了測(cè)試環(huán)境通過(guò)的用例,在生產(chǎn)環(huán)境下得到了不同的結(jié)果窿凤。數(shù)據(jù)差異性
由于測(cè)試數(shù)據(jù)的差異性導(dǎo)致的生產(chǎn)環(huán)境缺陷并不少見(jiàn)仅偎。在測(cè)試環(huán)境,測(cè)試人員選取典型的測(cè)試數(shù)據(jù)進(jìn)行測(cè)試雳殊,或許是批量生成的有一定規(guī)律的測(cè)試數(shù)據(jù)橘沥。這些數(shù)據(jù)可能用著順手每次都會(huì)被復(fù)用,也可能形成了針對(duì)特定業(yè)務(wù)的測(cè)試數(shù)據(jù)集夯秃。這是好事座咆,但往往就像耐藥性一樣痢艺,這些被測(cè)軟件用習(xí)慣的數(shù)據(jù)不利于揭示新的或隱藏的缺陷。而在生產(chǎn)環(huán)境介陶,由于用戶(hù)量大堤舒、操作不規(guī)范、真實(shí)業(yè)務(wù)的復(fù)雜性等原因哺呜,使得生產(chǎn)環(huán)境的數(shù)據(jù)更具備多樣性舌缤,這就給測(cè)試結(jié)果的準(zhǔn)確性帶來(lái)更大的挑戰(zhàn)。(可參考文末推薦閱讀文章了解更多內(nèi)容)用戶(hù)量級(jí)/業(yè)務(wù)量級(jí)差異性
這其實(shí)也是數(shù)據(jù)差異性的一種某残,單提出來(lái)是因?yàn)橐l(fā)的缺陷不同友驮,上一種情況引發(fā)的是特定測(cè)試用例的結(jié)果不準(zhǔn)確,或者說(shuō)是普通的缺陷驾锰。而由于業(yè)務(wù)量級(jí)不同引發(fā)的往往是性能缺陷卸留,高并發(fā)、大量堆積的業(yè)務(wù)數(shù)據(jù)造成服務(wù)中斷等椭豫,這些情況引發(fā)的缺陷往往業(yè)務(wù)影響更大耻瑟,定位、修復(fù)和性能調(diào)優(yōu)的難度也更大赏酥。哪怕在測(cè)試環(huán)境進(jìn)行了充分的性能測(cè)試喳整,也極有可能在生產(chǎn)環(huán)境并行大量其他業(yè)務(wù)的條件下,造成災(zāi)難般的性能缺陷裸扶。其他集成問(wèn)題
與集成方約定的上線時(shí)間框都、切換動(dòng)作、兼容方式呵晨、集成驗(yàn)證等魏保,都有可能在測(cè)試環(huán)境和生產(chǎn)環(huán)境有所不同。因此摸屠,在上線后與集成方一起驗(yàn)證集成功能的正確性非常必要谓罗。畢竟相比于自己的軟件缺陷,集成引起的缺陷可控性更差季二,修復(fù)周期也更長(zhǎng)檩咱。應(yīng)盡早發(fā)現(xiàn)這類(lèi)缺陷,以免造成更大的損失胯舷。上線不完全
這種就更詭異了刻蚯,軟件功能完全沒(méi)問(wèn)題,各種差異性也已排除或修復(fù)桑嘶,但仍然可能因?yàn)榘l(fā)布問(wèn)題死在線上炊汹。由于發(fā)布本身的復(fù)雜性、上線功能較多不翩、服務(wù)間功能耦合兵扬、或是上線步驟繁瑣麻裳、手動(dòng)操作過(guò)多等原因,都有可能引起上線不完整器钟,一部分關(guān)鍵代碼沒(méi)有上線津坑。這類(lèi)問(wèn)題好發(fā)現(xiàn)好排查,但著實(shí)惡心人傲霸,本不應(yīng)發(fā)生疆瑰。
測(cè)試到底該解決什么問(wèn)題?
先上結(jié)論昙啄,相比于發(fā)現(xiàn)更多缺陷穆役,我認(rèn)為測(cè)試最應(yīng)該解決的問(wèn)題是(每個(gè)字都很重要):
排除
用戶(hù)或客戶(hù)
對(duì)軟件的預(yù)期
和軟件真正的表現(xiàn)
在生產(chǎn)環(huán)境上的
差異
具體怎么做呢?可參考以下列表逐步遞進(jìn)地完善實(shí)踐:
- 充分了解被測(cè)業(yè)務(wù)
- 提升測(cè)試設(shè)計(jì)能力
- 在測(cè)試環(huán)境梳凛,確保軟件業(yè)務(wù)功能沒(méi)問(wèn)題
- 充分思考環(huán)境差異性
- 排除數(shù)據(jù)差異性耿币,用多樣化的數(shù)據(jù)進(jìn)行測(cè)試
- 排除或盡力約束集成方問(wèn)題
- 在預(yù)生產(chǎn)環(huán)境進(jìn)行完整的回歸測(cè)試和發(fā)布演練(在發(fā)布過(guò)程復(fù)雜或?qū)Πl(fā)布時(shí)間限制較嚴(yán)格時(shí)可選)
- 對(duì)發(fā)布后可能出現(xiàn)的風(fēng)險(xiǎn)進(jìn)行預(yù)判,確認(rèn)快速恢復(fù)機(jī)制
- 采用自動(dòng)化流程韧拒、發(fā)布預(yù)演等實(shí)踐淹接,確保軟件完全發(fā)布
- 完成上線后,立即對(duì)生產(chǎn)環(huán)境進(jìn)行允許的測(cè)試和檢驗(yàn)
- 投產(chǎn)使用后叛溢,持續(xù)監(jiān)控服務(wù)日志和業(yè)務(wù)數(shù)據(jù)
本文就進(jìn)行到這兒了塑悼。大家遇到過(guò)哪些類(lèi)似的血淚故事呢?歡迎分享和討論楷掉。
——————————————————————————————————————————
推薦閱讀
1.《生產(chǎn)環(huán)境又有問(wèn)題厢蒜?都是臟數(shù)據(jù)惹的禍!》
2.《一次Testing in Production方案的探索》