我是在朋友圈看到有朋友轉(zhuǎn)發(fā)了這個(gè)务漩,跑來(lái)嘗試回答一下這個(gè)問(wèn)題拄衰。
看評(píng)論,有人說(shuō)“你不怕只會(huì)測(cè)試不會(huì)寫(xiě)代碼的測(cè)試殺了你嗎饵骨?”翘悉,還有人說(shuō)“測(cè)試跟你有仇啊居触?”妖混±铣啵總之有人開(kāi)始不冷靜了,開(kāi)始義憤填膺卷街了制市。這樣抬旺,是不好的……有問(wèn)題就問(wèn),是好習(xí)慣嘛~
好了祥楣,扯淡完畢开财。讓我們拋開(kāi)各種私心雜念,客觀冷靜的看看這個(gè)問(wèn)題误褪。題主這個(gè)問(wèn)題問(wèn)得很好床未,我很早以前也這樣想過(guò)。但是后來(lái)發(fā)現(xiàn)振坚,這個(gè)問(wèn)法本身就是有問(wèn)題的。
我嘗試從幾個(gè)角度來(lái)分析斋扰,在正式分析開(kāi)始前渡八,我們先把范圍劃定在軟件開(kāi)發(fā)這個(gè)圈子里頭,再來(lái)看題主的問(wèn)題有哪些問(wèn)題传货,并且對(duì)這些問(wèn)題進(jìn)行解釋屎鳍。
這部分包括這幾點(diǎn)誤解:
將開(kāi)發(fā)階段、測(cè)試階段完全剝離问裕。
對(duì)測(cè)試的理解有些偏差逮壁,誤認(rèn)為測(cè)試只是在產(chǎn)品做出來(lái)之后,使用它粮宛,然后挑毛病窥淆,找bug。
誤認(rèn)為測(cè)試只有功能性的校驗(yàn)巍杈。
下頭對(duì)這3點(diǎn)逐一解釋?zhuān)?/p>
1.將開(kāi)發(fā)階段忧饭、測(cè)試階段完全剝離。
讓我們來(lái)看看題主的問(wèn)題:
為什么互聯(lián)網(wǎng)公司不開(kāi)除測(cè)試筷畦,轉(zhuǎn)而讓大眾來(lái)測(cè)词裤,找到一個(gè)bug給100元?
這個(gè)問(wèn)題有個(gè)假設(shè)鳖宾,就是開(kāi)發(fā)階段吼砂、測(cè)試階段完全剝離開(kāi)了。開(kāi)發(fā)階段單純地就是開(kāi)發(fā)人員敲代碼鼎文,然后出來(lái)的東西交給測(cè)試人員去做測(cè)試渔肩。
我不否認(rèn),現(xiàn)在依然存在這樣的實(shí)踐方式拇惋。但是赖瞒,這不是一個(gè)好的方式女揭。因?yàn)檫@種流程,把發(fā)現(xiàn)bug的時(shí)間點(diǎn)推遲了栏饮。而發(fā)現(xiàn)bug的時(shí)間點(diǎn)越靠后吧兔,修復(fù)它所要付出的代價(jià)就越大。
這點(diǎn)應(yīng)該很容易理解袍嬉,比如你敲釘子境蔼,如果一口氣敲完了才發(fā)現(xiàn),敲歪了伺通,那就得拔出來(lái)重新來(lái)箍土,可是東西上已經(jīng)有一個(gè)很深的洞了。所以罐监,好的方式是敲一敲吴藻,檢查一下,隨時(shí)糾正方向弓柱,確保前進(jìn)的大方向是正確的沟堡。
軟件更是如此,某個(gè)bug可能是在最底層的地方發(fā)生的矢空,如果早期發(fā)現(xiàn)航罗,定位也容易,修復(fù)起來(lái)被牽扯到的地方也少屁药,付出的代價(jià)可以接受粥血。因?yàn)閎ug的產(chǎn)生可能是多個(gè)原因,有可能是功能性的酿箭,也有可能是對(duì)業(yè)務(wù)理解的偏差導(dǎo)致開(kāi)始就做錯(cuò)了复亏。
如果在產(chǎn)品做出來(lái),發(fā)布給最終用戶之后才發(fā)現(xiàn)缭嫡。那個(gè)時(shí)候再排查到底哪里出了問(wèn)題蜓耻,就不是一時(shí)半會(huì)能做到的了,代價(jià)很大械巡。
所以比較好的實(shí)踐方式刹淌,是由專(zhuān)業(yè)的業(yè)務(wù)人員把要做的東西切割成足夠小的、彼此獨(dú)立的讥耗、可單獨(dú)交付的模塊有勾,開(kāi)發(fā)、測(cè)試以及業(yè)務(wù)人員及時(shí)溝通古程、及時(shí)反饋蔼卡,一個(gè)一個(gè)小模塊完成,隨時(shí)做隨時(shí)測(cè)挣磨。把發(fā)現(xiàn)bug的時(shí)間點(diǎn)盡量往前推雇逞,這樣就可以把修復(fù)它的代價(jià)降得盡可能小荤懂。
當(dāng)然,小模塊都通過(guò)測(cè)試塘砸,并不意味著所有小模塊拼裝起來(lái)組成的系統(tǒng)一定正確节仿,還需要進(jìn)行層次高一點(diǎn)的集成測(cè)試。這就引出了第2點(diǎn)掉蔬。
2.測(cè)試就是找bug的廊宪?
對(duì)測(cè)試的理解有些偏差,誤認(rèn)為測(cè)試只是在產(chǎn)品做出來(lái)之后女轿,使用它箭启,然后挑毛病,找bug蛉迹。
有這樣的偏差并不奇怪傅寡,因?yàn)閳?zhí)這樣想法的人太多了,甚至包括一些軟件行業(yè)的從業(yè)人員北救。比如有這樣的說(shuō)法:
開(kāi)發(fā)就是敲代碼的荐操,測(cè)試就是找bug的
如果是業(yè)外人士,我覺(jué)得有這樣的誤解沒(méi)什么扭倾。畢竟,隔行如隔山挽绩,但業(yè)內(nèi)人士這樣理解的話膛壹,真的不知道該說(shuō)什么好了。開(kāi)發(fā)是不是只管敲代碼唉堪,這里不談模聋。這里我們要談的,是唠亚,測(cè)試不是單純的找bug链方。
現(xiàn)在我們承接第1點(diǎn),來(lái)說(shuō)說(shuō)為什么測(cè)試不是在產(chǎn)品做出來(lái)之后灶搜,單純的找bug祟蚀。
先科普的一個(gè)東西,就是測(cè)試金字塔割卖。
這是Martin Fowler的一篇博客中提到的《TestPyramid》前酿。
看不懂這個(gè)圖沒(méi)關(guān)系,我來(lái)慢慢解釋鹏溯。
測(cè)試是分層的罢维,它真的不是只有在產(chǎn)品做出來(lái)后才開(kāi)始的,并且也不能那個(gè)時(shí)候才開(kāi)始丙挽。原因在第1點(diǎn)里已經(jīng)解釋過(guò)了肺孵。一個(gè)工程級(jí)別的軟件產(chǎn)品匀借,它的測(cè)試大致覆蓋了代碼級(jí)別的單元測(cè)試,模塊級(jí)別的API測(cè)試平窘,還有端到端的集成測(cè)試吓肋。這并不全面,還有很多其他類(lèi)型初婆,這里我們只是大概分成這3種蓬坡,便于解釋、理解磅叛。
底部那層屑咳,就是代碼級(jí)別的單元測(cè)試。它是發(fā)現(xiàn)bug的最前沿陣地弊琴,能在這個(gè)層級(jí)抓住的bug兆龙,修復(fù)起來(lái)的代價(jià),會(huì)小很多敲董。而且這部分測(cè)試數(shù)量很大紫皇,驗(yàn)證的東西也不是最終用戶所能理解的,通常都是自動(dòng)化運(yùn)行腋寨,有很多種框架可供選擇聪铺。只有這層的測(cè)試全部通過(guò),才會(huì)運(yùn)行后面更上層的測(cè)試萄窜。
中間那層铃剔,是service級(jí)別的測(cè)試,大概可以理解成模塊間的API測(cè)試查刻。到這一層键兜,基本每個(gè)模塊的功能都得到了保障,但是他們彼此的協(xié)作不一定正常穗泵,所以這層集中要測(cè)的就是不同模塊間的協(xié)作普气、通信了。這部分測(cè)試數(shù)量第二多佃延,也是自動(dòng)化運(yùn)行现诀。通過(guò)之后,就可以開(kāi)始最上面那層的測(cè)試了履肃。
頂部那層赶盔,這部分測(cè)試的數(shù)量最少,是UI級(jí)別的測(cè)試榆浓。測(cè)試的過(guò)程大致可以認(rèn)為是于未,模擬使用產(chǎn)品的過(guò)程,最終用戶也能理解了。比如從注冊(cè)用戶開(kāi)始烘浦,到注冊(cè)成功抖坪,登錄成功,頁(yè)面正確加載闷叉。這種校驗(yàn)最基本功能的測(cè)試擦俐,叫冒煙測(cè)試,確保產(chǎn)品可以正確運(yùn)行握侧,沒(méi)有無(wú)法啟動(dòng)之類(lèi)的重大缺陷蚯瞧。除此之外,還有部分不便自動(dòng)化的測(cè)試品擎,需要手動(dòng)測(cè)試埋合,同時(shí)還會(huì)校驗(yàn)一些邊角的情形。
即便上面說(shuō)的測(cè)試全部通過(guò)萄传,也不能確保產(chǎn)品萬(wàn)無(wú)一失沒(méi)有bug甚颂,這是不可能的。只能說(shuō)秀菱,通過(guò)了那么多層的測(cè)試振诬,產(chǎn)品處在一個(gè)穩(wěn)定狀態(tài)了,最終用戶的使用體驗(yàn)良好衍菱,絕大部分需求都可以滿足赶么。
3.誤認(rèn)為測(cè)試只有功能性的校驗(yàn)。
題主之所以這樣問(wèn)脊串,可能在一定程度上會(huì)誤認(rèn)為辫呻,測(cè)試只是在使用產(chǎn)品的過(guò)程中,發(fā)現(xiàn)了功能上洪规、界面上不合理的地方印屁,報(bào)告給開(kāi)發(fā)循捺,他們修復(fù)斩例,就結(jié)束了。
其實(shí)不然从橘,測(cè)試除了功能性的校驗(yàn)念赶,還有安全方面的測(cè)試、性能方面的測(cè)試恰力、兼容性的測(cè)試叉谜,等等等等。一個(gè)負(fù)責(zé)任的企業(yè)踩萎,不可能把包含安全漏洞停局、性能奇差、對(duì)運(yùn)行系統(tǒng)有各種吹毛求疵嚴(yán)酷要求的產(chǎn)品發(fā)布給普通用戶,就算他們敢發(fā)布董栽,用戶也會(huì)選擇唾棄他們码倦。所以在發(fā)布產(chǎn)品之前,肯定有這方面的測(cè)試锭碳,而這方面的測(cè)試袁稽,不是普通用戶所能勝任的。
喏擒抛,現(xiàn)在看到了吧推汽。其實(shí)測(cè)試也是一個(gè)復(fù)雜的工程,并非單純的使用最終產(chǎn)品歧沪,找到其中的缺陷和問(wèn)題歹撒,再提交這么簡(jiǎn)單的事情。
說(shuō)到這里槽畔,我猜想栈妆,題主所說(shuō)的讓大眾去測(cè)試,去找bug厢钧,很大程度應(yīng)該是指測(cè)試金字塔中鳞尔,位于頂層的那部分。讓用戶通過(guò)自己的使用早直,遇到bug直接報(bào)寥假。
而且,前面也有人回答了霞扬,單元測(cè)試那些是開(kāi)發(fā)做的糕韧。對(duì)于那些測(cè)試金字塔中層級(jí)較低的測(cè)試,可以由開(kāi)發(fā)人員或者其他相應(yīng)的技術(shù)人員在產(chǎn)品發(fā)布前解決喻圃。對(duì)于那些層級(jí)高的萤彩,比如UI級(jí)別的測(cè)試,可以分發(fā)出去斧拍,讓最終用戶來(lái)測(cè)試雀扶,并且獎(jiǎng)錢(qián)!
OK肆汹,沒(méi)問(wèn)題愚墓。那就依照這個(gè)說(shuō)法,我再來(lái)解釋為什么UI級(jí)別的測(cè)試也不能不管不顧的直接扔給最終用戶昂勉。前面有人也提到了相關(guān)的東西浪册,我在這里依舊分幾點(diǎn)來(lái)說(shuō),先來(lái)個(gè)summary岗照,主要是這幾個(gè)點(diǎn):
測(cè)試是一項(xiàng)工程村象,需要計(jì)劃笆环、策略。不能無(wú)腦亂來(lái)厚者。
對(duì)于bug的描述和修復(fù)咧织,是有相應(yīng)要求的。普通用戶做不來(lái)籍救。
詳細(xì)解釋如下:
即便對(duì)于大家認(rèn)為沒(méi)有技術(shù)含量的手動(dòng)測(cè)試习绢,也要制定相應(yīng)的測(cè)試策略、測(cè)試計(jì)劃蝙昙。確定使用什么方法去測(cè)試產(chǎn)品闪萄,如何測(cè)試,開(kāi)展測(cè)試時(shí)如何組織測(cè)試用例奇颠,人員如何分配败去,團(tuán)隊(duì)如何分工合作。如果沒(méi)有這些綱領(lǐng)性烈拒、指導(dǎo)性的東西圆裕,面對(duì)產(chǎn)品那么多的功能,全憑腦子想荆几,用到哪里測(cè)到哪里吓妆?這個(gè)真有點(diǎn)天方夜譚了。蘇杰的回答中已經(jīng)提到不少吨铸。
要構(gòu)建這么多測(cè)試行拢,是需要團(tuán)隊(duì)內(nèi)的人員一起努力、合作的诞吱。要考慮哪些東西需要提前注意舟奠,哪些情況需要單獨(dú)拿出來(lái)測(cè)試,哪些東西不重要可以不測(cè)房维。在開(kāi)發(fā)的過(guò)程中就盡量避免出現(xiàn)問(wèn)題沼瘫,而不是等它出現(xiàn)再修。
還是那句話咙俩,測(cè)試是一項(xiàng)工程耿戚。發(fā)現(xiàn)了bug,需要把它用合理的形式記錄下來(lái)暴浦,反饋給開(kāi)發(fā)方溅话,再經(jīng)過(guò)多方人員的溝通晓锻,修復(fù)歌焦,回歸測(cè)試,才能確認(rèn)修復(fù)好了砚哆,再次發(fā)布產(chǎn)品独撇。
對(duì)于記錄bug也有一些要求,比如要闡明在運(yùn)行什么系統(tǒng)下、系統(tǒng)的版本纷铣、產(chǎn)品的版本卵史、如果是瀏覽器中打開(kāi)還要標(biāo)明瀏覽器版本、重現(xiàn)步驟搜立、提供截圖以躯、提供測(cè)試賬號(hào)。
開(kāi)發(fā)人員拿到bug后啄踊,可以根據(jù)那些信息嘗試快速地復(fù)現(xiàn)bug忧设,再定位,再修復(fù)颠通。如果中間出現(xiàn)問(wèn)題址晕,需要跟報(bào)bug的人員溝通、確認(rèn)顿锰,是產(chǎn)品本身就如此設(shè)計(jì)的谨垃?是偶然發(fā)生無(wú)法復(fù)現(xiàn)的?是優(yōu)先級(jí)很低暫且不用管的硼控?
這些事情刘陶,如果是在團(tuán)隊(duì)內(nèi),很好實(shí)施牢撼。如果需要跟用戶做這樣的溝通易核,那真是……費(fèi)死牛勁了。?所以浪默,即便大家都認(rèn)為沒(méi)有技術(shù)含量的UI測(cè)試牡直,也不能直接扔給用戶去做。
最后纳决,最重要的一點(diǎn)在這里:
用戶使用產(chǎn)品碰逸,享受的是體驗(yàn)。
目的是高效舒服地解決自己的問(wèn)題阔加。
如果沒(méi)有任何測(cè)試饵史,直接把產(chǎn)品扔出去,讓用戶負(fù)責(zé)測(cè)試胜榔。前面提到的安全胳喷、性能、兼容性還有功能上的各種問(wèn)題夭织,任何一個(gè)都會(huì)導(dǎo)致用戶崩潰吭露。
別的不說(shuō),如果12306在發(fā)布后尊惰,你的身份證號(hào)讲竿、買(mǎi)票的銀行卡號(hào)泥兰、密碼會(huì)被隨意泄露,你會(huì)用嗎题禀?你愿意用一下鞋诗,冒這么大的風(fēng)險(xiǎn)去賺那100塊錢(qián)嗎?就算安全足夠好迈嘹,但是性能差削彬,12306在高峰期卡成什么樣,罵的人少嗎秀仲?還有使用過(guò)程的體驗(yàn)吃警,不少文章也批過(guò)12306的購(gòu)票體驗(yàn)差吧,還說(shuō)搶票插件的體驗(yàn)真不錯(cuò)啄育!
這些東西都是測(cè)試過(guò)程中可以發(fā)現(xiàn)酌心、避免和修復(fù)的。但直接放到最終用戶使用的階段再處理挑豌,市場(chǎng)那么多競(jìng)爭(zhēng)對(duì)手安券,你的公司敢這么玩嗎?你以為就你一家搞壟斷業(yè)務(wù)懊ビⅰ侯勉?啊,不對(duì)铝阐,好像說(shuō)錯(cuò)了什么……
澄清一下址貌,我沒(méi)有黑12306的意思。畢竟高峰期買(mǎi)票的人那么多徘键,購(gòu)票的流程又是那么復(fù)雜练对,網(wǎng)上也有不少帖子分析過(guò),還是阿里的工程師寫(xiě)的吹害。我們祝12306能吸取大家提的有益意見(jiàn)螟凭,及時(shí)改進(jìn),越辦越好它呀!
所以螺男,無(wú)論如何都不能把質(zhì)量沒(méi)有保障的產(chǎn)品,直接扔給最終用戶去做測(cè)試纵穿。
最后感慨一下下隧,大家普遍對(duì)測(cè)試有一定程度的誤解,覺(jué)得測(cè)試就是在界面點(diǎn)點(diǎn)點(diǎn)谓媒,找?guī)讉€(gè)茬淆院,就算完事了。
其實(shí)篙耗,測(cè)試需要專(zhuān)業(yè)的人士迫筑,需要對(duì)產(chǎn)品的透徹理解江咳,需要對(duì)用戶的同理心亦歉,需要對(duì)市場(chǎng)的把握,需要足夠好的大局觀议慰,需要足夠的耐心蒙保,需要一定的技術(shù)功底辕棚,需要寬泛的知識(shí)面,需要良好的溝通能力邓厕,需要能夠協(xié)調(diào)團(tuán)隊(duì)中不同角色逝嚎。
說(shuō)的好像很高級(jí),好多事情是產(chǎn)品經(jīng)理或者項(xiàng)目經(jīng)理干的活详恼,但是补君,說(shuō)實(shí)話,想做一個(gè)好的測(cè)試人員昧互,這些東西真的都需要挽铁。當(dāng)然,如果愿意踏踏實(shí)實(shí)做一個(gè)點(diǎn)界面的人敞掘,那就不需要這些叽掘。
說(shuō)句題外話,從另一個(gè)角度看玖雁,題主這個(gè)建議其實(shí)很好更扁,企業(yè)可以發(fā)布產(chǎn)品后,懸賞bug赫冬。對(duì)提出合理bug的用戶予以一定的金錢(qián)獎(jiǎng)勵(lì)浓镜,這倒是一個(gè)不錯(cuò)的營(yíng)銷(xiāo)手段。
部分資源來(lái)源網(wǎng)絡(luò),如有侵權(quán),請(qǐng)來(lái)信告知!