有哪些軟體相關的公司,開發流程比較規範?

本人程序猿一枚,剛離職,之前的公司還是間蠻大的上市公司,但是我驚訝的是他們的開發流程很不規範,每天疲於應付各種由此引起的問題,而且開發周期不是一般的緊。

我想問一下有哪些公司開發流程比較規範,比如有嚴格的持續集成工作流程和規範、做Daily build並有相應的代碼檢查,定期做代碼Review等等。

我知道華為的很多項目組是有做這些的,還有哪些公司的開發流程你認為還不錯的呢?
以供找工作參考.謝謝!


之前我在微軟上海的sqlserver工作的時候就感受到了他們十分嚴謹的氣氛,一般來說,我們做一個軟體之前都會planning和investigation,大概佔用1/3的時間,研究得差不多了,然後才開始干正事。然後就會開始用agile裡面scrum的那套方法,而且在【每次】代碼checkin之前,都要有兩個人review通過了才行,review沒過就按照comment改,如果強行checkin的話系統會群發郵件。


至於daily build要到開發了差不多一半的時候,功能基本都寫完了才會開始,這個是給test用的,不是給dev用的。


至於test,會跟dev一樣,從項目的planning階段就開始參與我們的設計,並且他們會思考如何對我們即將要完成的東西做自動化測試。測試時全程參與的,而不像某些著名公司一樣,快寫完的時候才開始。


到了項目的後期,feature基本做完了,幾乎都在修bug的時候,會進入一個feature freezing的階段。這個時候PM如果要提新的需求,就會queue進一個叫做design changing request的表裡,每個星期全組都要開會討論,到底是現在做呢,還是下個release才做。


我們的項目組有上千個人,所以把所有代碼merge在一起也是一件很艱難的事情。因此每個feature team都要定期從main branch上面下載代碼來做本地merge,提前發現問題。當輪到我們最終把自己的feature提交到main branch的時候,大概會有兩個星期的時間,這個時間我們可以自由操作main branch,別人不能動(只能下載)。但要求是要把整個sqlserver的所有自動化測試用例都通過才行。否則的話,過了這個時間窗,沒做完就幹掉,排隊等下次。如果最終checkin了進去,但是別人發現你break test了,就會把你的代碼reverse掉,你仍然要排隊等下次。

我們的delivery是按照【你寫的代碼進了main branch】來算的,如果千辛萬苦怎麼寫都過不了test進不了branch,那根白做了沒有任何區別。


你要是想體驗一下的話可以過來試試(逃


看見@vczh 講了微軟的開發流程,我也講講我們這邊吧。我在上海ibm的編譯器組,我們團隊包括了加拿大的主體部分,美國的C++ Runtime部分,北京的一小部分z/OS,上海的AIX/Linux C/C++編譯器前端,C/C++/Fortran編譯器後端部分。由於我們團隊跨國跨地區,所以我們需要一個非常嚴謹的開發流程來保證。我們本身採取的是Agile開發模式,具體來說就是Scrum那一套。由於我們是編譯器項目,類似@vczh的sqlserver,我們也會有Plan與Investigation,當然這些是VP級別的大佬來操作的,而這些事情都是比較宏偉的,以C++為例,我們會有C++11的支持計劃,我們會首先實現C++11的哪些特性呢,接下來會實現哪些呢,這些特性與編譯器實現難度有關係,更重要的是與我們的Clients需求有關係(由於我們編譯器的Clients基本上都是大企業用戶,那麼我們不可能不理)。那麼VP制定好計劃後,從具體事情來說,我們會有Task,一個Task又會有若干個Story。從時間來說我們就會有若干個sprint,那麼在後面提交代碼這是非常必要的,你需要指定你的代碼針對的是哪一個Plan與Sprint。而由於編譯器是一個高度複雜的項目,在提交代碼前,一定會首先跑核心用例測試,而這個核心用例測試是一個Failure都不能出現。如果出現了Failure,對不起,請修改代碼。隨後,如果你的代碼難度很大的,改動了編譯器核心的代碼(比如我上次修改了我們C++的Parser產生式),那麼這時候在提交代碼的時候,你需要勾選上你的Team Leader,再勾選上兩個加拿大本部的資深Developer,等他們都Review通過後,你的代碼才會被系統Check In進去,否則你的代碼無法Check In進代碼倉庫。如果這些都完畢後,隨後我們會有Regression測試,如果你的Regression測試都過了後,你才算系統通過,否則你需要解決Regression。隨後過了一周,我們會開Code Review大會,你需要講解你這樣改代碼的理由。然後會檢測你的代碼風格是否符合IBM Compiler的代碼開發標準,以及你的代碼是否還有潛在的風險(如我以前解的一個Defect什麼都過了,但是在Code Review發現會有z/OS以後潛在的風險,即使現在沒有出現,也需要修改代碼來避免)。而我們會有BPI人員定期進行Merge Code,建立Branch,拉代碼入PTF Line,Freeze Code等,以及發布前會有Release Manager等來進行全程式控制制等,而Tester來說也會全程參與整個開發周期,跑測試用例,報給相應的developer,自動化測試等。而我所說的只是我們團隊開發流程的冰山一角,總的來說,如@vczh所說,如果你想體驗正規開發流程,可以去他們那裡的團隊,而我們IBM這邊也是相當正規規範的。 :-)


