做企业软件开发,会经常遇到要接手一个新项目,更有可能面临一些困难,比如:我现在的项目还没做完、接手的项目是别人已经开始做了一部分的、接手的项目已经完成并且头一波或几波开发人员已经不在公司而我要做一些新功能,应用一些我从没接触过的新技术,等等。项目都有工期在压着,如何快速熟悉项目并真正投入实际开发是我现在要解决的问题。
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等。这个随后我会在另一篇文章《项目开发中所必须的工具与常用架构》再详细写。
4.数据库设计
这里一般是分为两种情况,一是客户已经有数据库了并且有大量数据,这个项目主要是数据采集或者是重写软件,但数据库是不会变的,不管这个库是多偏多老多烂,还是要一直用下去的,不可能改动它的数据结构,如果有数据说明文档还好,我们只要把所需要的各个表列出来看一下就OK,但是如果什么文档都没有还要去做数据采集分析的话,而且表名字段名都起的非常怪异无法猜测,还有两个办法可以解决,1是跟踪,原有软件点击指定步骤,然后跟踪器查看跟踪出来的SQL语句做判断;2是原有软件有源代码的话,从源代码里做分析。如果这两样都没办法的话,我看难了。当然二是自己能够从头设计数据库,从原始就开始自己把握,根据公司的数据库设计规范,做库的设计。
5 框架选型搭建
一般做企业软件开发的公司都会有几套自己的成熟框架,跟着公司的走就好了。没有的话当然自己也要有搭建框架的能力。具体就不在这里详述。
至此项目已经上手,可以开始进入编码阶段了。做技术的一般思维还是偏技术一些,所以这5项我认为重点还是要首先放在前两项的业务理解上,这样后面的路才会更走的快又稳。
然后说一下文章开头那几个特殊情况。
同时做几个项目:有时在公司缺人手时,或者需要救火时会出现这种情况,所以这就考验了我的协调能力。接手新项目当然要全身心去做,但是另外一个项目也需要做阶段性总结,不然等新项目做完再拐回去看以前的项目结果都忘差不多了,从哪开始都不清楚了。
半路出家:这种情况经常发生,补充人手或者干脆前一波人走得精光又去接了个烂摊子。这个最先要做的就是了解客户状况和这个项目是要做什么的,接着就是项目目前进行的大致状况和项目目前面临的难点,然后是了解我现在需要做的内容是什么需求如何,第四才是去看项目的整体框架和说明文档。
做了项目也不少了,我感觉最重要的两个字就是“主动”!主动沟通,主动思考,遇到问题主动去面对解决,项目还是要做下去的,而且要做好,困难肯定会有而且还不少,消极和被动只会让我止步不前。