做企业软件开发,会经常遇到要接手一个新项目,更有可能面临一些困难,比如:我现在的项目还没做完、接手的项目是别人已经开始做了一部分的、接手的项目已经完成并且头一波或几波开发人员已经不在公司而我要做一些新功能,应用一些我从没接触过的新技术,等等。项目都有工期在压着,如何快速熟悉项目并真正投入实际开发是我现在要解决的问题。
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项我认为重点还是要首先放在前两项的业务理解上,这样后面的路才会更走的快又稳。
然后说一下文章开头那几个特殊情况。
同时做几个项目:有时在公司缺人手时,或者需要救火时会出现这种情况,所以这就考验了我的协调能力。接手新项目当然要全身心去做,但是另外一个项目也需要做阶段性总结,不然等新项目做完再拐回去看以前的项目结果都忘差不多了,从哪开始都不清楚了。
半路出家:这种情况经常发生,补充人手或者干脆前一波人走得精光又去接了个烂摊子。这个最先要做的就是了解客户状况和这个项目是要做什么的,接着就是项目目前进行的大致状况和项目目前面临的难点,然后是了解我现在需要做的内容是什么需求如何,第四才是去看项目的整体框架和说明文档。
做了项目也不少了,我感觉最重要的两个字就是“主动”!主动沟通,主动思考,遇到问题主动去面对解决,项目还是要做下去的,而且要做好,困难肯定会有而且还不少,消极和被动只会让我止步不前。
转自:http://www.cnblogs.com/kumaws/archive/2011/04/11/2012036.html
相关推荐
在本教程中,我们将学习如何使用模板文档来构建一个基本的计算机编程项目。模板文档是一种预先定义的文档结构,它可以帮助我们快速开始一个新项目,确保文档的一致性和标准化。
现在,让我们开始建立一个新项目并添加 C 语言程序文件。 首先,打开 Keil C51 并选择“工程”“新建工程”,然后选择一个保存工程的地方,输入文件名,例如“我的单片机程序”,点击“保存”。在弹出的“选择...
这些项目旨在展示SSM框架在实际应用中的魅力,同时也为开发者提供了一个快速学习和实践的机会。通过下载和使用这些项目,您将能够深入了解SSM框架的核心概念、设计模式和最佳实践。 二、项目特点 实战性强:这些...
在开始新项目前,组织必须确定项目是否与其战略目标相吻合。管理者应该将提议的活动中针对关键任务活动的项目归类为高优先级,而将针对组织目标外部活动的项目归类为低优先级。开始工作前,应确定一个执行发起人。...
本系列视频教程——"WinCC视频48集00 wincc创建一个新项目",旨在帮助初学者快速掌握WinCC的基本操作,以创建高效、实用的监控项目。 首先,我们从新建项目开始。在WinCC中,创建新项目是整个工程设计的第一步,也...
总的来说,"Metronic快速开始项目的UI模板"是一个强大的工具,为开发者提供了快速构建高质量Web应用的捷径。通过利用其丰富的预设元素、可定制的设计和响应式布局,你可以打造出既美观又实用的应用程序,同时减少...
React Native 是一个由...总的来说,“快速搭建React Native项目的一个starter”是一个宝贵的资源,可以帮助开发者高效地开始他们的React Native之旅,利用已有的配置和最佳实践,快速构建出功能丰富的移动应用。
脚手架在开发流程中起到了快速原型设计和代码组织的作用,它为开发者提供了一个良好的起点,避免了从零开始创建所有必要文件和设置的繁琐工作。 在这个名为 "Simple-Boilerplate-master" 的压缩包中,我们可以预期...
入门遵循我们的快速开始一个新项目。 我们很想听到您的声音! 如果您有任何反馈或在使用我们的框架时遇到问题,请在此存储库中提交。贡献多谢您的贡献! 阅读我们的准则,然后使用需要标签浏览我们的问题。
首先,要开始一个Angular项目,你需要确保你的计算机上已经安装了Node.js和npm(Node Package Manager)。这两个是JavaScript开发的基础,也是Angular CLI(命令行界面)的运行环境。你可以通过访问...
总的来说,Backbone.js的"backbone-skeleton"是前端开发中的一个实用工具,为开发者提供了快速搭建新项目的基础框架,使得他们能够更专注于应用的业务逻辑和用户体验设计,而不是从零开始创建整个项目结构。
使用这个模板,开发者可以快速开始一个新项目,而不必从零开始搭建这些基础组件。 **项目模板的编译与运行** 在获取到`play22Template-master`压缩包后,首先需要解压并使用SBT(Scala Build Tool)进行编译和运行...
标题中的“一个快速搭建PHP库项目基本文件的工具”指的是用于快速创建PHP库项目的脚手架工具,这类工具通常会自动生成项目的基本框架,包括必要的目录结构、配置文件、测试用例等,以便开发者能够迅速开始编写代码。...
在当今开源社区中,快速开始一个新项目并实现其功能,对于任何程序员来说都是至关重要的。为了简化这一过程,一些项目模板应运而生,它们为开发者提供了构建项目的基础结构。其中一个这样的模板是名为“barbell2_...
【描述】中提到的“可以快速的搭建一个将 LeeSite 作为依赖的 Java Web 项目”进一步解释了这个工具的功能,即它能够快速生成一个新项目,并且该项目已经配置好了对 LeeSite 框架的依赖。这使得开发者无需手动配置...
描述中提到的“ARM新手开始建新项目复杂”,这是很多初学者在接触ARM开发时会遇到的问题。建立一个ARM项目通常涉及多个步骤,包括选择合适的开发环境、安装必要的软件工具、配置编译器、设置调试器接口等。这个空...
对于初次接触深度学习的开发者来说,从零开始构建一个深度学习项目可能会感到困难重重。下面是一份详细的教程,帮助你逐步建立自己的深度学习项目。 **启动深度学习项目** 1. **选择合适的项目**:项目的选择至关...
当你导入新项目时,例如“AndroidBasicProject-master”,AS会在`setting.gradle`中添加包含新项目的行,比如: ``` include ':app' project(':app').projectDir = new File(rootProject.projectDir, '../...
这个压缩包"一个django的工程模板,为了快速启动一个工程进行开发.zip"包含了一个预配置的Django项目模板,目的是简化新项目的初始化过程,帮助开发者迅速开始编码。 在Django中,一个项目通常由多个应用组成,每个...
### 移远OpenCPU快速开始指导手册 #### 知识点概述 本手册旨在为初次接触移远通信技术有限公司(Quectel Wireless Solutions Co., Ltd)的OpenCPU开发技术的用户提供一个简明、实用的入门指南。OpenCPU是一种创新...