一次有趣的开发经历

标签: 开发 经历 | 发表时间:2008-12-28 16:00 | 作者:(author unknown) lnsoso
出处:http://feeds.feedburner.com/dyang

周五下午和同事Pavan一起结对编程,为Cruise 1.2增加svn external的支持。几个小时过后,我们提交的代码漂亮地通过了所有的单元/集成/验收测试。在这个过程中,我觉得有一些很有趣的细节非常能体现出我们的工作方式,所以现在把它们列出来:

集体重构

我们的修改是以前一段时间项目里大伙凑在一起做的一些修改为基础而进行的。在Cruise项目上,我们有一个不成文的习惯,就是隔一段时间大伙就凑在会议室里,拿一台笔记本连上投影仪,找出一段写的不好的代码做集体重构。每次开始的时候会有人负责提出一个问题,例如一段写的很糟糕的代码,或者一个看上去很牵强的设计,然后大家一起集思广议想解决办法,并由一个人拿着电脑对着投影仪直接修改。在这个过程中有时候写代码的人思路会中断,这时就会有人抢过电脑来继续写。这种方法的效果非常不错,特别是当大伙不断对一个问题追问“为什么”的时候,往往会让我们原本非常狭窄的思路一下子拓宽起来。

分布式版本控制

Cruise选择Mercurial做为版本控制系统。大家在集体写了svn external的初始代码之后,在一台笔记本上留下了一个patch。我和Pavan要做的第一件事就是把这个patch迁移到我们工作所用的pair station上来。方法非常简单:首先把那个patch通过scp拿到本地来,然后运行hg qimport指定patch文件的存储路径就可以了。当然,还可以用hg pull把那台笔记本上的修改都pull过来,或者利用hg transplant把那个指定的版本pull过来。这几种方法都可以达到我们的目的。前一种操作多一些,但会把拿过来的patch加入到本地的 queue中,是我个人最习惯的用法;第二种操作很简单,但是有可能pull过来的修改过多;第三种操作简便,效率理想,只是并不会把拿来的patch加入到queue里,我们平时会穿插着使用。

工欲善其事,必先利其器

我们必须要在本地创建相应的测试环境才能验证svn external功能,但是我们并不想每次都手动地去svn co, svn propset, svn ci, svn up, svn propget…。这些重复的操作应该而且也非常适合加以自动化。解决办法非常有趣:我们在本地创建了一个新的目录,在里面写了几个shell脚本。第一个用于创建svn external环境,其中包括复制出一个用于测试的svn repository,把它check out到一个指定的客户端目录,在客户端目录里执行svn propset/ci来创建svn external,以及执行svn up来更新客户端目录。第二个脚本用来启动Cruise Server和Agent。第三个脚本用来停止Cruise Server和Agent。有了这几个脚本,我们就能非常方便高效地运行测试了。当然,我们没有忘记把这些脚本都提交到Cruise的 repository里去。

说到工具,我还要顺便提一下我们的开发环境。Cruise团队里的每一个pair除了各自拥有公司配发的笔记本以外,还共同拥有一台非常强大的开发机器(Core 2 Quad CPU * 4, 4G RAM),采用双24寸液晶显示器。操作系统用的是Ubuntu,开发工具用的是IntelliJ。这些强大而灵活的工具让我们能够最大程度地激发工作热情,提高工作效率。

测试,测试

我和Pavan在测试过程中发现了一个bug,凭经验我们很快找到了导致bug产生的一个方法。不过,我们并没有急于把它消灭掉,而是给现有的方法增加了一个测试。当然,这个测试是不通过的,所以我们接下来的目标就是改正代码,让测试通过。几分钟过后,我们消灭了bug,并且使得系统的测试覆盖率又小小地增加了一点。:)

持续集成与及时反馈

当我们通过了本地的所有单元和集成测试以后,就信心满满地把本地的提交push到了汇总的mercurial repository里,很快,我们自己UAT环境里的Cruise Server就检测出了这次代码提交,并且开始进行集成。我们的第一个stage是在Linux和Windows平台下并行运行所有的单元测试,然而这个 stage中的一个Windows job却在几分钟后失败了。通过阅读Cruise给出的失败信息,我们发现刚刚提交的代码没有考虑带空格的URI这一种情况,而这种情况在Windows 下非常常见。获得了这个反馈,我们接下来的工作就是在本地增加一个处理带空格的URI这种情况的测试,看它运行失败,然后修复,提交。不一会的功夫, Cruise显示所有测试全部通过!

相关 [开发 经历] 推荐:

一次有趣的开发经历

- lnsoso - Happy Hacking
周五下午和同事Pavan一起结对编程,为Cruise 1.2增加svn external的支持. 几个小时过后,我们提交的代码漂亮地通过了所有的单元/集成/验收测试. 在这个过程中,我觉得有一些很有趣的细节非常能体现出我们的工作方式,所以现在把它们列出来:. 我们的修改是以前一段时间项目里大伙凑在一起做的一些修改为基础而进行的.

