`
thinkingstone
  • 浏览: 7426 次
  • 性别: Icon_minigender_1
  • 来自: 上海
最近访客 更多访客>>
社区版块
存档分类
最新评论

中小型软件项目生命期各阶段管理的体会

阅读更多
   本人在两个中小型软件开发企业工作过几年,也做过几年的项目管理工作。走过一些弯路也得出一些项目管理方面的体会,在此进行总结,希望能够与其他一些项目管理人员或对项目管理有兴趣的同事共同探讨一些中小型项目管理的问题及方法。
大部分中小型软件开发企业的软件项目经常遇到的一些问题可能包括:项目时间紧、项目组成员经常加班;项目需求变更频繁;项目进行过程中可能就有项目团队成员离职或调离到其他项目组;项目重复性建设问题严重,每个项目都需要从框架开始重新开发,难以重用已有项目的成果等等。我觉得通过较好的规划和管理能够在一定程度上提高项目的成功率或者说提高项目的质量,降低开发成本,缩短项目开发时间。
我理解项目管理有两个大的划分方法一是通用的项目管理体系,也就是PMP中所说的5个项目管理过程组9个知识领域44个项目管理过程;二是具体业务领域的按项目生命期划分的各阶段的管理。本文主要从项目生命期各阶段的管理方面进行总结。
    我个人分析一个软件项目生命期大体需要经过的流程(这只是我个人的一个划分,有可能不是很全面):可行性分析、需求、设计、开发、测试、实施、维护、总结。
    下面我针对每个阶段谈一下自己的体会。

    一、可行性分析
    一般的项目都是通过外部招标的形式得到的。对于有些公司在应标的时候对项目就要有个取舍。如果在特殊时期为了生存可能只要不是太赔的项目都会尽量承接。
    但是一般项目在承接前最好在经济、技术等方面进行可行性分析,而且这种可行性分析最好是管理者、市场、技术等人员都参与,因为市场人员一般不懂(或不通)技术,技术不懂(或不通)市场,因此只有大家在一起共同分析讨论才能够得出比较可行的结果。可行性分析的结果一方面可以作为是否承接项目的依据,另一方面也可以作为承接项目方式或与客户谈判的依据。比如经分析项目工作量很大,如果按标书金额开发有可能会赔,那么可以与用户探讨是否将来能有个二期的项目;另外如果用户要求的时间比较紧,可是经分析很难按标书时间完成,那么也可以和用户同共探讨是否可以在正式签定合同时延长系统交付时间等。当然这些与用户的探讨工作一般是需要公司高层领导出面协调的,有时单独靠项目组是没有能力达成理想的结果的。
    另外在此阶段最好对项目的成本和需要的资源进行一下估算。

    二、需求
    需求实际要细分为需求调研、需求分析、需求确认、需求管理等。
    因为对于需求要想说清楚可能需要较长的篇幅,所以在此不进行展开。
在此只是先强调一下需要相当重要,如果早期需求做的不够仔细会给项目的后期工作带来很多的隐患。
而且我建议每个项目无论多大也无论项目时间要求多紧急一定要有一个比较详细的需求文档。
在需求比较确定之后建议再对项目成本进行估算。同时对需要的资源及相关里程碑进行说明。

    三、设计
    对于大部分中小型项目因为时间和人力的问题加上需求变更比较频繁,所以有时很难书写一个比较详细的设计文档。但是如果没有设计文档一是为后期维护可能会带来一些问题,尤其是当原来开发人员或主力开发人员离职或调离到其他项目组时;另外没有经过详细设计的项目可能也会存在一些风险。
    因此建议不必为了文档而文档,除了项目验收的要求外,建议设计文档根据项目特点有选择地包括以下一些内容的说明:
    系统网络情况。
    系统安全策略及备份策略。
    系统相关软硬件环境说明。
    与其他系统的关系。
    主要库表及关键字段说明。
    系统中关键数据关联关系说明。
    关键字段校验规则。
    项目中技术的论证及名种技术的结合方法。
    系统关键技术说明。
    一些技术使用过程中的注意点。
    异常处理机制。
    事物处理机制。
    日志记录方法及原则。
    框架中相关命名说明。
    共通功能描述及调用方法。
    核心算法。
    系统性能解决方案。
    并发的考虑及处理。
    系统用户及角色权限设计说明。
    系统的关键配置说明(如数据库服务器,应用服务器等等,如有必要可另加附件进行说明)。
    个人认为对于中小型项目如果不是用户要求有时不必在设计文档中对所有数据库表及字段都进行说明,可以只说明比较重要的一些数据库表及字段以及相关数据库的关联关系就可。因为在用数据库建模软件(如Powerdesigner)进行数据库设计的时候可以对每个表及每个字段加注释进行说明,在使用开发工具(如:pl/sql)进行开发的时候自然可以看到每个数据库表或字段的说明。而且一般中小型项目在开发的过程中可能需要经常性地修改数据库表的设计,如果还有文档描述数据库的设计那么每次修改时除了修改数据库之外还要维护设计文档的一致性,如果项目忙忘记了修改就会导致文档和数据库的不一致,有时这种不一致的文档可能还不如没有,因为它可能会误导其他人员的理解。
    另外也可以通过开发过程的规范来减少设计文档的内容。这个将在下面的开发环节进行详细的说明。

    四、开发
    整个项目有一个合理的框架是很重要的。框架具体包括哪些内容在此很难解释清楚,但是我想最起码整个框架应该把项目所采用的各种技术(如java中的Hibernate、Struts、Spring的结合)比较合理地组织起来,并为具体模块的开发提供一些工具类等,同时整个框架应该具有较好的可扩展性、可维护性和较好的性能。框架最好由项目组中技术最强的人(在此称他为技术负责人)进行搭建及维护。
    另外对于整个项目有一个统一的命名规范(类和方法按什么方式命名,所有文档都加上时间作者等)并进行遵守是很必要的,这样一个人开发的代码其他人很容易就能够读懂。
    在整个项目进行全面开发前最好先向项目组全体成员讲解需求及项目框架的机制、使用方式及注意事项,再说明相关规范。然后每一个开发人员按照理解开发一个简单的功能。然后大家再一起(或者由技术负责人)看一下每个人对于框架的使用是否合理,规范理解的是否有误,编码习惯是否需要改正等等。在讨论并达成共识后再进行具体功能的开发。
    另在具体的开发过程中尽量在关键算法处加一些注释进行说明。
    建议定期进行一些代码走查的工作。尽量由技术负责人负责这份工作,当然也可以进行互相检查等。代码走查的好处很多,如可发现一些不好的编码习惯;提高整个系统代码的可读性;发现一些bug;借鉴别人好的编码思路或技术等。

    五、测试
    有些公司有独立的测试或质量保证部门,有的公司只是由开发人员自己完成测试工作。在此假设公司有一个独立的测试部门进行系统的测试工作。
    首先开发人员一定要养成单元测试的习惯。对自己开发模块的功能进行单元测试过之后再提交测试组进行结合测试、系统测试甚至性能测试。单元测试很重要,在进行单元测试的时候如果条件允许可以使用junit等一些工具,或其他一些代码覆盖率工具帮助分析测试用例的覆盖程度。另外在此再提一点,一般项目可能是整体开发完之后才进行性能测试,可是这时测试出性能问题了却因为临近上线或试运行时期,不一定有充足的时间进行修改,另外也可能因为整个项目已经都使用了某种影响性能的技术或方法,要想改变要付出很大的代价。所以建议如果条件允许可以在开发的过程中(甚至搭建项目框架时)使用一些轻量级的开源性能测试工具由开发人员对可能影响性能的功能进行测试。
    对于测试部门的测试人员要尽早地参与到项目中来,建议在需求阶段就介入。早介入的好处一是可以对需求理解的比较深入,知道原始需求是怎么来的,中间经过哪些变化,这样会比在开发结束后一次性地讲解能够更好地把握需求,更好地书写测试用例及测试计划。另外有些人也比较推荐在需求的时候就开始书写测试计划和测试用例,因为我之前项目的特点我没有这样试过。
    项目组设计人员一定要把一些关键测试点、数据及功能的关联关系对测试人员说清楚。
测试过程中有一个bug管理系统并对bug进行跟踪是很必要的,在此就不展开说明了。
另外在补充一点,最好是在项目结束后能对产生的所有bug进行一下分类。然后通过分析得出一些规律。通过在以后项目中采取一些措施进行项目质量的提高。

    六、实施
    对于涉及多个子系统的长期开发项目,在系统设计和开发过程中要优化处理关联性强的系统,同时有一个(或几个)系统成熟了就试运行或上线,不必等所有系统都好了再上线。一是因为时间长了开发人员可能调离至其它岗位,维护代价会增大;二是子系统用户可能会改变而导致需求变更;三是时间长了用户对系统需求会有陌生感,也可能会产生新的需求;四是时间长会给打消用户对使用系统的积极性;五是较早地让用户看到系统也可以减轻因双方理解偏差而导致的系统需求变更的影响。

    七、维护
    争取把用户的提过的所有修改都进行记录,并争取所有修改都请用户签字(不一定提一个修改就签字一次,可以统一记录然后定期把一段时间内的修改进行签字确认),如果做不到所有修改都签字也尽量做到对于重大修改请用户签字。签字的好处很多:让用户看到项目组所做的工作;如果修改的内容比较多可以通过双方高层领导的沟通再新进行系统二期或三期的开发;有了签字有时用户对需求变更会相对少一些等等。
    另外对于所有修改除了签字留档外争取定期把所有修改的内容再整理到需求文档中,保持需求文档与正式环境功能的一致性。这个工作很有必要,可能带来以下一些好处:方便测试人员在回归测试时理解系统功能;如果维护人员的调离其他接手人员比较方便理解系统功能等。

    八、总结
    在此不对项目验收进行单独的说明。只是说一下项目结束(有些项目可能要持续进行维护,在此主要指系统已经上线并稳定运行)后要进行的总结工作。
建议每个项目结束后都召开一个项目总结会。项目总结会建议与项目相关的所有人都参加。由项目经理进行主要总结,但每个参与人员最好也都进行总结。可以从管理和技术两大方面对项目中的每个阶段的成功与失败进行总结,目的是总结经验教训,提高每个人的项目经验,提高项目组的成熟度,使以后的项目更加成功。在此要强调一下,一般项目总结时大家都喜欢只说成功的,而很少提到失败的或所走的一些弯路,而往往对这些失败的总结更能使大家收获更多,当然这也要看组织的文化,我建议如果可能尽量鼓励大家多总结一些失败的经验教训。
    另外项目结束后如果有时间最好是把项目中的一些有重用价值的文档放到公司的组织过程资产库中。
    如果项目的框架比较合理也可以剔除项目中的业务相关功能的代码,整理出项目框架并加以简要说明文档供本项目组其他项目或其他项目组使用。

    九、项目经理职责分析
    对于中小型规模的项目,项目经理可能既要充当管理人员的角色又要充当开发甚至实施人员的角色,基本上软件项目生命期的每个阶段都要参与。
    但是我觉得以下一些工作(其实远不只下面所列)项目经理一定要重视:
    项目整体需求的把握。
    项目框架的把握。
    项目团队的建设。
    与其他职能部门的协调工作。
    项目例会。
    客户关系维护。
    定期向项目相关人员汇报进度。
    总之项目经理要对项目的成败负责,要对项目成员的发展负责,要对客户负责,还要对公司负责,所以项目经理一定要有责任心、要有全局观。

    最后是关于本文的几点说明:
    本文主要从宏观上对软件项目生命期的每个阶段可能遇到的问题及相关解决的想法进行探讨。因此本文写的有点杂,而且对许多内容只是点到,并未展开,如果可行可能在后续的文章中单独对某些阶段(如:需求、开发)或某些工作(项目团队建设、技术交流、员工职业生涯规划等)再进行展开论述。
    本文主要针对中小型企业的项目生命期管理的想法。我相信对于很多大企业的管理方式远比我所提到的正规得多。
    因本人写作水平有限,写的比较粗糙,也希望大家共同探讨,多提宝贵意见。
分享到:
评论
1 楼 marising 2009-02-23  
说是管理,其实很多设计的内容。
另外,成本预算怎么没体现?

相关推荐

    软件研发项目管理各阶段文档汇总.zip

    导言.IT项目的生命期 第一章.IT项目的启动阶段 1.1 可行性研究报告框架 1.2 项目章程 1.3 项目整体风险水平定性分析表 1.4 多项目风险情况一览表 1.5 质量保证说明书 1.6 采购程序及准购权限表 1.7 ...

    项目管理——中小型项目管理实战.pptx

    【项目管理——中小型项目管理实战】是针对中小规模企业或项目团队进行有效管理的一种方法论。在实际操作中,中小型项目管理涵盖了从项目启动到结束的全过程,旨在确保项目能够按时、按预算、按质量完成,同时达到...

    软件项目管理研究综述

    17. 管理软件测试中的服务提供商风险:Tiemens和Bouwman研究了如何管理软件测试中来自服务提供商的项目风险。 18. IT项目组合的优化:Bardhan等人分析了如何在IT项目组合中实现最佳决策。 综上所述,软件项目管理...

    IT项目管理之软件项目质量管理论文

    最后,软件项目质量管理需要注重以下几点的重要性:满足客户、通过检验防止错误、管理责任、各阶段的程序。只有通过软件项目质量管理,才能确保软件项目的质量达到客户的要求,从而提高客户的满意度。

    软件项目生存期模型-软件项目管理

    软件项目生存期模型是软件开发过程中的重要理论框架,它为软件项目的管理提供了有序的指导。这个模型将软件项目的生命周期分为五个关键阶段:概念、规划、执行、监控和收尾。 1. 概念阶段:这是项目的启动阶段,...

    中小型软件企业的软件项目管理及软件过程改进

    在当前的信息化时代,软件开发已经成为企业竞争的关键因素,尤其对于中小型软件企业而言,有效管理软件项目并持续改进软件过程显得尤为重要。本文将深入探讨这一主题,基于“中小型软件企业的软件项目管理及软件过程...

    酒店管理系统软件项目管理说明书.docx

    软件生存期模型是指在软件开发过程中,如何将软件从概念阶段到交付阶段的整个生命周期的管理过程。常见的软件生存期模型有瀑布模型、V模型、迭代模型、螺旋模型等。每种模型都有其特点和优缺,选择合适的模型可以...

    软件工程生命周期各阶段介绍.ppt

    软件工程生命周期各阶段介绍 软件工程生命周期是指软件从概念到交付的整个过程,它是软件开发的核心步骤。软件生命周期主要包括软件计划、软件需求分析、软件总体设计、软件详细设计、软件编码、软件测试、软件维护...

    软件项目管理案例教程课后习题.docx

    软件项目管理涉及到项目的整个生命周期,从项目的启动到项目的结束,包括项目的计划、执行、控制和收尾等阶段。 项目管理的目标是确保项目的目标和要求得到满足,包括项目的范围、成本、进度、质量和客户满意度等...

    覃征软件项目管理习题

    覃征软件项目管理习题是软件项目管理领域的习题大全,涵盖了软件项目管理的各个方面,包括软件工程、项目管理、需求管理、软件项目估算与进度管理等。该习题大全共分为三个章节,分别是软件项目管理绪论、需求管理和...

    软件项目管理课程设计报告

    此外,良好的沟通技巧和团队协作能力也是成功管理软件项目的关键。 总结,软件项目管理课程设计报告旨在提供一套全面的实践指导,帮助学生在理论与实践中找到平衡,提升项目管理的技能,为未来在软件开发领域的工作...

    全生命周期的软件项目管理模板

    在软件开发过程中,全生命周期的项目管理是至关重要的,它涵盖了从项目的启动到最终交付以及后续维护的每一个阶段。以下是对“全生命周期的软件项目管理模板”中的关键知识点的详细阐述: 1. 需求分析:这是软件...

    软件项目管理教案.rar

    在软件开发领域,项目管理是一项至关重要的任务,它涵盖了从项目启动到交付的整个生命周期,包括需求分析、计划制定、团队组织、进度控制、风险管理以及质量保证等多个方面。以下是对这份教案中可能涉及的知识点的...

    软件项目管理概述

    项目管理软件可以帮助项目经理监控项目进度,识别潜在的问题,并及时调整计划。定期的项目评审会议也是确保项目顺利进行的有效手段。 总之,软件项目管理是一门复杂的学科,涉及到多个方面的知识和技能。通过理解...

    学生宿舍信息管理系统-软件项目管理文档.zip

    总的来说,“学生宿舍信息管理系统-软件项目管理文档”为我们提供了软件项目管理的实例,涵盖了需求分析、设计、开发、测试、实施和维护等多个环节,对于理解软件项目的生命周期和管理流程具有很高的学习价值。...

    软件项目开发和管理规范标准[详].pdf

    软件生存期包括可行性分析与工程开发方案、需求分析、设计、编码、测试、维护等活动,所有这些活动都必须进行管理,在每个阶段都存在着权限角色控制、文档管理、版本控制、管理工具等,软件工程管理贯穿于软件生命的...

    涉密软件项目实施过程保密管理(20211106114822).pdf

    总的来说,涉密软件项目实施过程的保密管理涵盖项目的所有阶段,从前期的投标到后期的开发测试,都需要严格执行保密制度,通过教育、责任分配、监控和风险评估等手段,确保国家涉密信息的安全。这种严格的保密管理...

    软件项目管理经验文档

    软件项目管理是确保在...有效的软件项目管理注重每个阶段的细节,通过良好的沟通、文档化和团队协作,确保项目的顺利进行和成功交付。同时,它也强调了在整个过程中学习和改进的重要性,以便在未来的项目中复制成功。

    软件项目管理_第2章_项目的生命期和管理过程.pptx

    软件项目管理_第2章_项目的生命期和管理过程.pptx

Global site tag (gtag.js) - Google Analytics