最近的日子过得有些不太顺利,充斥着对加班的恐怖。为什么?加班要跑去远在金桥的公司;加班要自己先垫车钱,尽管可以报销,但是因为自己是research组,报销过程比其他组都麻烦,所以很种很讨厌的感觉;更因为加班表明着自己在工作上出了问题了。对此我一向比较恐慌,也许是自己比较单纯的缘故吧,总是怕自己的工作如果作得不完美,会在很大程度上影响同事们。
上周的双休日去加班,是因为kumaran要走了。kumaran是印度来的同事,来kodak作技术支持的。因为他的离开,我们需要额外的时间把剩余的手头上的工作都解决掉,而且还要从他那边接手他的工作。比较麻烦的,虽然和我们的这位印度同事混了那么长时间了,但是交流上始终存在着困难。
接下来一周就是作自己的unit testing。把自己的project部署到另外一台机器上去不是一件容易的事情,有时候IIS的确很让人戳心戳肺,权限什么的都ok,代码也都ok,数据库也ok,但是它就是不让跑。然后还要为ADS配置domian,由于lab的机器不是同一个网段的,所以还费了很大的周则,找人帮忙自己建了一个。testing是按照自己写的test case测的,test case是根据kumaran的high level design设计的。一切都很顺利,发现了一些逻辑上的小bug,自己也都处理掉了。然后写了份恶长的report,mail给了上面的头头。
这周3晚上,产品release新版本,结果发现在新的双核的机器上居然跑不起来。这点很是丢脸~大伙一起找原因,后来发现是现有的安装包的框架有问题,赶紧双休日加班把这个框架改了个遍,等到我今天到公司去翻新的安装文件的时候,已经都不怎么认识了。汗~
改过之后的安装包总算是可以用了,但是web console这边始终还存在问题。就是出在硬编码问题上,还好大部分的path都已经被我老早move到web.config当中去了,但是还是有部分,由于没有做过完整的code review而遗漏掉了。
在debug过程中还发现了一个有意思的问题。关于master page,我本来以为aspx页面继承他之后应该是首先运行它的codefile,结果竟然是先跑aspx的cs。这个以后要注意,这边的先后顺序设非常重要的,尤其是在这种统一页面框架的web app中。
过了今天,我们的产品的大部分问题都处理掉了,不过这里有很多点地方是很值得吸取教训的。我要指出的是,code review和unit testing对程序员来说是相当的重要,并不是说我们按照requirement,实现了functionalies,并且能够跑得起来了,就算是任务完成了,其实还有很多地方是需要做的,这些对将来的代码维护和功能扩展都能起到很好的作用。这里参考了vsts中的msf 4.0的一些方法论,总结为如下:
(1) 花些时间来进行检查
这里就是需要我们程序员在完成了编码任务之后要多检查自己写的代码,从各个角度,比如代码的安全性,稳健性,规范性。这里规范性很有必要调出来长篇大论一番,限于这里的篇幅,我就不想多说什么了。但是我在工作中一再强调,但是始终没人回应,貌似很多人觉得这个是多余的。难看的代码结构,说真的,这点我很火大。代码结构的清晰,使用语句的规范化,足以可以使我们避免很多上面加班时发现的问题。
(2) 让审阅者来推动检查工作
就像徐曼涛老大说的,团队中就是需要一个“催催”!!不过这里不是催进度,而且要经常要主动的带领程序员开展检查工作。拿我个人来举个例子,有时候的确是很懒的,也像很多其他程序员一样,作个testing也都是草草了事,其实这样是不对的,隐患很大!!
(3) 在召开检查会议之前,阅读代码或设计文档
在一个人编码结束之后,同时也是需要其他人来协助审查的。根据设计文档,检查xx程序员所写的东西,是否和requirement上的一致,设计方面是否合理,代码逻辑是否正确,哪里存在可以提高的地方。以上这些都可以以一个小的检查会议的方式进行,当然在以上审查过程中,代码的作者不应该参与,这里的原因很简单,可能包括人际关系的处理,rp问题,以及人和人之间交流的理解问题,等等。
(4) 使用团队项目门户为小组检查工作提供帮助
一般来说,可以使用一个门户网站来刊登近期的update,这样所有成员都可以看得到。但是由于公司条件的限制,要搞这个貌似很困难的样子。
(5) 使用检查表,列出以往可能发生的错误
在代码审查期间,应该要列出以前发生过的一些错误,对这些错误进行必要的检查。没人能够保证以前的错误现在不会再次发生。对伐?这里我觉得,应该要建立一个knowledge DB,可以估计也很困难。
(6) 跟踪在代码检查期间发现的所有问题
很多问题发生的时候可能不容易立即就fix掉,而后很容易让人忘记。我就经常发生这样的错误。总是。一?怎么这个版本中还有这个问题,检查clear quest后发现原来是自己漏掉了,雪特!不过也难怪,公司很多新的functionality是直接来自于service的,因此很多都没有文档化,这个是极其极其的错误。首先将来跟新service maunal就会有困难。其次是需求变更的管理也会产生很大的问题。很多新的需求不是说客户或者是service那边说加就加的,这怎么可以??以前太老实,不懂,加就加,一改代码结构越来越乱,bug不断,娘俄!!这些都是需要重新review的地方。对于新需求的可行性,大家都要拿出来一起讨论,确定。设计文档也要拿出来一起review,然后再编码!!
(7) 不要在不通知审阅者的情况下更改代码和设计
这次的integration test当中也出现了很多很可笑的地方。这里我不是说某某人不好,还是交流和管理上的问题。居然有人会问我,某某功能到底是什么?这个怎么会和以前不一样?是bug吗?娘俄,kumaran更新过design document,你怎么不看?测试的时候跑过来问我什么什么。相当的火大,文档他妈的不是放在clear case上摆摆样子的,就是让你们去看的,不看的话,这个测试怎么做的好??把我新加的东西也拿出来提交为bug了。这里我可能说偏了。但是以上的问题很值得提一下,需要吸取教训。徐老大说的没错,我们只是个junior team,还不成熟!!言归正传,在代码审查阶段,以及测试阶段,作为程序员,不要急着去改代码,等所有的report都出来后再说!!以免将来又搞伐清爽了|||
很多人可能会说以上的部分很麻烦,有必要这么做吗?我觉得在一个project中,尽管很忙,但是还是需要抽时间去做的,这样也不至于在关卡上出现那么多问题,令人不愉快是小,产品跑不起来才是真的要人老命。
嗯,就说这么多了~
我说的不对的地方,希望各位老大可以帮我指正,谢谢啦!!!