回顧一年半之前,我還在作為一個項目的推進(jìn)者,為整個項目的進(jìn)度和完善而頭疼。當(dāng)時遇到的問題非常棘手。如今我又面臨和完成了一個完整大功能的開發(fā),完成度和問題解決上都有了一些進(jìn)步。
一、一個完整的功能開發(fā)都有哪些階段
1.1 需求評審
需求評審是整個流程的源頭,是由產(chǎn)品同學(xué)將需求以文檔的形式產(chǎn)出,然后拉著RD同學(xué)一起進(jìn)行對需求進(jìn)行評審。
在評審過程中,可以了解到需求的背景和作用,換句話說就是要做這個功能的意義。
當(dāng)然還有很多問題需要搞明白:
1、這個功能在整個大的業(yè)務(wù)鏈路中有什么樣的作用
2、它涉及到的交互上下游都有哪些,交互方式是同步還是異步
3、產(chǎn)品方案或交互方案是否合理
4、上游要求調(diào)用的耗時大約是多少,并發(fā)可能會是多少
5、文檔中的規(guī)則或者描述是否清晰
6、異常的兜底方案是什么
我的一個習(xí)慣是:
要用大腦盡可能的在數(shù)據(jù)流的維度上,串一遍完整的業(yè)務(wù)流程??纯葱枨笪臋n中是否缺失了哪些必要字段,可能會遇到哪些大卡點和小卡點。
1.2 技術(shù)評審
在進(jìn)行完需求評審之后,就需要對功能進(jìn)行技術(shù)方案的擬定。
其中就包含:
1、交互方式?jīng)Q定了通信方式
2、接口文檔的產(chǎn)出,包括參數(shù)和返回值的數(shù)據(jù)結(jié)構(gòu)等
3、數(shù)據(jù)庫表的設(shè)計
4、類圖設(shè)計
5、是否需要緩存
6、是否使用多線程的方式提高處理效率
7、是否使用分布式鎖
8、特殊情況是否考慮清楚
9、是否需要兜底定時任務(wù)
10、是否需要分布式配置
11、是否需要限流和熔斷
12、是否要加一個最外層開關(guān)
拉著qa進(jìn)行技術(shù)評審,評審需要考慮的問題:
1、數(shù)據(jù)庫設(shè)計是否合理,索引是否合理
2、類的設(shè)計是否合理
3、是否會發(fā)生死鎖
不同公司的QA具備的能力不同,有的是會開發(fā),能讀代碼;有的是只會黑盒測試,不關(guān)心內(nèi)部實現(xiàn),更側(cè)重業(yè)務(wù)流程的驗證和交互是否通順。
1.3 開發(fā)
開發(fā)過程就是按照技術(shù)方案進(jìn)行代碼實現(xiàn),當(dāng)然,我們有單測覆蓋率的要求,所以單測也可以算到開發(fā)過程中。
開發(fā)過程中也會遇到一些方案的考量:
1、是否需要用事務(wù)
2、分布式鎖超時時間
3、是否存在主從庫延遲,延遲的話是否加事務(wù),或者強(qiáng)制走主庫
1.4 自測
1、交互自測
2、各種邏輯分支測試,包括正向流程,異常流程,邊界情況等
3、并發(fā)邏輯測試,主要是測試是否能安全上鎖,上了鎖以后是否能安全讀寫庫等
4、壓測
我的習(xí)慣:
盡量在每一個讀寫操作節(jié)點出摸你程序中斷的情況,然后觀察表中數(shù)據(jù)是否符合預(yù)期,比如:事務(wù)是否能正常回滾,兜底的定時任務(wù)是否能撈起異常流程等。
1.5 CR
一般在提交分支合并申請時,如果需求內(nèi)容不多的話,tl 會自己 code review。如果是個比較大的功能,一般都是單獨拉會,組內(nèi)全員進(jìn)行 CR。
1、類的設(shè)計是否合理
2、代碼是否整潔,注釋是否適中,是否存在潛在的NPE
3、其他可能未考慮到的問題等
1.6 聯(lián)調(diào)
為了可以并行開發(fā),服務(wù)提供方是需要給調(diào)用方提供mock調(diào)用的,無論是實時接口還是異步消息,都提供一個mock響應(yīng)。先把兩方的通信打通,這樣聯(lián)調(diào)就只剩下邏輯聯(lián)調(diào)了。
當(dāng)然,除了要在測試環(huán)境正常跑起來之外,最好還是記錄一下在測試環(huán)境需要配置的內(nèi)容和步驟,比如:
1、域名的配置
2、服務(wù)鑒權(quán)的添加
3、分布式配置的添加
4、數(shù)據(jù)庫表的創(chuàng)建
5、公司內(nèi)部的中間件平臺上資源的申請,如:redis、topic和消費者的創(chuàng)建、分布式鎖資源的申請等
講這些一步步的都記錄之后,上線前在準(zhǔn)備上線單就不會漏掉了,因為在 tes 環(huán)境要完成的這些步驟,在 prod 同樣也是要做的。
1.7 提測
一般能自測出來的問題都解決了,之后讓QA完整的測一下。
1.8 預(yù)生產(chǎn)環(huán)境上線
等test 環(huán)境測試通過后,QA 會通過合并到 master 分支的申請,代碼將會合并到 master 上。
在預(yù)生產(chǎn)環(huán)境上,公司之間會存在差別,我們公司是預(yù)生產(chǎn)環(huán)境與生產(chǎn)環(huán)境共用一套資源,如:數(shù)據(jù)庫,topic和消費者,redis等。
在預(yù)生產(chǎn)進(jìn)行構(gòu)建和部署,一是要確保項目能在生產(chǎn)環(huán)境上正常啟動;而是在生產(chǎn)環(huán)境上正常執(zhí)行。
1.9 生產(chǎn)環(huán)境上線
完善上線單,一步一步在檢查一下是否有漏掉的地方。
確認(rèn)之后,進(jìn)行上線操作。同時觀察日志和監(jiān)控。
二、可能遇到的問題
在整個功能開發(fā)過程中,會在不同的階段遇到不同的問題。有可能代碼寫著寫著,就會發(fā)現(xiàn)一個漏想的點,這個點可小可大,往小了說是少一兩個字段,往大了說可能會成為整個需求的卡點。無論是大問題還是小問題,肯定越早暴露出來越好。