最后一次个人作业(殷鹏程)
M1与M2的总结
在M1阶段,我们负责UI展示的设计,作为团队的PM,我在很早的时候就给各个Dev分配了任务,由于M1阶段学业压力较轻,我们可以拿出很充裕的时间来做这个项目。当时,我大概每天能够拿出3个小时来做项目,当初,在第一个星期里,我们围绕如何在线展示PDF文档进行了技术攻关,用了大概4-5天的时间,最终敲定了FlexPaper的开源解决方案,这次的攻关是我的一大收获:不仅提升了我个人的技术能力,也锻炼了自己分析问题,解决问题的能力。
做网站,架构很重要,我们在项目中使用了贫血模型,这也是我个人在网站架构设计上的一大心得,这种模式的使用使得美工与DEV能够在完全解耦的情况下进行开发,提高了整个团队的效率。
但是,在M1阶段,我作为PM,遇到了许多问题:TFS不会使用(没有修改剩余时间、完成时间等),导致好多天的燃尽图都不对;学霸网站在代码上存在相当大的冗余,没有得到很好的处理(传说中的big ball of mud);再者,3个UI团队之间协调不力,UI团队与上层团队(crawler&pipeline)之间没有达成统一的接口,导致最后整合存在相当大的问题(犹记得那天的整合,从晚7点干到凌晨2点,导致我差点被锁在新主楼。)
在M2阶段,M1阶段的很多setback都得到了很好的解决,比如我们的燃尽图,得力于前期的任务规划,hidden tasks变得很少,加之我本人使用TFS已熟练,整个项目的10天Scrum变得很平稳。其次,在M1结束的第一次课上,我们PMs用了大半节课的时间来讨论接口的规范化问题,并对很多存在歧义的地方达成了共识。这使得在M2阶段各个组之间的配合更加紧密。
但是,对于我们3个UI组而言,问题还是蛮多的:
- 3个组的代码托管在tfs的不同项目下,硬生生的把一个统一的网站拆成三份,导致编码与整合的困难。
- 由于我们组在M2阶段跟DOOM团队交换项目,M2对于我们而言也是个M1,我们又遇到了许多新的问题。
- 我们交付给DOOM的代码(M1阶段的)有很多Bugs,DOOM团队由于种种原因没有很好的修复。
在M2阶段,我们组由UI转向了搜索,在这一个阶段,虽然面对新的问题,新的挑战,但我想,相较于M1,我们继承了如下的优点、达到了如下的提高:
- 代码复用:UI代码大量复用M1阶段的设计,UI本身工作量较少;
- 架构设计:彻底放弃了DOOM团队的方案,采用Lucene.net+SqlServer Full Text Search的开源解决方案,开发效率高,开发周期可控。
- 继续使用贫血模型
在M2阶段,我主要负责搜索核心逻辑的设计,由于之前没有接触过Lucene,Lucene.Net方面的资料更是少之又少,我用了4天时间,进行Lucene的突击学习(学而习而非习而学哎)。由于M2临近考期,时间没有M1时候充裕。无奈只能采取每天熬夜的节奏。但还好,由于使用的解决方案本身已经很成熟,我们需要做的工作较M1更轻松。
为了做到有特色,我为搜索加入了Tag翻译的功能,不同的语言下展示Native Language tags,也算是一大特色吧!
软工课工作量统计
代码 |
6500余行 |
博客 |
68篇(包括20个Scrum) |
文章 |
邹欣老师要求的所有文章 |
书籍 |
《Lucene in action》、《asp.net 高级编程》 |
之前的困惑与回答
问题一:如何让软件工程的“最终产品”在项目开发过程中出现?
http://www.cnblogs.com/yinpc/archive/2012/10/31/2747664.html
邹欣老师回答:可以有各种方法让顾客看到“最终”
我的理解:“最终产品”,之所以加引号,就是因为不是指真正的最终产品,它可能是一个原型(prototype),或者是虚拟的demo之类的(合成的视频),但它是严格符合项目的各个文档要求,并且能够在可控的开发周期内达到的成果(保证开发周期的可控,是我这次软工课程的一大心得)
问题二:如何使用MS Agile模式指导开发?
我的理解:在经过两轮Scrum之后,通过使用、实践基于TFS的项目管理与源代码管理,我对敏捷模式的开发流程有了实践层面上的收获。虽然,特别是在M1,我们的敏捷流于形式,但我们还是体会到了agile的好处:在每天scrum的情况下,不要拖延!要push每一个Dev。
而至于我们的“敏捷”是不是MS Agile(呵呵….)…..
最后,给这门课程提几个建议:
1. 软工作业很多,而且基于软件工程的本质,学生的很多工作都是线下的,因此,学生的付出与所得(仅仅两个学分)严重不成正比。在北航,一般比较大型的线下作业,都会归结为一门课程设计(如编译,数据库),课程设计是单独给学分的,希望邹欣老师能够与北航教务协调下,以后提高软工课程的学分,以同学生的工作量匹配
2. 对于需要多个团队协调完成的项目(如学霸UI),希望统一各个团队的源代码管理(同一tfs工程)。
3. 对于多团队协同项目,一定要有一个总负责人
最后,我想谈谈今天去MSRA做DEMO的心得
今天,见到了Pre-PHD班的各位大神,与科大,中山大学的几位软工老师,跟他们的交流,给我十分深刻的印象。在同pre-Phd班学生交流时,我得知,他们几乎是拿出两个月的时间全职完成软件工程项目的,同我们的情况不太一样。而且,他们的每个项目都是团队独立的,不需要考虑与其他团队的整和与接口,虽然,我们做的东西没有他们厉害,没有他们炫。但是,我想,七个组能够在这么多的困难下按时交付最终产品,实属不易,结果不是最重要的,软件工程强调的是过程。我们在整个过程中,有M1阶段的困惑与不解,也有M2阶段的改良与提升,我们七个团队,能够在完成自己团队工作的同时,积极与其他团队配合,做好集成与接口,这要比pre-phd班的大牛们体会更多软件工程上的现实性问题。我们虽然是菜鸟,但我们也经历了完整的过程,并努力做到最好,我们也有敢飞的心。