做企业软件开发,会经常遇到要接手一个新项目,更有可能面临一些困难,比如:我现在的项目还没做完、接手的项目是别人已经开始做了一部分的、接手的项目已经完成并且头一波或几波开发人员已经不在公司而我要做一些新功能,应用一些我从没接触过的新技术,等等。项目都有工期在压着,如何快速熟悉项目并真正投入实际开发是我现在要解决的问题。
1.了解环境背景
首先要了解这个企业是做什么的, 经营方向,目前面临的问题是什么,为什么要做这个项目,这个项目完工后可以为企业带来哪些好处。从大的方面去了解,而不要一上手就去接触需求,容易陷入死胡同。
2.了解需求、分析需求、确定需求
如果需求还没有确定下来,并且需要我来跟客户或中间人确定客户需求的话。大多数客户对自己的实际需求都很模糊,不确定到底想要的是什么,这时我就需要进行迭代式确认需求。
首先,列出功能清单,并沟通确定清单中每个功能的细节点。这里是以客户为主。
其次,根据这个功能清单做出软件原型,这个一般来说不必拿指定的技术来做,只用用最熟悉的技术或者原型工具做出界面,切换,表单等。尽量用最快的时间完成原型设计。
最后,用做好的原型跟客户逐一对照功能点,对功能清单的细节处做记录,不断修改原型,直到最终确定。这里主次划分一般是我占7分,客户占3分,由我来根据经验引导客户需求。
当然,需求分析需要的还有更多的事情要做,哪些能做,不能做,工期确认,技术确认,开发经费等就不属于本文范畴了。至此,一个需求单也就确定下来了,并且也有了原型。
对于那些从客户方直接拿过来确定好需求的项目来说,我所做的第一步就是了解需求。这里的重点就是快速了解,灌输式,大致概括,都有什么功能,重点在哪,难点在哪,不要做细节与设计上的考虑。先自己设想重点难点,再做确认。这一步最好是以开会并作会议记录的方式,传达更快速准确。
分析需求分两步,阅读需求文档并对细节处做分析,批注出所有不清楚,有疑问的地方(根据经验,这里需要考虑到设计上逻辑的问题,要很快联想到如果我来做,这里该咋样处理)。然后是开会逐个过功能点,将问题都暴露出来,能确认解决的会议上就确认,不能解决的再提交给客户做确认。
至此就可以确认需求了,客户、程序员对现在的需求无异议了,就不会再动了,签好合同后所有的改变或增加可以放在后期做。
3.选择技术、搭建环境、培训学习上手新技术
技术选择第一是根据客户实际要求,例如必须要用什么样的数据库,用Web还是Silverlight,用Java还是VB等,有的是可以协商,有的是根据自己的技术掌握程度可以做调整。
第二是尽量选择自己熟悉的技术去做。
第三是根据项目需求,确定使用哪种技术做最合适。如WCF、WebService。
如果遇到新技术该如何快速上手?一般来说,公司是不会让一个人什么技术都必须掌握并转来转去的,比如让我现在去做C++或者PHP的项目我肯定是拿不下来的,毕竟这是对公司来说也是有风险的,但是在同方向的新技术是可以接受的,例如用Asp.net
MVC,jQuery用jqGrid,数据上用nHibernate等。学习上手一般不用太久,大致3天就可以开始从简单的做起了。当然公司有培训机制是最好的,如果没有的话,自己要找官方的适合上手的学习资料为主,直接编写一些简单的代码去熟悉这门技术,并了解一些重点与内部机制。
而后就是环境的搭建了。比如数据库设计工具PD,数据库Oracle,IDE,ORM工具,IDE需要的插件如Silverlight4或Asp.netMVC3,代码生成工具如动网或codesmith,数据库查询分析器,js或jQuery控件,一些必需的插件或控件,调试工具如Firebug或Fiddler,一些公司内部或开源等框架如权限管理系统,log4net等。这个随后我会在另一篇文章《项目开发中所必须的工具与常用架构》再详细写。
|