BinaryTreeEx:十八年开发经历小结

- - 博客 - 伯乐在线
来源: BinaryTreeEx的博客. 本来题目想写为“十八年开发经历总结”,但是一想我的开发生涯还没结束,怎么就总结了呢. 再说个人的一些积累和看法也不一定正确,所以还是改为小结比较妥当,言下之意自己还需要继续积累进步. 本文主要谈几点个人的体会,这些内容有一部分可能只是我自己遇到的问题,相信还有一些其他 程序员也曾遇到或者面对过.

我所经历过的项目开发流程

- - ITeye博客
我所有经历过的软件开发流程大概来说有三种,分别是. 详情见http://lijingshou.iteye.com/blog/902249. 这种流程据称学习自微软.三种角色号称三驾马车.在理想的情况下,PM在需求文档定下来之后,是不会频繁修改,开发会按计划完成任务...QA自然也会顺利完成用例评审.执行.测试.

Dropbox的创业经历

- ZFreet - 阮一峰的网络日志
上月底,美国旧金山有一场演讲会"Startup Lessons Learned". 许多创业公司聚在一起,分享经验教训,其中就有Dropbox. 它是一家云储存公司,最近很红,你可以用它在朋友之间、电脑之间共享文件. Drew Houston是这家公司的CEO,在会议上做了主题演讲. 演讲的视频和PPT,都已经放上了互联网.

App Store 被拒经历

- - 99css
链接堆砌,苹果建议用HTML5来做. UIWebView 嵌页面片,苹果建议让用户通过浏览器访问,比如爱知乎,开始几个版本通过了,后面的更新一直没提交上去. 屏幕坏点检测应用,苹果说会误导用户,未上架. 登陆账号有两个字母写反了,改正后通过. 因远程服务器反应慢,苹果的人估计没耐心等,就说有bug给拒了,重新提交一份通过.

读图:Skype 的成长经历(二)

- orangec - 爱范儿 · Beats of Bits
通过上一篇 Skype 信息图,大致回顾了下 Skype 一路走来的成长历程. 今天我们继续信息图的下半部分,这次主要是从 Skype 市场价值的角度来分析此番微软对其的收购并对其未来做了下展望. Skype 在 2010 提交过 IPO 申请,不过他们随后宣布将延迟 IPO 至 2011 年. 于是我们就开始接二连三的听到不少业界内企业对 Skype 表达收购意愿的声音.

《我的学习经历》——杨振宁

- Terence - 左岸读书_blog
原文:《我的学习经历》——杨振宁. 除了诺贝尔奖获得者,82情定28的两件事之外,个人对杨振宁教授的了解均是来自书本或者网络的只言片语,感觉很不真实. 感谢香港浸会大学今天给了我近距离了解他的机会,受益匪浅,小记一篇. 香港浸会大学的愿景是“成为一所领先的创意高等学府”. 为此,校长陈新滋教授该构思本港首个“创意研究院”,并于3月28日成立,目的在于加强校内的研究 文化丶培育研究人才丶增强研究表现,并进一步推动跨学科和专题研究.

浅谈乔布斯的教育经历

- - 译言-社会/文化/法律
为什么如此多的有天赋的企业家都选择退学呢. 当史蒂夫.乔布斯辞去苹果电脑公司首席执行官职位的时候,他一生所做的创新事业获得了媒体与公众的一致好评. 自从他二十多岁发明苹果电脑,乔布斯已经将自己的理念融入到了个人电脑、便携式电脑、移动手机、平板电脑、音乐播放、电影动漫以及其他一些通信技术中,这些发明大大的缩短了人与人之间的距离.

一次Ajax查错的经历

- - 酷壳 - CoolShell.cn
我有一朋友做网站,用jQuery的Ajax方法从后端载入一段HTML代码然后动态插入到网页的Div元件中. jQuery强大的load方法可以完成这个事情. 在Chrome,Firefox,Safari下运行一点问题也没有,只有IE不行,不管是IE7,IE8,还是IE9. 问题的症壮是,使用IE访问那个Ajax的链接,没有问题,但是在jQuery的Ajax方法返回了“undefined”的respons对象.

一次曲折的bug调试经历

- - ITeye资讯频道
Bug调试是让程序员最头痛的任务,因为它就像狄仁杰断案一样,需要抓住任何的蛛丝马迹、展开丰富的推理联想,一次次的尝试,才有可能解决疑问命案——不然程序员会死,不是加班熬夜熬死,就是让老板开除,郁闷而死. 最近我在操作一个页面时,程序出现了这样的错误:. 错误是mysql服务器抛出的,是致命错误,我以前没有遇到、也没有见到过这样的错误,但错误提示信息还是很丰富、明确的.