本文由36氪企服點(diǎn)評(píng)專家團(tuán)吳濤原創(chuàng)。
36氪企服點(diǎn)評(píng)專家團(tuán)——吳濤
————正文————
本文接上篇:【專家干貨】互聯(lián)網(wǎng)產(chǎn)品研發(fā)流程概論(上)
5、架構(gòu)設(shè)計(jì)
架構(gòu)設(shè)計(jì)是架構(gòu)師對(duì)各個(gè)子系統(tǒng)關(guān)系的抽象模型,用于指導(dǎo)大型系統(tǒng)的開(kāi)發(fā)和運(yùn)維。
架構(gòu)設(shè)計(jì)主要包括三項(xiàng)工作:系統(tǒng)架構(gòu)設(shè)計(jì)、軟件架構(gòu)設(shè)計(jì)、網(wǎng)絡(luò)架構(gòu)設(shè)計(jì)三個(gè)部分。
系統(tǒng)架構(gòu)設(shè)計(jì)一般都會(huì)采用MVC(Model-View-Controller)模型,將業(yè)務(wù)邏輯模型、軟件界面、控制器邏輯層進(jìn)行分層處理,然后通過(guò)控制器邏輯層確保業(yè)務(wù)邏輯層和軟件界面層的同步。MVC模型的好處是在優(yōu)化界面及用戶交互的同時(shí),無(wú)需重新編寫業(yè)務(wù)邏輯。同時(shí)也有助于管理復(fù)雜的應(yīng)用程序,可以在不依賴業(yè)務(wù)邏輯的情況下專注于視圖設(shè)計(jì),不同開(kāi)發(fā)人員可以同時(shí)開(kāi)發(fā)界面、控制器邏輯和業(yè)務(wù)邏輯,同時(shí)也讓測(cè)試變得更加容易。
(1)系統(tǒng)架構(gòu)設(shè)計(jì)
如果整個(gè)系統(tǒng)研發(fā)是從零開(kāi)始的,架構(gòu)設(shè)計(jì)則需要從概況圖開(kāi)始梳理,然后再補(bǔ)充各個(gè)模塊的架構(gòu)圖。這部分一般由首席架構(gòu)師牽頭,屬于整個(gè)產(chǎn)品技術(shù)架構(gòu)的總綱。
支付寶平臺(tái)系統(tǒng)架構(gòu)概況圖
一般而言,子系統(tǒng)名稱都會(huì)與產(chǎn)品概念保持一致。子系統(tǒng)不論是應(yīng)用前臺(tái)還是后臺(tái),通過(guò)公共服務(wù)層、業(yè)務(wù)邏輯層、基礎(chǔ)業(yè)務(wù)邏輯層關(guān)聯(lián)到一起。這種對(duì)象化的架構(gòu)設(shè)計(jì)方法,會(huì)讓整個(gè)團(tuán)隊(duì)使用同一種語(yǔ)言在溝通, 相互理解起來(lái)更容易,有利于提高協(xié)作效率 。
支付寶財(cái)會(huì)系統(tǒng)架構(gòu)圖
(2)軟件架構(gòu)設(shè)計(jì)
軟件架構(gòu)設(shè)計(jì)一般采用分層架構(gòu)設(shè)計(jì)模型。
軟件首先分為兩個(gè)大層次:前端和后臺(tái)。前端應(yīng)用負(fù)責(zé)提供與用戶交互的軟件,分成Web應(yīng)用,PC客戶端應(yīng)用、移動(dòng)APP應(yīng)用等場(chǎng)景;后臺(tái)負(fù)責(zé)實(shí)現(xiàn)所有業(yè)務(wù)相關(guān)的操作和服務(wù),分成接口層、業(yè)務(wù)邏輯層、基礎(chǔ)邏輯層。
軟件架構(gòu)設(shè)計(jì)時(shí),需要主要做到以下幾點(diǎn):支持模塊化、高內(nèi)聚、低耦合、可伸縮性,同時(shí)也要防止過(guò)度設(shè)計(jì)。已上線軟件如果要新增某個(gè)功能,則需要針對(duì)該功能進(jìn)行軟件架構(gòu)設(shè)計(jì),并最終形成軟件架構(gòu)設(shè)計(jì)圖。
騰訊視頻郵件推薦功能軟件架構(gòu)設(shè)計(jì)圖
然后針對(duì)這個(gè)軟件架構(gòu)圖進(jìn)行細(xì)化,先明確系統(tǒng)涉及的所有基礎(chǔ)邏輯層模塊(對(duì)象),以及該模塊的輸入和輸出項(xiàng),并明確模塊內(nèi)部的基本處理邏輯。這些模塊有的有可能已經(jīng)存在,則無(wú)需再開(kāi)發(fā),單獨(dú)標(biāo)注出來(lái)即可;還沒(méi)有開(kāi)發(fā)的模塊,則可以交給軟件項(xiàng)目經(jīng)理指派給工程師開(kāi)發(fā)。
所有基礎(chǔ)邏輯層模塊
然后明確界面上可以直接調(diào)用的各個(gè)業(yè)務(wù)邏輯層模塊(對(duì)象)名稱,以及對(duì)應(yīng)接口、屬性、方法。
所有基礎(chǔ)邏輯層模塊
對(duì)于還未開(kāi)發(fā)的接口,如果涉及到數(shù)據(jù)調(diào)用,則需要梳理相關(guān)的數(shù)據(jù)結(jié)構(gòu),并確定算法。
所有基礎(chǔ)邏輯層模塊
上面介紹的只是最基礎(chǔ)的軟件架構(gòu)設(shè)計(jì)流程,為了保證軟件的柔性可用,經(jīng)常還會(huì)RPC服務(wù)組件(讓網(wǎng)絡(luò)分布式應(yīng)用開(kāi)發(fā)變得更容易)、消息中間件(將模塊之間的交互異步化)等方案。
(3)網(wǎng)絡(luò)架構(gòu)設(shè)計(jì)
A)運(yùn)維架構(gòu)
架構(gòu)設(shè)計(jì)需要保證每個(gè)環(huán)節(jié)都能快速迭代配置,尤其是在服務(wù)器CPU、內(nèi)存、存儲(chǔ)、帶寬幾個(gè)方面需要做到高可用性。
以新零售個(gè)性化推薦動(dòng)態(tài)Feed為例,我們梳理下整個(gè)網(wǎng)絡(luò)結(jié)構(gòu)設(shè)計(jì)的流程。首先需要根據(jù)業(yè)務(wù)數(shù)據(jù)分析網(wǎng)絡(luò)系統(tǒng)需求。一般Feed信息流前3頁(yè)訪問(wèn)量往往占了90%以上,因此在做緩存設(shè)計(jì)的時(shí)候,我們完全可以在緩存數(shù)據(jù)中只保存每個(gè)用戶最近的100條數(shù)據(jù),其他的需要用戶下拉再?gòu)臄?shù)據(jù)庫(kù)中實(shí)時(shí)生成。
然后需要從技術(shù)上解決高并發(fā)和高性能的問(wèn)題。因?yàn)镕eed性能壓力主要集中在查詢請(qǐng)求量上,而且一條Feed數(shù)據(jù)經(jīng)常是數(shù)百甚至上百萬(wàn)人訪問(wèn),因此Feed很適合采用緩存系統(tǒng)。當(dāng)訪問(wèn)壓力不大時(shí),采用單層緩存數(shù)據(jù)就可以了。如果日均訪問(wèn)量達(dá)到了百萬(wàn)人次而且峰值非常明顯,則最好采用雙層緩存機(jī)制以增加系統(tǒng)擴(kuò)容的靈活性。當(dāng)寫入Feed量很小但是訪問(wèn)量暴增時(shí),只需擴(kuò)容L1層服務(wù)即可;寫入量暴增,則對(duì)L2層服務(wù)快速擴(kuò)容。緩存擴(kuò)容主要是提升QPS、帶寬瓶頸以及緩存數(shù)據(jù)庫(kù)性能。
多級(jí)雙機(jī)房緩存系統(tǒng)
如果希望降低研發(fā)成本,也可以考慮購(gòu)買騰訊云個(gè)性化推薦服務(wù),這些中間處理過(guò)程就全部交給云服務(wù)去處理,這樣可以集中力量解決業(yè)務(wù)層問(wèn)題。
云推薦引擎CRE
Feed中除了文本數(shù)據(jù)外,還會(huì)有大量圖片甚至視頻數(shù)據(jù),此時(shí)可以采用該CDN做文件緩存。Local Cache 分布式緩 存,這是常見(jiàn)CDN緩存策略。此時(shí)比較經(jīng)濟(jì)的選擇,是購(gòu)買CDN云服務(wù),發(fā)布Feed時(shí),把這些圖片和視頻數(shù)據(jù)先Post到服務(wù)器,然后再同步到CDN云服務(wù)中去。
然后是數(shù)據(jù)庫(kù)的分布式架構(gòu)。網(wǎng)絡(luò)架構(gòu)師拿到軟件架構(gòu)師的數(shù)據(jù)結(jié)構(gòu)后,首先對(duì)Feed數(shù)據(jù)區(qū)分冷熱數(shù)據(jù)。Feed數(shù)據(jù)冷熱一般都非常明顯,可以按時(shí)間維度拆分做分表(例如每天Feed數(shù)據(jù)是獨(dú)立一張分表)進(jìn)行冷熱數(shù)據(jù)分離,并對(duì)冷熱數(shù)據(jù)采用不同的存儲(chǔ)方案降低成本。Feed數(shù)據(jù)還有快速檢索的需求,因此需要通過(guò)建立索引提高檢索速度。
Feed存儲(chǔ)架構(gòu)-MySQL
B)服務(wù)撥測(cè)系統(tǒng)
運(yùn)維發(fā)布系統(tǒng)后,運(yùn)維團(tuán)隊(duì)的壓力才真正開(kāi)始。隨著用戶量的不斷增加,穩(wěn)定性、性能和監(jiān)控成了剛需。每個(gè)客戶請(qǐng)求過(guò)來(lái),都需要在后臺(tái)不同機(jī)器之間不停地調(diào)用并返回。只要有1個(gè)接口出現(xiàn)問(wèn)題,就會(huì)導(dǎo)致整個(gè)系統(tǒng)出現(xiàn)性能下降、服務(wù)延時(shí)甚至崩潰。
此時(shí),就需要有效的服務(wù)追蹤系統(tǒng)。對(duì)新零售企業(yè)而言,最經(jīng)濟(jì)有效的辦法是采用騰訊云撥測(cè)系統(tǒng)。通過(guò)部署抽樣接口到云撥測(cè)系統(tǒng),特別是在高峰時(shí)段進(jìn)行監(jiān)測(cè),即可通過(guò)手機(jī)短信或郵件監(jiān)控服務(wù)異常。
云撥測(cè)CAT
C)日志統(tǒng)計(jì)系統(tǒng)
日志統(tǒng)計(jì)系統(tǒng)建議直接采用騰訊云日志服務(wù)。
日志服務(wù)CLS
此外,還要考慮全鏈路壓測(cè)、服務(wù)器登錄安全性、運(yùn)維權(quán)限分配、流量峰后降級(jí)預(yù)案、共享Docker集群資源等問(wèn)題,確保系統(tǒng)可用性、安全性、單位成本。
6、創(chuàng)建版本計(jì)劃
當(dāng)架構(gòu)設(shè)計(jì)完成并評(píng)審后,研發(fā)項(xiàng)目經(jīng)理開(kāi)始對(duì)需求和架構(gòu)進(jìn)行切分,形成版本計(jì)劃。
版本主要作用是用來(lái)明確研發(fā)節(jié)奏,方便團(tuán)隊(duì)協(xié)作,特別是方便測(cè)試和產(chǎn)品發(fā)布。
一般產(chǎn)品研發(fā)節(jié)奏都是按每周1個(gè)小版本,以便安排和協(xié)作。但是因?yàn)锳PP有發(fā)布周期和推廣成本的考慮,因此會(huì)每隔幾周發(fā)布一個(gè)大版本。
每個(gè)版本都包括若干需求點(diǎn),因此自然就明確了測(cè)試范疇,這樣測(cè)試范圍就不會(huì)無(wú)限制蔓延,可以讓產(chǎn)品節(jié)奏非常明確,形成快速迭代和敏捷開(kāi)發(fā)的研發(fā)風(fēng)格。
版本落地到代碼管理層面上,關(guān)鍵就是代碼管理系統(tǒng)(一般都選用GIT)中的Trunk版本。首先項(xiàng)目經(jīng)理需要在Git中創(chuàng)建Trunk版本,并為每個(gè)研發(fā)人員創(chuàng)建分支版本。研發(fā)人員在分支版本中測(cè)試沒(méi)有問(wèn)題的版本代碼,將由架構(gòu)師或項(xiàng)目經(jīng)理合并到Trunk版本中,這個(gè)版本經(jīng)過(guò)編譯后進(jìn)行功能和系統(tǒng)測(cè)試,沒(méi)問(wèn)題后再同步到運(yùn)維發(fā)布系統(tǒng)中發(fā)布。
7、開(kāi)發(fā)階段
(1)開(kāi)發(fā)測(cè)試環(huán)境準(zhǔn)備
主要是部署Web、APP開(kāi)發(fā)測(cè)試環(huán)境,以及部署需求管理系統(tǒng)、代碼管理系統(tǒng)Git等。
QQ游戲大廳研發(fā)環(huán)境搭建計(jì)劃
(2)開(kāi)發(fā)設(shè)計(jì)文檔
開(kāi)發(fā)工程師拿到架構(gòu)師設(shè)計(jì)文檔后,就可以將自己負(fù)責(zé)的部分拆分出來(lái),然后提前對(duì)這部分的開(kāi)發(fā)細(xì)節(jié)進(jìn)行補(bǔ)充和完善,形成開(kāi)發(fā)設(shè)計(jì)文檔。開(kāi)發(fā)設(shè)計(jì)文檔主要用來(lái)提高軟件開(kāi)發(fā)效率,保證軟件質(zhì)量,并有利于后續(xù)產(chǎn)品客服文檔的編寫,也非常有利于后續(xù)的研發(fā)迭代和代碼維護(hù)工作。
前端開(kāi)發(fā)、APP客戶端開(kāi)發(fā)、后臺(tái)開(kāi)發(fā)完善的內(nèi)容和細(xì)節(jié)各不相同,但是內(nèi)容主要集中在開(kāi)發(fā)環(huán)境、開(kāi)發(fā)語(yǔ)言、使用框架、對(duì)象屬性方法、接口封裝、數(shù)據(jù)結(jié)構(gòu)設(shè)計(jì)、界面開(kāi)發(fā)、編譯發(fā)布等方面。
(3)前端開(kāi)發(fā)
前端開(kāi)發(fā)工程師通過(guò)使用JavaScript來(lái)編寫和封裝具有良好性能的前端交互組件,并通過(guò)CSS XHTML輸出Web操作界面。前端工程師經(jīng)常不僅要考慮前端實(shí)現(xiàn),很多時(shí)候也需要了解后臺(tái)研發(fā),從而能不斷優(yōu)化前端代碼分層架構(gòu),讓W(xué)eb產(chǎn)品的穩(wěn)定性和可用性不斷提升。
(4)APP客戶端開(kāi)發(fā)
App客戶端開(kāi)發(fā)主要是指IOS、Android、微信小程序的開(kāi)發(fā)。
IOS開(kāi)發(fā)推薦使用Xcode,需要運(yùn)行在Mac OS上;Android開(kāi)發(fā)推薦使用Eclipse;微信小程序開(kāi)發(fā)需要使用微信開(kāi)發(fā)者工具。
(5)后臺(tái)開(kāi)發(fā)
后臺(tái)開(kāi)發(fā)主要是指的服務(wù)器端的程序開(kāi)發(fā),包括Web后臺(tái)開(kāi)發(fā)、組件開(kāi)發(fā)兩類。兩者之間其實(shí)本質(zhì)上一體的,web后臺(tái)可以看作是組件的前端。Web后臺(tái)解析了HTTP請(qǐng)求,然后通過(guò)層層轉(zhuǎn)發(fā)給了后面分布式系統(tǒng)的多個(gè)組件并調(diào)用服務(wù)。
因?yàn)榛ヂ?lián)網(wǎng)公司的server一般都是Linux,因此還會(huì)涉及到Shell腳本編寫、Linux環(huán)境編程等內(nèi)容,需要熟悉Linux/Unix下各種環(huán)境編程的API。
(6)開(kāi)發(fā)工程師自測(cè)
開(kāi)發(fā)工程師可以一邊研發(fā)一邊自測(cè),完成所負(fù)責(zé)功能模塊的開(kāi)發(fā)后再進(jìn)行完整功能模塊的自測(cè)。
開(kāi)發(fā)自測(cè)和測(cè)試的重點(diǎn)不一樣,是為了減少不必要成本,而不是要替代測(cè)試工程師的工作。因?yàn)榇a是開(kāi)發(fā)自己寫的,自測(cè)可以發(fā)現(xiàn)的問(wèn)題,就完全沒(méi)必要讓測(cè)試工程師去發(fā)現(xiàn)。而且發(fā)現(xiàn)問(wèn)題馬上就可以自己修改自己驗(yàn)證,減少了溝通和返工成本。
8、測(cè)試階段
從需求詳情文檔經(jīng)過(guò)評(píng)審,測(cè)試工作就開(kāi)始了。
(1)測(cè)試用例
測(cè)試經(jīng)理組織測(cè)試工程師,根據(jù)需求詳情文檔撰寫測(cè)試用例。
測(cè)試用例是軟件測(cè)試質(zhì)量穩(wěn)定的保障,用于指導(dǎo)測(cè)試的實(shí)施、規(guī)劃測(cè)試數(shù)據(jù)、設(shè)計(jì)測(cè)試腳本、評(píng)估測(cè)試結(jié)果、分析缺陷標(biāo)準(zhǔn)等。測(cè)試用例一般都詳細(xì)記錄測(cè)試工程師應(yīng)該有的操作信息,這樣可以幫助測(cè)試工程師參與測(cè)試。
測(cè)試用例文檔一般包括修訂記錄、測(cè)試用例、測(cè)試數(shù)據(jù)等內(nèi)容。測(cè)試用例可以直接在項(xiàng)目管理系統(tǒng)TAPD中批量創(chuàng)建。TAPD可以快速編寫并管理測(cè)試用例,制定測(cè)試計(jì)劃并執(zhí)行,然后利用Bug跟蹤管理進(jìn)行問(wèn)題跟蹤與解決。
TAPD平臺(tái)中的測(cè)試用例列表與詳情頁(yè)
有很多常見(jiàn)模塊可以歸納成測(cè)試用例庫(kù),然后不斷優(yōu)化完善,這樣可以減少重復(fù)設(shè)計(jì)測(cè)試用例。相當(dāng)于把測(cè)試工作也組件化,減少低效溝通提高效率。例如注冊(cè)功能測(cè)試用例,每隔一段時(shí)間就更新一次,以后出現(xiàn)需要測(cè)試注冊(cè)功能的時(shí)候測(cè)試工程師即可按照此規(guī)范進(jìn)行測(cè)試,而無(wú)需針對(duì)這個(gè)功能重復(fù)編寫測(cè)試用例。
注冊(cè)功能的測(cè)試用例規(guī)范(部分)
(2)功能體驗(yàn)測(cè)試
功能測(cè)試就是對(duì)產(chǎn)品功能進(jìn)行驗(yàn)證,根據(jù)功能測(cè)試用例逐項(xiàng)測(cè)試,檢查產(chǎn)品功能是否達(dá)到用戶要求。功能測(cè)試主要采用黑盒測(cè)試方法,把測(cè)試對(duì)象看作黑盒子,主要測(cè)試功能而不考慮軟件內(nèi)部結(jié)構(gòu)及代碼。一般從軟件產(chǎn)品的界面、架構(gòu)出發(fā),按照需求編寫出來(lái)的測(cè)試用例,輸入數(shù)據(jù)在預(yù)期結(jié)果和實(shí)際結(jié)果之間進(jìn)行評(píng)測(cè),進(jìn)而提出更加使產(chǎn)品達(dá)到用戶使用的要求。
黑盒測(cè)試試圖發(fā)現(xiàn)以下類型的錯(cuò)誤:功能錯(cuò)誤或遺漏、界面錯(cuò)誤、數(shù)據(jù)結(jié)構(gòu)或外部數(shù)據(jù)庫(kù)訪問(wèn)錯(cuò)誤、性能錯(cuò)誤、初始化和終止錯(cuò)誤等。
這部分測(cè)試除了測(cè)試工程師需要參與外,產(chǎn)品、交互、視覺(jué)設(shè)計(jì)師也需要深度參與,因?yàn)楹芏嚯[性信息都很難在需求文檔中寫得無(wú)一遺漏,但是產(chǎn)品設(shè)計(jì)師一看就能看出很多的問(wèn)題,而這些問(wèn)題測(cè)試工程師卻難以判斷,因?yàn)樗麄兘?jīng)常不知道產(chǎn)品設(shè)計(jì)師怎么想的。
功能體驗(yàn)測(cè)試最好是與研發(fā)同步。Web測(cè)試提供測(cè)試環(huán)境,產(chǎn)品設(shè)計(jì)團(tuán)隊(duì)通過(guò)配置host即可訪問(wèn)測(cè)試環(huán)境,隨時(shí)能看到開(kāi)發(fā)進(jìn)展情況。對(duì)客戶端的開(kāi)發(fā),則每天定時(shí)合并代碼到trunk并提供daily build版本,產(chǎn)品設(shè)計(jì)團(tuán)隊(duì)及時(shí)下載體驗(yàn),并在下班前將體驗(yàn)問(wèn)題通過(guò)工作群告知研發(fā)人員,以便研發(fā)人員第2天及時(shí)改進(jìn)。這樣可以及時(shí)糾偏,減少研發(fā)憋大招。這個(gè)地方看似很小的工作習(xí)慣改變,但是會(huì)產(chǎn)生天壤之別的結(jié)果。所謂敏捷開(kāi)發(fā),也體現(xiàn)在這些協(xié)作細(xì)節(jié)里。
(3)性能測(cè)試
性能測(cè)試關(guān)注軟件完成特定功能的響應(yīng)速度、穩(wěn)定性和運(yùn)維成本消耗。主要是為了優(yōu)化系統(tǒng)容量、可擴(kuò)展性、系統(tǒng)穩(wěn)定性、資源利用率等指標(biāo)。
性能測(cè)試一般采用壓力測(cè)試的方法,通過(guò)給系統(tǒng)加載一定負(fù)荷的業(yè)務(wù)壓力,讓系統(tǒng)持續(xù)運(yùn)行一段時(shí)間(一般為7×24小時(shí)),檢測(cè)系統(tǒng)是否能穩(wěn)定運(yùn)行。
性能測(cè)試方案模板(大綱部分)
性能測(cè)試主要步驟如下:
A)羅列主要用戶場(chǎng)景及相應(yīng)負(fù)載量
重點(diǎn)針對(duì)可能出現(xiàn)性能瓶頸的場(chǎng)景,逐項(xiàng)分解和預(yù)估負(fù)載量。
為了讓系統(tǒng)抗壓能力更大一些,一般都會(huì)多預(yù)估一定比例的負(fù)載量,以防出現(xiàn)意外情況。
B)識(shí)別穩(wěn)定性的主要性能指標(biāo)
然后根據(jù)每個(gè)場(chǎng)景的負(fù)載量,分解每個(gè)后臺(tái)服務(wù)、APP、web端所需關(guān)注的系統(tǒng)指標(biāo),比如響應(yīng)時(shí)間、CPU、內(nèi)存使用率等。
C)單元性能測(cè)試與改進(jìn)
在準(zhǔn)備好測(cè)試環(huán)境后,使用測(cè)試工具對(duì)每個(gè)接口按照合法輸入格式進(jìn)行壓力測(cè)試,確保在目標(biāo)負(fù)載量都不會(huì)導(dǎo)致出現(xiàn)問(wèn)題。比較常用的壓力測(cè)試工具是Loadrunner。
如果系統(tǒng)出現(xiàn)響應(yīng)延遲或崩潰的情況,則需要運(yùn)維和研發(fā)快速迭代。然后再次測(cè)試,直到系統(tǒng)性能指標(biāo)達(dá)標(biāo)為止。
D)客戶端兼容性測(cè)試
Web界面的兼容性測(cè)試,可以直接用Chrome內(nèi)置開(kāi)發(fā)工具即可完成。
APP兼容性測(cè)試,最好借用第三方工具(例如Testin云測(cè)),提交APP后,Testin云測(cè)將會(huì)部署APP到數(shù)百款手機(jī),然后自動(dòng)輸出兼容性穩(wěn)定性報(bào)告。也可以根據(jù)測(cè)試工程師提供的測(cè)試用例,針對(duì)每款手機(jī)批量進(jìn)行功能和體驗(yàn)測(cè)試。
E)整體系統(tǒng)測(cè)試與改進(jìn)
當(dāng)每個(gè)場(chǎng)景下的單元測(cè)試完成后,再針對(duì)整個(gè)系統(tǒng)進(jìn)行完整的壓力測(cè)試。
同樣,如果出現(xiàn)響應(yīng)延遲或崩潰的情況,則需要運(yùn)維和研發(fā)快速迭代,找到出問(wèn)題的后臺(tái)接口或前臺(tái)模塊進(jìn)行優(yōu)化,直到系統(tǒng)性能指標(biāo)達(dá)標(biāo)為止。
(4)數(shù)據(jù)初始化運(yùn)營(yíng)
數(shù)據(jù)初始化首先是數(shù)據(jù)庫(kù)工程師根據(jù)產(chǎn)品和運(yùn)營(yíng)人員的需求,對(duì)基礎(chǔ)數(shù)據(jù)進(jìn)行完善和補(bǔ)充,以達(dá)到能用戶能正常使用的狀態(tài)。
比較麻煩的是以往舊系統(tǒng)的數(shù)據(jù)遷移,由于舊系統(tǒng)和現(xiàn)有系統(tǒng)的字段,類型,日期格式,數(shù)字格式等差異,需要抽絲剝繭一層層把數(shù)據(jù)注入到對(duì)應(yīng)的數(shù)據(jù)表里,特別是表間關(guān)系需要繼續(xù)保留下來(lái)。
然后是運(yùn)營(yíng)人員通過(guò)運(yùn)營(yíng)后臺(tái),手動(dòng)修改部分有問(wèn)題的數(shù)據(jù)。
(5)產(chǎn)品內(nèi)部測(cè)試
測(cè)試工程師完成所有測(cè)試用例的測(cè)試工作,研發(fā)人員將所有必須完成的Bug修正修正完成,其他待修正bug完成轉(zhuǎn)需求后,就可以啟動(dòng)產(chǎn)品內(nèi)部測(cè)試了。
內(nèi)部測(cè)試首先可以針對(duì)產(chǎn)品相關(guān)的所有員工,包括產(chǎn)品、研發(fā)、運(yùn)營(yíng)、市場(chǎng)、運(yùn)維等各個(gè)角色。這個(gè)過(guò)程一方面是為了收集產(chǎn)品缺陷反饋,同時(shí)也是讓相關(guān)人員有參與產(chǎn)品改進(jìn)的機(jī)會(huì),讓大家能榮辱與共。同事對(duì)于產(chǎn)品的容忍度比用戶要高得多,就算產(chǎn)品做得很爛,他們都會(huì)堅(jiān)持著把產(chǎn)品所有功能都用一遍,而真實(shí)用戶很可能看到一個(gè)不好的體驗(yàn)點(diǎn)轉(zhuǎn)身就走。因此產(chǎn)品經(jīng)理一定要高度重視同事反饋,同事發(fā)現(xiàn)每個(gè)的缺陷,都一定會(huì)導(dǎo)致大量用戶流失。
員工反饋的問(wèn)題如果是之前沒(méi)有發(fā)現(xiàn)的缺陷,就需要盡快改進(jìn)修正。如果對(duì)當(dāng)前版本影響不大,就可以放到以后版本Bug轉(zhuǎn)需求,并記錄下反饋人信息和詳細(xì)溝通結(jié)論。
等員工完成內(nèi)測(cè)后,產(chǎn)品經(jīng)理可以將產(chǎn)品內(nèi)部測(cè)試版發(fā)到核心用戶群里,以有獎(jiǎng)測(cè)試的形式刺激大家提交缺陷。如果線上反饋不夠深入,可以由UER調(diào)研小組邀請(qǐng)用戶當(dāng)面溝通交流,找到更深入的缺陷。這些問(wèn)題匯總提交到Bug列表中,可以馬上修正的盡快修正,可以放下個(gè)版本的Bug轉(zhuǎn)需求。
9、發(fā)布上線階段
發(fā)布環(huán)境的搭建,包括預(yù)發(fā)布環(huán)境、生產(chǎn)環(huán)境、灰度發(fā)布環(huán)境的準(zhǔn)備等工作。
而正式上線的工作,則包括數(shù)據(jù)庫(kù)上線、程序文件上線等工作。
推薦騰訊云毫秒服務(wù)引擎,這是一個(gè)開(kāi)源框架,適用于在廉價(jià)機(jī)器組成的集群上開(kāi)發(fā)和運(yùn)營(yíng)分布式后臺(tái)服務(wù)。毫秒服務(wù)引擎集RPC、名字發(fā)現(xiàn)服務(wù)、負(fù)載均衡、業(yè)務(wù)監(jiān)控、灰度發(fā)布、容量管理、日志管理、key-value存儲(chǔ)于一體,非常適合中小型互聯(lián)網(wǎng)公司部署發(fā)布分布式應(yīng)用。
毫秒服務(wù)引擎msec
(1)發(fā)布環(huán)境準(zhǔn)備
預(yù)發(fā)布環(huán)境準(zhǔn)備:預(yù)發(fā)布環(huán)境是跟生產(chǎn)環(huán)境配置一模一樣的系統(tǒng),只是往往只有一個(gè)測(cè)試節(jié)點(diǎn),但是它后面調(diào)用的是正式生產(chǎn)環(huán)境的資源(例如DB、Cache、隊(duì)列等)。
預(yù)發(fā)布環(huán)境主要是要在正式發(fā)布前,做一次完整回歸測(cè)試。測(cè)試人員可以通過(guò)地址參數(shù)、Cookie、請(qǐng)求頭參數(shù)、VPN等工具,接入預(yù)發(fā)布環(huán)境進(jìn)行系統(tǒng)整體回歸測(cè)試。預(yù)發(fā)布環(huán)境下,最常見(jiàn)的Bug如下:生產(chǎn)環(huán)境代碼已更新到最新版本了,但是數(shù)據(jù)庫(kù)變更卻忘了操作生產(chǎn)數(shù)據(jù)庫(kù)。這個(gè)情況下,測(cè)試環(huán)境很可能都是正常的,但是預(yù)發(fā)布環(huán)境就可以很好的發(fā)現(xiàn)bug。
跟開(kāi)發(fā)環(huán)境不同,預(yù)發(fā)布環(huán)境不允許開(kāi)發(fā)人員直接接觸,以防因?yàn)殚_(kāi)發(fā)人員提交代碼的瑕疵影響預(yù)發(fā)布環(huán)境里的系統(tǒng)。因?yàn)檫@是運(yùn)維人員保障上線質(zhì)量的最后一道屏障,運(yùn)維標(biāo)準(zhǔn)也基本等同于生產(chǎn)環(huán)境。
正式生產(chǎn)環(huán)境準(zhǔn)備:生產(chǎn)環(huán)境包括發(fā)布產(chǎn)品所需要的所有服務(wù)器資源,包括Web服務(wù)器、數(shù)據(jù)服務(wù)器、CDN服務(wù)等。
灰度發(fā)布環(huán)境準(zhǔn)備:每個(gè)項(xiàng)目一般都會(huì)部署到多臺(tái)機(jī)器,所以一般會(huì)拿1-3臺(tái)服務(wù)器看看是否可用,如果失敗則只需要回滾這幾臺(tái)服務(wù)器,比較方便?;叶劝l(fā)布需要使用跳板機(jī)并進(jìn)行域名綁定,這樣才能保證用戶訪問(wèn)到的只有最新代碼的服務(wù)器。
(2)數(shù)據(jù)庫(kù)上線
生成數(shù)據(jù)庫(kù)項(xiàng)目時(shí),可以先從測(cè)試環(huán)境導(dǎo)出數(shù)據(jù)庫(kù)對(duì)象定義腳本,然后再將預(yù)先部署腳本、數(shù)據(jù)庫(kù)對(duì)象定義和后期部署腳本合并為一個(gè)生成腳本,再將該腳本拿到主數(shù)據(jù)庫(kù)服務(wù)器上生成數(shù)據(jù)庫(kù)。然后通過(guò)主數(shù)據(jù)庫(kù)備份到各臺(tái)從屬數(shù)據(jù)庫(kù)。
如果系統(tǒng)對(duì)讀取及時(shí)性要求非常高,則可在數(shù)據(jù)庫(kù)層之上架構(gòu)Redis這樣的分布式緩存,其性能肯定遠(yuǎn)高于從數(shù)據(jù)庫(kù)讀取數(shù)據(jù)。
(3)程序文件編譯上線
組件部署:將C/C 或Java編寫的組件編譯,然后通過(guò)自動(dòng)部署工具發(fā)布到所有Web服務(wù)器。
Web前端部署:一般先將靜態(tài)資源(例如圖片、JS代碼等)拆分出來(lái),發(fā)布到CDN云服務(wù)。然后再通過(guò)GIT將合并測(cè)試通過(guò)的Trunk版本發(fā)布到正式生產(chǎn)環(huán)境,再通過(guò)灰度發(fā)布工具同步到所有Web服務(wù)器。
IOS APP發(fā)布:App Stores是iTunes Store的一部分,是iPhone、iPod Touch、iPad以及Mac唯一的正規(guī)下載渠道。企業(yè)用戶申請(qǐng)證書后,即可上傳并發(fā)布IOS應(yīng)用。
Android APP發(fā)布:推薦騰訊應(yīng)用寶發(fā)布安卓版本的手機(jī)應(yīng)用。應(yīng)用寶提供防盜版功能,可有效幫助用戶解決誤下載山寨應(yīng)用的問(wèn)題。支持點(diǎn)擊微信、QQ分享鏈接,即可打開(kāi)下載界面。因?yàn)闆](méi)有唯一的安卓發(fā)布市場(chǎng),因此建議主流安卓市場(chǎng)都能上線安卓的版本。
(4)上線版本整體評(píng)估
上線評(píng)估階段需經(jīng)過(guò)市場(chǎng)、產(chǎn)品、運(yùn)營(yíng)、開(kāi)發(fā)、測(cè)試等對(duì)于上線做出整體評(píng)估后才能正式上線運(yùn)營(yíng)。這個(gè)過(guò)程一般是由產(chǎn)品經(jīng)理先在全員群里提醒大家最后一次確認(rèn)還有什么問(wèn)題。
如果有任何問(wèn)題,則需要在群里和相關(guān)人員評(píng)估是否要在當(dāng)前版本解決,如果是則盡快解決以免影響版本發(fā)布計(jì)劃,如果不是則轉(zhuǎn)需求到后續(xù)版本。
如果每個(gè)人都沒(méi)有提出異議則發(fā)出上線版本發(fā)布告知郵件,進(jìn)入正式發(fā)布流程。
(5)灰度發(fā)布
Web前端灰度發(fā)布:對(duì)比較小的Web應(yīng)用,在頁(yè)面javascript或服務(wù)器端實(shí)現(xiàn)分流即可。但對(duì)于大規(guī)模用戶的Web應(yīng)用,采用分流發(fā)布引擎很有必要。
組件灰度發(fā)布
IOS APP灰度發(fā)布:常見(jiàn)做法是制作一個(gè)帶數(shù)字簽名的測(cè)試版,然后提供給測(cè)試用戶使用。
Android APP灰度發(fā)布:由于Android沒(méi)有統(tǒng)一的發(fā)布渠道,因此只需逐個(gè)替換發(fā)布渠道的安裝包即可。
10、優(yōu)化階段
(1)研發(fā)工作總結(jié)
產(chǎn)品上線后需要對(duì)產(chǎn)品研發(fā)過(guò)程做總結(jié),不論是產(chǎn)品上的還是流程配合上的,為后續(xù)加強(qiáng)溝通協(xié)作、產(chǎn)品運(yùn)營(yíng)打好基礎(chǔ)。
產(chǎn)品流程也并不是一成不變的,不同的產(chǎn)品有不同的要求。對(duì)一些中小互聯(lián)網(wǎng)公司而言,采用完整研發(fā)流程必然成本高昂,因此如何裁剪成自己需要的研發(fā)流程,是這類公司面臨的關(guān)鍵問(wèn)題。
(2)上線后收集用戶反饋
對(duì)于產(chǎn)品做出優(yōu)化,對(duì)于用戶常見(jiàn)的問(wèn)題及反饋?zhàn)龀稣{(diào)整,這階段更多是產(chǎn)品與用戶的磨合,做到更好的用戶體驗(yàn)。
為了更好的收集用戶反饋,需要在所有產(chǎn)品上都增加反饋入口,以便用戶提交反饋內(nèi)容。用戶反饋的所有問(wèn)題將出現(xiàn)在用戶反饋平臺(tái)中,以便產(chǎn)品和運(yùn)營(yíng)團(tuán)隊(duì)跟進(jìn)。
支付寶用戶反饋平臺(tái)
一般每天的反饋量都數(shù)以萬(wàn)計(jì),因此產(chǎn)品設(shè)計(jì)師每天都需要花費(fèi)相當(dāng)比例的時(shí)間去瀏覽,并將反饋建議轉(zhuǎn)化產(chǎn)品需求點(diǎn)加入需求池。
(3)產(chǎn)品體驗(yàn)可用性測(cè)試
可用性測(cè)試常見(jiàn)方法是邀請(qǐng)一批真實(shí)的典型客戶,針對(duì)典型場(chǎng)景使用產(chǎn)品,用戶研究員在一旁觀察、聆聽(tīng)、記錄,從而發(fā)現(xiàn)產(chǎn)品中存在的可用性缺陷。
為什么需要可用性測(cè)試呢?這是因?yàn)楫a(chǎn)品運(yùn)營(yíng)團(tuán)隊(duì)的員工往往潛意識(shí)里會(huì)認(rèn)為用戶一定會(huì)怎樣操作,但是事實(shí)上用戶很大概率上都不會(huì)按照他們希望的進(jìn)行操作,甚至?xí)萑朊H桓居貌幌氯?。而通過(guò)可用性測(cè)試,就可以找到問(wèn)題點(diǎn),通過(guò)優(yōu)化體驗(yàn)設(shè)計(jì)降低用戶使用門檻。
騰訊UER團(tuán)隊(duì)用戶參與體驗(yàn)調(diào)研流程
(4)運(yùn)維系統(tǒng)優(yōu)化
產(chǎn)品上線后運(yùn)維工作才剛開(kāi)始,具體包括升級(jí)版本上線工作、服務(wù)監(jiān)控、應(yīng)用狀態(tài)統(tǒng)計(jì)、日常服務(wù)狀態(tài)巡檢、突發(fā)故障處理、服務(wù)日常變更調(diào)整、集群管理、服務(wù)性能評(píng)估優(yōu)化、數(shù)據(jù)庫(kù)管理優(yōu)化、隨著應(yīng)用PV增減進(jìn)行應(yīng)用架構(gòu)的伸縮、安全、運(yùn)維開(kāi)發(fā)等工作。
小結(jié):
因?yàn)榛ヂ?lián)網(wǎng)業(yè)務(wù)不盡相同,因此各個(gè)公司采用的研發(fā)模型自然也各有千秋。但是大致的研發(fā)流程和各個(gè)角色的執(zhí)行方法論,卻是大同小異。特別是產(chǎn)品研發(fā)思路,大多都是遵循“快速迭代”、“敏捷開(kāi)發(fā)”、”柔性擴(kuò)展”、“穩(wěn)定高效”的原則。
www.36dianping.com
[免責(zé)聲明]
原文標(biāo)題:《互聯(lián)網(wǎng)產(chǎn)品研發(fā)流程概論(下)| 專家干貨》
作者:吳濤
本文來(lái)源于36氪企服點(diǎn)評(píng)
版權(quán)聲明:本文內(nèi)容由互聯(lián)網(wǎng)用戶自發(fā)貢獻(xiàn),該文觀點(diǎn)僅代表作者本人。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如發(fā)現(xiàn)本站有涉嫌抄襲侵權(quán)/違法違規(guī)的內(nèi)容, 請(qǐng)發(fā)送郵件至 舉報(bào),一經(jīng)查實(shí),本站將立刻刪除。