需求管理对软件项目能否最终实现产生至关重要的影响。任何的软件项目都必须进行合理的、细致的、一致的需求管理,只有这样才能制定正确合理的软件开发计划,软件项目才能顺利地开发完成。
2、沟通与协作
软件项目管理中的沟通与协作是指信息的交流,是使信息发挥积极作用和达到目标的手段;协作是指和谐地在一起工作的活动。沟通技术可分分四类:(1)正式书面沟通,包括项目文档和备忘录、项目里程碑和交货时间表、需求变更和错误跟踪规程、数据字典、系统分析模型(用例图等);(2)正式口头沟通,包括状态审查会、需求评审会、设计评审会、代码评审会、用户测试,项目定期例会等;(3)非正式口头沟通,包括小组碰头会、同行讨论、与直属业务领导讨论等;(4)电子沟通,包括电子邮件、内部BBS等。协作技术包括资源合理配置、开发步骤有序化、工作目标一致化、提高关心程度、信息共享等。
3、风险管理
软件项目风险管理是指对在软件开发过程中所遇到的预算和进度等方面的问题进行分析,寻求风险应对方法,做好风险管理计划。
针对软件项目中的风险管理问题,不少专家、组织提出了自己的风险管理模型。常见的主要风险管理模型如下。
1.SEI的连续风险管理模型(CRM)。SEICRM模型的风险管理原则是不断地评估可能造成恶劣后果的因素;决定最迫切需要处理的风险;实现控制风险的策略;评测并确保风险策略实施的有效性。CRM模型要求在项目生命期的所有阶段都关注风险识别和管理,它将风险管理划分为五个步骤:风险识别、分析、计划、跟踪、控制。
2.BarryBoehm模型。Boehm模型的思想核心是:10大风险因素列表。针对每个风险因素,都给出了一系列的风险管理策略。在实际操作时,Boehm以10大风险列表为依据,总结当前项目具体的风险因素,评估后进行计划和实施,在下一次定期召开的会议上再对这10大风险因素的解决情况进行总结,产生新的10大风险因素表,依此类推。Boehm模型的基本形式可描述为:RE=P(UO)3L(UO),其中RE表示风险或者风险所造成的影响;P(UO)表示令人不满意的结果所发生的概率;L(UO)表示糟糕的结果会产生的破坏性的程度。
3.软件工程风险模型(SERIM).SERIM模型要求从技术和商业两个角度对软件风险管理进行剖析,考虑的问题涉及开销、进度、技术性能等。它还提供了一些指标和模型来估量和预测风险,由于这些数据来源于大量的实际经验,因此具有很强的说服力。
五、软件项目管理技术
1.CMM。CMM是美国卡纳基梅隆大学软件工程研究所(CMU/SEI)提出的软件研发项目管理的一系列方法,它基于组织对关键过程域的支持,定义了软件过程成熟度的五个级别。级别1(初始级)描述了不成熟,或者说是未定义过程的组织。级别2(可重复级),级别3(已定义级),级别4(已管理级)和级别5(优化级)分别描述了软件过程成熟度级别递增的组织。和这些级别相关的KPA是:级别2:需求管理,软件项目计划,软件项目跟踪和监控,软件子合同管理,软件质量保证,软件配置管理。级别3:组织级过程焦点,组织级过程定义,培训大纲,集成软件管理,软件产品工程,组间协调,同行评审。级别4:定量过程管理,软件质量管理。级别5:缺陷预防,技术更新管理,过程更改管理。
2.CMMI。CMMI被看作是把各种CMM集成为一个系列的模型中。CMMI的基础源模型包括:软件CMM2.0版(草稿C),EIA-731系统工程,以及IPDCMM(IPD)0.98a版。CMMI也描述了5个不同的成熟度级别:级别1(初始级)代表了以不可预测结果为特征的过程成熟度。过程包括了一些特别的方法、符号、工作和反应管理,成功主要取决于团队的技能。级别2(已管理级)代表了以可重复项目执行为特征的过程成熟度。组织使用基本纪律进行需求管理、项目计划、项目监督和控制、供应商协议管理、产品和过程质量保证、配置管理、以及度量和分析。
3.PSP。PSP(PersonalSoftwareProcess,个体软件过程)是由CMU/SEI开发出来的,它的推出在软件工程界引起了极大的轰动,可以说是由定向软件工程走向定量软件工程的一个标志。PSP为基于个体和小型群组软件过程的优化提供了具体而有效的途径,例如如何制订计划,如何控制质量,如何与其他人相互协作等等。在软件设计阶段,PSP的着眼点在于软件缺陷的预防,其具体办法是强化设计约束准则,而不是设计方法的选择。因此,PSP保障软件产品质量的一个重要途径是提高设计质量。
4、小结
本文分析研究了软件项目管理中的需求管理、员工之间的沟通与协作、软件项目风险管理。最后结合实践,提出并分析了软件项目管理技术。我们相信随着软件工程的发展和进一步成熟,软件项目管理技术的发展会取得更大的进步。在实际项目中,我们要坚持改善软件工程的管理,并在实践中总结适合自身的经验,这样才有利于管理技术的进步和软件项目的顺利完成,创造出更高的品质、更大的效益。
参考文献:
[1]PhpMetzger,JohnBoddie.软件项目管理-过程控制与人员管理[M].北京:电子工业出版社,2002.
[2]RajeevTShandilya.王克仁译.软件项目管理[M].北京:科学技术出版社,2002.
[3]杨根兴,金荣得,宗宇伟.软件需求的不确定性与解决途径.计算机应用与软件.
目前,风险管理被认为是IT软件项目中减少失败的一种重要手段。当不能很确定地预测将来事情的时候,可以采用结构化风险管理来发现计划中的缺陷,并且采取行动来减少潜在问题发生的可能性和影响。风险管理意味着危机还没有发生之前就对它进行处理。这就提高了项目成功的机会和减少了不可避免风险所产生的后果。
2什么是风险
所谓“风险”,归纳起来主要有两种意见,主观说认为,风险是损失的不确定性;客观学认为,风险是给定情况下一定时期可能发生的各种结果间的差异。它的两个基本特征是不确定性和损失。IT行业中的软件项目开发是一项可能损失的活动,不管开发过程如何进行都有可能超出预算或时间延迟。项目开发的方式很少能保证开发工作一定成功,都要冒一定的风险,也就需要进行项目风险分析。在进行项目风险分析时,重要的是要量化不确定的程度和每个风险相当的损失程度,为实现这一点就必须要考虑以下问题:
要考虑未来,什么样的风险会导致软件项目失败?
要考虑变化,在用户需求、开发技术、目标、机制及其它与项目有关的因素的改变将会对按时交付和系统成功产生什么影响?
必须解决选择问题,应采用什么方法和工具,应配备多少人力,在质量上强调到什么程度才满足要求?
要考虑风险类型,是属于项目风险、技术风险、商业风险、管理风险还是预算风险等?
这些潜在的问题可能会对软件项目的计划、成本、技术、产品的质量及团队的士气都有负面的影响。风险管理就是在这些潜在的问题对项目造成破坏之前识别、处理和排除。
3风险管理
项目风险管理实际上就是贯穿在项目开发过程中的一系列管理步骤,其中包括风险识别、风险估计、风险管理策略、风险解决和风险监控。它能让风险管理者主动“攻击”风险,进行有效的风险管理。
在项目管理中,建立风险管理策略和在项目的生命周期中不断控制风险是非常重要的,风险管理包括四个相关阶段:
风险识别识别风险的方法常用的有风险识别问询法(座谈法、专家法)、财务报表法、流程图法、现场观察法、相关部门配合法和环境分析法等。
风险评估对已识别的风险要进行估计和评价,风险估计的主要任务是确定风险发生的概率与后果,风险评价则是确定该风险的经济意义及处理的费/效分析,常用的方法有:概率分布、外推法、多目标分析法等。
风险处理一般而言,风险处理有三种方法,①风险控制法,即主动采取措施避免风险,消灭风险,中和风险或采用紧急方案降低风险。②风险自留,当风险量不大时可以余留风险。③风险转移。
风险监控包括对风险发生的监督和对风险管理的监督,前者是对已识别的风险源进行监视和控制,后者是在项目实施过程中监督人们认真执行风险管理的组织和技术措施。
在IT软件项目管理中,应该任命一名风险管理者,该管理者的主要职责是在制订与评估规划时,从风险管理的角度对项目规划或计划进行审核并发表意见,不断寻找可能出现的任何意外情况,试着指出各个风险的管理策略及常用的管理方法,以随时处理出现的风险,风险管理者最好是由项目主管以外的人担任。
险识别
风险识别就是企图采用系统化的方法,识别某特定项目已知的和可预测的风险。常用方法是建立“风险条目检查表”,利用一组提问来帮助项目风险管理者了解在项目和技术方面有些风险。在“风险条目检查表”中,列出了所有可能的与每一个风险因素有关的提问,使得风险管理者集中来识别常见的、已知的和可预测的风险,如产品规模风险、依赖性风险、需求风险、管理风险及技术风险等。“风险条目检查表”可以以不同的方式组织,通过判定分析或假设分析,给出这些提问确定的回答,就可以帮助管理或计划人员估算风险的影响。软件项目一般有如下五类风险:
4.1产品规模风险
有经验的项目经理都知道:项目的风险是直接与产品的规模成正比的。与软件规模相关的常见风险因素有:
估算产品的规模的方法(LOC或代码行,FP或功能点,程序或文件的数目)。
产品规模估算的信任度
产品规模与以前产品规模平均值的偏差
产品的用户数
复用的软件有多少
产品的需求改变多少
4.2需求风险
很多项目在确定需求时都面临着一些不确定性和混乱。当在项目早期容忍了这些不确定性,并且在项目进展过程当中得不到解决,这些问题就会对项目的成功造成很大威胁。如果不控制与需求相关的风险因素,那么就很有可能产生错误的产品或者拙劣地建造正确的产品。每一种情况都会导致使人不愉快。
与客户相关的风险因素有:
对产品缺少清晰的认识
对产品需求缺少认同
在做需求中客户参与不够
没有优先需求
由于不确定的需要导致新的市场
不断变化需求
缺少有效的需求变化管理过程
对需求的变化缺少相关分析
4.3相关性风险
许多风险都是因为项目的外部环境或因素的相关性产生的。经常我们不能很好地控制外部的相关性,因此缓解策略应该包括可能性计划,以便从第二资源或协同工作资源中取得必要的组成部分,并且觉察潜在的问题。与外部环境相关的因素有:
客户供应条目或信息
内部或外部转包商的关系
交互成员或交互团体依赖性
经验丰富人员的可得性
项目的复用性
4.4管理风险
尽管管理问题制约了很多项目的成功,但是不要因为风险管理计划中没有包括所有管理活动而感到惊奇。在大部分项目里,项目经理经常是写项目风险管理计划的人,并且大部分人都不希望在公共场合暴露自己的弱点。然而,像这些问题可能会使项目的成功变得更加困难。如果不正视这些棘手的问题,它们就很有可能在项目进行的某个阶段影响项目。当我们定义了项目追踪过程并且明晰项目角色和责任,就能处理这些风险因素:
计划和任务定义不够充分
实际项目状态
项目所有者和决策者分不清
不切实际的承诺
员工之间的冲突
4.5技术风险
软件技术的飞速发展和经历丰富员工的缺乏,意味着项目团队可能会因为技巧的原因影响项目的成功。在早期,识别风险从而采取合适的预防措施是解决风险领域问题的关键,比如:培训、雇佣顾问以及为项目团队招聘合适的人才等。主要有下面这些风险因素:
缺乏培训
对方法、工具和技术理解的不够
应用领域的经验不够
新的技术和开发方法
不能正确工作的方法
5风险估计
风险估计,又称风险预测,常采用两种方法估价每种风险。一种是估计风险发生的可能性或概率,另一种是估计如果风险发生时所产生的后果。一般来讲,风险管理者要与项目计划人员、技术人员及其他管理人员一起执行四种风险活动:
(1)建立一个标准(尺度),以反映风险发生的可能性。
(2)描述风险的后果。
(3)估计风险对项目和产品的影响。
(4)确定风险的精确度,以免产生误解。
另外,要对每个风险的表现、范围、时间做出尽量准确的判断。对不同类型的风险采取不同的分析办法。
1.确定型风险估计
(a)盈亏平衡分析
盈亏平衡分析(Break-EvenAnalysis)通常又称为量本利分析或损益平衡分析。它是根据软件项目在正常生产年份的产品产量或销售量、成本费用、产品销售单价和销售税金等数据,计算和分析产量、成本和盈利这三者之间的关系,从中找出它们的规律,并确定项目成本和收益相等时的盈亏平衡点的一种分析方法。在盈亏平衡点上,软件项目既无盈利,也无亏损。通过盈亏平衡分析可以看出软件项目对市场需求变化的适应能力。
(b)敏感性分析
敏感性分析(SensitivityAnalysis)的目的,是考察与软件项目有关的一个或多个主要因素发生变化时对该项目投资价值指标的影响程度。通过敏感性分析,使我们可以了解和掌握在软件项目经济分析中由于某些参数估算的错误或是使用的数据不太可靠而可能造成的对投资价值指标的影响程度,有助于我们确定在项目投资决策过程中需要重点调查研究和分析测算的因素。
(c)概率分析
它是运用概率论及数理统计方法,来预测和研究各种不确定因素对软件项目投资价值指标影响的一种定量分析。通过概率分析可以对项目的风险情况做出比较准确的判断。主要包括解析法和模拟法(蒙特卡罗MonteCarlo技术)两种。
2.不确定型风险估计
主要有小中取大原则、大中取小原则、遗憾原则、最大数学期望原则、最大可能原则。
3.随机型风险估计
主要有最大可能原则、最大数学期望原则、最大效用数学期望原则、贝叶斯后验概率法等。
5.1建立风险清单
风险清单是关键的风险预测管理工具,清单上列出了在任何时候碰到的风险名称、类别、概率及该风险所产生的影响。其中整体影响值可对四个风险因素(性能、支持、成本及进度)的影响类别求平均值(有时也采用加权平均值)。
一旦完成了风险表的内容,就可以根据概率及影响来进行综合考虑,风险影响和出现概率从风险管理的角度来看,它们各自起着不同的作用(见图1)。一个具有高影响但低概率的风险因素不应当占用太多的风险管理时间,而具有中到高概率、高影响的风险和具有高概率及低影响的风险,就应该进行风险分析。
5.2风险评估
在风险分析过程中,我们对风险进行评估时可以建立一个如下的四元数组:
[ri,li,xi,yi]
其中,ri是风险,li为风险出现的概率,xi则表示风险损失大小,yi则表示期望风险。
一种对风险评估的常用技术是定义风险的参照水准,对绝大多数软件项目来讲,风险因素——成本、性能、支持和进度就是典型的风险参照系。也就是说对成本超支、性能下降、支持困难、进度延迟都有一个导致项目终止的水平值。如果风险的组合所产生的问题超出了一个或多个参照水平值时,就终止该项目的工作,在项目分析中,风险水平参考值是由一系列的点构成的,每一个单独的点常称为参照点或临界点。如果某风险落在临界点上,可以利用性能分析、成本分析、质量分析等来判断该项目是否继续工作。图2表示了这种情况。
但在实际工作中,参照点很少能构成一条光滑的曲线,大多数情况下,它是一个区域,而且是个易变的区域。因而在做风险评估时,尽量按以下步骤执行:
(1)定义项目的水平参照值
(2)找出每组[ri,li,xi,yi]与每个水平参照值间的关系
(3)估计一组临界点以定义项目的终止区域
(4)估计风险组合将如何影响风险水平参照值
5.3估计损失的大小
表1是风险分析表的一个例子,可以建立一个用风险、损失概率、损失大小和期望风险这样的风险评估表。
在表1所示的风险估价的例子中,一个理论项目已经识别了从1到20周期间的潜在的几个风险,风险发生的概率范围在5%到50%之间。在现实的项目中,可能会识别出比此表要多得多的风险。
损失的大小常常比概率更容易受到控制。在以上的例子中,可以很精确地估计出完全支持自动从主机更新数据的时间是20个月。根据管理层将在何时讨论项目建议书,可以知道项目不是在2月1日就是3月1日会被批准。如果假定会在2月1日批准,项目被批准的风险大小会比期望的长一些,也就是1个月时间。
如果损失的大小不容易直接估计出来,可以将损失分解为更小的部分,再对其进行评估,然后将各部分评估结果累加,形成一个合计评估值。例如,如果使用3种新编程工具,可以单独评估每种工具未达到预期效果的损失,然后再把损失加到一起,这要比总体评估容易多了。
5.4评估损失的概率
评估损失的概率要比评估损失大小更具有主观性。这里有许多实践方法可以提高主观评估的准确度。有以下方法:
由最熟悉系统的人评估每个风险的发生概率,然后保留一份风险评估审核文件。
使用Delphi法或少数服从多数的方法。使用Delphi法,必须要求每个人对每个风险进行独立地评估,然后讨论(口头或纸上)每个评估的合理性,特别是最高和最低的那个。一轮轮讨论,直到达成共识。?使用“形容词标准”。首先让每个人用表示可能性的形容词短语选择风险的级别,如非常可能、很可能、可能、或许、不太可能、不可能、和根本不可能。然后把可能性的评估转换为数量化的评估(Boehm1989)。
5.5整个项目超限和缓冲
实际上,表1中表示的期望风险的计算数值来源于一个被称为“期望值”的统计术语。设计欠佳引起的风险如果真正发生将花费15周的时间。既然它不是100%地会发生,当然不能预计损失15周时间。但它也不是没有可能发生,所以也不应指望不会发生损失。统计学认为,预计损失的数量是概率乘以损失大小,即15%乘以15周。因此,在这个例子中,预计的是损失2.25周。由于只是谈论计划风险,可以累加所有的风险暴露量来得到项目的全部可预料超标值。这个项目可预料的超标值是12.8到13.2周,这就是如果不做任何风险管理的话有可能超过计划的周数。
超出预期值的大小为整个项目风险控制级别的确定提供了依据。如果例子中的项目是个25周的项目,超出预期值的12.8到13.2周就很明显需要进行风险管理了。
6风险管理策略
风险管理策略就是辅助项目组建立处理项目风险的策略。项目开发是一个高风险的活动,如果项目采取积极的风险管理策略,就可以避免或降低许多风险,反之,就有可能使项目处于瘫痪状态。一般来讲,一个较好的风险管理策略应满足以下要求:
(1)在项目开发中规划风险管理,尽量避免风险
(2)指定风险管理者,监控风险因素
(3)建立风险清单及风险管理计划
(4)建立风险反馈渠道
7风险驾驭和监控
风险的驾驭与监控主要靠管理者的经验来实施,它是利用项目管理方法及其它某些技术,如原型法、软件心理学、可靠性等来设法避免或转移风险。风险的驾驭和监控活动可用图3来表示。
7.1建立风险驾驭与监控计划
从图3中可以看出,风险的驾驭与监控活动要写入RMMP(RiskMonitoringandManagementPlan风险驾驭与监控计划)。RMMP记述了风险分析的全部工作,并且作为整个项目计划的一部分为项目管理人员所使用。
风险管理策略可以包含在软件项目计划中,也可以组织成一个独立的风险缓解、监控和管理计划(RMMP计划)。RMMP计划将所有风险分析工作文档化,并由项目管理者作为整个项目计划中的一部分来使用。一旦建立了RMMP计划,且项目开始启动,则风险缓解及驾驭及监控步骤也开始了。正如前面讨论的,风险缓解是一种问题避免活动。风险驾驭及监控则是一种项目跟踪活动,它有三个主要目标:?判断一个预测的风险是否事实、是否发生。
进行风险再估计,确保针对某个风险而制定的风险消除活动正在使用。
收集可用于将来进行风险分析的信息。
风险驾驭及监控的策略如下:
与在职人员协商,确定人员流动原因。
在项目开始前,把缓解这些流动原因的工作列入风险驾驭计划。
项目开始时,要作好人员流动的思想准备,并采取一些措施确保人员一旦离开时,项目仍能继续。
制定文档标准,并建立一种机制,保证文档及时产生。
对所有工作进行细微详审,使更多人能够按计划进度完成自己的工作。
对每个关键性技术人员培养后备人员。
在考虑风险成本之后,决定是否采用上述策略。
7.2软件项目风险追踪工具
的,以项目经理个人负责制为基础和以项目为独立实体进行经济核算,并按照项目内在的逻辑规律进行有效的计划、组织、协调、控制的系统管理活动。
2、为什么要有项目管理?
没有项目管理,项目也有可能成功。但没有管理的项目,很难保证项目
的利润空间,对公司来说,亏损的风险就大。所以我们要有项目管理,以保证公司在总体上是盈利的,注意不是每一个项目都要盈利。
另外,有了项目管理,就有了管理改进的基础,无论刚开始的项目管理多么糟糕,只要有管理,就有了改进的可能性,至于能不能得到改提供进,以及改进的快慢,则取决于两个因素:一个是人,特别是各级管理者;另一个是利益。关键是“利益”,准确的说是“利益的分配”,在权责利明确的前提下,人才能充分的发挥作用。还需要指出的是“利益”是多元的,这里的多元不仅指利益的具体形式,而且指利益的受众是多元的,包括客户方相关人员个人的利益。
3、项目管理的发展与现状。
今天,项目管理作为一种现代化管理方式在国际上已获得了广泛的应用,从最初的国防、航天、建设工程领域,迅速发展到电子、通信、计算机、软件开发、金融等行业以及政府机关的项目管理工作。随着计算机、网络系统的迅速发展,项目管理技术的不断进步,项目管理软件产品层出不穷,其功能、特点、应用对象也各不相同。当前,越来越多的企业和组织在内部推广项目管理的理论方法及管理模式,如果都采用项目管理软件进行管理,效果就更加明显,可以节省大量的资源和财富。国外90%以上的项目管理都采用软件进行,但我国在这方面的应用还不到10%。新世纪项目管理在中国的迅速兴起,给软件企业的发展带来了前所未有的发展机遇。
项目管理在软件开发中的应用的成因
随着信息技术的飞速发展,软件产品的规模也越来越庞大,个人单打独斗的作坊式开发方式已经越来越不适应发展的需要。各软件企业都在积极将软件项目管理引入开发活动中,对开发实行有效的管理。从概念上讲,软件项目管理是为了使软件项目能够按照预定的成本、进度、质量顺利完成,而对成本、人员、进度、质量、风险等进行分析和管理的活动。实际上,软件项目管理的意义不仅仅如此,进行软件项目管理有利于将开发人员的个人开发提供能力转化成企业的开发能力,企业的软件开发能力越高,表明这个企业的软件生产越趋向于成熟,企业越能够稳定发展(即减小开发风险)。同时,随着软件开发规模及开发队伍的逐渐增大,软件开发不再是向过去那样一二个开发人员即可解决的事情。迫切需要一种开发规范来规范每个开发人员、测试人员与支持人员的工作,每个项目组成员按约定的规则准时完成自己的工作。同时采用规范化管理,专业分工也可以降低对开发人员的要求,从而降低产品研发成本。
软件开发是一项复杂的系统工程,牵涉到各方面的因素,实际工作中,经常会出现各种各样的问题,甚至面临失败。如何总结、分析失败的原因,得出有益的教训,对一个公司来说,是在今后的项目中取得成功的关键。
早在20世纪60年代中期,人们就发现软件的生产出现了“问题”,主要表现在生产过程不规范,缺乏管理。后来,人们在软件工程方法学中引入了工程的概念、原理、技术和方法,这种思想在一定程度上解决了软件生产过程中遇到的问题。但是直至80年代还是没有提出一套管理软件开发的通用原则,软件管理不善的问题依旧在大范围内存在。
目前的软件开发正逐步趋向于复杂化、多元化,大多数开发团队中都会出现同时开发多个版本、开发/维护工作并存、多地点同时开发等情况,给软件开发管理带来了前所未有的困难。如果管理不善,必将造成版本混乱,提供
各个开发人员的工作相互交叉、干扰,整个开发团队的工作在一种无秩序的不良状况下运行,严重影响软件产品开发的进度和质量。
因此,随着软件开发的深入、各种技术的不断创新以及软件产业的形成,人们越来越意识到软件过程管理的重要性,管理学的思想逐渐融入软提供件开发过程中,应用开发的项目管理日益受到重视。而项目管理技术的发展与计算机技术的发展是密不可分的,随着计算机性能的迅速提高,大量的项目管理软件涌现出来。它们可以用于各种商业活动,提供便于操作的图形界面,帮助用户制定任务、管理资源、进行成本预算、跟踪项目进度等。
软件项目管理常见问题及解决方案
对于软件开发项目|中,经常出现两种极端情况,一种是创造了新的生产率和质量的纪录;一种则完全是一场灾难,不是被取消就是拖延很长时间。前者如在很短的时间内,为了赶进度,在几乎不可能的时间内开发出一套软件产品,创造了软件开发的记录,满足了上级所要求的上机日期,由于开发时间太短,过于仓促,上机时,问题百出,试运行时间长达几个月或一年半载的,而且程序一改再改,维护工作量大。
后者,如某套系统未弄清楚需求,或因设计问题,开发失败。通过提炼这些成功和失败的例子,软件项目成功或失败的根本原因可能会更清晰一些。
目前我国大部分软件公司,无论是产品型公司还是项目型公司,都没有形成适合自己公司特点的软件开发管理模式,虽然有些公司根据软件工程理论建立了一些软件开发管理规范,但并没有从根本上解决软件开发的质量控制问题。这样导致软件产品质量提供不稳定,软件后期的维护、升级出现麻烦,同时最终也会损害用户的利益。
分析目前项目管理需要改进的问题可以从几种相关角色的角度去考虑:项目经理、项目组成员、公司管理人员、市场人员、客户等。
问题一:缺乏项目管理系统培训(相关对象:项目经理、管理人员)
项目经理在项目管理方面的培训较少或不够系统。项目经理或管理人员不了解项目管理的知识体系和一些常用工具和方法,所以在实际工作中没有项目管理知识的指导,完全依靠个人现有的知识技能,管理工作的随意性、盲目性比较大。在软件企业中,以前几乎没有专门招收项目管理专业的人员来担任项目经理(甚至很少是管理专业的),被任命的项目经理主要是因为他们能够在技术上独当一面,而管理方面特别是项目管理方面的知识比较缺乏。
解决方案:项目经理接受系统的项目管理知识培训是非常必要的,有了专业领域的知识与实践,再加上项目管理知识与实践和一般管理的知识和经验的有机结合,必能大大提高项目经理的项目管理水平。应实行项目经理知识技能资格考核制度,让项目经理自觉补充学习项目管理的知识和一些常用工具和方法。
问题二:项目计划意识问题(相关对象:项目经理)
项目经理对总体计划、阶段计划的作用认识不足。项目经理认为计划不如变化快,项目中也有很多不确定的因素,做计划是走过场,因此制定总体计划时比较随意,不少事情没有仔细考虑;阶段计划因工作忙等理由经常拖延,造成计划与控制管理脱节,无法进行有效的进度控制管理。没有计划或者是随意的不负责任的计划的项目是一种无法控制的项目。
解决方案:在高技术行业,日新月异是主要特点,因此计划的制定需要在一定条件的限制和假设之下采用渐近明细的方式进行不断完善。提高项目经理的计划意识,采用项目计划制定相关各种知识、技术、工具,加强对开发计划、阶段计划的有效性进行事前事后的评估。
问题三、管理意识问题(相关对象:项目经理)
部分项目经理没有意识到自己项目经理的角色,从总体上去把握管理整个项目,而是埋头于具体的技术工作,造成项目组成员之间忙的忙、闲的闲,计划不周、任务不均、资源浪费。在软件企业中,项目经理大多是技术骨干,技术方面的知识比较深厚,但无论是项目管理知识,还是项目管理必备的技能、项目管理必备的素质都有待补充和提高,项目管理经验也有待丰富。有些项目经理对于一些不服管理的技术人员,没有较好的管理方法,工作不好安排的工作只好自己做。另外由于工作分解结构设计的合理性,项目任务无法有效、合理地分配给相关成员,以达到“负载均衡”。
解决方案:加强项目管理方面的培训,并通过对考核指标的合理设定和宣传引导项目经理更好地做好项目管理工作。技术骨干在担任项目经理之前提供,最好能经过系统的项目管理知识,特别是其中的人力资源管理、沟通管理的学习,并且在实际工作中不断提高自己的管理素质,丰富项目管理经验,提高项目管理意识。
问题四:沟通意识问题(相关人员:项目经理、项目组成员)
在项目中一些重要信息没有进行充分和有效的沟通。在制定计划、意见反馈、情况通报、技术问题或成果等方面与相关人员的沟通不足,造成各做各事、重复劳动,甚至造成不必要的损失;有些人没有每天定时收邮件的习惯,以至于无法及时接收最新的信息。
解决方案:制定有效的沟通制度和沟通机制,对由于缺乏沟通而造成的事件进行通报作为教训提醒,以提高沟通意识;沟通方式应根据内容而多样化,讲究有效率的沟通;通过制度规定对由于未及时收取邮件而造成损失的责任归属;对于特别重要的内容要采用多种方式进行有效沟通以确保传达到位,例如除发送邮件外还要电话提醒、回执等,重要的内容还要通过举行各种会议进行传达。
问题五:风险管理意识问题(相关人员:项目经理)
项目经理没有充分分析可能的风险,对付风险的策略考虑比较简单。项目经理在做项目规划时常常没有做专门的风险管理计划文档,而是合并在项目计划书中。有些项目经理没有充分意识到风险管理的重要性,对计划书中风险管理的章节简单应付了事,随便列出几个风险,随便地写一些简单的对策,对于后面的风险防范起不到什么指导作用。
解决方案:通过学习项目管理知识掌握风险识别、量化、对策研究、反应控制的工具和方法掌握项目风险管理所必备的知识。通过加强对项目规划本论文提供>由整理提供中风险管理计划的审核提高项目组的风险管理意识。总结本行业项目中常见的风险及其对策作为风险管理计划中必要的风险内容,并切实评估相应对策的有效性和可行性。
问题六:不重视项目经验的总结(相关人员:项目经理、管理人员)
项目经理在项目结束时有些是因为自身对写文档工作的兴趣或意识,或
者是因为紧接着要参加下一个项目,总体对项目总结的重视程度不够。有些是项目总结报告一再拖延,有些是交上来的报告质量较低,敷衍了事。
解决方案:在制度上鼓励和加强项目经验总结工作,使得项目总结及时并且具有指导意义而不是走过场。
问题七:项目干系人相关问题(相关人员:项目经理、项目成员、客户)
在范围识别阶段,项目组对客户的整体组织结构、有关人员及其关系、
工作职责等没有足够了解以致于无法得到完整需求或最终经权威用户代表确认的需求。由于项目经理的工作问题,客户参与程度部不高,客户方相关责任人不明确或对范围和要求责任心不强,提出的要求具有随意性,项目前期对需求的确认不够积极;或者是多个用户代表各说各话、昨是今非但同时又要求项目尽早交付;项目后期需求变化随意,造成项目范围的蔓延,进度的拖延,成本的扩大。
解决方案:项目的目的就是实现项目干系人的需求和愿望。项目干系人管理应当从项目的启动开始,项目经理及其项目成员就要分清项目干系人包含哪些人和组织,通过沟通协调对他们施加影响,驱动他们对项目的支持,调查并明确他们的需求和愿望,减小其对项目的阻力,以确保项目获得成功。
问题八:项目团队内分工协作问题(相关人员:项目经理、项目成员)
项目团队内部有时由于各阶段不同角色或同阶段不同角色之间的责任
分工不够清晰而造成工作互相推诿、责任互相推卸的现象,有时各阶段不同角色或同阶段不同角色之间的责任分工比较清晰但是各项目成员只顾完成自己那部分任务、不愿意与他人协作。这些现象或多或少地造成了项目团队内部资源的损耗,从而影响了项目的进展。
解决方案:项目经理应当对项目成员的责任进行合理的分配并清楚地说明,同时应强调不同分工、不同环节的成员应当相互协作,共同完善。
以上对软件开发项目管理中出现的问题的分析还不够深入,也无法列举所有遇到或将遇到的问题,解决方案也要根据实际情况进行调整,希望引起对这些问题更多的思考和改进。
结束语:项目管理虽然没有非常高深的理论,但要真正实施起来,也绝非易事。对于软件开发企业而言,这不是一个小的改变,而是一种变革,企业需要为此付出艰苦的努力,宣传并树立公司范围内的项目管理文化十分重要。从而在实践中锻炼提高,解决各种各样的问题,使项目管理工作越做越好。
参考文献:
吴照云《管理学原理》经济管理出版社
StanleyE.Portny(宁俊等译)《如何做好项目管理》新经济工商实务丛书
NealWhitten(孙艳春等译)《管理软件开发项目》(第二版)软件项目管理系列丛书
人类社会经历了三次经济革命从农业革命、工业革命到目前正在经历的信息革命。信息化正在日益改变人们的思维方式和生活习惯。在推动信息化过程中,计算机及其软件产品发挥着至关重要的功能。对于软件项目的管理成为项目管理领域一个令人兴奋的课题。本文将结合项目管理中的控制方法分析软件项目管理控制的相关新问题.以期提高软件项目的开发效率。
1、有关软件项目管理
1.1项目和项目管理
项目是一个旨在完成一个或一些独特产品或服务的过程.它有着一系列被具体描述的属性。由于项目的独特性和一次性特征,引伸出它的其他特征.如目标的确定性.成果的不可挽回性组织的临时性和开发性等。基于项flI的这些特征.项目运作更加注重项目决策前的计划以及对实施过程的控制,以减少项目运作的风险。项目管理是2O世纪50年代后期发展起来的一种计划管理方法,它运用先进科学的管理方式.有效解决大型组织的效率低下和小型企业面临的风险增加新问题以组织的机动灵活.面向客户和资源利用率高而被广泛应用。在工程设计.施工软件项目的开发、实麓中经常会碰到进度拖延.费用超支、质量不达要求等新问题除去极少数是因为技术原因造成,绝大部分是源于僵化的管理和不当的管理方式。
1.2软件项目管理
各软件企业都在积极将软件项目管理引入开发活动中.对开发实行有效的管理。从概念上讲.软件项目管理是为了使软件项目能够按照预定的成本.进度、质量顺利完成.而对成本、人员、进度、质量、风险等进行分析和管理的活动。同时,随着软件开发规模及开发队伍的逐渐增大,软件开发不再是向过去那样一二个开发人员即可解决的事情。迫切需要一种开发规范来规范每个开发人员、测试人员和支持人员的工作每个项目组成员按约定的规则准时完成自己的工作。同时采用规范化管理.专业分工也可以降低对开发人员的要求,从而降低产品研发成本。
2、软件项目控制
2.1软件项目控制
软件项目跟踪和监控包括对照已文档化的估计、约定和计划评审和跟踪软件完成情况和结果。基于实际的完成情况和结果调整这些计划。软件项目的已文档化的计划(即软件开发计划,正如在软件项目计划关键过程区域中所描述的)用作跟踪软件活动传送状态和修订计划的基础管理者监控软件活动.主要通过在所选出的软件工作产品完成时和在所选择的里程碑处,将实际的软件规模工作量成本和时间表和计划相比较,来确定进展情况。当确定未实现软件项目计划时,采取纠正办法。这些办法可以包括修订软件开发计划以反映实际的完成情况和重新计划遗留的工作或者采取改进性能的办法。
2.2软件项目控制的内容
软件项目控制的目的是为软件项目的过程提供足够的能见度,从而可以在执行过程中发生对计划的严重偏离时能够采取适当的更正行为。软件项目控制包括:a。追踪软件项目的进展于表现从而和所作的估计、承诺和计划做出对比:b。追踪软件项目的风险;C。在发生对计划的严重偏离时采取适当的更正行为。
2.3软件项目控制步骤
由于软件开发是处在一个开放的动态系统中,开发环境的不断变化要求不断修改项目计划,以适应新的变化。此外项目经理及其组织在完成任务的过程中不可避免的要碰到这样或那样的新问题.解决这些新的矛盾和新问题均属项目控制的范畴项目的预算和进度计划只能为项目经理提供决策的依据.假如在项目实施过程中控制不住.很难在限定的时间和预算要求下实现项目管理工作的目标。因此软件项目控制的过程包括以下四个步骤:a、猜测什么会发生——要做出开发计划并建立工作标准b、查明什么正在发生——用建立的工作标准检查当前的工作;c、正在(或已经)发生的实事同猜测的结果进行比较——分析误差产生的原因:d及时采取补救办法.以满足项目目标,预算和进度的要求。
3、软件项目控制具体操作
3.1软件项目进度控制
为了确保软件开发中的各项工作能按照计划预定的日程顺利完成.对项目的进度要进行控制。进度控制的过程是.在项目实施过程中,不断地进行实际进度值和计划值的比较、发现偏差、检查分析其产生的原因,并采取相应的办法加以解决。
3.1.1进度控制流程
(1)进度控制的输入
进度计划。项目进度基准是项目测量和报告的基础和标准。
实施报告。实施报告提供了有关项目进度发展实情。报告未来可能发生的进度新问题。
变更要求。项目变更要有严格的申请和审批手续。
进度管理的技术和工具。
(2)进度管理的技术和工具
进度控制变更系统。为有效实现进度管理和控制.进度控制系统应设立实现重新计划的全部功能。包括:文件设立.跟踪即实施报告.变更评估等。
实施情况测量。项目进度控制系统中的一个重要组成部分是决定对迟发生的进度偏差是否采取纠偏办法。而实施情况报告提供了决策的主要信息。如变更分析.趋向分析.已实现价值分析等。
纠偏计划。很少有项目能完全按计划进度进行为实现项目进度或总进度要求,在项目实施过程中.需要不断对原计划进行调整或增加新的工作内容。为此.需要不断对实施的项目进行活动时间猜测。修改活动过程.替代进度方案分析。
项目管理软件。它的功能是跟踪项目按计划日期展开实际工作的情况.对照进度计划分析进度目前状况,找出进度的偏差.分析进度偏差对项目的影响.猜测未来走势
(3)项目进度控制的输出
进度更新。包括对项目管理中任何进度信息的修改。进度调整是其中的一种.师队员进度计划中活动开始和结束时间的改变。纠偏行动。通过改变资源投入将实际进度拉回到计划的行动过程。
从中获得的教训。有关进度偏差产生的原因。纠偏方案的评估和选择以及其他方面的感受和教训都应纪录在案成为日后有用的历史资料。
3.1.2进度控制方法
一般项目进度控制采用因果分析.分析用四步完成:
(1)明确新问题。实际完成情况和项目里程碑相对照.确定是否超期.超期的部分是在哪里。
(2)查找产生该新问题的原因。位从系统角度充分熟悉各方原因.应组织具有代表性任务人员并采用头脑风暴法进行。项目主管要通过他领导的办公室或小组,以及在各职能部门的人共同分析新问题产生原因。
(3)确定个原因对新问题产生的影响程度。对影响程度的评估可以采用专家小组打分的方法,事先确定权数.而后打分得出分析结果。
(4)画出带箭头的鱼刺图。分析出原因后各部门各就其职针对新问题提出解决方案.并实施。
3.1.3软件项目进度控制具体办法
在实施进度计划过程中,会有种种故障:客户的需求进行了补充或修改;工作量估算不准,造成进度不平衡或是有人不遵从开发规范.导致产品出现缺陷;或是技术环节出现故障,这些新问题往往是在进度计划外出现的.一旦出现这些新问题,项目进度不得不进行调整。开发过程中为了有效控制类似新问题,可以采用以下辅助办法,控制进度按计划执行:
(1)政策性办法。对于不遵从开发规范,人员不按时履行职责的.给予经济或是职务上的处罚.这种办法应是建立在分配任务之前;
(2)人员布置。在各子项目接口处适当布置机动人员和机动时间。这一办法有赖于项目组织的机构设置能动性好。此处比较难解决的是人员业绩评估.奖励新问题。
(3)技术办法,要想很好地执行进度计划,需要事先有统一的规范例如开发语言的统一,文档的归类。这样便于下一阶段人员理解上一阶段人员意图,交流更加轻易。
(4)信息流办法。该办法要求建立一个信息流系统.准时汇报项目进度.便于主控人员调整进度,并且保证信息流通顺畅。避免开发期压到最后造成严重拖工。
(5)资金办法。财务部门可以定期检查各部门财务情况.控制资金流出时间.进而控制项目进度。这和后面要讲到的三者权衡有密切关系。
3.2软件项目费用控制
费用控制就是要保证各项工作要在他们各自的预算范围内进行。其基础是实现就对项目进行费用预算。整个项目费用应包括项目范围规划阶段。软件需求分析阶段.原型设计阶段开发阶段.测试阶段和项目投入使用后的使用阶段所消耗费用的总和。软件开发项目承担公司为了完成项目目标和获得更多的利润.在实施项目过程中就要控制成本.在控制过程中,首先要拟定一个标准.即计划值.然后进行实际至于计划值的比较,确定实际值和计划标准的偏差大小.以便在此基础上采取各种办法纠正偏差.常用的分析工具是偏差分析。
偏差是指实际成本对相应计划的偏离,成本偏差的数学公式为:
CV=BCWP-ACWP(负数CV表明出现超支;反之,则节资)(3—1)
其中:CV为成本偏差,BCWP为计划工作预算,ACWP为完成工作实际成本。
在进行成本偏离计划程度分析时,常用计划偏差率反应时给予计划的偏离程度。
CVP=CV/BCWP(3-2)
其中CVP为成本偏差率。
偏差值是控制分析中的一个关键参数,因而应向各级组织汇报。对于不同的项目或同一项目不同阶段或不同管理层次,对偏差的控制程度不一样,制定偏差答应值的方法也不同。由于随着时间的推移风险减少了,因而偏差答应也可降低。超级秘书网
3.3软件项目质量控制
1.项目前期以及项目准备
在进行任何一项较大的项目时,首先要进行项目的可行性分析和研究,因为这些项目中的问题并不都有明显的解决办法,这样就很难在预定的时间、费用之内解决这些问题,如果这些问题没有可以行得通的解决办法,贸然开始这些项目,就可能导致项目的失败,造成巨大的损失。
1.1可行性分析
软件项目可行性研究的目的是用最小的代价和时间,确定该项目是否能够开发值得开发,其实质是要进行一次简化的、抽象的需求分析和设计过程,主要应从以下几个方面进行分析。
1.1.1技术可行性
对要开发项目的功能,性能和限制条件进行分析,确定在现有的资源条件下技术风险有多大,项目是否能够实现,现有的资源包括硬件、软件资源,现有的技术人员和技术水平,已经有的工作基础等,判断技术上是否可行,主要需要考虑以下几个问题:
(1)开发的风险即在给定条件下能否实现目标的功能和性能;
(2)资源的有效性;
(3)技术的发展性;
由于需求未经过详细的调研,存在模糊性和可能的变化,开发人员进行技术可行性评估时,存在比较大的风险,一旦出现估计的错误,将可能导致灾难性的后果。
1.1.2经济可行性
进行软件开发项目的成本估算以及了解取得的效益估算,确定该项目是否值得开发,对于大多数项目,衡量经济可行性,应考虑一个“底线”,同时应考虑公司的长期经营策略,潜在市场前景等因素。
1.1.3社会可行性
应考虑项目是否存在任何侵权、责任等问题,考虑在现有的制度、法规下是否行得通,包括合同、责任、法律等多种因素。
1.2需求调研
在项目前期工作中,需求调研是其中最重要的一个环节,今后的许多工作都依赖于需求调研的结果,需求调研的过程是渐进的,在可行性分析阶段,主要关注的是项目规模、范围和重点的功能,在项目进入正是开发流程以后,我们需要更加全面、准确地了解系统的需求不重视需求过程的项目队伍将自食其果,需求工程中的缺陷将给项目成功带来极大风险。如:无足够用户参与导致产品无法被接受;用户需求的增加带来过度的耗费和降低产品的质量;模棱两可的需求说明可能导致时间的浪费和返工;用户增加一些不必要的特性和开发人员画蛇添足;过分简略的需求说明以致遗漏某些关键需求;忽略某类用户的需求将导致众多客户的不满;不完善的需求说明使得项目计划和跟踪无法准确进行。
1.3项目团队的组织
建立项目团队是项目开发过程的开始,一切工作都是由项目团队的成员完成的在整个项目的运行过程中,需要很多不同的角色参与到项目中,完成不同阶段的任务。所以在建立项目团队的过程中要把握好人员角色的划分、特别人员管理与激励、监督等。整个人员的管理是项目管理的关键,因为人是活的,而项目是死的,只要人员管理妥当,项目开发一般是不会出什么问题的。
1.4项目开发计划
软件项目的特征之一就是需求的不确定性和开发过程中存在的技术风险,按照通常的方法,制定一个项目的计划应该是先根据项目的需求,进行详细的任务分解找出实现的方法,估计出项目的工作量,再根据项目资源的状况,制定出项目的计划。
但是,再现实的工作中,项目的时间表往往是事先确定的,给开发留出的时间也是事先定好的。而我们能够利用的资源,主要是开发的人力资源,也被事先基本确定了,在被确定的这2个前提条件下,我们如何根据项目的需求,合理地安排人力和时间,完成项目的开发,这是现实中项目经理经常遇到的问题如果事先确定的时间表是相对比较合理的,至少应该是我们够的到的。我们制定的开发计划才是有意义的,否则,按照这个时间表制定出来的计划只能失败的在这种情况下,项目经理唯一可以做的是对用户的需求进行剪裁,去掉某些耗时长而且不太重要的功能,或是在开发中适当降低质量要求,或许可以完成项目的进度。当然这必须最终要得到用户的认可。778论文在线
2.项目开发过程管理
2.1详细设计
在详细设计阶段,由于任务已经详细地分解,总体地解决方案和技术框架已经确立,详细设计地目的就主要是针对某个特定地模块或对象,根据需求,技术框架地要求和模块间接口,描述出我们实现功能的方法,主要内容包括:
(1)内部算法描述;
(2)内部数据组织;
(3)相关接口详细设计;
2.2设计评审
在设计完成后,必须安排设计评审以保证设计的质量,通常设计评审以小组内部的评审会的方式进行,参与人有项目小组内部的人员及其负责人,由开发者介绍其设计思路,其他人了解并对其设计质量进行评审。评审的内容主要包括:
(1)关键算法的可行性;
(2)接口是否符合概要设计的要求;
(3)技术清晰度是否符合设计标准;
(4)文档的完备性;
评审通过的设计,才能够开始编码工作,评审的结果应记录到开发文档当中。
2.3编码
在编码阶段,主要需要在编码工作结束后,进行代码审核,这项工作非常重要主要应该由项目小组的技术负责人完成,审核的目的并不是为了检验代码的正确性而是需要对编码是否按照规范进行审核。主要内容包括:
(1)变量、包、方法等的命名是否符合规则;
(2)注释是否填写完整,是否符合规范;
(3)代码的可读性,编写风格是否符合规范;
(4)是否有明显的造成系统运行低效率的处理方法;
(5)公共变量的定义和使用;
2.4调试
编码工作完成以后,通常需要开发人员自己进行单元测试,有些部分需要编写相应的测试程序。应该避免发生这类的情况,有些开发人员任务自己不应该进行测试工作,在编写完代码以后,只要编译成功,就直接提交成果,将测试工作完全交给测试人员去做,这样做不仅仅给测试人员增加了许多的工作量,同时增加了许多因为交流产生的时间,造成进度的延迟,管理人员应该杜绝程序员的这样的思想,同时在管理中予以考虑,可以将提交成果产生的bug数量作为考核程序员业绩的标准之一。
3.项目后期管理
3.1项目的验收
项目验收,是整个项目生命周期中最后一个环节。一般来说,软件项目的验收一般来说有2个阶段,第一个阶段是验收测试,当验收测试成功结束后,一般会有一个阶段的试运行阶段,只有当2个阶段全部结束后,整个项目才算真正结束,可以收回全部的工程款,该软件也进入其运行维护期。验收测试应按照软件的需求,质量要求进行测试验收,需要甲乙双方共同建立验收小组,或请第三方测试机构进行验收测试,在验收测试之前,开发方应提供一系列的开发设计文档供验收测试使用。
3.2软件维护
编程大师曾说“哪怕程序只有三行长,总有一天你也不得不对它维护。”,很
多软件产品不是一次性的买卖,比如在电信、金融等领域,有些软件系统要用十几年,对软件进行维护是必不可少的,软件公司的经理们没有哪一个喜欢被维护的费用吓一跳,但软件维护的代价通常是高昂的。对软件而言“维护”是个不太直观的术语,因为软件产品在重复使用时不会被磨损,并不需要进行像对车辆或电器那样的维护,软件维护是人们对既丰富多彩又会令人心酸的活动的统称,其中丰富多彩的活动是指那些反映客观世界变化,能使软件系统更加完善的修改和扩充工作,令人心酸的活动是指那些永无休止,并且改了旧错却引起新错让人欲哭无泪的工作。
参考文献:
1.邱菀华沈建明杨爱华等编著现代项目管理导论机械工业出版社
2002年10月
2.美理查德怀特黑德著领导软件开发团队电子工业出版社2002年5月
3.尼尔怀特著管理软件开发项目-通向成功的最佳实践电子工
业出版社2002年4月
4.刘积仁康晓东饶友玲主编软件开发项目管理人民邮电出版社
2002年2月
2项目管理在软件开发中的应用现状
在二十世纪六十年代中期,人们发现了在开发软件过程中存在着很多问题,具体的问题表现在以下两个方面:一方面,不规范的生产过程;另一方面,不重视管理工作。为了能够有效解决软件开发过程中存在的问题,人们开始尝试利用过程管理方法。但是到了二十世纪八十年代,还是没有制定管理软件开发过程相关标准。近几年来,在信息技术快速发展的背景下,人们采取项目管理来控制软件开发的质量、软件开发的成本等,以此确保软件开发的质量和成本等因素,符合当时的既定标准。在软件开发过程中,每一个项目组的不同成员都应该承担不同的任务,并且企业管理者应该要求他们要在规定的时间内完成自身的任务,这种明确分工制度,有助于提高员工的工作效率。
3项目管理在软件开发中的应用
每一个软件开发项目都要经过以下几个阶段:提出问题、研究可行性、分析需求、测试等。因此项目管理工作应该贯穿于软件开发的整个过程。
3.1可行性研究
无法开发哪一个项目,都需要进行可行性分析与研究。通过利用项目管理来研究软件开发项目可行性的目的在于:在最短的时间内确定软件开发项目是否具有开发的价值。其中可行性研究的内容包括:
1)、研究技术的可行性。其主要是指:要合理地分析开发项目的功能与性能,分析其中所隐藏的技术风险。
2)、研究经济的可行性。其主要是指:估计所开发的项目给企业带来的经济效益,然后依据所估算的经济效益,确定该项目是否具有投资的价值。
3)、研究社会的可行性。其主要是指:分析此项目的运行方式是否正确,分析当前的人员技术水平以及管理制度是否具有可行性。
3.2软件项目估算
在软件开发过程中,首先要规划软件开发项目,如此便于项目管理人员制定切合实际的估算方案。规划软件开发项目的内容主要包括:明确软件开发的目标、明确软件开发过程中需要用到的各种资源、明确软件开发的进度等。在软件开发过程中,估算起着非常重要的作用。通过估算可以保证软件项目在规定的时间内完成,也可以确保软件项目的成本未超出预算。在估算资源、成本以及进度的时候,要依据自身丰富的经验以及相关的数据。但是当前所使用的估算方法较为单一,此种估算方法容易增加估算风险。对此,研究人员应该努力研究出更多科学、有效的估算方法。
3.3软件项目开发人员的管理
在开展软件项目开发人员管理工作的时候,首先要合理安排人员。通常情况下,是由多个小组成员共同完成软件开发项目。在具体安排人员任务的时候,要依据每位人员的优势进行,并且要明确小组内每一位成员的工作任务以及工作目标。在软件开发过程中,要确定不同的责任人,比如:项目经理、开发经理,并且为每一个小组安排一名组长,如此有助于确保软件开发项目的顺利完成,同时保证所开发出来的软件属于高质量产品。
软件行业在现在的众多行业里是一个极具挑战性和创造性的行业,体现了软件开发者的智慧和汗水,同时软件开发是一项复杂的系统工程。牵涉到许多方面的因素,在实际工作中,经常会出现各种各样的问题,甚至会面临失败。如何总结、分析失败的原因。得出有益的教训,对于项目开发人员来说,是在今后的项目中取得成功的关键。
一、软件开发中实行项目管理的意义
项目管理就是在项目活动中运用一系列的知识、技能、工具和技术,以满足或超过相关利益者对项目的要求,实际上就是通过项目各方干系人的合作,把各种资源应用于项目,以实现项目的目标,满足项目干系人的需求,其本质就是对时间、质量和成本的管理。
随着软件开发的深入、各种技术的不断创新以及软件产业的形成,人们越来越意识到软件过程管理的重要性,管理学的思想逐渐融入软件开发过程中,项目开发的管理日益受到重视。
二、目前在软件项目管理中存在的误区
现在大多数企业都认识到了在项目中进行管理的重要性,但是仍然有许多企业在实施项目管理的过程中存在着这样那样的误区,主要表现在:
1项目经理不够专业。在软件企业中,缺乏专业的项目管理人员来实施项目管理及担任项目经理,通常被任命的项目经理主要是因为他们能够在技术上独当一面,但是他们在管理方面特别是项目管理方面的知识比较缺乏。
2项目计划缺乏纲领性。项目经理对总体计划、阶段计划的作用认识不足,因此制定总体计划时比较随意,不少事情没有仔细考虑:阶段计划因工作忙等理由经常拖延,造成计划与控制管理脱节,无法进行有效的进度控制管理。
3缺乏有效的管理意识。部分项目经理不能从总体上把握整个项目,而是埋头于具体的技术工作,造成项目组成人员之间忙的忙、闲的闲,计划不周、任务不均、资源浪费。有些项目经理没有很好的管理方法,不好安排的工作只好自己做,使项目任务无法有效、合理地分配给相关成员,以达到“负载均衡”。
4缺乏有效的沟通制度和机制。在项目中一些重要信息没有进行充分和有效的沟通。在制定计划、意见反馈、情况通报、技术问题或成果等方面与相关人员的沟通不足,造成各做各事、重复劳动,甚至造成不必要的损失:有些人没有每天定时收邮件的习惯,以至于无法及时接收最新的信息。
5风险管理意识淡泊。有些项目经理没有充分意识到风险管理的重要性,对计划书中风险管理的章节简单应付了事,随便列出几个风险,随便地写一些简单的对策,对于后面的风险防范起不到什么指导作用。
6项目干系人的不确定性。在范围识别阶段,项目组对客户的整体组织结构、有关人员及其关系、工作职责等没有足够了解以至于无法得到完整需求或最终经权威用户代表确认的需求:或者是多个用户代表各说各话、昨是今非,但同时又要求项目尽早交付:项目后期需求变化随意,造成项目范围的蔓延,进度的拖延,成本的扩大。
7缺乏项目团队的合理分工。项目团队内部有时由于各阶段不同角色或同阶段不同角色之间的责任分工不够清晰而造成工作互相推诿、责任互相推卸的现象;有时各阶段不同角色或同阶段不同角色之间的责任分工比较清晰,但是各项目成员只顾完成自己那部分任务,不愿意与他人协作。这些现象都将造成项目组内部资源的损耗,从而影响项目进展。三、解决软件项目管理中存在的误区的有效策略
要想解决上面描述的误区,归根到底还是要从管理学的角度入手,即在软件项目的开发过程中加入过程管理的内容,这样我们可以在软件开发中对各个过程的质量加以控制,从而达到保证软件产品质量的目的。为了有效提高管理水平,我们应该努力做到:
1项目经理接受系统的项目管理知识培训是非常必要的,有了专业领域的知识与实践,再加上项目管理知识与实践和一般管理的知识和经验的有机结合,必能大大提高项目经理的项目管理水平。
2计划的制定需要在一定条件的限制和假设之下采用渐近明细的方式进行不断完善。提高项目经理的计划意识,采用项目计划制定相关知识、技术、工具,加强对开发计划、阶段计划的有效性进行事前事后的评估。
3加强项目管理方面的培训,并通过对考核指标的合理设定和宣传引导项目经理更好地做好项目管理工作。技术骨干在担任项目经理之前,最好能经过系统的项目管理知识,特别是其中的人力资源管理、沟通管理的学习,并且在实际工作中不断提高自己的管理素质,丰富项目管理经验,提高项目管理意识。
4制定有效的沟通制度和沟通机制,提高沟通意识:采取多种沟通方式,提高沟通的有效性。通过制度规定对由于未及时收取邮件而造成损失的责任归属;对于特别重要的内容要采用多种方式进行有效沟通以确保传达到位,例如:除发送邮件外还要电话提醒、回执等,重要的内容还要通过举行各种会议进行传达。
5通过学习项目管理知识掌握风险识别、量化、对策研究、反应控制的工具和方法,掌握项目风险管理所必备的知识。通过加强对项目规划中风险管理计划的审核提高项目组的风险管理意识。总结本行业项目中常见的风险及其对策作为风险管理计划中必要的风险内容,并切实评估相应对策的有效性和可行性。
项目管理是20世纪40年代以后迅速发展起来的一门科学, 是现代管理学中的一个重要分支。随着项目管理理论、方法的发展,其应用范畴和概念不断拓展, 从最初应用在国防、航天、建筑等领域迅速发展到电子、通讯、计算机、软件开发、金融等行业。软件工程学提出将项目管理运用于软件生产领域,软件开发成为有组织、工程化的行为。随着近年来软件行业的迅速发展,软件规模急速扩大,对专业化管理人员的需求越来越大。在智联招聘和51job上搜索软件项目管理职位,各有8千多个工作岗位,这说明软件项目管理岗位越来越受到重视,相关人才缺口较大。
华中师范大学计算机学院从2008年以来开设软件项目管理课程作为计算机科学与技术专业的专业选修课,每次选课都满班。于2009和2010 年开设软件工程与项目管理的全校通选课程,旨在为学校其他专业对软件开发感兴趣的同学提供平台,每次课虽然选课人数在30人左右,人数不多,但学生反响很好,特别是认为项目管理的知识不仅仅能用于专业领域,在生活中组织春游、安排班级比赛等都能用到,实用性非常强。计算机学院于2011年增设本科软件工程专业,一直把软件项目管理作为专业必修课。笔者从2008年开始讲授本门课程,对课程的教学和实践有一定体会。
2软件项目管理课程的课程实验设计
软件项目管理课程内容既有很强的理论知识,又有综合实践要求,是一门比较难学的课程。很多学生认为软件项目管理课程是一门理论为主的课程,不像程序设计语言课程那样重视实验和练习。但是该课程实际上理论与实践并重,固然有很多理论知识需要学习,但如果不在实践中体会,不会使用一些项目管理工具,也达不到学习效果。
另外项目管理的工具很多,多数不仅仅可以用于软件项目管理,也可以用于很多其它类型的项目管理,对于课堂实验来说,选择什么样的工具,如何验收实验都需要很好地设计。
2.1课堂实验工具的选择
因为软件项目管理涉及的知识范围很广,一种软件项目管理工具通常只能用于软件项目管理的一个或几个知识领域,教师需要选择哪些知识需要使用工具练习。通常软件项目管理的主要知识领域包括范围管理、时间管理、成本管理和质量管理,另外也可以考虑配置管理、沟通管理等方面的工具。
另一方面,软件项目管理工具有很多免费的,但是大型的主流的工具还是收费,而且很贵。现在多数学校实验经费非常紧张,主要用于硬件购置,教师需要尽量使用免费工具,对收费工具的选择要综合考虑其能否找到试用版本,试用条件如何、是否容易安装和配置等等问题。
笔者认为选择的项目管理工具应该具备以下几个基本功能。
2.1.1需求管理:项目的需求变更,跟踪,控制。
2.1.2资源管理:项目的可利用资源的管理,包括人力、物力、财力等资源。
2.1.3计划管理:包括成员管理和权限分配、日程排定、工作时间管理、里程碑设置等。
2.1.4进度管理:制定日历、工作流、项目路线图和Gantt图。
2.1.5文档管理:文档文件、存储文件、集成SVN代码管理。
2.1.6信息管理: 具有制定活动统计报表、项目报表的导入和导出、团队交流、信息筛选等功能。
笔者选择了几个满足以上功能、容易获得和使用、在业内比较通用的软件项目管理工具作为课堂实验内容。
Microsoft Project:软件具有制定工作计划、进度管理、资源管理、跟踪进度、管理预算和分析工作量等功能。该软件因为微软的成功推广,使用非常广泛,工具适用于所有项目的管理,据统计约有70%的项目使用该工具。作为微软Office办公软件中的一员,Project界面与微软其他产品很相似,非常容易使用,也很容易和Office中的其他办公软件整合。工具的获取和安装都很容易,有试用版本。
Project的缺点是它不是专门用于软件项目管理的工具,不支持软件项目中的立项与结项、需求管理、质量管理、软件配置管理等重要管理工作,也不能同时处理多个项目。
禅道:禅道项目管理软件是国产项目管理软件的代表,是一款开源的产品,可以在官网http://zentao.net免费下载。软件比较符合中国用户的习惯,在国内中小企业有较高的使用率。软件集产品管理、项目管理、质量管理、文档管理、组织管理和事务管理于一体,功能比较完备,适合中小型项目。软件可以直接基于浏览器使用,不需要安装部署,界面简单,流程清楚,比较容易使用。软件有简单的需求管理功能,能在需求、任务、bug、用例和to do之间建立联系,能跟踪需求的实现情况。
但是软件的开源版本不提供甘特图、看板、工作日志等功能,需要购买专业版。软件的需求管理比较简单,不能和Word文档关联,不能从Word文档中直接读入需求。
Rational Doors:是IBM旗下非常著名的需求管理工具,能捕获、跟踪、分析和管理需求,功能非常强大,并能方便地与其他Rational工具集成,在很多大型软件公司使用[4]。Rational Doors能与Word同步,自动将Word文档中的需求抽取到Rational Doors的视图中。软件提供Web界面,方便团队交流,提高工作效率。软件还能与著名的配置管理工具Rational Clear Quest紧密集成,显示需求变更;与Rational Rose集成,将需求与UML模型关联,更准确地表达需求的定义。
但是它功能复杂、安装部署复杂,需要安装服务器端和客户端,还需要安装专门的数据库,使用也有难度。作为专业级开发工具它的价格比较贵,试用版只有3个月试用期。但是需求管理工具基本没有免费软件,有条件的学校可以选择该软件弥补其他项目管理软件中缺少需求管理功能的问题。
Visual Source Safe:简称VSS,是微软公司开发的一款版本和配置管理工具,并能提供安全保护、跟踪检查功能和版本比较的功能[5]。配置管理记录软件产品的演化过程,最终保证软件产品的完整性、一致性、追朔性、可控性[6],在项目管理中非常重要。配置管理的工具很多,常用的有开源工具Concurrent Version System、IBM的Rational Clear Quest等。VSS使用很广,是Visual Studio的套件之一,在Visual Studio中集成使用非常方便。工具具有微软产品的界面统一、安装方便、使用比较简单、获取容易的特点。
但是VSS只能在Windows系统下运行,不能跨平台运行。因为VSS是通过共享目录方式存储文件的,它只适合于局域网内的用户,不适合于通过Internet连接的用户,并且安全性不高。VSS的工作方式决定文件只不能由多个用户同时修改,工作效率比较低,只适合小团队开发。
2.2课堂实验设计
选定合适的工具后,在实验课程中要求每个学生选择自己熟悉的项目,运用几种工具分别完成工作分解、进度管理、配置管理、需求管理等工作, 具体实验内容见表1。
表1实验内容表
实验名称 实验目的 实验工具 学时
项目进度计划管理 合理地分解项目,制定项目计划并形成甘特图;分配和管理项目资源,跟踪资源使用情况;跟踪进度,监控项目成本。 Microsoft Project 4
项目计划、文档和沟通管理 合理地划分任务和制定计划;管理和监控项目文档;完成简单的需求跟踪;搭建项目沟通平台。 禅道 2
项目需求管理 需求文档分析和需求抽取;需求和团队沟通;需求变更管理。 Rational Doors 4
项目配置管理 合理地建立和使用配置项;跟踪版本变更;代码比较。 Visual Source Safe 2
学生能通过实验理解企业的项目管理流程,熟悉企业常用的项目管理工具,既能进一步理解项目管理的理论知识,也提高了实际应用能力。
3结语
[论文关键词]软件项目软件项目管理
0引言
随着信息技术的飞速发展,软件产品的规模和复杂度随之增加,传统作坊式的开发方式逐步被以项目组为单位的协作式开发方式所取代,这就必然涉及到对软件项目的管理.实践表明,一个软件项目的成败,不在于其项目组的技术人员的技术水平,而在于是否采用的合适的管理:.好的管理方式不一定能使项目完全成功,但是一个不合适的管理模式往往会导致软件项目的失败.
1软件项目管理的特殊性
所谓项目,就是在特定条t"ae下,具有特定目标的一次性任务,是在一定时间内,满足一系列特定目标的多项相关工作的总称.项目具有一次性、独特性、目标的确定性、组织的临时性和开放性以及成果的不可挽回性等基本属性.
项目管理是指“在项目活动中运用专门的知识、技能、工具和方法,使项目能够实现或超过项目干系人的需要和期望.”这一定义不仅仅是强调使用专门的知识和技能,还强调项目管理中各参与人的重要性.项目经理不仅仅要努力实现项目的范围、时间、成功和质量等目标,还必须协调整个项目过程,满足项目参与者及其他利益相关者的需要和期望.
软件项目管理和其他的项目管理相比有相当的特殊性.首先,软件的整个过程都是设计过程,不需要大量的物质资源,而主要是人力资源,软件开发的产品以程序代码和技术文档为主,并没有其他的物质成果;其次,软件是纯知识产品,其开发进度和质量很难估H-和度量,生产效率也难以预测和保证.软件系统的复杂性也导致了开发过程中各种风险的难以预见和控制.因此,软件项目管理和其他项目管理相比,有很大的独特性.
2软件项目管理的内容
软件项目管理是一种科学的管理手段,它是为了使软件项目能够按照预定的成本、进度、质量顺利完成,而对成本、人员、进度、质量、~x-2,险等进行分析和管理的活动.管理的范围涉及人员的组织与管理、软件度量、项目计划、风险管理、质量保证、过程能力配置管理等几个方面,这几个方面都是贯穿、交织于整个软件开发过程中的.从软件工程的角度讲,软件开发主要分为六个阶段:需求分析阶段、概要设计阶段、详细设计阶段、编码阶段、测试阶段、安装及维护阶段.不论是作坊式开发,还是团队协作式开发,这六阶段都是不可缺少的.从用户的角度来看,软件项目的生命周期应该包括项目前期的论证工作、项目计划、软件开发、运行、维护及项目评价.由此可见,软件项目管理的范围不包括传统的软件开发过程,还应该包括开发前的准备工作以及运行中的维护工作和对项目的总结工作.根据PMBOK(项目管理知识体系ProjectManagementBodyofKnowledge,简称PMBOK)中的定义,软件项目管理可以分为以下几个方面:
2.1集成管理:项目计划制定、项目计划实施、集成变更控制等.
2.2范围管理:制定范围计划编制、范围定义核实、变更控制、任务协调等.
2.3时间管理:项目任务分解、进度计划编制、任务持续时间估算、进度计划控制等.
2.4成本管理:资源计划编制、成本估算、成本预算和控制等.
2.5质量管理:项目质量计划编制、软件质量保证、软件质量控制、软件过程改进等.
2.6人力资源管理:组织的计划编制、人员职责的分配、团队合作发展等.
2.7沟通管理:建立沟通渠道、信息交换管理等.
2.8风险管理:项目风险识别、项目风险分析、项目风险优先分析、项目风险控制等.
2.9采购管理:采购计划编制、合同管理、合同收尾等.
在面的软件项目管理中,有几个关键因素,它影响着软件项目的成败,下面就这几4-关键因素进行一下探讨.
3软件项目管理的关键因素
3.1合理配置人力资源
众所周知,人是决定组织和项目成败的关键,也是影响软件93:发质量的最关键的因素,因此软件项目管理应该以人为本,有效管理人力资源,合理配置人力资源.应该根据项目组成员的组成结构情况,合理搭配,充分发挥每位成员的技术专长,做到人尽其能;组织组建好项目团队,培养团结一致的团队精神,规范良好的职业道德;建立健全完备的奖惩制度,落实权利责任制度,做到权责明确,并在项目进程能及时化解各种人事冲突,营造良好的团队协作环境.
3.2顺畅有效的沟通管理
开发软件项目是一项知识性极强的工作,对人的依赖性比其它行业更为突出,因此加强人员之间的有效沟通,实现顺畅有效的沟通管理是软件项目成功的另一个关键因素.沟通管理是一个收集、存储、配置和项目生命周期内所形成的各种信息的过程.它把成功所必须的因素——人、想法和信息之间提供了一个关键连接.对于项目来说,要科学地组织、指挥、协调和控制项目的实施过程,就必须进行信息沟通.这里的沟通包括两个方面,一个方面是软件项目组开发人员与用户的沟通,另一方面则是软件项目组内人员的沟通.前者是做好软件需求分析所必须的;而后者则有助于组内成员的彼此交流,减少理解错位,实现信息畅通,改善人际关系,化解可能的冲突,加快项目的进度.沟通的方式是多样的,可以采用常用的项目组例会方式,可以通过面谈彼此交换意见;也可以利用方便快捷的通讯工具如电话、EMAIL、传真等方式加强信息的沟通;总之,顺畅有效的信息沟通,可以取得彼此的理解,剔除项目进度中的“BUG”,有利于项目按计划顺利开展.
3.3正确可靠的软件需求
软件需求是软件项目的根本所在,需求不明确,软件项目开发范围不确定,项目开发就会失去方向,容易造成开发的产品和用户实际的需求“南辕北辙“,最终导致项目的失败.一个可靠的需求,也是项目管理的关键因素之一.软件需求应当是项目有关的人员一致同意的、清楚的、完整的、详细的、可实现的和可测试的需求的确定,开发人员应该反复和用户进行沟通,认真听取用户的意见,及时归档记录,并适时发掘用户的潜在需求,最大限度地满足用户的目标,开发出用户最理想的产品.最后应拿出开发人员和用户一致认可的软件需求说明书,并加以确认.在项目开始以后,应该尽最大可能不更改需求,要与用户进行很好地沟通,以确保开发212作能按照需求进行,减少需求变更带来的风险!因此,正确可靠的软件需求也是项目成功的重要保障.
3.4周密可行的项目计划.
“凡事预则立,不预则废.”软件项目实施过程中,还必须有一个周密可行的项目计划.软件项目计划的目的是为完成软件工程和管理软件项目而制定的合理的计划,它包括以下步骤:估计软件产品规模及所需的资源,制定表,鉴别和评估软件风险和协商约定,而且要标志出几个阶段性的里程碑,这些都是极为关键的.软件项目开发组来说,一个可行的计划的重要性是不言而喻的.在实际发中,:计划的重视程度不够,计划过于笼统、粗糙导致可执行性差,再加上一些人为因素的影响,必然会产生一些反面的影响,或者有了周密可行的计划不严格遵守计划执行,任意变更,都将产生严重的负面影响,有时甚至是灾难性的影响.因此,要想成功进行项目管理,就要对高度重视、周密制定、严格执行.只有严格进行计划才能使成功项目管理得以实施.
3.5健全完备的文档资料
软件项目的文档作为软件产品的主要形式之一,集中体现了软件人员的劳动成果,在整个软件生存周期中占据重要位置.特别是在开发过程中需求发生了变更的情况下,健全完备的文档资料的重要作用就充yJ-~:现出来,开发人员可以及时在文档中回溯,快速锁定问题所在,及时解决问题避免软件项目延期,减少项目.此外,健全完备的档资料在项目接近尾声时也便于软件的测试与后期的维护工作,在项目结尾时,健全完备的文档资料也为人员的培训和项目的再开发发挥重要作用,因健全完备的文档资料也是软件项目成功的重要因素,在项目管理过程中应该高度重视.
3.6严格的风险管理
软件开发项目在一定意义上就是用户的需求,软件开发人员通过分析用户的需求,遵循一定的开发原理,采取相应的方法,最终开发出用户所需要的软件。软件开发是高风险的项目,Standish group报告表明80%以上的项目都是不成功的,或是因为超过预算或延期未完或缺失功能,或者几种因素都有。现在人们致力于应用有助于提高开发效率的开发方法和开发工具,但随着软件规模的不断扩大,人们认识到技术的改善只是促使项目开发成功的重要因素之一,规划、控制和协调变得越来越重要。因此,在计算机软件开发过程中引入与应用项目管理理论,已经成为行业共识。
一、软件项目的危机与软件项目管理的意义
从20世纪60年代末开始,“软件危机”伴随着软件成本的日益增长、开发进度可控性不高、软件维护困难等一系列严重问题而到来。软件作为一种特殊的逻辑产品,软件项目危机主要来源于用户需求不明确、缺乏正确的理论指导、软件规模越来越大、软件复杂程度越来越高四个方面。用户需求不明确体现在用户在软件开发之前自己对软件的具体需求不清楚,对软件需求的描述不精确,甚至有歧义和错误,在软件开发过程中,不断提出修改软件功能、界面等方面的要求。软件开发过程是一个复杂的逻辑思维过程,需要有力的方法学与工具方面的支持,需要高度的智力投入,如果没有正确的理论指导,过分依靠程序设计人员在软件开发过程中的个性化与创造性,也容易导致软件危机的产生。大型的软件项目需要一定的人力齐心协力共同完成,但现行条件下,大规模软件开发中人力与管理中的问题日益暴露出来,成为影响大型软件开发成功的重要因素。随着软件规模的发展扩大,其复杂性也与日俱增,增加了软件项目开发的风险。
软件开发新技术与新工具的开发与利用,在一定程度上改善了软件开发现状,但人们也发现软件危机的解决不光是技术问题,更为重要的是管理问题。软件开发过程是设计过程,消耗的主要是人力资源,软件开发的产品是程序代码和技术文件,而没有其他物质结果。这一不同于制造其他产品的特性,使得管理在软件开发项目中的作用凸显出来。通过对成本、人员、进度、质量、风险等的分析与管理活动,使软件开发项目按既定计划顺利完成,通过管理使企业的软件生产趋于成熟。
二、软件开发过程中的管理
根据项目管理理论,所有的项目都要经历五个阶段:启动阶段、计划阶段、执行阶段、控制阶段和结束阶段。而计算机软件从其构思之日起,至开发成功投入使用,直到最后被另一项新软件所代替,其生存周期可以分成六个阶段:可行性与计划研究阶段、需求分析阶段、设计阶段、实现阶段、测试阶段、运行与维护阶段等。下面将主要从软件开发项目前期、项目准备、开发过程、项目后期这几方面分析软件开发项目中的管理。
软件开发项目前期包含可行性与计划研究阶段和需求分析阶段,这阶段工作的准确性直接关系到软件项目的成败。这一阶段首先确定该软件的开发目标和总要求,进行项目的可行性分析与投资-收益分析,编制开发计划,为领导层的决定提供依据。由领导层决定项目取消或者评审和批示,当项目确定实施以后,初步制定软件项目开发计划,进入下一个阶段。需求分析阶段要能确定被设计软件的各项功能、性能需求和设计约束,编写出软件需求说明书、数据需求说明书和初步的用户手册。需求的获取要求成立需求调研小组,在调研中将用户群体根据其差异性进行分类并归纳出各类的个性特点及任务状况,并在每类用户中挑选出一个典型代表作出决策。调研小组通过调研会、面谈、收集资料等多种方法收集需求,并在分析基础上编写需求文件,与用户一起对需求进行审核,并最终获得用户认可。优秀的需求文件要求具备完整性、正确性、可行性、必要性、无二义性和需求优先性。
项目准备中的管理涉及项目团队的组织、需求管理、方案设计、风险管理和开发计划。根据项目规模和特点组建开发团队,确定各类人员的职责与考核管理方法,以完成不同角色和不同阶段的任务。在完成需求调研和需求分析后,还会遇到项目需求的变更,要建立起良好的需求管理方法,对变更带来的潜在影响和可能的成本费用进行评估,跟踪每项需求的状态。在项目需求分析的基础上,进行系统方案的设计,确定开发中采取的技术方案、技术架构、开发标准规范和版本管理的方法。做好源自技术、需求、人员、管理中任何未预期的条件和事件的发生所引发的项目风险管理,及早发现风险、及时规避风险,减小项目失败的概率。之后便制定可实施的项目开发计划,制定详细的项目任务分解,大致估计每个任务的工作量,对工作量、资源状况、任务间的相互依赖关系进行全盘考虑后安排合理的工作计划,并对计划执行有效的监控。
项目开发过程管理主要是对项目的系统详细设计、编码、调试、测试、计划控制、质量控制、版本等方面进行的管理。对评审通过的系统设计进行编码工作,代码核验,由开发人员进行单元测试,监控项目执行情况,及时调整计划和任务安排,并按照质量标准对项目开发过程进行严格的流程控制与审核,通过对计划与质量的监控可以及时发现问题,调整计划,减少因延迟造成的损失。
项目后期管理是软件开发项目的最后环节,包含测试验收、试运行与软件维护。针对软件的需求和质量要求,按照可行的测试方案与计划对项目进行测试验收,以客观评价项目。开发方应及时做好与验收方的沟通,提供一系列的开发文档供测试使用,了解测试验收方案,这将有助于顺利通过软件项目验收。软件的后期维护包括纠错性维护、适应性维护和完善性维护,不仅需要纠正软件开发中的错误,修改和扩充程序以适应新的环境,还需要满足用户新的需求。这就需要在软件开发过程中,尽可能完善细致,为后期降低维护成本打下良好基础。
[关键词]软件项目管理需求管理沟通与协作风险管理
一、引言
从上个世纪中期到现在,软件产业迅猛发展。软件产业在推动人类社会发展的同时,软件危机产生了,这是因为落后的软件生产方式无法满足迅速增长的计算机软件需求。软件危机的产生促使人们开始研究软件开发的技术手段和管理方法。
软件项目管理是为了使软件项目能够按照预定的成本、进度、质量顺利完成,通过计划、组织、控制等一系列活动,合理地配置和使用各种资源,而对成本、人员、进度、质量、风险等进行分析和管理,以达到既定目标的过程。项目管理更强调项目负责人的作用和团队的协作精神,其组织形式灵活,更加关注人的因素,关注客户和服务客户,着重于提高软件项目研发的效率和质量。在本文中,对软件项目管理中的需求管理、员工之间的沟通与协作、软件项目风险管理等方面进行了阐述。本文最后介绍了软件项目管理的几项经典技术。
二、需求管理
软件需求是每个软件开发的开端与基础。在项目需求分析阶段,双方必须全面地尽可能细致地讨论项目的应用背景、功能要求、性能要求、操作界面要求、与其他软件的接口要求,以及对项目进行评估的各种评价标准。在进行需求分析时,可以首先分析客户原有系统的建设情况,对客户的原有产品进行分析,明确建设目标等。
需求管理对软件项目能否最终实现产生至关重要的影响。任何的软件项目都必须进行合理的、细致的、一致的需求管理,只有这样才能制定正确合理的软件开发计划,软件项目才能顺利地开发完成。
三、沟通与协作
软件项目管理中的沟通与协作是指信息的交流,是使信息发挥积极作用和达到目标的手段;协作是指和谐地在一起工作的活动。沟通技术可分分四类:(1)正式书面沟通,包括项目文档和备忘录、项目里程碑和交货时间表、需求变更和错误跟踪规程、数据字典、系统分析模型(用例图等);(2)正式口头沟通,包括状态审查会、需求评审会、设计评审会、代码评审会、用户测试,项目定期例会等;(3)非正式口头沟通,包括小组碰头会、同行讨论、与直属业务领导讨论等;(4)电子沟通,包括电子邮件、内部BBS等。协作技术包括资源合理配置、开发步骤有序化、工作目标一致化、提高关心程度、信息共享等。
四、风险管理
软件项目风险管理是指对在软件开发过程中所遇到的预算和进度等方面的问题进行分析,寻求风险应对方法,做好风险管理计划。
针对软件项目中的风险管理问题,不少专家、组织提出了自己的风险管理模型。常见的主要风险管理模型如下。
1.SEI的连续风险管理模型(CRM)。SEICRM模型的风险管理原则是不断地评估可能造成恶劣后果的因素;决定最迫切需要处理的风险;实现控制风险的策略;评测并确保风险策略实施的有效性。CRM模型要求在项目生命期的所有阶段都关注风险识别和管理,它将风险管理划分为五个步骤:风险识别、分析、计划、跟踪、控制。
2.BarryBoehm模型。Boehm模型的思想核心是:10大风险因素列表。针对每个风险因素,都给出了一系列的风险管理策略。在实际操作时,Boehm以10大风险列表为依据,总结当前项目具体的风险因素,评估后进行计划和实施,在下一次定期召开的会议上再对这10大风险因素的解决情况进行总结,产生新的10大风险因素表,依此类推。Boehm模型的基本形式可描述为:RE=P(UO)3L(UO),其中RE表示风险或者风险所造成的影响;P(UO)表示令人不满意的结果所发生的概率;L(UO)表示糟糕的结果会产生的破坏性的程度。
3.软件工程风险模型(SERIM).SERIM模型要求从技术和商业两个角度对软件风险管理进行剖析,考虑的问题涉及开销、进度、技术性能等。它还提供了一些指标和模型来估量和预测风险,由于这些数据来源于大量的实际经验,因此具有很强的说服力。
五、软件项目管理技术
1.CMM。CMM是美国卡纳基梅隆大学软件工程研究所(CMU/SEI)提出的软件研发项目管理的一系列方法,它基于组织对关键过程域的支持,定义了软件过程成熟度的五个级别。级别1(初始级)描述了不成熟,或者说是未定义过程的组织。级别2(可重复级),级别3(已定义级),级别4(已管理级)和级别5(优化级)分别描述了软件过程成熟度级别递增的组织。和这些级别相关的KPA是:级别2:需求管理,软件项目计划,软件项目跟踪和监控,软件子合同管理,软件质量保证,软件配置管理。级别3:组织级过程焦点,组织级过程定义,培训大纲,集成软件管理,软件产品工程,组间协调,同行评审。级别4:定量过程管理,软件质量管理。级别5:缺陷预防,技术更新管理,过程更改管理。
2.CMMI。CMMI被看作是把各种CMM集成为一个系列的模型中。CMMI的基础源模型包括:软件CMM2.0版(草稿C),EIA-731系统工程,以及IPDCMM(IPD)0.98a版。CMMI也描述了5个不同的成熟度级别:级别1(初始级)代表了以不可预测结果为特征的过程成熟度。过程包括了一些特别的方法、符号、工作和反应管理,成功主要取决于团队的技能。级别2(已管理级)代表了以可重复项目执行为特征的过程成熟度。组织使用基本纪律进行需求管理、项目计划、项目监督和控制、供应商协议管理、产品和过程质量保证、配置管理、以及度量和分析。
3.PSP。PSP(PersonalSoftwareProcess,个体软件过程)是由CMU/SEI开发出来的,它的推出在软件工程界引起了极大的轰动,可以说是由定向软件工程走向定量软件工程的一个标志。PSP为基于个体和小型群组软件过程的优化提供了具体而有效的途径,例如如何制订计划,如何控制质量,如何与其他人相互协作等等。在软件设计阶段,PSP的着眼点在于软件缺陷的预防,其具体办法是强化设计约束准则,而不是设计方法的选择。因此,PSP保障软件产品质量的一个重要途径是提高设计质量。
六、小结
本文分析研究了软件项目管理中的需求管理、员工之间的沟通与协作、软件项目风险管理。最后结合实践,提出并分析了软件项目管理技术。我们相信随着软件工程的发展和进一步成熟,软件项目管理技术的发展会取得更大的进步。在实际项目中,我们要坚持改善软件工程的管理,并在实践中总结适合自身的经验,这样才有利于管理技术的进步和软件项目的顺利完成,创造出更高的品质、更大的效益。
参考文献:
[1]PhpMetzger,JohnBoddie.软件项目管理-过程控制与人员管理[M].北京:电子工业出版社,2002.
1 软件工程课程教学中存在的问题
软件工程课程是高职计算机应用技术、软件技术等信息类专业的必修课程,该课程是指导软件开发与维护的一门实用性极强的课程,也是一门强调实践性的课程。该类专业的学生通过学习本课程,使其了解和掌握软件开发的方法和技术,具备作为软件开发人员所需的专业技能,为从事计算机软件开发和维护工作提供科学的方法。同时,软件工程教学内容除涉及计算机软件知识外,还涉及到项目管理、管理学、经济学、心理学、人机工程学等相关知识,因此,它也是一门综合性学科。而对于这样的课程若按照常规的教学方法在高职教育中很难开展教学,传统的高职软件工程课程教学中是以讲授为主,虽然也要求学生模拟编写一些软件项目若干开发文档。然而,由于所撰写的文档资料没有与实际项目结合起来,整个作业完成过程中学生不能很好了解撰写这些文档资料的实际意义,使得学生对学习该课程没有积极性,造成整个教学效果不理想,这也是高职学生不太愿意学习和学不好软件工程课程的主要原因。
2 课程教学改革内容及实践
2.1教学改革的思路
虽然软件工程课程在高职教育中存在一些难度,但作为今后要从事软件开发及维护工作人员来说该课程的内容重要性是不言而喻的。软件开发规范化是软件开发产业化发展的基础,由美国IEEE的计算机协会(IEEE―CS)和ACM联合公布的2004版《软件工程知识体系指南》将软件工程学科分解为10个知识域,它们是:Software Requirements(软件需求)、Software Design(软件设计)、Software Construction(软件构造)、Software Testing(软件测试)、Software Maintenance(软件维护)、Software Configuration Management(软件配置管理)、Software Engineering Management(软件工程管理)、Software Engineering Process(软件工程过程)、Software Engineering Tools And Methods(软件工程工具与方法)、Software Quality(软件质量),其对软件工程的知识体系做出了全面的解释,作为软件开发人员应关注和掌握这十个方面的知识,而作为高职学生虽然不能要求都掌握以上十个方面的知识,但是诸如软件工程中的相关知识,软件开发项目计划与管理、可行性分析、需求分析、概要设计、详细设计、代码设计与编码技术、软件质量与质量保证以及面向对象分析与设计方法的知识是应该要求掌握的。这些知识是从事软件开发和维护工作的基础,也是培养学生系统思考问题、解决问题的基础,因此,作为高职计算机信息类专业的学生应很好掌握这些知识,并会应用于实际工作中。
在高职信息技术类专业中如何开展软件工程教学,提高教学质量,使学生真正掌握软件工程的相关知识、掌握软件开发与维护的方法和技能,对培养应
用型的软件人才具有十分重要的意义。我们经过几年的教学改革研究认为高职软件工程课程要彻底改变以往以讲授为主而脱离项目开发实际的教学方法,改用开设该课程的同时,将我院已开设的项目开发实训课程纳入到软件工程课程教学中来,实现理论教学与实际能力培养同步进行。在我院计算机信息类专业人才培养方案中高年级学期中均开设有软件项目开发实训课程,要求学生在指导教师指导下完成软件项目开发,在该课程考核过程中我们发现学生对软件工程课程中所学的知识不能很好应用在项目开发中,特别缺乏系统思考和分析问题的能力,软件工程的基本思想和方法不能应用与项目开发中,因此我们认为以往软件工程课程教学并不成功,教学效果并不好。为解决软件工程课程教学效果不好的问题,教师结合项目开发实训课程中学生开发项目的具体要求,上理论课的同时将软件工程的思想方法具体应用于项目开发中,达到在教学中理论联系实际,提高学生学习软件工程理论知识的兴趣,使学生能很好的掌握软件工程课程的相关知识,特别是能应用理论知识解决实际问题,培养学生系统分析和解决问题的能力。
2.2教学改革的主要内容
根据高等职业教育的教育规律和目标要求,以及软件工程课程特点和在计算机信息类专业中的定位,制订了相应的教学目标、教学内容以及考核办法。
1) 教学目标。根据培养应用型人才的需要,本课程的目标是使学生了解软件项目开发和维护的一般过程,掌握软件开发的传统方法和最新方法,并通过实践确实掌握其方法的应用,培养其实践能力,为更深入地学习和今后从事软件开发和维护工作打下良好的基础。
2) 先修与后续课程。先修课程:SQL Server、JAVA或等课程。
要求学生在软件开发实训课程中开发应用软件,需要使用SQL Server、JAVA或等软件和开发平台,因此,需要先修过相关课程。后续课程:专业实训、毕业设计等
3) 教学课时。该课程的教学主要由软件工程课程和软件开发实训课程共同组成。软件工程教学课时为54学时,软件开发实训教学课时为72学时(每周4课时连排),建议学生每周有一天的时间在软件开发实训室集中开发项目。
4) 理论课程的教学要求。基本概念和基本知识:软件与软件工程,项目计划与项目管理,生存周期与软件开发模式,结构化分析、设计与编码,面向对象分析、设计与编码,软件的评审、测试与维护。
基本技能:能用软件工程的方法参与软件项目的分析、设计、实现和维护(通过软件开发实训课程来实现)。重点:系统分析、系统设计、系统实现、系统维护。难点:需求分析、软件测试。
5) 教学方法。软件工程课程以教师讲授为主,结合案例进行教学,要求学生将课堂理论教学与实践相结合。软件开发实训课程教师给予项目开发的指导和组织项目开发各阶段的评审工作,要求学生按7~10人为一项目组,每个项目组均要承担一个管理系统的开发项目,题目可以学生自己选定,也可由教师选定,但都要对其有要求,项目要有一定的难度。每个项目组选出项目经理一人,负责整个项目的开发管理工作,各成员均要按照软件开发的具体要求分配不同的角色,并要承担其角色的主要工作职责,在整个开发过程中各阶段的工作每个同学都要参与,并要进行考核。
6) 教学内容。主要分为软件工程课的教学内容和软件开发实训课程的教学内容。
(1) 软件工程课程教学内容及教学时安排,如表1所示。
(2) 项目开发实训教学。
① 教学方法。软件项目开发实训主要是针对高年级学生在学习软件工程课程时开展的专项实训。实训采取在学校内模拟IT企业环境下完成来自企业案例或开发一些具有应用价值项目或学校教师承担的开发项目的部分开发工作,也可是学生自选项目,整个实训过程严格按照工程实施的基本思想来实施,建议实施的进度与理论教学同步进行,要求学生按7~10人一组开发项目,并推选项目经理一人,根据项目的要求设立若干岗位开展工作。
② 实训教学考核方法,如表2所示。
项目开发实训考核是以阶段评审与项目验收相结合,重视阶段评审的成绩,即强调学生实训项目中间过程考核。
阶段性评审要求各项目组提交必要的工件,对工件进行评审,并最后给项目组和个人评分,评分标准按上表。
软件开发实训成绩=阶段评审×60%+项目验收×40%。
为提高整个实训工作的效益,在项目开发实训中需重视以下几个方面。
实训环境。要构建一个模拟IT企业的开发环境,如建设成工位式的开发环境,建立计算机辅助开发平台,搭建配置管理平台、案例库、源代码库等。让学生感觉到软件开发实训室与一般的计算机房不同,它是一个模拟IT企业环境的实训室,提高学生对IT企业的认同感。
实训管理。对学生的管理应参照企业对员工管理的模式进行管理,如要求学生按时上下班,强化考勤管理和任务管理,定期通报学生的出勤及任务完成情况,通过各种方法鼓励学生完成项目开发。
实训指导。软件开发实训课是学生第一次作为一个项目开发的人员进入实训室完成一个项目的开发,会有许多的不适应,此时需要指导教师给予耐心和充分的指导,指导工作主要有两方面,一是指导学生尽快结合软件工程课程内容掌握软件开发的流程,让每个学生了解整个流程中各阶段的主要工作和标志性的工件是什么?要怎样完成自己的工作。二是要在开发过程中做技术指导,让学生能独立完成软件开发工作。
实训项目。此阶段的实训项目应具有一定的实际意义,也就是说项目最好来自于企业的真实案例,实训项目开发难易程度对于学生在有限的时间内是可实现的。我们认为高职院校应积极开展校企合作,通过校企合作获得企业项目开发的案例,对这些案例进行必要的简化成为学生实训项目,也可通过整理学校自主开发的项目为学生的实训项目。
实训评审。实训过程中要严格进行项目开发阶段的评审工作,制订相应的评审条件和具体时间要求。每一阶段均要进行评审,只有评审通过才能进行下一阶段的工作,通过评审使学生更加了解IT企业的工作流程和工作要求,通过评审也能对每个项目组的开发工作和每个学生在项目中的工作进行评价。
实训资料。实训中需要产生许多文档资料,主要完成:项目计划书、需求规格说明书、概要设计说明书、详细设计说明书、用户使用说明书以及开发规范要求等相关文档资料。实训室应为学生提高各文档资料的模板,要求学生撰写的各类文档标准化和规范化,同时也要强调学生在实训中应遵照文档要求进行项目开发工作,并要对文档资料进行评审。
项目验收。项目验收是实训工作的最后一项工作,除要检查学生项目组的所有文档资料是否齐全、软件是否能正常运行外,还要考核每一个学生所作的工作量和质量,对每一个项目要给予一定的评价,给每个学生一个评定成绩,并将所开发的项目收入实训室的案例库中。
7) 课程考核。软件工程课程的最后成绩为:理论考试成绩×60%+软件开发实训成绩×40%。
3 结语
软件工程课程与软件开发实训课程相结合进行教学,主要是想通过在课程实训中的系统分析与设计、软件项目管理、合作与交流等方面的训练,使学生能很好的掌握软件工程课程的相关知识,培养学生综合运用软件工程的思想、方法及过程等知识开发实际项目的能力。在项目实践中要注重的是项目和过程管理、重视学生的组织和管理能力以及团队合作精神的培养,为学生在今后的专业实训、毕业设计以及今后工作打下良好的基础。
Researching and Practicing on Course Teaching Reform of Software Engineering
MA Yongtao, CHENG Jing
(School of Vocational & Technical, Yunnan Nationalities University, Kunming 650031, China)