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