1、 论软件项目管理的个性问题及其解决之道班 级: 学 号: 姓 名: 专 业: 软件工程 指导 老师: 2012 年 5 月 28 日摘要软件项目管理的个性问题及其解决之道在软件项目管理中扮演着十分重要的角色。如何解决软件项目管理中存在的个性问题,以及准确区分软件项目管理和其他项目管理不同之处在软件项目管理中起到至关重要的作用。软件项目管理是为了使软件项目能够按照预定的成本、进度、质量顺利完成,而对人员、产品、过程和项目进行分析和管理的活动。 随着软件开发的深入、各种技术的不断创新以及软件产业的形成,人们越来越意识到软件过程管理的重要性,软件项目管理的思想逐渐融入软件开发过程中,应用开发的项目管
2、理日益受到重视。而我国当前大部分软件公司都没有形成完全适合自己公司特点的软件开发管理模式,这样就导致软件产品质量不稳定,软件后期的维护、升级出现麻烦,同时最终也会损害用户的利益。因此软件项目管理就显的尤为重要。关键词:软件项目管理 个性问题 解决方法AbstractPersonality problems and their solution of the software project management in software project management plays a very important role. How to solve individual problems
3、 that exist in software project management, as well as to accurately distinguish between different software project management and project management play a crucial role in the management of software projects.Software project management is to make software project in accordance with a predetermined
4、cost, schedule, quality, successful, and for personnel, product, process and project analysis and management activities. With the depth of software development, technical innovation and the formation of the software industry, a growing awareness of the importance of software process management, 1sof
5、tware project management thinking began to integrate into the software development process, application development project management more attention. In China, the current most software companies are not formed perfectly suited to the characteristics of their own software development company manage
6、ment, thus leading to inconsistent quality of software products, software, post-maintenance, upgrades, trouble, and will eventually damage the interests of users. Therefore, software project management is particularly important on the obvious.Keywords: software project management Personality traits
7、Solution 2目 录1、软件项目管理定义及概述 .31.1 项目管理 .31.2 软件项目 .31.3 软件项目管理 .31.4 人员组织与管理 .52、软件项目管理的个性问题 .72.1 软件项目管理的特点 .72.2 与其他项目管理的区别 .83、解决办法 .94、参考文献 .135、致谢 .133软件项目管理的个性问题及其解决之道1、软件项目管理定义及概述1.1 项目管理项目管理就是为了满足甚至超越项目涉及人员对项目的需求和期望而将理论知识、技能、工具和技巧应用到项目的活动中去。1.2 软件项目软件项目是指以软件开发为主要工作内容的项目。软件项目特点:a.项目干系人的复杂性 -甲方
8、、乙方、第三方以及每一方内部错综复杂的组织结构;b.项目目标的不确定性-干系人的利益冲突导致项目目标的飘忽不定;c.项目范围的易变性 -也就是软件需求的易变性,有诸多成因;d.项目质量的不可控性-也就是软件质量的不可控性;e.项目人力资源的稀缺性- 每一个环节都需要一批专家;f.高风险性-经常发生意想不到的突发事件。1.3 软件项目管理软件项目管理是为了使软件项目能够按照预定的成本、进度、质量顺利完成,而对人员(People) 、产品(Product) 、过程( Process)和项目(Project)进行分析和管理的活动。软件项目管理的根本目的是为了让软件项目尤其是大型项目的整个软件生命周期
9、(从分析、设计、编码到测试、维护全过程)都能在管理者的控制之下,以预定成本按期,按质的完成软件交付用户使用。而研究软件项目管理为了从已有的成功或失败的案例中总结出能够指导今后开发的通用原则,方法,同时避免前人的失误。 软件项目管理的提出是在 20 世纪 70 年代中期的美国,当时美国国防部专门研究了软件开发不能按时提交,预算超支和质量达不到用户要求的原因,结果发现 70%的项目是因为管理不善引起的,而非技术原因。于是软件开发者开始逐渐重视起软件开发中的各项管理。到了 20 世纪 90 年代中期,软件研发项目管理不善的问题仍然存在。据美国软件工程实施现状的调查,软件研发的情4况仍然很难预测,大约
10、只有 10%的项目能够在预定的费用和进度下交付。 1995 年,据统计,美国共取消了 810 亿美元的商业软件项目,其中 31%的项目未做完就被取消,53%的软件项目进度通常要延长 50%的时间,只有 9%的软件项目能够及时交付并且费用也控制在预算之内。 软件项目管理和其他的项目管理相比有相当的特殊性。首先,软件是纯知识产品,其开发进度和质量很难估计和度量,生产效率也难以预测和保证。其次,软件系统的复杂性也导致了开发过程中各种风险的难以预见和控制。Windows 这样的操作系统有 1500 万行以上的代码,同时有数千个程序员在进行开发,项目经理都有上百个。这样庞大的系统如果没有很好的管理,其软
11、件质量是难以想象的。 软件项目管理的内容主要包括如下几个方面:人员的组织与管理,软件度量,软件项目计划,风险管理,软件质量保证,软件过程能力评估,软件配置管理等。 这几个方面都是贯穿、交织于整个软件开发过程中的,其中人员的组织与管理把注意力集中在项目组人员的构成、优化;软件度量把关注用量化的方法评测软件开发中的费用、生产率、进度和产品质量等要素是否符合期望值,包括过程度量和产品度量两个方面;软件项目计划主要包括工作量、成本、开发时间的估计,并根据估计值制定和调整项目组的工作;风险管理预测未来可能出现的各种危害到软件产品质量的潜在因素并由此采取措施进行预防;质量保证是保证产品和服务充分满足消费者
12、要求的质量而进行的有计划,有组织的活动;软件过程能力评估是对软件开发能力的高低进行衡量;软件配置管理针对开发过程中人员、工具的配置、使用提出管理策略。从软件工程的角度讲,软件开发主要分为六个阶段:需求分析阶 段、概要设计阶段、详细设计阶段、编码阶段、测试阶段、安装及维护阶段。不论是作坊式开发,还是团队协作开发,这六个阶段都是不可缺少的。根据公司实际情 况,公司在进行软件项目管理时,重点将软件配置管理、项目跟踪和控制管理、软件风险管理及项目策划活动管理四方面内容导入软件开发的整个阶段。在 20世纪 80 年代初,著名软件工程专家 B.W.Boehm 总结出了软件开发时需遵循的七条基本原则,同样,
13、在进行软件项目管理时,也应该遵循这七条原则。它们是:(1)用分阶段的生命周期计划严格管理;(2)坚持进行阶段评审;(3)实行严格的产品控制;(4)采用现代程序设计技术;5(5)结果应能够清楚地审查;(6)开发小组地人员应该少而精;(7)承认不断改进软件工程实践的必要性。软件项目需求管理:需求是指人们对于某种事务的需要,体现为意向、愿望和兴趣,是促成行动的直接原因。有显性的,也有隐性的。显性需求来源于用户的“客观需要” ,这些“需要”被分析、确认后形成完整的文档,详细说明项目“必须或应当”做什么。隐性需求来源于客户的“主观需要” ,无法被量化,但必须被重视。软件需求工程的主要困难与对策:相当多的
14、开发人员习惯于被动地对待需求开发。每当遇到麻烦、挫折时,他们会发牢骚,找出一堆用户的毛病。很多开发人员错误地以为:需求是用户的事情,不是我们的事情。我们为用户开发软件,难道用户不该告诉我们应当开发什么吗?如果用户说不清楚需求,或者经常变更需求,这类问题是用户产生的,应当由他们自己负责。用户说不清楚需求或者需求发生变更,这些都是常见的问题,并不是绝症,是可以设法解决的。可悲的是开发人员把这些问题当成了借口,不愿主动攻克问题,导致需求问题扩散到整个软件开发过程,产生太多的后患。软件企业的领导应当给具有错误观念的开发人员们洗脑:需求分析员的天职就是在有限的时间内获取准确而细致的用户需求,如果做不到就
15、是失职,不要找借口。 1.4 人员组织与管理软件开发中的开发人员是最大的资源。对人员的配置、调度安排贯穿整个软件过程,人员的组织管理是否得当,是影响对软件项目质量的决定性因素。 首先在软件开发的一开始,要合理的配置人员,根据项目的工作量、所需要的专业技能,再参考各个人员的能力、性格、经验,组织一个高效、和谐的开发小组。一般来说,一个开发小组人数在 5 到 10 人之间最为合适,如果项目规模很大,可以采取层级式结构,配置若干个这样的开发小组。 在选择人员的问题上,要结合实际情况来决定是否选入一个开发组员。并不是一群高水平的程序员在一起就一定可以组成一个成功的小组。作为考察标准,技术水平、与本项目
16、相关的技能和开发经验、以及团队工作能力都是很重要的因素。一个一天能写一万行代码但却不能与同事沟通融洽的程序员,未必适合一个对组员之间通讯要求很高的项目。还应该考虑分工的需要,合理配置各个专项的人员比例。例如一个网站开发项目,小组中有页面美工、后台服务程序、数据库几个部分,应该合理的组织各项工作的人员配比。对于一个中型6农技 110 网站,对数据采集量要求较高,一个人员配比方案可以是 2 个美工、2 个后台服务程序编写、3 个数据采集整理人员。 可以用如下公式来对候选人员能力进行评分,达到一定分数的则可以考虑进入开发组,但这个公式不包含对人员数量配比的考虑。Score=WiCi(i=1to8)
17、Ci 是对项目组人员各项能力的评估。其值含义如下 在决定一个开发组的开发人员数量时,除了考虑候选人素质以外,还要综合考虑项目规模、工期、预算、开发环境等因素的影响,下面是一个基于规模、工期和开发环境的人员数量计算公式: L=Ck*K1/3*td4/3 L:开发规模,以代码行 LOC 为度量 td:开发时间 K:人员数 Ck :技术常数表示开发环境的优劣 取值 2000:表示开发环境差,没有系统的开发方法,缺乏文档规范化设计;取值 8000:表示开发环境较好; 取值 11000:表示开发环境优。 在组建开发组时,还应充分估计到开发过程中的人员风险。由于工作环境、待遇、工作强度、公司的整体工作安排
18、和其他无法预知的因素,一个项目尤其是开发周期较长的项目几乎无可避免的要面临人员的流入流出。如果不在项目初期对可能出现的人员风险进行充分的估计,作必要的准备,一旦风险转化为现实,将有可能给整个项目开发造成巨大的损失。以较低的代价进行及早的预防是降低这种人员风险的基本策略。具体来说可以从以下几个方面对人员风险进行控制: a保证开发组中全职人员的比例,且项目核心部分的工作应该尽量由全职人员来担任, 以减少兼职人员对项目组人员不稳定性的影响。 b建立良好的文档管理机制,包扩项目组进度文档、个人进度文档、版本控制文档、整体技术文档、个人技术文档、源代码管理等。一旦出现人员的变动,比如某个组员因病退出,替
19、补的组员能够根据完整的文档尽早接手工作。 c加强项目组内技术交流,比如定期开技术交流会,或根据组内分工建立项目组内部的开发小组,是开发小组内的成员能够相互熟悉对方的工作和进度,能够在必要的时候替对方工作。 d对于项目经理,可以从一开始就指派一个副经理在项目中协同项目经理管理项目开发工作,如果项目经理退出开发组,副经理可以很快接手。但是只建议在项目经理这样的高度重要的岗位采用这种冗余复制的策略来预防人员风险,否则将大大增加项目成本。 e为项目开发提供尽可能好的开发环境,包括工作环境、待遇、工作进度安排等等,同 时一个优秀的项目经理应该能够在项目组内营造一种良好的人际关系和工作氛围。良好的开发环境
20、对于稳定项目组人员以及提高生产效率都有不可忽视的作用。72、软件项目管理的个性问题2.1 软件项目管理的特点软件项目管理要解决的问题,涉及到系统工程学、统计学、心理学、社会学、经济学,乃至法律等方面的问题。需要用到多方面的综合知识,特别是要涉及到社会的因素、精神的因素、人的因素,比技术问题复杂得多。仅靠技术、工程或科研项目的效率、质量、成本和进度等问题很难得到较好的解决。必须结合工作条件、人员和社会环境等多种因素。因此,简单地照搬国外的管理技术往往不一定奏效。此外,管理技术的基础是实践,为取得管理技术的成果必须反复实践。很显然,管理能够带来效率,能够赢得时间,最终将在技术前进的道路上取得领先地
21、位。在知识爆炸、高技术迅速发展的今天,必须在战略级上对待技术管理问题。 (1)软件项目的特点软件产品与其他任何产业的产品不同,它是无形的,完全没有物理属性。对于这样看不见,摸不着的产品,难以理解,难于架驭。但它确实是把思想、概念、算法、流程、组织、效率、优化等融合在一起了。因此,要开发这样的产品,在许多情况下,用户一开始给不出明确的想法,提不出确切的要求。他说不清究竟他需要的是什么。在开发的过程中,程序与其相关的文档常常需要修改。在修改的过程中又可能产生新的问题,并且这些问题很可能在过了相当长的时间以后才会发现。文档编制的工作量在整个项目研制过程中占有很大的比重。但从实践中看出,人们对它不感兴
22、趣、认为是不得不做的苦差事,不愿认真地去做。因而直接影响了软件的质量。软件开发工作技术性很强,要求参加工作的人员具有一定的技术水平和实际工作的经验。但事实上,人员的流动对工作的影响很大。离去的人员不但带走了重要的信息,还带走了工作经验。(2)软件项目管理的困难1) 智力密集,可见性差:软件工程过程充满了大量高强度的脑力劳动。软件开发的成果是不可见的逻辑实体,软件产品的质量难以用简单的尺度加以度量。对于不深入掌握软件知识或缺乏软件开发实践经验的人员,是不可能领导做好软件管理工作的。软件开发任务完成得好也看不见,完成得不好有时也能制造假象,欺骗外行的领导。2) 单件生产:在特定机型上,利用特定硬件
23、配置,由特定的系统软件或支撑软件的支持,形成了特定的开发环境。再加上软件项目特定的目标,采用特定的开发方法、工具和语言,使得软件具有独一无二的特色,几乎找不到与之完全相同的软件产品。这种建立在内容、形式各异的基础上的研制或生产方式,与其他领域中大规模现代化生产有着很大的差别,也自然会给管理工作造成许多实际困难。3) 劳动密集,自动化程度低:软件项目经历的各个阶段都渗透 J,大量的手工劳动,这些劳动十分细致、复杂和容易出错。尽管近年来开展了软件工具和cAsE 的研究,但总体来说,仍远未达到自动化的程度。软件产业所处的这一状态,加上软件的复杂性,使得软件的开发和维护难以避免出错,软件的正确性难于保
24、证,软件产品质量的提高自然受到了很大的影响。84) 使用方法繁琐,维护困难:用户使用软件需要掌握计算机的基本知识,或者接受专门的培训,否则面对多种使用手册、说明和繁琐的操作步骤,学会使用要花费很大力气。另一方面,如果遇到软件运行出了问题,且没有配备专职维护人员,又得不到开发部门及时的售后服务,软件的使用者更是徒唤奈何。5) 软件工作渗透了人的因素:为高质量地完成软件项目,充分发掘人员的智力才能和创造精神,不仅要求软件人员具有一定的技术水平和工作经验,而且还要求他们具有良好的心理素质。软件人员的情绪和他们的工作环境,对他们工作有很大的影响。与其他行业相比,它的这一特点十分突出,必须给予足够的重视
25、。(3)造成软件失误的原因在总结和分析足够数量失误的软件项目之后,看出其原因大多与管理工作有关。在软件项目开始执行时,遇到的问题往往是可供利用的资料太少、项目负责人的责任不明确、项目的定义模糊、没有计划或计划过分粗糙、资源要求未按时作出安排而落空、没有明确规定子项目完成的标准、缺乏使用工具的知识、项目已有更动,但预算未随之改变。在软件项目执行的过程中可能会发生的问题是项目审查只注意琐事而走过场、人员变动造成对工作的干扰、项目进行情况未能定期汇报、对阶段评审和评审中发现的问题如何处置未作出明确规定、资源要求并不像原来预计的那样大、未能做到严格遵循需求说明书、项目管理人员不足。项目进行到最后阶段可
26、能会发生的问题是未做质量评价、取得的知识和经验很少交流、未对人员工作情况做出评定、未做严格的移交、扩充性建议未写入文档资料。总之,问题涉及到软件项目研制中的计划制定、进度估计、资源使用、人员配备、组织机构和管理方法等软件管理的许多侧面。(4)软件管理的主要职能软件管理的主要职能包括:1) 制定计划:规定待完成的任务、要求、资源、人力和进度等。2) 建立组织:为实施计划,保证任务的完成,需要建立分工明确的责任制机构。3) 配备人员:任用各种层次的技术人员和管理人员。4) 指导:鼓励和动员软件人员完成所分配的工作。5) 检验:对照计划或标准,监督和检查实施的情况。2.2 与其他项目管理的区别软件项目管理和其他的项目管理相比有相当的特殊性。首先,软件是纯知识产品,其开发进度和质量很难估计和度量,生产效率也难以预测和保证。其次,软件系统的复杂性也导致了开发过程中各种风险的难以预见和控制。Windows 这样的操作系统有 1500 万行以上的代码,同时有数千个程序员在进行开发,项目经理都有上百个。这样庞大的系统如果没有很好的管理,其软件质量是难以想象的。再次,软件项目管理最主要的是对人员的管理,尤其是相关