之前我在微软上海的sqlserver工作的时候就感受到了他们十分严谨的气氛,一般来说,我们做一个软件之前都会planning和investigation,大概占用1/3的时间,研究得差不多了,然后才...
有哪些软件相关的公司,开发流程比较规范?
我们精选了一下网友答案:
···································^^····································
之前我在微软上海的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,那根白做了没有任何区别。
你要是想体验一下的话可以过来试试(逃
+++你是想了解管理流程,还是技术流程呢?
如果是技术流程的话,Qt Project还不错。qt-project.org/
缺陷跟踪器(bug tracker)在
bugreports.qt-project.org/代码评审网站(gerrit)在
codereview.qt-project.org/CI结果在
testresults.qt-project.org/ci/项目所有代码在
github.com/qtproject/相关信息:
qt-project.org/contributeQt Project的CI现在覆盖Windows, Linux, OS X, Android, iOS等,全部自动集成,规模应该是够大了,我不知道还有其它项目能做成这个样子。CI代码也是开放的,基于Jenkins。+++我们这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的情况。+++看见@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的信息积累、分享: