一个政府项目总结
一个政府项目总结
近几天刚刚交付验收了一个政府的软件项目,在这个项目的开发过程中遇到了不少困难,包括技术上的障碍和一些实际的人为上的问题。一个项目之所以能成功,能让客户满意,领导放心的原因可能大多都差不多,大多都是老生长谈的那几条。但是一个项目失败的原因却各有各的不同。下面再根据自己的体会写一些项目总结,一为了总结不足,积累经验,二为了以后项目中避免犯同样的错误。
一.要和客户有足够有效的沟通
和客户的沟通要贯穿整个项目开发的始终,从立项调研,需求获取到最后的验收测试,后期维护。
1.要尽量多的主动跟客户沟通
客户一般工作都很忙,所以要通过多种方式和客户保持沟通,电子邮件,电话,座谈,调查,会议等。最初的需求尽量保证有几次所有与项目相关的部门和人员都能参加的讨论会,把他们的各自的工作都描述一下,尽量不要遗漏,都罗列出来,因为这是原始需求。这往往不容易做到,因为政府部门很难抽出时间把各部门人员集中在一起来做这些事情的,但是我们必须得这样要求他们,要求他们把这个看成一项工作来抓,因为前期工作做不充分,后面的开发会不会很成功。在对某个功能或者需求不能确定的情况下,最好能整理成列表文档发给客户,让客户以电子版的形式重新描述一下发过来,尽量不要经常打电话骚扰客户,要集中把要了解东西发给客户,以便他们集中精力来处理你问的问题。
2.要尽量保证有效的沟通
每次沟通要有一定的目的性,把沟通交流的结果用文档的形式保存下来;需求制订出来要得到客户的确认,在经过几次反复之后会得到一个相对比较稳定的需求,虽然客户的需求不可能一直不变,这也是很多人搞项目头疼的地方,但是我认为客户的需求实际上是很少改变的,改变的是你对客户需求的理解。对客户的每一个要求都要重视,尤其是客户后来提到的一些改动建议,要让他们以书面的形式发过来,必要的时候要求负责人盖章签字,我们不能为了下面的下面的一个小办事员随便打个电话就对程序做出大的改动。再改动比较大的情况下,我们可以要求客户对合同的变更追加费用,前提是把需求做为合同的附件加进去,防治最后验收的时候造成争执。
3.和客户沟通要找准对象
一般企业或者政府都有专门负责信息的人员,而且最好要求客户那边找一个人专门负责这个项目。这样找对方了解需求的时候就不会出现不知道找谁的情况,客户那边有专人负责会带来很多好处,这个项目就是因为客户那边负责这个项目的人员经常更换而为我们项目的开发造成了很多的不变。
二.提高开发效率和保证项目质量
政府的项目一般都是开始的时候不着急,你催他们准备资料他们也不着急,但是一旦他们把资料准备全了,都交给你了就着急了,要求对方在很短的时间内保证质量的把项目交付。所以如何提高开发效率和保证项目质量是确保项目成功的关键。
1.保证良好充分的测试
当然软件测试的范畴很大,但是为了赶进度我们往往不能不保证进行所有的软件测试。软件的测试也是遍布整个项目开发周期的,我了解了一下TDD,TDD的思想很好,很适合开发中小型的项目,实施起来也很方便,但是不能纯粹的用敏捷开发的理论,必要的文档还是需要的。我认为代码模块的单元测试,开发最后阶段的集成测试和部署后的整体功能测试和用户验收测试是必不可少的。项目进度再紧张也要进行单元测试,只要保证单元测试能通过,以后代码可以慢慢重构。集成测试保证项目各个模块能良好的协作共同完成复杂的任务,这点不能保证的话,展示给客户的最终功能就不能保证。而功能测试和用户验收测试是纯粹的黑盒测试,自己内部人员先对照原始客户的需求进行功能测试,列出BUG列表,经过几次反复修改后给客户一个可以进行验收测试的系统。
2.保证相对必要的文档以及保证文档的可用性
每个模块的文档要独立起来,要实现的目标,测试的结果,模块所用的数据库的结构,存储过程,设计思路,调用的接口等这些是必须的。我也不建议面面俱到的文档,但必要的需求文档,模块文档,测试文档是必须的,我们的项目小的不足以让我们去学习庞大的RUP什么的。
3.迭代开发
刚开始可以根据客户的需求弄出一个蓝图来,交给客户看,以便让客户能尽量早的知道最终的开发出来的系统是什么样子的,这个蓝图要尽量直观,一般在需求整理完毕后一周就能出来,这也是指导以后开发工作的东西,要完整的包含所有的域模型,便于开发人员对问题域的理解。然后把优先级最高的一系列功能完整后出一个DEMO版给客户,要让客户尽量早的发现正在制作的项目和用户想要的结果的之间的偏离和差距,告诉你后以便你尽早的调整,别等你的正式版出来后用户发现这个功能你做的不对,你就傻了,那时候要改动的地方就太多了。然后再弄完善一下给用户个beta版,这时候就已经接近最终版本了,可能还有一些小BUG。最后把小BUG完善修复一下给客户正式版1.0让客户验收。至于二期项目以后再说,先把一期项目的余款结了再说,对吧。
4.制订开发规范
开发规范订的太死会限制程序员,每个开发人员都会有一些习惯,但是为了协作,制订一个相对通用的规范是有必要的。包括文档的规范,数据库设计规范,编码规范以及各种命名规则。尽量用一些业界通用的规范,网上都有,我CSDN的博客上也整理了一些,MSDN的类库开发人员指南里面也有一些。尽管某些规范很有争议,我感觉你也得选择其中一种来做为你的项目开发规范。
5.建立开发基础
保证机器和软件的可用,尽量大的内存,尽量快的处理器,操作系统,开发工具都要到位,该想到的就得想到,还要给开发人员一个相对安静舒适的环境,最好能很方便的喝到冰箱里的可乐,而且能在累的时候有绿色的植物看。再一个就是建立一个开发基础结构,这个也颇有争议,几乎每个公司都有自己的系统类库,开发框架以及配套的代码生成工具,这都很好,在开始可以对员工做适当的培训,让他们都能体验自底向上设计的好处,都能用的上这个架构,你可以在架构中要求开发人员以指定的方式实现某些通用的任务,比如说日志记录和错误处理等,而不是让他们使用自己习惯的方式去处理问题,因为.NET的灵活性让实现一个任务有很多中方案和手段。
小节:虽然这个帖子没有讨论具体技术,而且都是一些空话套话,并且这些空话套话可能别人也都说的不带说了,但我感觉还是有必要自己总结一下的。