1.1 需求变化
项目的需要变化是肯定有的,而且变化一般都很频繁,我们怎么应对客户的这种需求变化呢,以不变应万变。首先在前期的需求调研要做好,尽可能的替用户考虑,达到功能质量满足最大化。需求调研前期的《目标与范围》和需求调研末期的《功能规格说明书》都要跟客户签字确认,这样既能保证我们所理解的需求就是客户所要的,也使得项目末期跟客户验收时有据可依。在项目中期是发生需求变更是很常见的,这时要做好需求变更管理流程。需求变更表,小的变更自己掌握,客户要求的变更有开发人员和设计人员共同商讨后提交项目经理,项目经理预估变更损耗工程时间,在一定阶段一起提交给客户,大的变更直接提交客户,并且要把需求变更对项目产生的影响让客户知道,把球尽可能的踢给客户,让客户在进度、功能、资源三者中取舍出一个平衡来。对需求进行分类评级,关键部分不能改动的做特别确认(如系统架构等,如果改变等于从头再来)。同时完成客户签字确认,当然如果能将这部分写成合同细节中去是最好。以下是我认为变更的步骤:
¢ 第一步:客户提出变更内容
l 客户提交的变更必须基于书面形式
l 客户提交的变更必须有充分理由
• 如果变更被拒绝,对业务的负面影响
• 如果变更被接受,对业务的正面帮助
¢ 第二步:为能否实现变更作评估
l 从实现方式上考虑新的变更可否实现
l 对于较复杂的情形,辅以简单的说明。欲详述,可作附件处理
l 对于简单情形,例如页面布局更改,则无须说明
¢ 第三步:可以实现看进度
l 进度几乎是绝大部分项目关注的第一要素
l 对于活动级别的进度影响
l 对于项目整体工期的影响
¢ 第四步:变更成本
l 人力相关的变更成本
• 是否需要额外的项目组成员
• 项目组需要增加的工时数
是否正常工时(工作日加班、节假日加班)
• 项目工数报价
l 非人力成本
• 软硬件费用
• 资料费用等
¢ 第六步:质量和风险
l 变更对质量的多方面影响
• 分阶段影响(需求、设计、编码、测试、维护)
• 可靠性、安全性、可维护性、可用性等
l 可能对团队士气的负面影响
l 可能引发的间接任务对工期的负面冲击
l 开发方的成本负担可能超出力所能及的范围
¢ 第六步:需求变化的确定
撰写详细设计是一个逐步细化、深入的过程。没有人能一次就设计出完美的东西,需要及时的沟通,包括与客户的反馈,与其他项目组成员的讨论,这样有助于降低开发时偏离需求的风险。也就是说,在开发之前题,是建立在设计者的想法有客户的确认和开发人员的理解的基础之上设计撰写人必须与系统分析员反复讨论,以透彻理解用户需求;
一项需求可能有多种方式实现,设计者必须与系统分析员确定该需求将采用何种方式实现,将达到何种效果,以消除将需求映射为设计的歧义;讨论过程中还可能会发现需求有不完备甚至错误的地方,在需求重新确定后设计者需修正设计。设计文档必须写清楚各个模块/接口/公共对象的定义,列明程序的各种执行条件与期望的运行效果,还要正确处理各种可能的异常。此外设计文档应该遵循一定的写作模式与版面风格,使用统一的术语或惯用语,使得小组成员很容易理解。以上这些活动综合起来将是一个很细致、很耗时的工作过程。就个人所知,一些公司的详细设计通常是由程序主管或少数核心的程序员撰写的,他们通常也是系统架构的主要作者或维护者。因为他们在开发团队中技术最为精湛,对架构最为熟悉,他们最有资格评价现有架构是否能适应新的用户需求,采用何种方式实现需求对架构的冲击最小。但是由少数人来负责所有的详细设计可能造成开发过程中的瓶颈甚至是设计的错误。当任务比较集中的时候,设计者可能忙得透不过气,而负责实现的同事反而在等米下锅,比较清闲。于是为了让自己不成为拖累进度的“罪人”,某些设计者就会采用一种快捷方式来交付设计:他们会与系统分析员进行初步的讨论,然后撰写一份粗糙的但仍然叫做详细设计的文档,把它交付给负责实现的同事,再通过讨论、即时通工具、电子邮件等方式解答对方提出的疑问。但由于详细设计本身不完备,他们不得不花费更多的时间和精力与负责实现的同事沟通;而且他们却很可能忘了把这些交流的成果更新到详细设计中去!(或许是他们太忙,没有足够的时间,又或许是他们认为既然产品已经实现,那么详细设计也就不必维护了。)其结果很可能是当产品开发出来后,我们才发现它跟用户要求的完全两样!原本在详细设计阶段就应该发现的需求漏洞与在那时应该确定的技术方案在实现阶段甚至测试阶段才暴露出来,而这时大家往往有木已成舟的感觉,改动的难度比设计阶段高数倍甚至十倍以上,毕竟任何再牛的人都有自己的局限。
对于以上问题我提出全员设计,全员设计的含义就是把详细设计的工作进行适当地分解,把它们分摊到小组内其它同事身上,让大家都参与设计。这可以说明如下:
当一组用户需求基本确定下来后,程序主管需要估计需求的相关性、需求的优先级、设计的难易程度、设计的工作量等,将该组需求分解为一或多项设计任务,并指定给适当的同事。参与设计的每个人必须负责至少一项设计的撰写任务。设计者从系统分析员处获得详细的用户需求,并与系统分析员反复沟通以透彻理解用户需求。他还要分析系统架构及产品的已实现与/或已规划部分,理解架构的设计理念,理解产品不同模块之间的协作关系,理解架构与产品之间的约束和依赖。当然对系统架构和产品的分析不可能穷尽每一个细节,只要分析与即将开发的模块相关的内容即可。
一项设计任务,它可能需要多个程序员完成。比如用户界面或网页由某位或某组同事负责,而业务逻辑组件则由另一位或另一组负责,数据库部分则又由其它同事负责。设计者必须考虑他们的立场,以各方面都相对容易理解的方式写清楚主要的模块/接口/对象定义,明确相应的调用规则与主要逻辑处理。如果某项设计任务所涉及的内容太专业化,设计者并不熟悉相关的内容(比如某位C#程序员并不熟悉如何编写一个存储过程),他可以用描述性的文字说明该部分的设计要求,并知会相关的同事补充。其它同事在补充时可以对这些描述性的文字重新整理,以更加确切地表达设计内容,更符合文档的书写惯例。在设计文档完成后,设计者必须把他提交给程序主管或由程序主管指定的程序员审阅。个人推荐由其它程序员而不仅仅是程序主管来审阅。不用担心等待多个人的审阅意见是否可能导致一份设计滞留很久。大家可以并行地工作,不必是A审阅后才能B审阅。可以交叉审阅,即A的设计由B、C审阅,B的设计由A、C审阅等。审阅意见可以用多种方式(如讨论、即时通工具、电子邮件)反馈给设计者,设计者负责汇总这些意见并修正设计。以个人的经验而言,通常设计交付审阅后半天内就可以收到反馈意见了。设计经过反复地修正直至没有人再提出修正意见,这时就可以由程序员实现了。以个人的经验而言,一份设计通常两、三轮反馈后就可以定稿了。如果多次反馈后仍不能定稿,极有可能是:
a)需求尚未明确,各个方面(包括客户、系统分析员或设计者)对需求的看法不统一
b)技术或系统架构存在严重的限制,无法用较方便的方式实现
全员参与设计好处、风险与不适用的团队如下:
1.有助于平衡工作量,加快开发进度。详细设计的任务分解后,程序主管或核心程序员可以有更多的时间处理其它的事务,比如关注软件的开发质量或改善系统架构。详细设计的撰写任务分解后它们可以并行地撰写,这将极大地提高设计撰写的进度,节约时间。
2.有助于培养程序员的大局观。每位撰写设计的程序员不再仅仅只关心自己负责实现的模块,他必须从更高的层次考虑和理解设计。
3.有助于加强同事之间的交流与协作。设计者需要与系统分析员、其它程序员、审阅者进行反复的交流和沟通,实际上每份设计都是多人协作的成果。更多的沟通有助于集思广益,有助于避免一、两个人的倾向性意见导致错误的设计。每位设计者都需要对自己撰写的设计负责,他还要向其它同事的设计提供审阅意见或技术建议,彼此的工作是互相支持和依赖的,这有助于减少“只扫自家门前雪,不管他人瓦上霜”的想法。
1.在某种意义上,全员设计可能增加交流的成本。两个人之间有一条交流途径,三个人之间最多有三条,四个人之间最多有六条。途径越多,信息量就越大,而这些信息不见得都是有用的信息。详细设计的任务分解后,不可避免地有更多的人参与交流和沟通,大家要花更多的时间来理解他人的想法,也可能要花更多的时间向他人阐述自己的观点。特别是在并行撰写详细设计的过程中,系统分析员反而可能成为另一个瓶颈了。但从总体上来看,在设计阶段花费适当的代价发现更多的问题,比在实现阶段或测试阶段再发现问题,仍然是划算的。
2.分解后的详细设计可能引入冲突的设计内容。由于设计由不同的程序员撰写,他们考虑问题的角度和思维的方式不可能完全一致,这增大了不同的设计内容之间的计算口径或交互方式不一致的可能性。这需要设计者们尽可能遵循一致的设计原则,也需要审阅者们尽可能找到这些不一致的地方。
3.并不是所有的程序员都适合参与设计。很明显,例如刚入职的同事就不适合参与设计,他们对系统架构还缺乏足够的认识。另外兼职的同事也不适合参与设计,他们的工作方式可能无法保证及时提交设计文档与参与讨论等。
在项目的开发过程中,在团队中的成员之间以及和客户之间是一个不断的交流和沟通的过程。我们的开发过程最好是一个迭代式的开发过程(尤其是国内的项目)。这样我们可以尽早发现开发出来的功能是不是符合客户的需求,以免开发完了,客户说这个不是我们需要的后果。
制定系统得整个计划,任务的划分以及分配工作,跟踪任务的进度,使我们的项目进度在控制范围之内。
风险是随着项目的不同阶段变化的,不同的阶段风险是不同的,我们必须分析我们当前面临的风险的数量、影响程度等,以及怎么去解决这些风险。
测试工作目前在国内的中小公司做的都不太好,但是从我们做项目或者产品必须重视测试工作,把握好质量关。
在开发过程中,内部管理还要注意的一点是时刻强调以验收为目的的思想,每个任务的最终可交付成果一定要是可以被检查的,比如,【界面要求:美观大方、简洁明快】,这个要求我就不知道如何检查。所以,给开发小组布置任务的时候就要考虑如何检查结果,比如我见过一个计划,里面有一个任务【开发人员熟悉EJB编程】,这个任务,除了让这些人去参加一些专业认证考试,否则,结果很难被检查。所以,时刻考虑如何检查结果、如何向客户交付是项目经理一直要注意的事情,我听说有些老项目经理拿到项目是倒排计划的,即首先看如何验收和验收标准,然后决定工作计划。很多项目开始了很久,还不知道如何验收,那么这个项目出问题的可能性就很大了。做项目就是为了验收,我们的角色不是研究机构,我们的目的就是在付出那么多劳动后得到结果。
项目开发经验谈(一)
http://www.cnblogs.com/ghd258/archive/2007/05/22/756102.html
分享到:
相关推荐
WiFi产品射频电路调试经验谈 本文档总结了作者一年半以来的一些射频电路调试经验,记录的是作者在实际项目开发中遇到并解决问题的过程。作者希望通过这份文档与大家分享这些经验,帮助大家在工作中避免类似的错误。...
《管理信息系统》课程设计任务书 (2013版) 一、组织形式 要求学生采用"项目小组"的形式,结合具体的开发项目进行设计。具体要求如下: 1、班级按项目小组进行分组,每组4人。 2、每个项目小组选出项目负责人,由...
【Birt使用经验谈——Chart图】 Birt是一款开源的报表工具,用于生成复杂的报表和图表。这篇文档主要介绍如何在Birt中设计和创建Chart图表。以下是对Birt Chart图设计步骤的详细说明: 1. **环境配置**:虽然在...
二、函数与模块化编程 在C语言教学过程中,函数的使用是一个核心内容。函数能够帮助学生理解如何将程序分解成更小的、可重用的代码块。教师需要讲解如何定义函数、声明函数原型、以及函数如何返回值。此外,模块化...
**jr经验谈**:这份文档可能是社区用户分享的使用经验或技巧,包含了一些实践中的小窍门和最佳实践,对于提升工作效率和避免常见错误很有价值。 **使用iReport制作报表的详细过程**:iReport是JasperReport的图形化...
《信息系统项目管理师论文集锦》是一份针对高级信息系统项目管理师的学习资料,涵盖了项目管理的核心要素和实践经验。本文将详细解析其中的关键知识点。 一、项目管理基础 项目管理是组织、计划、执行和控制资源,...
一是周转慢,由于开发速度较慢,项目的开发周期延长,资金回笼不及时,限制了其销售规模的增长。二是扩张意愿谨慎,即使在市场火热时,中小房企也不愿意冒进,导致在核心城市的布局受调控政策影响,销售增速放缓。三...
4. **浅谈企业软件架构:第二章 分层架构 - 豆豆网.mht**: 这篇文章深入探讨了分层架构,一种常见的软件设计模式,它将系统分为不同的层次,如表示层、业务逻辑层和数据访问层,以提高可维护性和模块化。 5. **...
以下是一篇关于如何写好一篇优秀建模的经验谈: 一、理解建模的目的与价值 在开始建模之前,明确建模的目的至关重要。这可能包括需求分析、系统设计、故障排查或性能优化等。建模的价值在于它提供了一个可视化和...
3. **在谈项目**: - XX市龙铖钢结构有限公司计划投资5000万元建设钢网架结构项目。 - XX省电力局计划投资5000万元建立电力开关厂。 4. **在建项目进展**: - 采菱市场主体工程已完成,预计5月底至6月初开市。 ...
毕业后,我在YY公司担任软件工程师,负责开发和维护关键的应用程序。这段经历让我掌握了多种编程语言和技术工具。现在,我正在寻找新的挑战,希望能加入贵公司并贡献我的技能。” ### 二、你能为我们提供什么其他...
### 深入浅出MFC——MFC初级入门(繁体版) #### MFC编程基础知识 本章节将深入浅出地介绍MFC的基础概念,为读者提供一个全面...通过这些知识点的学习,读者将能够掌握MFC的核心概念,并能够应用到实际的项目开发中。
全书按照作者本人学习和实践的过程,带着读者从基础的计算机知识到高级的编程技术,从非常专业的汇编优化到非常实际的项目管理进行了一次游戏开发的全景探索。 本书不仅适合游戏开发者阅读,也会给所有的开发者和...
应向国际先进经验学习,与国际企业合作,借鉴其集成化建设经验。此外,应建立一套适应我国现状的集成化标准,促进不同系统间的有效对接和信息共享。 3. 加强质量监管 应制定统一的质量标准,并加强对施工过程的监管...
#### **二、**州近年来农村防火工作经验** 为了有效应对农村消防安全问题,**州及其所在省份采取了一系列积极措施。自1999年开始,该地区启动了农村消防工作的试点项目,并逐渐推广了一系列有效的防火经验和措施: ...
全书按照作者本人学习和实践的过程,带着读者从基础的计算机知识到高级的编程技术,从非常专业的汇编优化到非常实际的项目管理进行了一次游戏开发的全景探索。 本书不仅适合游戏开发者阅读,也会给所有的开发者和...
在iOS开发中,Grand Central Dispatch (GCD) 是一个强大的多线程管理工具,它简化了并发编程。本文将深入探讨GCD的一些使用经验和技巧。 首先,GCD的核心概念是队列(queue)。队列分为两种类型:串行队列(serial ...
经常以那些技术只适合大型项目为由,避开或忽略它们,实际中,Java 的接口或抽象类是真正体现 Java 思想的核心所在,这些 你都将在 GoF 的设计模式里领略到它们变幻无穷的魔力。 GoF 的设计模式表面上好象也是一种...