軟件開發(fā),在保證功能完成之后,首要的一件事就是,確保軟件不會(huì)給客戶帶來(lái)破壞。因此除了敏捷開發(fā)以外,我們主要做了三件事情來(lái)讓碼農(nóng)不要在開發(fā)的時(shí)候太分心搞別的。
第一件事就是你做了一個(gè)關(guān)鍵的設(shè)計(jì)之后,會(huì)有一個(gè)負(fù)責(zé)security review的小組來(lái)看你的文檔,問你問題,根據(jù)他們的專業(yè)經(jīng)驗(yàn)指出軟件哪里可能是會(huì)被攻擊的薄弱環(huán)節(jié)。舉個(gè)例子,你用了XML做配置文件,如果用戶偷偷給你換了一個(gè)破壞過的XML,你的程序就會(huì)掛。一旦程序進(jìn)入掛了的狀態(tài)的時(shí)候,是很危險(xiǎn)的。如果你試圖恢復(fù)它然后繼續(xù)運(yùn)行,你就得考慮大量的細(xì)節(jié),來(lái)把你的軟件從錯(cuò)誤的狀態(tài)恢復(fù)到正確的狀態(tài)。中間稍有不慎就容易被攻擊。所以我們都鼓勵(lì)說(shuō),一旦發(fā)生了這些不可逆轉(zhuǎn)的破壞,就讓程序自己出dump然后自殺。當(dāng)然具體到XML這個(gè)例子,我們還有xsd文件,用Windows自帶的MSXML組件來(lái)實(shí)現(xiàn)驗(yàn)證一下,所以還算是個(gè)小事。JSON就沒這個(gè)福利了。
第二件事情就是,我們的環(huán)境搭得特別科學(xué)。譬如說(shuō)你開發(fā)SQLServer2014,那你還要給SQLServer2008打補(bǔ)丁。2008打補(bǔ)丁的時(shí)候用的SDK和開發(fā)環(huán)境可能跟2014有巨大的區(qū)別。所以我們有一個(gè)Build Team,寫了幾萬(wàn)行的perl和bat腳本,來(lái)使得我們可以做到說(shuō),我們只要從2014的branch切換到2008的branch,這些工具就自動(dòng)變了,譬如說(shuō)cl.exe就從新的版本指向了舊的版本,庫(kù)啊什么其他的亂七八糟的也是。如果你剛好用不上Visual Studio的話,只要你把代碼從Source Control上搞下來(lái),運(yùn)行他幫你建立在桌面上的一個(gè)快捷方式,就可以打開一個(gè)cmd,里面的環(huán)境都配置好了, 而且不會(huì)污染別的cmd 。那我們就再也不怕手忙腳亂用錯(cuò)工具來(lái)開發(fā)導(dǎo)致出現(xiàn)更多問題了。一個(gè)人有可能要同時(shí)在不同的版本上干不同的事情,因此這是很重要的。因此我們也會(huì)把大量的二進(jìn)制文件checkin進(jìn)去,因此很多組嘗試使用git最后都失敗了
第三件事情就是制度的問題了。產(chǎn)品狗在我們這里,責(zé)任很大,權(quán)力很小。原則上產(chǎn)品狗是管不了我們的,我們之所以聽產(chǎn)品狗的話,是因?yàn)槲覀兏a(chǎn)品狗都有相同的目標(biāo)——把軟件做好。所以每當(dāng)產(chǎn)品狗做了一些奇怪的決定的時(shí)候,我們可以很容易的拒絕他。他為了完成他們自己的工作指標(biāo),要么就要來(lái)說(shuō)服我們,要么就只能改自己的決定了。因?yàn)楫a(chǎn)品狗和碼農(nóng)之間沒有達(dá)成一致從而導(dǎo)致軟件沒按時(shí)完成的,產(chǎn)品狗具有很大的責(zé)任。我們還有專業(yè)的測(cè)試團(tuán)隊(duì)。測(cè)試團(tuán)隊(duì)的權(quán)力不小。譬如說(shuō)產(chǎn)品狗提了一個(gè)需求,測(cè)試可以跳出來(lái)說(shuō)這個(gè)功能會(huì)給測(cè)試帶來(lái)無(wú)比的困難,從而拒絕產(chǎn)品狗的決定。因此產(chǎn)品狗的每一個(gè)決定,首先要保證可以被科學(xué)的實(shí)現(xiàn)出來(lái)。當(dāng)然產(chǎn)品狗自己通??赡懿恢朗裁词强茖W(xué),所以我們要通過不斷的打他的臉來(lái)讓他明白,什么是科學(xué)。