對云招OurATS完全不了解的網(wǎng)友可以看下上一篇文章/帖子:
談?wù)勗普蠴urATS為什么不把開發(fā)語言從PHP轉(zhuǎn)成go/java/.net,而是搞了個PHP編譯器BPC來實現(xiàn)本地部署
簡言之,云招OurATS是一個使用PHP語言開發(fā)的招聘管理系統(tǒng).
經(jīng)常看到有網(wǎng)友接手PHP/Python等動態(tài)語言開發(fā)的項目后,不管是加功能還是調(diào)bug,都痛苦不不堪,直呼"動態(tài)一時爽,重構(gòu)火葬場".
確實,我本人在參與開發(fā)云招OurATS的前兩年里也有類似的經(jīng)歷.
當(dāng)時面臨最大的問題是,不敢輕易加需求.
為什么?
因為經(jīng)過2年的開發(fā),云招OurATS的代碼庫已經(jīng)稍有規(guī)模.每添加一個需求,是否會影響到其它功能模塊,都需要好好測試才放心.
可是招聘系統(tǒng)的功能模塊多,相互關(guān)聯(lián)錯綜復(fù)雜,要測試的地方太多了,就一個字,累!
當(dāng)時敏捷開發(fā)、TDD是非常流行的,尤其是TDD很明顯可以解決我們面臨的測試問題,所以當(dāng)時狠花了一些時間研究怎么搞TDD.
也去聆聽過某知名公司組織的敏捷開發(fā)分享交流會,發(fā)現(xiàn)方法論比較多,落地實戰(zhàn)幾乎沒有.
于是靜下心來,自己搞.
核心關(guān)鍵點:
測試用例不好寫
那是被測試代碼不容易測,需要重組代碼結(jié)構(gòu),讓測試用例好寫
要高覆蓋率嗎?
覆蓋率只是一個指標(biāo)/手段,不是目的.
目的是建立對被測試代碼的信心,寫個1+1=2
根本不需要測試,因為我們有信心不會出錯.
核心邏輯覆蓋到,在擔(dān)心出錯的地方多覆蓋,在有信心不出錯的地方少覆蓋.
擺正心態(tài),寫測試用例肯定會多花點時間,但這是為了不去體驗火葬場
云招OurATS至今已經(jīng)歷了三次大的升級:
每次升級,都是先跑通測試用例,這時會有一些SQL和PHP的兼容性調(diào)整,但都很輕松地搞定了.
升級后系統(tǒng)運行地也很平穩(wěn),利益于PHP近些年來的性能提升,每次升級都還能節(jié)省幾臺服務(wù)器.
在2023年初,我們使用PHP編譯器BPC成功編譯了云招OurATS.
BPC完全脫離了PHP解釋器,每一個PHP的語法、擴(kuò)展函數(shù)都重新實現(xiàn)了一遍,這當(dāng)中如果沒有測試做保障,那根本就是不可能完成的任務(wù).
好在PHP自身有完善的phpt測試用例,BPC首先通過了這一層測試.
OurATS相關(guān)的每個項目/模塊也都有寫好的PHPUnit測試用例,BPC也通過了這一關(guān)測試.
測試都過了,我們很有信心BPC編譯后的OurATS等價于PHP解釋執(zhí)行的OurATS.
如此大規(guī)模的升級都輕松搞定了,日常的小升級更不在話下.
這十多年來,每年我們的代碼庫都會有相當(dāng)規(guī)模的變化,但這十多年里,我們沒再體驗過火葬場,我們也非常自信云招OurATS和"屎山"不沾邊.
貴公司還在招人嗎