本書是餓了么企業(yè)訂餐團(tuán)隊(duì)在軟件質(zhì)量保障方面的經(jīng)驗(yàn)總結(jié)。它通過講解該團(tuán)隊(duì)如何從0到1構(gòu)建軟件質(zhì)量體系以及該體系如何逐步演進(jìn),分享了餓了么在軟件質(zhì)量保障方面的技術(shù)積累、實(shí)戰(zhàn)經(jīng)驗(yàn)、解決問題的思考過程,以及質(zhì)量保障團(tuán)隊(duì)的建設(shè)與發(fā)展。
【全書一共18章,分為六篇,具體內(nèi)容如下】
第壹篇 規(guī)劃(第1章)
介紹了餓了么企業(yè)訂餐業(yè)務(wù)的背景、團(tuán)隊(duì)背景、面臨的挑戰(zhàn)以及團(tuán)隊(duì)在制定技術(shù)規(guī)劃時是如何考慮的。
第二篇 基礎(chǔ)(第2~5章)
總結(jié)了QA團(tuán)隊(duì)在功能測試、安全測試、兼容性測試、線上問題治理等方面的技術(shù)見解和經(jīng)驗(yàn)積累。
第三篇 提效(第6~9章)
介紹在團(tuán)隊(duì)人員與業(yè)務(wù)穩(wěn)定之后,QA團(tuán)隊(duì)?wèi)?yīng)如何提高測試和研發(fā)的效率。包括API測試框架、自動生成框架代碼技術(shù)、框架代碼場景化改造、FSM場景化代碼動態(tài)組合技術(shù)等。
第四篇 賦能(第10~13章)
從持續(xù)集成、代碼質(zhì)量、Story QA等技術(shù)角度介紹了企業(yè)訂餐QA團(tuán)隊(duì)是如何賦能研發(fā)人員以提高軟件質(zhì)量的。
第五篇 探索(第14~16章)
介紹了團(tuán)隊(duì)在契約測試、探索性測試、流量測試等方面的經(jīng)驗(yàn)。
第六篇 管理(第17~18章)
分享了如何打造有實(shí)力、有格局和有凝聚力的團(tuán)隊(duì),以及項(xiàng)目管理的關(guān)鍵問題和解決問題的思路。
【讀者對象】
本書適合各種水平的測試人員、測試開發(fā)人員、測試組長、測試經(jīng)理、項(xiàng)目經(jīng)理等,以及其他在軟件質(zhì)量保證的道路上持續(xù)進(jìn)行修煉的讀者閱讀。
(1)餓了么企業(yè)訂餐團(tuán)隊(duì)官方出品,餓了么聯(lián)合創(chuàng)始人、CTO等近20位專家聯(lián)袂推薦!
(2)從技術(shù)、方法、經(jīng)驗(yàn)等多個維度全面講解餓了么軟件質(zhì)量體系的搭建與演進(jìn)過程,既能指導(dǎo)讀者從0開始搭建質(zhì)量體系,又能讓讀者了解餓了么質(zhì)量體系建設(shè)的功過得失。
(3)書中既有可借鑒的方法論和案例成果,又給出了團(tuán)隊(duì)解決問題的思考過程,而且將這個過程立體化、可視化地呈現(xiàn)了出來。
【為何寫作本書】
我們曾經(jīng)思考過這樣一個問題,如何才能將自己積累的技術(shù)和知識進(jìn)行抽象總結(jié),將逐步解決問題的過程立體化、可視化地展現(xiàn)給大家,而不只是簡單地介紹一個結(jié)果。我們技術(shù)團(tuán)隊(duì)之所以決定寫這本書,就是希望通過介紹我們的實(shí)戰(zhàn)經(jīng)驗(yàn)和解決問題的思路,幫助大家在“質(zhì)量與效率”的提升上打開新的思路。
“質(zhì)量與效率”一直是我們關(guān)注的焦點(diǎn)。相對于軟件開發(fā),軟件測試起步較晚,缺乏擁有專業(yè)知識的人才。即便是大學(xué)開設(shè)的軟件工程專業(yè),針對軟件測試的介紹也只是涉及少量的概念和設(shè)計(jì)測試用例的方法。專業(yè)的測試并不是簡單地翻譯需求。目前有很多測試人員只是在簡單地執(zhí)行需求翻譯的工作,沒有結(jié)合業(yè)務(wù)實(shí)現(xiàn)、質(zhì)量模型和測試用例,沒有用科學(xué)的方法設(shè)計(jì)測試場景,這就導(dǎo)致測試用例質(zhì)量低下,只能應(yīng)用于單個特定點(diǎn)的測試場景。
有些人認(rèn)為功能測試很低端(從效率、技術(shù)含量和市場反饋的價值綜合得出如此結(jié)論),甚至有相當(dāng)一部分測試人員也認(rèn)為,功能測試意義不大,希望從事測試工具的開發(fā)工作,因?yàn)槟菢涌瓷先ジ叨,更具有挑?zhàn)性。
其實(shí),功能測試、自動化測試、性能測試、安全測試、測試框架開發(fā)、平臺研發(fā)等工作都是為了提高軟件測試的質(zhì)量,沒有高低貴賤之分,都是必要的輔助手段?梢詫④浖䴗y試類比為一個兵團(tuán),上述這些工作是不同的兵種,在面對一場戰(zhàn)役的時候,我們需要考慮的是如何排兵布陣,以贏得戰(zhàn)役,而不是排列兵種的等級。
不同的時代對測試人員有不同的要求。
起初是“保姆時代”,以發(fā)現(xiàn)Bug為榮,對測試人員的基本要求是具備良好的測試思維,測試人員主要利用系統(tǒng)測試方法進(jìn)行測試。業(yè)內(nèi)關(guān)注的焦點(diǎn)是黑盒測試,白盒測試和灰盒測試偏少,效率偏低。由于黑盒測試大部分是通過人工在系統(tǒng)界面中手動進(jìn)行的,從而導(dǎo)致業(yè)界普遍認(rèn)為測試就是“點(diǎn)點(diǎn)點(diǎn)”。
隨著軟件復(fù)雜度的不斷提高,交付質(zhì)量變得越來越重要,我們急需提升測試的效率,壓力測試和安全測試等各種專項(xiàng)測試以及各種測試平臺和工具隨之出現(xiàn)。
時代的進(jìn)一步發(fā)展對測試提出了更高的要求,從產(chǎn)品研發(fā)后期尋找Bug轉(zhuǎn)變?yōu)樘崆邦A(yù)防Bug。
小步迭代、快速上線的敏捷開發(fā)時代,再次對測試提出了更高的要求,持續(xù)集成、快速驗(yàn)證、全方位監(jiān)控線上質(zhì)量,需要測試人員更早地介入產(chǎn)品研發(fā)的整個過程,以便更好、更全面地了解產(chǎn)品。測試左移到開發(fā)階段進(jìn)行代碼評審、單元測試,右移到運(yùn)維階段進(jìn)行持續(xù)部署、線上監(jiān)控,從而可以更加立體地保障軟件的質(zhì)量。
如今是一個輸出測試能力的時代,測試人員不僅要提升自己的效率,而且要賦能研發(fā)人員,幫助他們提升自己的自測水平。
【本書主要內(nèi)容】
第一篇:規(guī)劃
本篇簡要介紹了我們的業(yè)務(wù)背景、團(tuán)隊(duì)背景、測試的一般規(guī)律,以及我們團(tuán)隊(duì)在制定技術(shù)規(guī)劃時是如何考慮的。
第二篇:基礎(chǔ)
當(dāng)團(tuán)隊(duì)從零開始的時候,QA(Quality Assurance,質(zhì)量保證)基礎(chǔ)設(shè)施落后、資源有限、技術(shù)改造頻繁,應(yīng)快速形成戰(zhàn)斗力,以業(yè)務(wù)為先,保證產(chǎn)品的質(zhì)量,此時QA團(tuán)隊(duì)的主要任務(wù)是發(fā)現(xiàn)產(chǎn)品中的Bug。本篇主要介紹了QA團(tuán)隊(duì)在功能測試、安全測試、兼容性測試等不同階段的特點(diǎn)及不同之處。
第三篇:提效
當(dāng)團(tuán)隊(duì)人員與業(yè)務(wù)基本穩(wěn)定,而且功能迭代基本可以正常運(yùn)行之后,我們就開始思考如何提高測試和研發(fā)的效率,例如,如何構(gòu)建可用于提升效率的小工具和平臺,如何實(shí)現(xiàn)API自動化,以及框架的搭建、分層思想、性能測試、環(huán)境的部署、CI(Continuous Integration,持續(xù)集成)流程的建立等,從而使得QA人員能夠從大量的手工勞動中解放出來,提高工作效率,將更多的時間和精力投入到測試分析、發(fā)現(xiàn)Bug、預(yù)防Bug的工作中。
第四篇:賦能
在提效之后,我們開始思考,軟件質(zhì)量是“構(gòu)建”出來的,是由軟件開發(fā)整個過程的質(zhì)量所決定的。所以,QA人員的工作不能總是停留在最后一個環(huán)節(jié),在敏捷開發(fā)的大環(huán)境下,開發(fā)人員也要開始注重自測質(zhì)量,作為QA人員,我們需要考慮如何賦能開發(fā)人員,使其能夠?qū)ψ约洪_發(fā)的產(chǎn)品進(jìn)行自測。本篇主要從技術(shù)的角度(比如,可視化度量、自動化用例開放、工具開發(fā),以及如何在流程上使用story_QA來使項(xiàng)目過程數(shù)據(jù)可視化)介紹了企業(yè)訂餐業(yè)務(wù)的QA人員是如何賦能開發(fā)人員以提高軟件質(zhì)量的。
第五篇:探索
當(dāng)前,業(yè)務(wù)開發(fā)周期越來越短,幾乎每隔一天就有新版本發(fā)布。針對這種迭代速度快、回歸量比較大的特點(diǎn),自動化測試的穩(wěn)定性正面臨著巨大的挑戰(zhàn),除了傳統(tǒng)的集成之外,我們還引入了契約測試、流量測試、探索性測試等輔助手段來提高測試質(zhì)量,同時提高QA人員的工作效率。
第六篇:管理
本篇主要講解了新型團(tuán)隊(duì)如何不拘泥于傳統(tǒng)管理方法地勾勒團(tuán)隊(duì)畫像,同時還介紹了技術(shù)分享的改革,以及如何讓團(tuán)隊(duì)變成有格局、有原則、有自我認(rèn)知、有凝聚力的健康團(tuán)隊(duì)。
【讀者對象】
本書適合各種水平的測試人員、測試開發(fā)人員、測試組長、測試經(jīng)理、項(xiàng)目經(jīng)理等,以及其他在軟件質(zhì)量保證的道路上持續(xù)進(jìn)行修煉的讀者閱讀。
張丙振
高級測試專家、企業(yè)訂餐質(zhì)量負(fù)責(zé)人,9年工作經(jīng)驗(yàn)。擅長自動化測試、測試框架搭建、質(zhì)量交付團(tuán)隊(duì)管理等。2017年入職餓了么中后臺研發(fā)部,負(fù)責(zé)商家開放平臺,多次參與公司S級別跨團(tuán)隊(duì)合作項(xiàng)目并擔(dān)任測試總owner,曾擔(dān)任上海站技術(shù)沙龍測試講師。2019年轉(zhuǎn)入阿里巴巴本地生活企業(yè)訂餐團(tuán)隊(duì),目前專注于QA團(tuán)隊(duì)建設(shè)、基礎(chǔ)設(shè)施建設(shè)及質(zhì)量交付。
檀飛翔
測試專家,從事測試行業(yè)7年,擅長測試框架開發(fā)、CI集成、自動化測試、功能測試以及大型項(xiàng)目測試管理。2016年加入餓了么,主要負(fù)責(zé)餓了么商家配送、商戶訂單、商家商品以及企業(yè)訂餐等業(yè)務(wù)領(lǐng)域的QA工作,多次參與和負(fù)責(zé)公司級別項(xiàng)目,目前負(fù)責(zé)阿里巴巴本地生活企業(yè)訂餐供給交易領(lǐng)域的QA工作,專注于測試提效和賦能工作。
侯佳剛
測試專家,一直積極探索正確的質(zhì)量保障之道。從事質(zhì)量工作多年,擅長測試自動化及測試工具開發(fā)。先后研發(fā)多個測試工具和質(zhì)量平臺,并將其應(yīng)用在產(chǎn)品研發(fā)過程中。目前主要負(fù)責(zé)企業(yè)訂餐質(zhì)量平臺研發(fā)及推廣工作。
伍菊紅
資深測試開發(fā)工程師,有較豐富的測試經(jīng)驗(yàn)。曾參與多個公司級項(xiàng)目的業(yè)務(wù)測試,如企餐新零售入淘、覆蓋率工具開發(fā)等,擅長自動化測試、工具開發(fā)。目前專注于測試前沿知識探索,如精準(zhǔn)測試、流量回放等。
李京蓉
資深測試工程師,從事軟件測試工作5年。2018年入職餓了么,負(fù)責(zé)餓了么商戶端交易業(yè)務(wù)測試,轉(zhuǎn)入企業(yè)訂餐團(tuán)隊(duì)后負(fù)責(zé)供給交易領(lǐng)域的業(yè)務(wù)測試以及整個事業(yè)部的安全測試。
張晏婷
資深測試工程師。先后從事訂單、財(cái)務(wù)等領(lǐng)域測試工作,功能測試、自動化測試經(jīng)驗(yàn)豐富,參與多個提效工具、測試平臺開發(fā)工作。
蔡輝
5年從業(yè)經(jīng)驗(yàn),資深測試工程師。有證券、金融、企業(yè)餐飲服務(wù)相關(guān)工作經(jīng)驗(yàn),擅長平臺服務(wù)開發(fā)、質(zhì)量交付。入職企業(yè)訂餐后負(fù)責(zé)測試平臺開發(fā),自動化測試工具建設(shè)。
李南昊
高級測試工程師,主要負(fù)責(zé)企業(yè)訂餐的業(yè)務(wù)測試、自動化測試、壓測的工作。參與企業(yè)訂餐三條業(yè)務(wù)線外賣、團(tuán)餐、到店從0到1的搭建過程。
楊亮亮
資深測試工程師,負(fù)責(zé)企業(yè)訂餐基礎(chǔ)及到店相關(guān)領(lǐng)域QA工作。從事測試工作9年,曾獨(dú)立負(fù)責(zé)多個大型項(xiàng)目(支付、基金、發(fā)票等)的測試工作。擅長后端自動化及測試工具、平臺的搭建,具有豐富的行業(yè)知識背景及測試經(jīng)驗(yàn)。
常娜
高級測試工程師。先后在阿里、百度、餓了么等企業(yè)工作,實(shí)戰(zhàn)經(jīng)驗(yàn)豐富。參與多個公司/BU級項(xiàng)目(廣告、開放平臺、訂單等多領(lǐng)域)的測試工作,并協(xié)助完成多個測試平臺的開發(fā)工作。
第一篇 規(guī) 劃
第1章 技術(shù)保障規(guī)劃2
1.1 業(yè)務(wù)特點(diǎn)2
1.2 面臨的挑戰(zhàn)3
1.3 測試進(jìn)程的演進(jìn)4
1.4 繪制戰(zhàn)略圖5
1.5 本章小結(jié)7
第二篇 基 礎(chǔ)
第2章 功能測試10
2.1 業(yè)務(wù)梳理10
2.1.1 接手新業(yè)務(wù)的痛點(diǎn)11
2.1.2 業(yè)務(wù)梳理的構(gòu)想11
2.1.3 過程實(shí)戰(zhàn)13
2.2 用例設(shè)計(jì)16
2.2.1 用例設(shè)計(jì)面臨的問題17
2.2.2 解決思路17
2.2.3 用例設(shè)計(jì)原則確立18
2.2.4 用例設(shè)計(jì)模板化19
2.2.5 設(shè)計(jì)用例框架20
2.3 用例評審23
2.3.1 評審的意義23
2.3.2 評審的價值24
2.3.3 思考與破局24
2.3.4 合格用例的特點(diǎn)24
2.3.5 用例評審的準(zhǔn)則25
2.4 本章小結(jié)26
第3章 安全測試27
3.1 全面清掃當(dāng)前漏洞27
3.2 團(tuán)隊(duì)安全知識賦能28
3.2.1 引入安全測試工具28
3.2.2 增強(qiáng)安全意識29
3.3 安全測試常態(tài)化29
3.3.1 下沉QA流程30
3.3.2 研發(fā)流程增設(shè)安全保障31
3.4 本章小結(jié)32
第4章 兼容性測試33
4.1 兼容性測試的挑戰(zhàn)33
4.2 兼容性測試的步驟34
4.3 案例分析:性能測試對比36
4.3.1 案例背景36
4.3.2 測試策略及過程36
4.3.3 測試結(jié)論39
4.4 關(guān)于測試機(jī)器資源40
4.5 本章小結(jié)41
第5章 線上問題治理42
5.1 線上問題的現(xiàn)狀42
5.2 工具的抉擇43
5.3 線下反饋線上化44
5.3.1 釘釘機(jī)器人接入44
5.3.2 簡化線上問題反饋45
5.4 線上問題數(shù)據(jù)沉淀及可視化46
5.5 FAQ 轉(zhuǎn)化47
5.6 線上問題規(guī)約49
5.7 本章小結(jié)49
第三篇 提 效
第6章 API測試框架52
6.1 API測試基礎(chǔ)知識52
6.1.1 RPC53
6.1.2 RESTful54
6.1.3 Thrift57
6.2 常見API測試手段58
6.2.1 cURL 59
6.2.2 常見工具分析61
6.3 測試框架的演進(jìn)與分析62
6.3.1 什么是框架62
6.3.2 測試框架思想的變遷63
6.3.3 測試框架的特點(diǎn)66
6.4 測試框架搭建67
6.4.1 常見的框架結(jié)構(gòu)設(shè)計(jì)68
6.4.2 框架的升級改造方案69
6.4.3 框架的分層解耦70
6.4.4 數(shù)據(jù)分類處理72
6.4.5 多協(xié)議的封裝74
6.4.6 多環(huán)境的處理76
6.5 測試框架結(jié)果自動對比驗(yàn)證80
6.5.1 驗(yàn)收結(jié)果思路對比81
6.5.2 hook函數(shù)擴(kuò)展82
6.5.3 數(shù)據(jù)庫設(shè)計(jì)83
6.5.4 對比引擎設(shè)計(jì)84
6.6 API覆蓋率統(tǒng)計(jì)86
6.6.1 覆蓋率介紹86
6.6.2 覆蓋統(tǒng)計(jì)的思考87
6.6.3 接口覆蓋率統(tǒng)計(jì)實(shí)戰(zhàn)87
6.7 本章小結(jié)91
第7章 自動生成框架代碼技術(shù)92
7.1 底層框架代碼自動生成92
7.1.1 傳統(tǒng)自動化框架的痛點(diǎn)93
7.1.2 代碼自動生成的解決方案94
7.1.3 代碼自動生成實(shí)戰(zhàn)95
7.2 手工用例自動轉(zhuǎn)化代碼97
7.2.1 接口用例撰寫現(xiàn)狀98
7.2.2 代碼自動轉(zhuǎn)化實(shí)戰(zhàn)98
7.3 冒煙測試代碼自動化生成101
7.3.1 冒煙測試的挑戰(zhàn)與方案102
7.3.2 拼裝請求102
7.3.3 構(gòu)造參數(shù)數(shù)據(jù)103
7.4 本章小結(jié)105
第8章 框架代碼場景化改造106
8.1 Journey模式BDD106
8.1.1 Journey模式簡介106
8.1.2 Journey模式原理107
8.2 問題與解決方案108
8.2.1 自動化問題109
8.2.2 解決方案109
8.3 過程實(shí)戰(zhàn)110
8.3.1 梳理場景需求110
8.3.2 實(shí)例化用戶故事110
8.3.3 轉(zhuǎn)化為自動化驗(yàn)收代碼110
8.4 框架與BDD的融合解析111
8.4.1 框架與BDD融合所面臨的問題111
8.4.2 框架的設(shè)計(jì)思路113
8.4.3 過程實(shí)戰(zhàn)113
第9章 FSM場景化代碼動態(tài)組合技術(shù)116
9.1 訂單代碼組合的常態(tài)116
9.2 FSM 賦能方案117
9.3 業(yè)務(wù)建模118
9.4 動態(tài)繪制流程圖119
9.4.1 Graphviz使用介紹119
9.4.2 使用簡化模式繪圖120
9.5 構(gòu)建解析器122
9.5.1 解析器方案122
9.5.2 過程實(shí)戰(zhàn)122
9.6 本章小結(jié)124
第四篇 賦 能
第10章 數(shù)據(jù)工廠128
10.1 數(shù)據(jù)工廠迭代背景128
10.1.1 造數(shù)常見的場景128
10.1.2 數(shù)據(jù)工廠演變歷史129
10.2 數(shù)據(jù)工廠腳本化129
10.2.1 腳本化面臨的挑戰(zhàn)129
10.2.2 從RESTful API轉(zhuǎn)向SOA API130
10.3 數(shù)據(jù)工廠平臺化131
10.3.1 平臺化面臨的挑戰(zhàn)131
10.3.2 關(guān)于平臺化的思考132
10.3.3 如何新增一個造數(shù)工具133
10.4 數(shù)據(jù)工廠服務(wù)化的思考137
10.5 本章小結(jié)137
第11章 持續(xù)集成138
11.1 持續(xù)集成是什么138
11.2 持續(xù)集成前后實(shí)踐的對比139
11.3 持續(xù)集成全景141
11.3.1 研發(fā)模式143
11.3.2 代碼準(zhǔn)入144
11.3.3 自動化方案145
11.4 本章小結(jié)152
第12章 代碼質(zhì)量153
12.1 代碼質(zhì)量背景知識153
12.1.1 怎樣衡量代碼質(zhì)量154
12.1.2 糟糕的代碼156
12.2 構(gòu)建代碼質(zhì)量體系158
12.2.1 為什么選擇SonarQube159