軟件測(cè)試工程師是一個(gè)歷史很悠久的職位,可以說(shuō)從有軟件開(kāi)發(fā)這個(gè)行業(yè)以來(lái)草丧,就開(kāi)始有了軟件測(cè)試工程師的角色狸臣。隨著時(shí)代的發(fā)展,軟件測(cè)試工程師的角色和職責(zé)也在悄然發(fā)生著變化昌执,從一開(kāi)始單純的在瀑布式開(kāi)發(fā)流程中擔(dān)任測(cè)試階段的執(zhí)行者烛亦,到敏捷開(kāi)發(fā)流程中QA(Quality Assurance)角色,為整個(gè)團(tuán)隊(duì)和產(chǎn)品的質(zhì)量負(fù)責(zé)懂拾,測(cè)試工程師的職責(zé)和邊界不斷的擴(kuò)大煤禽。近年來(lái)互聯(lián)網(wǎng)行業(yè)的很多測(cè)試工程師被稱為是測(cè)試開(kāi)發(fā)工程師,也就是要具備自動(dòng)化測(cè)試和測(cè)試工具開(kāi)發(fā)能力的測(cè)試工程師委粉,可以說(shuō)是對(duì)測(cè)試工程師的能力要求達(dá)到了一個(gè)新的高度呜师。
相信有過(guò)測(cè)試工作經(jīng)驗(yàn)的同學(xué)都會(huì)深有體會(huì),不管是瀑布式還是agile模式贾节,測(cè)試人員的工作總是被壓在產(chǎn)品發(fā)布的最后階段汁汗,整個(gè)團(tuán)隊(duì)的壓力似乎都?jí)涸跍y(cè)試工程師身上,沒(méi)有人會(huì)理會(huì)開(kāi)發(fā)過(guò)程中產(chǎn)生的延誤栗涂,因?yàn)槟且呀?jīng)過(guò)去知牌,可以在retro meeting的時(shí)候diss,但是目前最重要的問(wèn)題是完成產(chǎn)品的發(fā)布上線斤程。所以在尋找測(cè)試工程師需要什么技能之前角寸,測(cè)試工程師的核心問(wèn)題是什么菩混,這是我們要搞清楚的。
測(cè)試工程師面臨的核心問(wèn)題
如何以最小的投入扁藕,最大程度保證產(chǎn)品的質(zhì)量
這個(gè)問(wèn)題相信大家都有所體會(huì)沮峡,商業(yè)社會(huì)追求的就是效率,甚至是極致的效率亿柑。測(cè)試工程師也不能例外邢疙,不管是叫測(cè)試工程師,QA望薄,或者是聽(tīng)著高大上的測(cè)試開(kāi)發(fā)工程師疟游,其實(shí)老板們的目標(biāo)是一致的,就是在盡可能少的投入痕支,最大程度保證產(chǎn)品的質(zhì)量颁虐。說(shuō)得現(xiàn)實(shí)一點(diǎn),你的薪資水平就取決于你能解決這個(gè)核心問(wèn)題的能力卧须。
明確了我們的目標(biāo)另绩,我們所需要的能力,也是圍繞著這一個(gè)目標(biāo)來(lái)設(shè)定的故慈。
概述
按照筆者的經(jīng)驗(yàn)和理解板熊,一個(gè)軟件測(cè)試工程師需要具備以下的技能:
- 測(cè)試設(shè)計(jì)能力
- 代碼能力
- 自動(dòng)化測(cè)試技術(shù)
- 質(zhì)量流程管理
- 行業(yè)技術(shù)知識(shí)
- 數(shù)據(jù)庫(kù)
- 業(yè)務(wù)知識(shí)
1. 測(cè)試設(shè)計(jì)
作為一名測(cè)試工程師,最基礎(chǔ)的能力應(yīng)該就是根據(jù)產(chǎn)品來(lái)設(shè)計(jì)測(cè)試用例的能力察绷。最基礎(chǔ)的能力往往也是最難做到精通的能力干签。要設(shè)計(jì)好的測(cè)試用例,需要對(duì)產(chǎn)品的特性和業(yè)務(wù)非常的熟悉拆撼,對(duì)用戶的使用場(chǎng)景有著系統(tǒng)化的思考容劳。除此之外,還有一些科學(xué)的測(cè)試用例設(shè)計(jì)方法可以幫助我們?cè)O(shè)計(jì)規(guī)范化的用例闸度,而不是僅僅根據(jù)經(jīng)驗(yàn)或者天馬行空的想法來(lái)設(shè)計(jì)用例竭贩。
業(yè)界有一些經(jīng)典的測(cè)試用例設(shè)計(jì)方法需要測(cè)試工程師掌握:
- 邊界值分析
- 等價(jià)類劃分
- 因果圖
- 判定表
- 正交實(shí)驗(yàn)設(shè)計(jì)
上述的這些方法并不是教條,而是幫助我們理清測(cè)試用例設(shè)計(jì)的思路和提高效率的工具莺禁。
2. 代碼能力
在傳統(tǒng)的思維中留量,對(duì)測(cè)試人員的代碼能力要求似乎不是很高,在業(yè)界確實(shí)也是這樣的哟冬。很多測(cè)試工程師基本上不具備代碼的能力楼熄,更多是測(cè)試的執(zhí)行者。
但是在當(dāng)今這個(gè)時(shí)代下浩峡,要想突破傳統(tǒng)功能測(cè)試人員的天花板可岂,代碼能力是必須的。
具備代碼能力的測(cè)試工程師有這樣兩個(gè)優(yōu)勢(shì):
2.1 閱讀開(kāi)發(fā)代碼
如果能夠具備閱讀開(kāi)發(fā)代碼的能力翰灾,對(duì)于提高測(cè)試人員的效率是很有幫助的缕粹,它可以幫助我們做到這些一些事情
- 通過(guò)開(kāi)發(fā)修改的代碼預(yù)估影響的范圍稚茅,即測(cè)試的范圍
- 參加技術(shù)評(píng)審,預(yù)估測(cè)試的風(fēng)險(xiǎn)平斩,難點(diǎn)亚享,重點(diǎn)
- 通過(guò)代碼的邏輯設(shè)計(jì)測(cè)試用例,強(qiáng)化測(cè)試用例的覆蓋程度
- 對(duì)缺陷進(jìn)行初步的定位
其實(shí)可以做到的事情還有很多绘面,體現(xiàn)在測(cè)試過(guò)程的很多細(xì)節(jié)當(dāng)中
2.2自動(dòng)化測(cè)試的開(kāi)發(fā)
自動(dòng)化測(cè)試是測(cè)試發(fā)展的方向虹蒋,也是提高效率的有效方法。具備了代碼能力飒货,你可以輕松的駕馭各種流行的自動(dòng)化測(cè)試框架和用例開(kāi)發(fā)。
3. 自動(dòng)化測(cè)試
接著上面關(guān)于自動(dòng)化測(cè)試的討論峭竣。在目前的熱門公司的招聘中塘辅,自動(dòng)化能力已經(jīng)是必備的能力,也是大家很關(guān)注的一個(gè)領(lǐng)域皆撩。
目前可以粗略的把自動(dòng)化測(cè)試分為這么幾類:
3.1 UI自動(dòng)化
UI自動(dòng)化實(shí)現(xiàn)的目標(biāo)是模擬人在產(chǎn)品UI界面上的操作扣墩,從而觀察結(jié)果來(lái)完成測(cè)試的執(zhí)行。UI自動(dòng)化也可以從客戶端的形態(tài)上分為PC端和移動(dòng)端的自動(dòng)化測(cè)試扛吞,有這樣一些著名的自動(dòng)化工具需要我們掌握:
3.1.1 Selenium
Selenium是一個(gè)很經(jīng)典的WEB端產(chǎn)品的UI自動(dòng)化工具呻惕,針對(duì)不同的開(kāi)發(fā)語(yǔ)言都有很好的支持。它的原理簡(jiǎn)單來(lái)說(shuō)就是通過(guò)WebDriver把腳本產(chǎn)生的操作指令傳遞到瀏覽器滥比,執(zhí)行我們需要的操作并且獲取相應(yīng)的反饋亚脆,在腳本中完成校驗(yàn)。
3.1.2 Appium
從這個(gè)名字就可以看出這個(gè)工具和Selenium的相似之處盲泛。其實(shí)Appium可以理解為就是移動(dòng)端的Selenium濒持。同樣也是在移動(dòng)端模擬人的操作來(lái)實(shí)現(xiàn)執(zhí)行測(cè)試用例的目的。
隨著移動(dòng)互聯(lián)網(wǎng)時(shí)代的到來(lái)寺滚,更多的業(yè)務(wù)已經(jīng)從PC的WEB端轉(zhuǎn)移到了移動(dòng)端柑营,移動(dòng)端的自動(dòng)化測(cè)試越來(lái)越重要。
其實(shí)UI的自動(dòng)化實(shí)現(xiàn)的原理都是很類似的村视,基本的邏輯都是:
- 定位元素
- 操作元素
- 獲取反饋
最后通過(guò)某種測(cè)試用例框架來(lái)管理測(cè)試用例官套,例如python的unittest,JAVA的TestNG蚁孔,Ruby的respec等等奶赔。
所以說(shuō)了解了某一種UI自動(dòng)化的框架和工具,很容易的就能觸類旁通的學(xué)習(xí)新的框架和工具勒虾。
3.2 接口自動(dòng)化
在目前SaaS成為主流的情況下纺阔,API,即接口修然,成為了支撐業(yè)務(wù)的核心部分笛钝。前端頁(yè)面和App里面的業(yè)務(wù)數(shù)據(jù)都是通過(guò)各種API與服務(wù)器進(jìn)行通信质况,從而實(shí)現(xiàn)業(yè)務(wù)功能。
目前大多數(shù)的接口都是基于HTTP協(xié)議的玻靡,其中Restful的接口又占大多數(shù)结榄。而很多語(yǔ)言,例如Python和Ruby都有很好的庫(kù)來(lái)支持HTTP協(xié)議的請(qǐng)求囤捻,這就為我們?cè)O(shè)計(jì)接口自動(dòng)化提供了很好的基礎(chǔ)臼朗。
回到我們的核心問(wèn)題,投入產(chǎn)出比的衡量蝎土。UI的自動(dòng)化無(wú)論是從實(shí)現(xiàn)的成本還是維護(hù)的成本來(lái)說(shuō)都是巨大的视哑,所以業(yè)界越來(lái)越把重心放到了接口層的自動(dòng)化實(shí)現(xiàn)上。
接口的自動(dòng)化具備這樣的優(yōu)勢(shì):
- 運(yùn)行效率高
- 開(kāi)發(fā)成本低
- 維護(hù)成本低
- 可以與開(kāi)發(fā)代碼同步開(kāi)發(fā)
接口自動(dòng)化的實(shí)現(xiàn)思路也是簡(jiǎn)單明了的誊涯,那就是模擬瀏覽器挡毅,發(fā)送HTTP請(qǐng)求來(lái)實(shí)現(xiàn)對(duì)接口的調(diào)用,然后比較返回與期望值暴构,達(dá)到驗(yàn)證結(jié)果的目的跪呈。
當(dāng)然,要設(shè)計(jì)一套真正高效的接口自動(dòng)化框架也是不容易的取逾。這里面涉及到如何提高用例的開(kāi)發(fā)效率耗绿,降低開(kāi)發(fā)維護(hù)成本等關(guān)鍵問(wèn)題。同時(shí)還可以把接口測(cè)試與性能測(cè)試結(jié)合起來(lái)砾隅,豐富接口自動(dòng)化測(cè)試的內(nèi)涵误阻。
4. 質(zhì)量管理流程
在敏捷開(kāi)發(fā)的流程中,測(cè)試工程師有了一個(gè)新的定義:Quality Assurance Engineer晴埂。而測(cè)試的執(zhí)行僅僅是職責(zé)中的一部分堕绩,更為重要的是要為整個(gè)團(tuán)隊(duì)的產(chǎn)品質(zhì)量負(fù)責(zé)。
從整個(gè)sprint的周期來(lái)看邑时,QA工程師都要始終如一的貫徹質(zhì)量保證的意識(shí)奴紧,與開(kāi)發(fā)的關(guān)系也從早期的發(fā)現(xiàn)bug,轉(zhuǎn)變?yōu)槿绾螏椭_(kāi)發(fā)團(tuán)隊(duì)一起提高產(chǎn)品的質(zhì)量晶丘。同時(shí)還要和產(chǎn)品團(tuán)隊(duì)密切的合作黍氮,在需求的分析階段就介入,分析質(zhì)量保證工作如何規(guī)劃和設(shè)計(jì)浅浮,而不是在產(chǎn)品發(fā)布前的測(cè)試執(zhí)行階段才介入沫浆。
這個(gè)里面還包含很多Soft skill的要求,包括如何與團(tuán)隊(duì)合作滚秩,溝通等等专执,這也是敏捷開(kāi)發(fā)模式的關(guān)鍵之一。
5. 行業(yè)技術(shù)知識(shí)
這一部分內(nèi)容其實(shí)涵蓋的內(nèi)容是非常豐富的郁油,就以互聯(lián)網(wǎng)行業(yè)舉例吧本股。
對(duì)于一個(gè)互聯(lián)網(wǎng)產(chǎn)品攀痊,測(cè)試工程師需要了解的甚至是精通的知識(shí)是很多的,從前端頁(yè)面的技術(shù)棧拄显,API的設(shè)計(jì)苟径,后端服務(wù)器的設(shè)計(jì),后面會(huì)專門提到的數(shù)據(jù)庫(kù)躬审,還有整個(gè)服務(wù)的架構(gòu)等等棘街,測(cè)試工程師都需要有所了解。
針對(duì)這個(gè)問(wèn)題承边,其實(shí)有一個(gè)非常好的問(wèn)題可以幫助大家去梳理涉及到的知識(shí)遭殉,這就是:
從在瀏覽器的輸入框輸入一個(gè)網(wǎng)址,到看到網(wǎng)頁(yè)的內(nèi)容博助,這個(gè)過(guò)程中發(fā)生了什么恩沽?
回答這個(gè)問(wèn)題的深度和廣度,基本就能反映一個(gè)測(cè)試工程師對(duì)于互聯(lián)網(wǎng)產(chǎn)品技術(shù)的掌握情況翔始。
在這里呢,我簡(jiǎn)單的羅列一些涉及到的技術(shù)和概念里伯,這些內(nèi)容對(duì)于我們測(cè)試產(chǎn)品城瞎,都是非常有幫助的。
- DNS
- TCP/IP
- HTTP
- SSL
- Restful
- HTML
- DOM
- CSS
- Render
- Xpath
- 服務(wù)器
- nginx
- SQL
- Cookie&Session
- XSS疾瓮,CSRF
這里僅僅是涉及到一部分內(nèi)容脖镀,具體的內(nèi)容可以根據(jù)工作中遇到的場(chǎng)景去深入學(xué)習(xí)和了解。
6. 數(shù)據(jù)庫(kù)
之所以把數(shù)據(jù)庫(kù)單獨(dú)列出來(lái)狼电,是因?yàn)閿?shù)據(jù)庫(kù)的知識(shí)對(duì)于當(dāng)今的很多產(chǎn)品都是非常核心的內(nèi)容蜒灰。
不管是在手動(dòng)測(cè)試還是自動(dòng)化測(cè)試中,都有需要到數(shù)據(jù)庫(kù)進(jìn)行數(shù)據(jù)校驗(yàn)的時(shí)候肩碟。
目前主要使用的數(shù)據(jù)庫(kù)可以分為兩類:
- 關(guān)系型數(shù)據(jù)庫(kù)
- 非關(guān)系型數(shù)據(jù)庫(kù)
6.1 關(guān)系型數(shù)據(jù)庫(kù)
關(guān)系型數(shù)據(jù)庫(kù)是最常見(jiàn)的數(shù)據(jù)庫(kù)類型强窖,這類數(shù)據(jù)庫(kù)通過(guò)RDBMS數(shù)據(jù)庫(kù)程序來(lái)進(jìn)行管理和使用,常見(jiàn)的有SQL Server, MySQL等等削祈。
關(guān)系型數(shù)據(jù)庫(kù)中強(qiáng)調(diào)一個(gè)事務(wù)(Transaction)的概念翅溺。所謂事務(wù)是用戶定義的一個(gè)數(shù)據(jù)庫(kù)操作系列,這些操作要么全部執(zhí)行髓抑,要么全部不執(zhí)行咙崎,是一個(gè)不可分割的工作單位。例如在關(guān)系數(shù)據(jù)庫(kù)中吨拍,一個(gè)事務(wù)可以是一條SQL語(yǔ)句褪猛、一組SQL語(yǔ)句或整個(gè)程序。
事務(wù)應(yīng)該具有4個(gè)屬性:原子性羹饰、一致性伊滋、隔離性碳却、持久性。這四個(gè)屬性通常稱為ACID特性新啼。
- 原子性(Atomicity):事務(wù)作為一個(gè)整體被執(zhí)行追城,包含在其中的對(duì)數(shù)據(jù)庫(kù)的操作要么全部被執(zhí)行,要么都不執(zhí)行燥撞。
- 一致性(Consistency):事務(wù)應(yīng)確保數(shù)據(jù)庫(kù)的狀態(tài)從一個(gè)一致?tīng)顟B(tài)轉(zhuǎn)變?yōu)榱硪粋€(gè)一致?tīng)顟B(tài)座柱。一致?tīng)顟B(tài)的含義是數(shù)據(jù)庫(kù)中的數(shù)據(jù)應(yīng)滿足完整性約束。
- 隔離性(Isolation):多個(gè)事務(wù)并發(fā)執(zhí)行時(shí)物舒,一個(gè)事務(wù)的執(zhí)行不應(yīng)影響其他事務(wù)的執(zhí)行色洞。
- 持久性(Durability):一個(gè)事務(wù)一旦提交,他對(duì)數(shù)據(jù)庫(kù)的修改應(yīng)該永久保存在數(shù)據(jù)庫(kù)中冠胯。
對(duì)于實(shí)際的應(yīng)用來(lái)說(shuō)火诸,SQL語(yǔ)言是必須要掌握的。能夠通過(guò)SQL語(yǔ)句在數(shù)據(jù)庫(kù)中找到需要的數(shù)據(jù)荠察,是測(cè)試工程師必備的技能置蜀。SQL語(yǔ)句的語(yǔ)法大體上比較類似,在一些細(xì)節(jié)上不同的RDBMS會(huì)有些許的差別悉盆。
對(duì)于自動(dòng)化實(shí)現(xiàn)來(lái)說(shuō)盯荤,在自動(dòng)化測(cè)試中通過(guò)訪問(wèn)數(shù)據(jù)庫(kù)來(lái)獲得期望值也是很常見(jiàn)的場(chǎng)景。不同的語(yǔ)言都有訪問(wèn)數(shù)據(jù)庫(kù)的庫(kù)焕盟,整體來(lái)說(shuō)應(yīng)用也很簡(jiǎn)單秋秤。
6.2 非關(guān)系型數(shù)據(jù)庫(kù)
隨著互聯(lián)網(wǎng)中大量的非結(jié)構(gòu)化數(shù)據(jù)的產(chǎn)生,例如社交網(wǎng)絡(luò)等等應(yīng)用脚翘,用戶的個(gè)人信息灼卢,社交網(wǎng)絡(luò),地理位置来农,用戶生成的數(shù)據(jù)和用戶操作日志已經(jīng)正在以幾何級(jí)數(shù)的速率增加鞋真,同時(shí)還面臨大量的數(shù)據(jù)挖掘工作,傳統(tǒng)的關(guān)系型數(shù)據(jù)庫(kù)已經(jīng)無(wú)法滿足沃于。所以NoSQL漸漸的發(fā)展了起來(lái)灿巧。
NoSQL最突出的特點(diǎn)就是數(shù)據(jù)的非結(jié)構(gòu)化,通俗的講揽涮,就是數(shù)據(jù)不再是以列和行這樣的形式存儲(chǔ)的抠藕。
NoSQL存儲(chǔ)數(shù)據(jù)的方式很多:值對(duì)存儲(chǔ),列存儲(chǔ)蒋困,文檔存儲(chǔ)盾似。
例如比較常見(jiàn)的MongoDB就是將數(shù)據(jù)存儲(chǔ)為一個(gè)文檔,數(shù)據(jù)結(jié)構(gòu)由鍵值(key=>value)對(duì)組成。MongoDB 文檔類似于 JSON 對(duì)象零院。字段值可以包含其他文檔溉跃,數(shù)組及文檔數(shù)組。
6.3 RDBMS vs NoSQL
RDBMS
- 高度組織化結(jié)構(gòu)化數(shù)據(jù)
- 結(jié)構(gòu)化查詢語(yǔ)言(SQL) (SQL)
- 數(shù)據(jù)和關(guān)系都存儲(chǔ)在單獨(dú)的表中告抄。
- 數(shù)據(jù)操縱語(yǔ)言撰茎,數(shù)據(jù)定義語(yǔ)言
- 嚴(yán)格的一致性
- 基礎(chǔ)事務(wù)
NoSQL
- 代表著不僅僅是SQL
- 沒(méi)有聲明性查詢語(yǔ)言
- 沒(méi)有預(yù)定義的模式:鍵 - 值對(duì)存儲(chǔ),列存儲(chǔ)打洼,文檔存儲(chǔ)龄糊,圖形數(shù)據(jù)庫(kù)
- 最終一致性,而非ACID屬性
- 非結(jié)構(gòu)化和不可預(yù)知的數(shù)據(jù)
- CAP定理
- 高性能募疮,高可用性和可伸縮性
7. 業(yè)務(wù)知識(shí)
對(duì)于測(cè)試工程師來(lái)說(shuō)炫惩,所測(cè)試產(chǎn)品的業(yè)務(wù)知識(shí)也是非常重要的。
一個(gè)測(cè)試工程師可能已經(jīng)具備了上述的所有技能阿浓,但是怎么把這些技能用來(lái)解決我們最先提到的軟件測(cè)試的核心問(wèn)題呢他嚷?這個(gè)里面的關(guān)鍵,或者說(shuō)中心點(diǎn)芭毙,就是你所測(cè)試的產(chǎn)品的業(yè)務(wù)筋蓖。
測(cè)試的方法,規(guī)劃退敦,實(shí)施方法都是多種多樣的粘咖,如果在這些方法中進(jìn)行選擇,所依賴的正是對(duì)產(chǎn)品的業(yè)務(wù)的深刻理解苛聘。
這里的產(chǎn)品業(yè)務(wù)不僅僅指產(chǎn)品的特性,同時(shí)還包括了產(chǎn)品的用戶特征忠聚,用戶的使用習(xí)慣设哗,以及由此帶來(lái)的對(duì)產(chǎn)品的流量趨勢(shì)。也可以說(shuō)两蟀,測(cè)試人員必須要站在用戶的角度來(lái)分析產(chǎn)品网梢,而不是產(chǎn)品開(kāi)發(fā)人員的角度。
測(cè)試人員還需要找到產(chǎn)品的核心功能和核心業(yè)務(wù)赂毯,通過(guò)這樣的分析來(lái)進(jìn)行測(cè)試優(yōu)先級(jí)的劃分战虏,以及缺陷的定級(jí)。同時(shí)對(duì)于自動(dòng)化測(cè)試的規(guī)劃和架構(gòu)也有著重要的影響党涕。例如在自動(dòng)化測(cè)試中要首先覆蓋那些核心的業(yè)務(wù)和功能烦感,同時(shí)根據(jù)業(yè)務(wù)的特性,用自動(dòng)化的方法去模擬用戶的使用場(chǎng)景膛堤,把有限的自動(dòng)化資源投入到最關(guān)鍵的部分手趣。
這一塊技能聽(tīng)起來(lái)可能很虛,好像沒(méi)有什么具體的知識(shí)點(diǎn)肥荔,但是在不斷的工作和總結(jié)中绿渣,優(yōu)秀的測(cè)試工程師是能夠總結(jié)出一套符合某一類產(chǎn)品的測(cè)試方法的朝群,甚至還可以提煉出一些更具備通用性的best practice,用到不同的產(chǎn)品中中符。
說(shuō)在最后
或者這樣一篇短短的文章無(wú)法涵蓋軟件測(cè)試的內(nèi)涵姜胖,但是筆者也只是想拋磚引玉,讓讀者能夠通過(guò)這樣一種不能算全面的梳理淀散,結(jié)合自己的工作經(jīng)驗(yàn)右莱,對(duì)自己所從事的軟件測(cè)試工作有一個(gè)更深的理解。
筆者計(jì)劃根據(jù)這篇文章所列出的技能樹(shù)吧凉,分別寫文章進(jìn)行更加細(xì)致的梳理和總結(jié)隧出,希望能夠和各位同行一起學(xué)習(xí),一起進(jìn)步阀捅,同時(shí)非常歡迎大家指正我的錯(cuò)誤和不足胀瞪。