`

项目开发经验谈(二)

阅读更多
1.1    需求变化

项目的需要变化是肯定有的,而且变化一般都很频繁,我们怎么应对客户的这种需求变化呢,以不变应万变。首先在前期的需求调研要做好,尽可能的替用户考虑,达到功能质量满足最大化。需求调研前期的《目标与范围》和需求调研末期的《功能规格说明书》都要跟客户签字确认,这样既能保证我们所理解的需求就是客户所要的,也使得项目末期跟客户验收时有据可依。在项目中期是发生需求变更是很常见的,这时要做好需求变更管理流程。需求变更表,小的变更自己掌握,客户要求的变更有开发人员和设计人员共同商讨后提交项目经理,项目经理预估变更损耗工程时间,在一定阶段一起提交给客户,大的变更直接提交客户,并且要把需求变更对项目产生的影响让客户知道,把球尽可能的踢给客户,让客户在进度、功能、资源三者中取舍出一个平衡来。对需求进行分类评级,关键部分不能改动的做特别确认(如系统架构等,如果改变等于从头再来)。同时完成客户签字确认,当然如果能将这部分写成合同细节中去是最好。以下是我认为变更的步骤:

¢ 第一步:客户提出变更内容

l    客户提交的变更必须基于书面形式

l    客户提交的变更必须有充分理由

   如果变更被拒绝,对业务的负面影响

   如果变更被接受,对业务的正面帮助

¢ 第二步:为能否实现变更作评估

l    从实现方式上考虑新的变更可否实现

l    对于较复杂的情形,辅以简单的说明。欲详述,可作附件处理

l    对于简单情形,例如页面布局更改,则无须说明

¢ 第三步:可以实现看进度

l    进度几乎是绝大部分项目关注的第一要素

l    对于活动级别的进度影响

l    对于项目整体工期的影响

¢ 第四步:变更成本

l    人力相关的变更成本

   是否需要额外的项目组成员

   项目组需要增加的工时数

是否正常工时(工作日加班、节假日加班)

   项目工数报价

l    非人力成本

   软硬件费用

   资料费用等

¢ 第六步:质量和风险

l    变更对质量的多方面影响

   分阶段影响(需求、设计、编码、测试、维护)

   可靠性、安全性、可维护性、可用性等

l    可能对团队士气的负面影响

l    可能引发的间接任务对工期的负面冲击

l    开发方的成本负担可能超出力所能及的范围

¢ 第六步:需求变化的确定

1.2      架构设计

撰写详细设计是一个逐步细化、深入的过程。没有人能一次就设计出完美的东西,需要及时的沟通,包括与客户的反馈,与其他项目组成员的讨论,这样有助于降低开发时偏离需求的风险。也就是说,在开发之前题,是建立在设计者的想法有客户的确认和开发人员的理解的基础之上设计撰写人必须与系统分析员反复讨论,以透彻理解用户需求;

一项需求可能有多种方式实现,设计者必须与系统分析员确定该需求将采用何种方式实现,将达到何种效果,以消除将需求映射为设计的歧义;讨论过程中还可能会发现需求有不完备甚至错误的地方,在需求重新确定后设计者需修正设计。设计文档必须写清楚各个模块/接口/公共对象的定义,列明程序的各种执行条件与期望的运行效果,还要正确处理各种可能的异常。此外设计文档应该遵循一定的写作模式与版面风格,使用统一的术语或惯用语,使得小组成员很容易理解。以上这些活动综合起来将是一个很细致、很耗时的工作过程。就个人所知,一些公司的详细设计通常是由程序主管或少数核心的程序员撰写的,他们通常也是系统架构的主要作者或维护者。因为他们在开发团队中技术最为精湛,对架构最为熟悉,他们最有资格评价现有架构是否能适应新的用户需求,采用何种方式实现需求对架构的冲击最小。但是由少数人来负责所有的详细设计可能造成开发过程中的瓶颈甚至是设计的错误。当任务比较集中的时候,设计者可能忙得透不过气,而负责实现的同事反而在等米下锅,比较清闲。于是为了让自己不成为拖累进度的罪人,某些设计者就会采用一种快捷方式来交付设计:他们会与系统分析员进行初步的讨论,然后撰写一份粗糙的但仍然叫做详细设计的文档,把它交付给负责实现的同事,再通过讨论、即时通工具、电子邮件等方式解答对方提出的疑问。但由于详细设计本身不完备,他们不得不花费更多的时间和精力与负责实现的同事沟通;而且他们却很可能忘了把这些交流的成果更新到详细设计中去!(或许是他们太忙,没有足够的时间,又或许是他们认为既然产品已经实现,那么详细设计也就不必维护了。)其结果很可能是当产品开发出来后,我们才发现它跟用户要求的完全两样!原本在详细设计阶段就应该发现的需求漏洞与在那时应该确定的技术方案在实现阶段甚至测试阶段才暴露出来,而这时大家往往有木已成舟的感觉,改动的难度比设计阶段高数倍甚至十倍以上,毕竟任何再牛的人都有自己的局限。
    
对于以上问题我提出全员设计,全员设计的含义就是把详细设计的工作进行适当地分解,把它们分摊到小组内其它同事身上,让大家都参与设计。这可以说明如下:
   
当一组用户需求基本确定下来后,程序主管需要估计需求的相关性、需求的优先级、设计的难易程度、设计的工作量等,将该组需求分解为一或多项设计任务,并指定给适当的同事。参与设计的每个人必须负责至少一项设计的撰写任务。设计者从系统分析员处获得详细的用户需求,并与系统分析员反复沟通以透彻理解用户需求。他还要分析系统架构及产品的已实现与/或已规划部分,理解架构的设计理念,理解产品不同模块之间的协作关系,理解架构与产品之间的约束和依赖。当然对系统架构和产品的分析不可能穷尽每一个细节,只要分析与即将开发的模块相关的内容即可。

一项设计任务,它可能需要多个程序员完成。比如用户界面或网页由某位或某组同事负责,而业务逻辑组件则由另一位或另一组负责,数据库部分则又由其它同事负责。设计者必须考虑他们的立场,以各方面都相对容易理解的方式写清楚主要的模块/接口/对象定义,明确相应的调用规则与主要逻辑处理。如果某项设计任务所涉及的内容太专业化,设计者并不熟悉相关的内容(比如某位C#程序员并不熟悉如何编写一个存储过程),他可以用描述性的文字说明该部分的设计要求,并知会相关的同事补充。其它同事在补充时可以对这些描述性的文字重新整理,以更加确切地表达设计内容,更符合文档的书写惯例。在设计文档完成后,设计者必须把他提交给程序主管或由程序主管指定的程序员审阅。个人推荐由其它程序员而不仅仅是程序主管来审阅。不用担心等待多个人的审阅意见是否可能导致一份设计滞留很久。大家可以并行地工作,不必是A审阅后才能B审阅。可以交叉审阅,即A的设计由BC审阅,B的设计由AC审阅等。审阅意见可以用多种方式(如讨论、即时通工具、电子邮件)反馈给设计者,设计者负责汇总这些意见并修正设计。以个人的经验而言,通常设计交付审阅后半天内就可以收到反馈意见了。设计经过反复地修正直至没有人再提出修正意见,这时就可以由程序员实现了。以个人的经验而言,一份设计通常两、三轮反馈后就可以定稿了。如果多次反馈后仍不能定稿,极有可能是:
a)
需求尚未明确,各个方面(包括客户、系统分析员或设计者)对需求的看法不统一
b)
技术或系统架构存在严重的限制,无法用较方便的方式实现

全员参与设计好处、风险与不适用的团队如下:

1.2.1 全员设计可以带来以下明显的好处

1.有助于平衡工作量,加快开发进度。详细设计的任务分解后,程序主管或核心程序员可以有更多的时间处理其它的事务,比如关注软件的开发质量或改善系统架构。详细设计的撰写任务分解后它们可以并行地撰写,这将极大地提高设计撰写的进度,节约时间。
    2.
有助于培养程序员的大局观。每位撰写设计的程序员不再仅仅只关心自己负责实现的模块,他必须从更高的层次考虑和理解设计。
    3.
有助于加强同事之间的交流与协作。设计者需要与系统分析员、其它程序员、审阅者进行反复的交流和沟通,实际上每份设计都是多人协作的成果。更多的沟通有助于集思广益,有助于避免一、两个人的倾向性意见导致错误的设计。每位设计者都需要对自己撰写的设计负责,他还要向其它同事的设计提供审阅意见或技术建议,彼此的工作是互相支持和依赖的,这有助于减少只扫自家门前雪,不管他人瓦上霜的想法。

1.2.2 推行全员设计的潜在风险

1.在某种意义上,全员设计可能增加交流的成本。两个人之间有一条交流途径,三个人之间最多有三条,四个人之间最多有六条。途径越多,信息量就越大,而这些信息不见得都是有用的信息。详细设计的任务分解后,不可避免地有更多的人参与交流和沟通,大家要花更多的时间来理解他人的想法,也可能要花更多的时间向他人阐述自己的观点。特别是在并行撰写详细设计的过程中,系统分析员反而可能成为另一个瓶颈了。但从总体上来看,在设计阶段花费适当的代价发现更多的问题,比在实现阶段或测试阶段再发现问题,仍然是划算的。
    2.
分解后的详细设计可能引入冲突的设计内容。由于设计由不同的程序员撰写,他们考虑问题的角度和思维的方式不可能完全一致,这增大了不同的设计内容之间的计算口径或交互方式不一致的可能性。这需要设计者们尽可能遵循一致的设计原则,也需要审阅者们尽可能找到这些不一致的地方。
    3.
并不是所有的程序员都适合参与设计。很明显,例如刚入职的同事就不适合参与设计,他们对系统架构还缺乏足够的认识。另外兼职的同事也不适合参与设计,他们的工作方式可能无法保证及时提交设计文档与参与讨论等。

 

1.3    沟通

 在项目的开发过程中,在团队中的成员之间以及和客户之间是一个不断的交流和沟通的过程。我们的开发过程最好是一个迭代式的开发过程(尤其是国内的项目)。这样我们可以尽早发现开发出来的功能是不是符合客户的需求,以免开发完了,客户说这个不是我们需要的后果。

1.4    计划执行控制

制定系统得整个计划,任务的划分以及分配工作,跟踪任务的进度,使我们的项目进度在控制范围之内。

1.5    风险管理

风险是随着项目的不同阶段变化的,不同的阶段风险是不同的,我们必须分析我们当前面临的风险的数量、影响程度等,以及怎么去解决这些风险。

1.6    测试

测试工作目前在国内的中小公司做的都不太好,但是从我们做项目或者产品必须重视测试工作,把握好质量关。

1.7    验收为目的的思想

在开发过程中,内部管理还要注意的一点是时刻强调以验收为目的的思想,每个任务的最终可交付成果一定要是可以被检查的,比如,【界面要求:美观大方、简洁明快】,这个要求我就不知道如何检查。所以,给开发小组布置任务的时候就要考虑如何检查结果,比如我见过一个计划,里面有一个任务【开发人员熟悉EJB编程】,这个任务,除了让这些人去参加一些专业认证考试,否则,结果很难被检查。所以,时刻考虑如何检查结果、如何向客户交付是项目经理一直要注意的事情,我听说有些老项目经理拿到项目是倒排计划的,即首先看如何验收和验收标准,然后决定工作计划。很多项目开始了很久,还不知道如何验收,那么这个项目出问题的可能性就很大了。做项目就是为了验收,我们的角色不是研究机构,我们的目的就是在付出那么多劳动后得到结果。
项目开发经验谈(一)
http://www.cnblogs.com/ghd258/archive/2007/05/22/756102.html

 
分享到:
评论

相关推荐

    Arduino项目开发经验谈

    ### Arduino项目开发经验谈 Arduino作为一种流行的开源电子原型平台,被广泛应用于教学、产品原型设计以及各种创意项目中。本文将根据所提供的标题、描述、标签及部分内容,详细解析与Arduino项目开发相关的知识点...

    J2EE项目开发经验谈

    本文介绍了在J2EE项目开发中遇到的war包中的文件的读取问题,Ant使用中的OutOfMemoryError解决方法。

    Android开发经验谈

    标题和描述均提到了"Android开发经验谈",这表明文章旨在分享关于Android开发的实践经验。作者何晓杰,作为一名资深软件工程师和移动行业研究者,深入探讨了Android开发过程中的关键点,以及如何利用Android的优势,...

    SAP项目实施经验谈txt文档

    SAP项目实施经验谈

    Delphi开发经验谈

    在本文中,我们将深入探讨Delphi开发的经验和技巧,从开发环境的配置到软件设计和开发过程中的关键要点。Delphi是一种强大的对象 Pascal 编程语言,以其高效和快速的编译器而闻名,特别适合开发桌面应用程序。 首先...

    软件项目测试管理经验谈

    "软件项目测试管理经验谈" 软件测试管理是软件开发的重中之重,软件测试员需要具备良好的素质和技术技巧,以确保软件的质量。下面是软件测试管理的经验谈: 一、软件测试员自身素质培养 * 首先,软件测试员需要对...

    小型B/S内部管理类软件开发经验谈(C#)

    ### 小型B/S内部管理类软件开发经验谈(C#) #### 一、项目背景与概述 在本文中,我们将探讨一个小型B/S架构的内部管理类软件开发案例。该软件旨在提供基本的项目管理功能,包括添加、删除、编辑和查询等核心操作...

    Windows Live Search For Mobile 开发经验谈

    **Windows Live Search For Mobile 开发经验谈** 在移动设备上构建高效的搜索引擎是一项复杂而关键的任务。Windows Live Search for Mobile 是微软推出的一项服务,旨在为移动用户提供便捷、快速的搜索体验。这个...

    敏捷模式在微软项目中的经验谈

    ### 敏捷模式在微软项目中的经验谈 #### 背景与意义 在软件开发领域,项目管理一直是提升开发效率、确保项目按时交付的关键环节。然而,传统的项目管理方法在面对软件开发这一充满不确定性和变化的行业时,往往...

    管理人 -- 苹果公司资深主管项目经验谈

    《管理人 -- 苹果公司资深主管项目经验谈》是一本深入探讨项目管理和领导力的书籍,特别适合那些对系统分析师职位感兴趣的读者。书中作者基于在苹果公司的丰富经验,分享了如何有效地进行项目管理和领导团队的实用...

    TinyOS、NesC程序开发经验谈

    ### TinyOS、NesC程序开发经验谈 #### 一、NesC的语法与特性 **NesC** 是一种专门为嵌入式系统设计的编程语言,特别是针对无线传感器网络(WSN)中的资源受限设备。它是**C**语言的一个超集,这意味着大多数**C**...

    软件项目质量管理经验谈

    关键词:质量计划,质量控制,质量保证,质量管理,过程管理,软件度量第一章引言许多IT项目开发的系统应用在生死攸关的场合。例如,1981年,由计算机程序改变而导致的1/67的时间偏差,使航天飞机上的5台计算机不能...

    华为高管项目管理经验谈.docx

    【华为高管项目管理经验谈】 华为作为全球知名的IT企业,其高管在项目管理方面的经验具有很高的借鉴价值。本文主要探讨了软件工程的目标、项目延误的原因、进度表的制定策略、质量管理以及需求分析等方面的关键点。...

    WinCE_USB驱动开发经验谈

    ### WinCE_USB驱动开发经验谈 #### 一、WinCE设备驱动程序概述 随着USB 2.0技术的广泛应用及Windows CE对USB 2.0的支持,USB设备驱动开发成为了嵌入式系统开发中的一项重要任务。为了帮助开发者更好地理解和掌握...

    软考“三高”经验谈

    ### 软考“三高”经验谈 #### 一、引言 软考作为评估IT专业人士能力的重要标准之一,在行业内具有较高的认可度。本文基于一位资深IT从业者的经验分享,探讨软考“三高”(高项、系分、架构)的备考策略及其重要性。...

    C++工程实践经验谈

    ### C++工程实践经验谈 #### 慎用匿名namespace **背景** 匿名namespace(也称为unnamed namespace)是C++语言提供的一种特性,主要用于确保在某个特定编译单元(通常是`.cpp`文件)中定义的标识符(如变量、函数...

    Linux程序应用开发环境和工具经验谈

    在深入探讨《Linux程序应用开发环境和工具经验谈》这一主题前,我们首先需要理解Linux在软件开发领域的重要性。Linux,作为一款免费且开源的操作系统,因其高度的灵活性、稳定性和安全性,在服务器、嵌入式系统乃至...

    openGL或directX环境下3D游戏开发经验谈

    ### 3D游戏开发经验分享:OpenGL与DirectX下的实践心得 #### 一、引言 随着游戏行业的不断发展,3D游戏已经成为了主流。而在3D游戏开发领域中,OpenGL和DirectX是最常用的两种图形API。本文将从作者的一线经验出发...

    C#WebBrowser开发经验谈三.docx

    ### C# WebBrowser 控件开发经验分享:网页中发布命令以关闭嵌入了 WebBrowser 控件的单机版应用程序 #### 背景介绍 在软件开发领域,尤其是在基于浏览器的服务(BS)项目的构建过程中,如何让这类项目更加贴近...

Global site tag (gtag.js) - Google Analytics