這個得介紹下我帶的團隊:

我並不太喜歡規範這個詞, 開發流程應該符合那個組織、那個公司的規範呢? 我選擇更好更高效更合適的開發流程。

用圖來簡介下我指導的馬拉馬拉技術團隊:

基於WIKI的信息積累、分享:

帶動一個團隊寫WIKI真不是件容易的事情,還得自己先動筆。

APP版本保持低的崩潰率

0.2%日用戶的崩潰率並不算特別好的成績,但對於跑步類的APP, 並僅3人專職的測試小組來說,還是值得高興的。

大多的系統我們做到提交測試的版本沒有P0(阻斷重要流程)的BUG

使用Jenkins 來持續集成,並保證單元測試成功

跑完單元測試,使用Sonar進行代碼分析

wordpress 的代碼質量不高。

團隊要求代碼重複率不能超過3%,(第三方代碼不算) 代碼複雜度不能高。 單元測試的覆蓋率因為技術原因並沒有全部統計上來。

多個獨立的運行環境:

產品看: demo ; 測試看 test ;

平台架構:

微服務的架構

還有一些工具就不貼了。如Postman

一個離開同學曾經的自我評價

好的環境,應是可以幫助人員成長,發揮人員創造力。

----------------------------------------------------

我的文章:

如何有效討論問題 - 左撰 - 知乎專欄

假設與行動

左文建:如何評估軟體研發團隊(組織)的成熟度?


我也來說說我們這裡的開發流程,我覺得也算是比較規範的。分兩部分,一部分針對bug的,另外一部分是針對項目的。
如果是bug的話,稍微簡單一些,主要的流程如下:
1, 在bug系統上面接手該bug,並分析原因,將root cause添加上;
2, 根據分析,修改代碼,並做基本的單元測試
3, 將修改的代碼的webrev、分析以及測試過程和結果發到內部的code review郵件列表中(基本上都是team里的其他人)
4, 有人有意見就要回,沒有的話在發送相同的內容到外部的code review郵件列表中(這其中包括了一些相關的懂該bug的工程師,範圍更大)
5, 外部的code review 通過之後,就是做regression test,兩個平台要分別作測試,產生出的結果要保留以備後面使用
6, 測試都通過了,那麼就可以提rti了,這步還有個難題,該bug對應產品的rti owner會根據webrev、分析、測試以及comments來決定是否同意
7, 反覆的溝通,同意後就可以push代碼了

對於項目來說,在外部code review之後要發到更大的郵件列表中來review,其他部分基本相同。


我們這10來個人,我們這開發流程用了好幾年了。
這段時間在重新用Python搭建公司裡面的這套,我們的開發是用Git,周邊寫一些腳本來自動化。

1 nightly build和測試,包括regression(debug/release), coverage testing, valgrind testing。如果發現問題腳本發郵件給相關人員。

2 merge server,這是我以前沒見過的,我們做了一個小的服務端,開發人員每次merge代碼都是通過腳本提交一個branch,這個merge server做的工作就是做代碼merge,編譯,跑regression, 如果沒問題就代碼改動就進入master。否則就報告出來,這個merge被block。避免很多手工活。

3 CI, ci跑的是一個更大的測試集,可以監測到每次merge 引起的cpu/memory 的變化,如果有問題需要review。

4 Rails寫的內部網站展示所有上面的測試和merge的情況。


你是想了解管理流程,還是技術流程呢?

如果是技術流程的話,Qt Project還不錯。http://qt-project.org/

缺陷跟蹤器(bug tracker)在 https://bugreports.qt-project.org/
代碼評審網站(gerrit)在 https://codereview.qt-project.org/
CI結果在 http://testresults.qt-project.org/ci/
項目所有代碼在 https://github.com/qtproject/
相關信息:http://qt-project.org/contribute

Qt Project的CI現在覆蓋Windows, Linux, OS X, Android, iOS等,全部自動集成,規模應該是夠大了,我不知道還有其它項目能做成這個樣子。CI代碼也是開放的,基於Jenkins。


推薦閱讀:
Git軟體開發過程


聽說華為是通過各種會,各種codereview保證代碼質量的;嘆為觀止系列~

所以規範和方法論真的重要麼- - 你反對你們的流程只是因為執行有問題,建議評估一下自己團隊的能力,選一個簡單易用的~

我們是小團隊,TDD,任務管理工具用的Worktile 讓工作更簡單;對我們團隊而言,嚴格規範意味著花式作死,通常就是每個人負責自己的一大塊,在worktile里同步進度就好


開發流程很規範,通常意味著這家公司/團隊已經進入成熟期,發展機會不多了。

當然,我並不是在說流程的壞話。規範的流程很重要,尤其是利潤有限,必須厭惡風險的時候。


海康威視

開發超級規範,各種規範,還有代碼評審


推薦閱讀:

想成為計算機技術高手,一定要懂彙編嗎?

TAG:軟體開發 | 編程 | 敏捷開發 | 代碼質量 | 開發流程 |