软件工程事实上越来越标准化了。
我不是很懂CMM之类的东西,只能按我平常开发的流程跑个烂砖头,希望勾出大家有意思的东西来。这个帖子,也是我入伙的时候就很想写的了。我们可以先high-level的讨论一下有那些类,哪些工具。然后以后具体化的开thread一个一个工具讨论过去。
我做的比较土,本来还有点核心的,现在越做越应用了。做核心的时候很是天马行空,不过test啥的还是都有,只是很多时候犯懒,总是依赖我们QA帮我些。现在做应用了,这些东西一个都不能少,要不出了问题客户直接就追到头上了,没有人帮我擦屁屁。慢慢养成了习惯,觉得还是蛮有用的。
首先是test!test已经成我的代码核心了,现在test : src -> 2 : 1了。而且feature
deliver之后,因为QA的bug,test会越写越多,绝对是重中之重。这个是影响开发进度的,所以现在基本上老板已经不push我的delivering了,因为我经常delay的。(感谢国家,感谢党,感谢老板,感谢team)
test包括unit test / regression test (smoke
test)等等,我不是QA,也没法全懂。自己的code,unit test是肯定免不了的。100%
coverage总是求之不得,特别是一些multithreading的,大家如果有特别好的办法,记得共享一下。Java底下的,我们自己还有一些可以定这个thread
run到这个method挺一下之类的来check status,C++就完全无解。我写code很马大哈,所以C++
multithreading,我一般就直说我恐怕写不好,虽然以前发paper聊啥minimize critical
section一套一套的。
接下来是repository。SourceSafe / CleanCase / cvs / svn / perforce /
git都用过,不过现在就比较熟git和perforce了,svn工具多,也可以玩一玩。用了几年的cvs,现在一眼看去,是大不解了。别的bazaar啥的,只能把code
check out下来编一编。个人很拜git,确实好用。自己的服务器上放到git
repository使用gitosis,还比较简单。这个每个人各有喜好,也没啥好讨论的,就是放堆code的地方吗。git最好的就是没有每个目录给我来一个.svn这样的鬼东西,perforce也是,所以我比较喜欢这两个,仅此而已。(有那个东西的话,我找起东西来,还需要把伊滤掉,like:
find . | grep -v "\.svn" | xargs grep -nH "xxx" {} \;
(这个命令不做准啊,xargs大意如此,因为我平常只要find . -exec grep -nH "xxx" {} \;就行的)
接下来是code review。感谢国家,感谢党,感谢公司,我们可以用一个command很容易的发patch给相应的人,而且有一个online
system做side-by-side的comparing,对效率大有帮助。谈code review不得不谈coding
style,一个软件公司,应该有自己的coding
style,保证code到哪看上去都差不多。有些人写code比较牛,比如一个函数一行就写完了(我是说很复杂的那种,我有个朋友以前一行可以写1000多个字的),到了组织里,只能不好意思,拉回去重写了。一个project,铁打的营盘流水的兵,要是你的code太牛,后面的人接不了手,再牛的project也只能扔到垃圾堆里,所以coding
style是必要的。现在有很多lint工具可以保证coding style,我个人更希望工具能把coding
style都包括进去了,否则一个team里,有些边缘的不同点,很容易伤了大家和气,影响以后的士气。不过貌似做lint的人都不怎么喜欢parsing
code,所以做出来的lint都还不是特别精确。这方面java好些,有lint / checkstyle / findbug /
...一系列很好的工具,而且即使code已经进去,还是可以用Hudson / Jenkins之类的东西发现。
对于code review的几个原则:reviewer如果看不懂code,一定要弄懂,否则就不要盖章了。reviewer不光要弄懂code,还要理解design,这是最后的design
review,这个时候roll-back,远比code出去了再这么干更好一点。reviewer态度一定要nice一点,人总是在不断鼓励中提高的,你打击人几次,人以后就伤了。关于CR的tool,review
board / gerrit (Android用那个)等等等等,现在已经有好多,没有装的,赶紧装一个。(对了,以前svn有post code
review的概念,个人不太喜欢,code review就是要side by
side,有record的把意见啥的记下来,其实这是很好的提高水平的方法)
接下来是CI。没啥好说的,没有CI赶紧去搞一个,你不希望你的软件今天好明天坏,每天的时间都用来抓bug吧?谁出的问题,第一时间报出来总是好的。
还漏了不少,下次慢慢补了。其实,喜欢project,一心想把project做好,才是最重要的东西。
最近top-language =>
top-company中,发个贴应应景,让大家有点topic讨论讨论。也许跟lang没啥关系,但是大家不都是码农吗,也还是本行吧。