2017年3月5-7日有幸參加了CSD的開(kāi)發(fā)培訓(xùn)袖牙,感受頗深。感謝領(lǐng)導(dǎo)給的機(jī)會(huì)沃缘。
回想下幾年前躯枢,我在做OA項(xiàng)目的時(shí)候,也采用了測(cè)試驅(qū)動(dòng)開(kāi)發(fā)(TDD)槐臀,結(jié)合下這次CSD的一起做下經(jīng)驗(yàn)總結(jié)吧锄蹂。
1、TDD的學(xué)習(xí)是要先引入單元測(cè)試水慨,先讓團(tuán)隊(duì)熟悉下單元測(cè)試的使用得糜。
2敬扛、說(shuō)服整個(gè)團(tuán)隊(duì),我們要爭(zhēng)做有節(jié)操的程序員朝抖,保證質(zhì)量啥箭,而不是制造bug。
3治宣、單元測(cè)試其實(shí)蠻強(qiáng)調(diào)個(gè)人的修為急侥,是簡(jiǎn)單完成測(cè)試任務(wù),還是驅(qū)動(dòng)開(kāi)發(fā)侮邀,指導(dǎo)設(shè)計(jì)坏怪。
4、在推進(jìn)TDD的過(guò)程中绊茧,我們實(shí)際上有結(jié)合了及時(shí)反饋的概念铝宵,做到了自動(dòng)構(gòu)建。每日的Junit的測(cè)試報(bào)告华畏。
? ? 雖然沒(méi)有做到很理想的“你媽喊你改bug”的語(yǔ)音錄入情況鹏秋,但也有郵件的報(bào)警。和我們每日的check in唯绍,和每天早晨的修復(fù)bug拼岳,只是為了讓Junit跑的更綠一些。
? ? 測(cè)試金字塔中况芒,單元測(cè)試我們其實(shí)當(dāng)時(shí)已經(jīng)做得挺好的了惜纸。
5、我們總是為了使得代碼整潔绝骚,引入了諸多的設(shè)計(jì)模式耐版,好看的代碼比較免不了重構(gòu)。當(dāng)然本次最大的收獲應(yīng)該是新的開(kāi)發(fā)工具會(huì)使得重構(gòu)間的很多压汪。eclipse或者myeclipse真的可以丟掉了粪牲。
6、萬(wàn)事開(kāi)頭難止剖,但堅(jiān)持更難腺阳。在項(xiàng)目完成,人走離散的時(shí)候穿香。我們也漸漸不做TDD了亭引。
? ? 我記得最開(kāi)始的時(shí)候,產(chǎn)能很差皮获。但當(dāng)我們熟悉了這種方法焙蚓,產(chǎn)能提升非常快。也迅速消化了bug數(shù)量购公。貴在堅(jiān)持啊萌京,兄弟們。
7宏浩、道場(chǎng) dojo demo知残,實(shí)際上我們更多的是在結(jié)對(duì)的時(shí)候?qū)W到的東西。不過(guò)確實(shí)小游戲完成項(xiàng)目和算法绘闷。確實(shí)可以激發(fā)熱情和修煉編程技能橡庞。
? ? 后續(xù)打算引入到團(tuán)隊(duì)里頭。
8印蔗、寫(xiě)到最后扒最,測(cè)試其實(shí)開(kāi)發(fā)的骨子里是痛恨的,但從快樂(lè)編碼的角度來(lái)講华嘹,都差不多吧趣。當(dāng)代碼的壞味道被一點(diǎn)點(diǎn)消除掉的時(shí)候,那種快樂(lè)足矣會(huì)抵消對(duì)測(cè)試這種活的反抗耙厚。
9强挫、談?wù)劯采w率工具吧,我有點(diǎn)忘記了當(dāng)時(shí)怎么做薛躬,不過(guò)麥老師推薦的開(kāi)發(fā)工具確實(shí)不錯(cuò)俯渤。后面說(shuō)點(diǎn)開(kāi)發(fā)環(huán)境、還有編譯型宝、測(cè)試環(huán)境八匠,想想當(dāng)時(shí)破破的臺(tái)式機(jī),開(kāi)個(gè)eclipse都能卡半天趴酣。這些都是影響產(chǎn)能和效率的原因梨树。
? ?我們應(yīng)該在平時(shí)的交談中去發(fā)現(xiàn)問(wèn)題,并幫助團(tuán)隊(duì)提升效率和產(chǎn)能岖寞。
10抡四、回頭在想,我好像當(dāng)時(shí)并沒(méi)實(shí)際去寫(xiě)一個(gè)什么設(shè)計(jì)文檔仗谆。文檔都是為了CMMI的時(shí)候指巡,后面補(bǔ)下。新人嘛隶垮,看下代碼就行了厌处。
附上:學(xué)習(xí)筆記
1、瀑布模式下開(kāi)發(fā)和測(cè)試岁疼,敏捷開(kāi)發(fā)下的TDD:測(cè)試應(yīng)該在源頭上避免bug產(chǎn)生,幫助開(kāi)發(fā)減少bug
2、原來(lái)瀑布模式下捷绒,部署和編譯時(shí)間較長(zhǎng)瑰排,反饋周期太長(zhǎng)了。
3暖侨、TDD的優(yōu)勢(shì):
? ? ? 測(cè)試-Api解耦椭住、避免過(guò)度設(shè)計(jì)、代碼有重復(fù)的時(shí)候字逗,開(kāi)始重構(gòu)京郑、覆蓋率較高、可重用性
4葫掉、為何要持續(xù)集成:
? ?避免長(zhǎng)時(shí)間緊張的整合
? ?提供可視化程度
? ? 盡早發(fā)現(xiàn)問(wèn)題
? ? 花更少的時(shí)間debug
? ? 有信心在可到的基礎(chǔ)上開(kāi)展工作
5些举、測(cè)試職能的改變:從發(fā)現(xiàn)缺陷到避免缺陷產(chǎn)生
6、團(tuán)隊(duì)職責(zé)
頻繁遷入
不要遷入有問(wèn)題的代碼
不要遷入未經(jīng)測(cè)試的代碼
不要在構(gòu)建失敗后再遷入
下班前要保證掐納入的代碼能在CI服務(wù)器上通過(guò)俭厚。
7户魏、如果沒(méi)有達(dá)成共識(shí)的,放入Team agreement
8挪挤、什么是好的代碼 -重構(gòu)
? ? ? 可工作 ?易修改 ?易理解
? ? 簡(jiǎn)單叼丑,邏輯清晰,
9扛门、何時(shí)重構(gòu)
增加新功能
? ? .重構(gòu)心有代碼直至你能理解
? ? .重構(gòu)設(shè)計(jì)讓新功能很容易加進(jìn)去
修復(fù)缺陷
? ?.重構(gòu)以理解代碼
代碼評(píng)審的直接效果
? ? .允許更高層的建議
? ? .不要給重構(gòu)分配時(shí)間鸠信,融合的日常的活動(dòng)里面