论文部分内容阅读
摘要:近年来,企业在信息化建设的过程当中,企业与各层软件项目开发商进行了密切的合作,很多项目的研究与开发离不开各企业。软件项目管理在此机遇下,应运而生,其中风险管理是软件项目管理中的重要组成部分,本文对软件项目管理及其风险管理的过程进行了探讨跟研究。
关键词:企业信息化 软件项目管理 风险 层次分析
1 软件项目管理论述
1.1 什么是软件项目管理
“软件项目管理”中所谓的“项目”指的是包含有多个不同活动的一个系统,其中的所有活动因具有相同的目标,使得它们之间产生了复杂的相互刺激、相互作用,从而使得此系统具有独特的功能。而“软件项目”说明这是一个与计算机或互联网挂钩的“项目”,这其中的所有活动都要在特定的时间、预算、环境、资源限定内完成。
而软件项目管理则是为了使这些由各种与互联网挂钩的活动所构成的系统,能够按照特定的环境顺利完成,对该系统的完成期限、人员、资源、进度、质量、风险等进行分析和管理的活动,该系统的最终目的是使得客户满意度以及公司获利度都达到最大化。虽然光靠管理还不能完全达到此目标,但软件项目管理无疑是一个催化剂,它有利于将开发人员的个人开发能力转化成企业的开发能力,从而提高企业的整体竞争力[1]。
1.2 软件项目管理和其他类型的项目
经分析,与其他项目的管理方式相比,软件项目的管理显然具有某些不同的特征[2]:
(1)不可见性
一个像盖房子或修铁路这样的具有型制品的项目,其每个阶段的进展,人们是可以直接看到的,而 “软件项目”的制造过程中,客户是无法每一步都看到的。这说明软件项目管理具有不可见性的特点,而想要了解软件项目管理,要考虑的是如何使其中的每一个过程都变得可视化。
(2)复杂性
大到航空母舰,小到一颗糖果,以及其他实体制品,每一块钱是如何花费的是可以看得见的。但是对于软件项目,如何计量钱花在这些软件产品上的多少,那就复杂的多了。
(3)一致性
传统的“制造者”一般都使用一些物理系统例如金属、塑料、植物或其他实体材料来进行作业。这些物理系统所包含的实体材料虽然也有一定的复杂性,但是它们都服从某些物理或化学定律。同样的道理,对于软件项目中的所有产品,软件开发者也需遵循一定的准则,比如他们的所作所为都必须与客户需求保持一致。
因此,虽然参加软件项目的制作与维护工作不只一个成员,可每个成员所做的最终成果都必须具有一致性,而这就需要管理者来协调和解决[3]。
(4)灵活性
软件可以被方便的改变,这是软件的长处之一。然而这也意味着,一旦有外部的变更,例如客户对软件的需求有所变更,或者当软件系统接入一个组织的系统时,这就期望改变软件来适应其他组件,而不是改变其他组件来适应软件。因而只要外界环境有变化,比如用户需求有变,软件系统就会经常被变更。
1.3 软件项目管理的内容
不论是个人还是公司团队协作开发,软件项目管理中的六个阶段:需求分析、概要设计、详细设计、编码、测试、安装及维护都是缺一不可的[4]。
在八十年代初,美国著名软件工程学者B.W.Boehm 总结出了七条软件开发过程中需要遵循的准则[5]。它们分别是:
1.采用用分阶段型的生命周期来严格计划管理;2.坚持进行阶段评审;3.实行严格的产品控制;4.采用现代程序设计技术;5.结果应能够清楚地审查;6.开发小组的人员应该少而精;7.承认并不断改进传统软件工程的实践性。
1.4 为什么软件项目管理很重要
首先是成本的问题。2002年至2003年,英国政府花费在ICT项目上的经费已经远远超过公路系统上的经费[6]。
非常不幸的是,投入经费再多,也不是每个项目都能成功。在2003年度的一份分析報告中,美国Standish Group通過分析13522个项目得出结论:只有1/3的项目是成功的;82%的项目延期,43%的项目超出预算。
从以上的案例可以发现,导致该项目失败的最大原因与项目管理缺陷有关。因此,要想使得软件项目成功、高效的进行,不仅仅要多投入,还要找到有效的管理方法,才能前后兼顾,运筹帷幄。
2 风险论述
2.1 风险的定义
在企业软件项目开发中,常常会出现超出预算延迟时间,甚至失败的可能性[7] [8]。不确定性导致了风险和潜在损失的发生。因此,风险通常被定量的表述为风险发生的概率与其可能引起的损失程度的乘积。Charette认为潜在的损失应该通过一定的方法进行推测,Kumamoto和Henley认为效用值也很重要。综合他们的看法可以得到分析风险的四要素:风险事件(what can go wrong)、风险概率(likelihood)、风险值(value)、效用值:
因此,软件项目管理中将会出现的各种不确定因素,倘若我们能够提前预测到风险,未雨绸缪,就可以最大限度减少风险的发生。这是风险管理中最有效的手段。
2.2 风险分类
根据软件项目管理内容,我们可以将风险分为:
(1)技术风险。
主要体现在影响软件生产率的各种要素上,比如:需求识别不完备、客户对需求缺乏认同、客户不断变化的需求、需求没有优先级、识别需求中客户参与不够、设计质量较低,重复返工、过高估计了新技术对生产效率的影响、对应用领域熟悉度不够、采用的开发平台不符合企业实际情况等等。
(2)管理风险。
比如:项目目的不明确、项目计划和任务识别不完善、项目组织结构降低生产效率、缺乏项目管理规范、团队沟通不协调等等。
(3)人员风险。 比如:人员素质低下、缺乏足够的培训、开发人员和管理人员关系不佳、缺乏有效的激励措施、缺乏项目急需技能的人员、团队成员因为沟通导致重复返工等等。
(4)商业风险。
2.3 风险管理的重要性
风险管理是属于未雨绸缪的范畴,因此,有效的风险管理可以避免企业在人员、财务、法律、社会责任以及投资方面的各种风险,从而减少企业必须要的损失,保证稳定的正增长的经营活动。因此对于最求稳步成长的企业来说,风险管理在整个管理流程中都显得尤其重要。
3 风险管理的过程
项目风险管理流程一般由若干个主体部分所构成,这些主体之间不仅有着相互作用的关系,而且与流程外的其他管理也会互相影响。不同的项目管理组织从不同的角度对项目风险流程进行划分。
风险管理的过程中,其各个阶段的关系,如图1所示。
3.1 识别风险
识别风险的步骤中最关键的一步是将不确定性转变为明确的风险。根据一系列方法来确定风险的类型,进而给出对策和建议。风险识别的过程如图2所示。其中风险识别的输入可以是项目的WBS、项目计划、历史项目数据、项目资源要求等信息。在识别过程中故障树、风险树等等都是常用的风险识别工具,项目风险的准确识别与否取决于组织决策者的知识与经验。
3.1.1 检查单法
项目识别最常用也是最简单的方法是建立风险项目检查表。如表3-1所示,为一个软件开发风险检查单的修订版。理想的情况下,项目相关人员的代表小组应该核对一遍项目检查表,以判断哪些风险可能会在项目中出现,然后根据类型来看决策。
项目管理方法认为在项目实施的过程中,评审可以识别出很多问题以及解决方法。有时候,这些问题可以添加到组织风险检查单队列中,以便于新的项目使用。
3.1.2 头脑风暴法
在日常的组织决策中,由于组织中成员们心理作用的影响,决策结果很容易倾向于权威者或大多数成员的意见,由此形成了“群体思维”。而这种群体思维使得组织中成员缺乏批判精神和创造能力,最重要的是这损害了决策质量。为了保证组织管理决策的创造性和有效性,学术界研究并改善了组织决策的新方法,头脑风暴法就是其中的一个。
落实到软件项目开发中,头脑风暴法就是由项目小组成员在一起,不受项目权威影响,每个人充分发挥自己的能力思考项目中可能的风险,自由讨论和发言,充分预测项目中出现的各种情况,最终汇总成为项目的风险表。在此中,头脑风暴法被运用的目的是获得一份客观的、公平的、综合的软件项目风险列表。
3.2 风险评估
風险识别时的一个问题,也是最值得考虑的的问题,就是风险的列表潜在是无限的。为了区分出其中的危害和可能出现的更大的风险,可以通过下面的公式对风险的影响进行评估:
风险影响(RE)=PC
其中可能性P(0P1)是指出现不如意结果的可能性。损失C是不如意的结果发生所带来的后果。而后果是由风险、成本、进度、技术等要素之间的关系来决定。通过风险影响(RE)来量化风险为所有已知风险提供了相对的优先顺序。例如:
时间:测试可能会持续两个多月;可能性=0.8。
风险影响=0.83个月测试带来的损失
正确程度:独立完成检验可能会耗资200 000;可能性=0.7
风险影响=0.7200 000元
成本:恢复测试需要两个工程师花一个月的时间;可能性=0.95
风险影响=0.95恢复测试的成本。
而大多数管理者拒绝对损失或者某些事情发生的可能性进行精确的估计,这其中的原因是大多数的估计都是猜测出来的。因此我们在本文用层次分析法来评估系统:在估计事物的区别时,可用中等、较强、强、较弱、弱五种判断很好的表示。分别用1、3、5、7、9五个数值来表示。当需要更高的精度时,还可以在相邻判断之间做出比较,其间用2、4、6、8来表示。
3.3 风险监控
风险监控是项目风险管理的最后一项,风险在项目的推进过程中可能会增大或者减弱,所以需要进行风险来检查每个风险的化解程度,如果最初的化解措施是无效的,要及时调整应对办法来化解风险,并识别随着它们消失而产生的新的風险。
风险监控的内容包括:
1) 不断地跟踪风险发展变化;
2) 不断地识别新的风险;
3) 不断地分析风险的产生概率;
4) 不断的整理风险表;
5) 不断地规避优先级别高的风险。
4 结论
企业的信息化带来的是软件项目管理的日趋成熟,其中风险也会随着它的进展而不断发生变化,为了有效的控制项目的各项指标,很有必要进行软件项目的风险管理,如果忽视风险管理,可能会导致项目的失败。风险管理包括六个步骤:风险识别、风险分析、风险计划制定、风险应对、风险控制。这六个步骤不是按照串行方式一步一步走的,而是不断循环进行的。最终风险管理的结果要落实到项目管理的文档中,作为历史资料留存。
关键词:企业信息化 软件项目管理 风险 层次分析
1 软件项目管理论述
1.1 什么是软件项目管理
“软件项目管理”中所谓的“项目”指的是包含有多个不同活动的一个系统,其中的所有活动因具有相同的目标,使得它们之间产生了复杂的相互刺激、相互作用,从而使得此系统具有独特的功能。而“软件项目”说明这是一个与计算机或互联网挂钩的“项目”,这其中的所有活动都要在特定的时间、预算、环境、资源限定内完成。
而软件项目管理则是为了使这些由各种与互联网挂钩的活动所构成的系统,能够按照特定的环境顺利完成,对该系统的完成期限、人员、资源、进度、质量、风险等进行分析和管理的活动,该系统的最终目的是使得客户满意度以及公司获利度都达到最大化。虽然光靠管理还不能完全达到此目标,但软件项目管理无疑是一个催化剂,它有利于将开发人员的个人开发能力转化成企业的开发能力,从而提高企业的整体竞争力[1]。
1.2 软件项目管理和其他类型的项目
经分析,与其他项目的管理方式相比,软件项目的管理显然具有某些不同的特征[2]:
(1)不可见性
一个像盖房子或修铁路这样的具有型制品的项目,其每个阶段的进展,人们是可以直接看到的,而 “软件项目”的制造过程中,客户是无法每一步都看到的。这说明软件项目管理具有不可见性的特点,而想要了解软件项目管理,要考虑的是如何使其中的每一个过程都变得可视化。
(2)复杂性
大到航空母舰,小到一颗糖果,以及其他实体制品,每一块钱是如何花费的是可以看得见的。但是对于软件项目,如何计量钱花在这些软件产品上的多少,那就复杂的多了。
(3)一致性
传统的“制造者”一般都使用一些物理系统例如金属、塑料、植物或其他实体材料来进行作业。这些物理系统所包含的实体材料虽然也有一定的复杂性,但是它们都服从某些物理或化学定律。同样的道理,对于软件项目中的所有产品,软件开发者也需遵循一定的准则,比如他们的所作所为都必须与客户需求保持一致。
因此,虽然参加软件项目的制作与维护工作不只一个成员,可每个成员所做的最终成果都必须具有一致性,而这就需要管理者来协调和解决[3]。
(4)灵活性
软件可以被方便的改变,这是软件的长处之一。然而这也意味着,一旦有外部的变更,例如客户对软件的需求有所变更,或者当软件系统接入一个组织的系统时,这就期望改变软件来适应其他组件,而不是改变其他组件来适应软件。因而只要外界环境有变化,比如用户需求有变,软件系统就会经常被变更。
1.3 软件项目管理的内容
不论是个人还是公司团队协作开发,软件项目管理中的六个阶段:需求分析、概要设计、详细设计、编码、测试、安装及维护都是缺一不可的[4]。
在八十年代初,美国著名软件工程学者B.W.Boehm 总结出了七条软件开发过程中需要遵循的准则[5]。它们分别是:
1.采用用分阶段型的生命周期来严格计划管理;2.坚持进行阶段评审;3.实行严格的产品控制;4.采用现代程序设计技术;5.结果应能够清楚地审查;6.开发小组的人员应该少而精;7.承认并不断改进传统软件工程的实践性。
1.4 为什么软件项目管理很重要
首先是成本的问题。2002年至2003年,英国政府花费在ICT项目上的经费已经远远超过公路系统上的经费[6]。
非常不幸的是,投入经费再多,也不是每个项目都能成功。在2003年度的一份分析報告中,美国Standish Group通過分析13522个项目得出结论:只有1/3的项目是成功的;82%的项目延期,43%的项目超出预算。
从以上的案例可以发现,导致该项目失败的最大原因与项目管理缺陷有关。因此,要想使得软件项目成功、高效的进行,不仅仅要多投入,还要找到有效的管理方法,才能前后兼顾,运筹帷幄。
2 风险论述
2.1 风险的定义
在企业软件项目开发中,常常会出现超出预算延迟时间,甚至失败的可能性[7] [8]。不确定性导致了风险和潜在损失的发生。因此,风险通常被定量的表述为风险发生的概率与其可能引起的损失程度的乘积。Charette认为潜在的损失应该通过一定的方法进行推测,Kumamoto和Henley认为效用值也很重要。综合他们的看法可以得到分析风险的四要素:风险事件(what can go wrong)、风险概率(likelihood)、风险值(value)、效用值:
因此,软件项目管理中将会出现的各种不确定因素,倘若我们能够提前预测到风险,未雨绸缪,就可以最大限度减少风险的发生。这是风险管理中最有效的手段。
2.2 风险分类
根据软件项目管理内容,我们可以将风险分为:
(1)技术风险。
主要体现在影响软件生产率的各种要素上,比如:需求识别不完备、客户对需求缺乏认同、客户不断变化的需求、需求没有优先级、识别需求中客户参与不够、设计质量较低,重复返工、过高估计了新技术对生产效率的影响、对应用领域熟悉度不够、采用的开发平台不符合企业实际情况等等。
(2)管理风险。
比如:项目目的不明确、项目计划和任务识别不完善、项目组织结构降低生产效率、缺乏项目管理规范、团队沟通不协调等等。
(3)人员风险。 比如:人员素质低下、缺乏足够的培训、开发人员和管理人员关系不佳、缺乏有效的激励措施、缺乏项目急需技能的人员、团队成员因为沟通导致重复返工等等。
(4)商业风险。
2.3 风险管理的重要性
风险管理是属于未雨绸缪的范畴,因此,有效的风险管理可以避免企业在人员、财务、法律、社会责任以及投资方面的各种风险,从而减少企业必须要的损失,保证稳定的正增长的经营活动。因此对于最求稳步成长的企业来说,风险管理在整个管理流程中都显得尤其重要。
3 风险管理的过程
项目风险管理流程一般由若干个主体部分所构成,这些主体之间不仅有着相互作用的关系,而且与流程外的其他管理也会互相影响。不同的项目管理组织从不同的角度对项目风险流程进行划分。
风险管理的过程中,其各个阶段的关系,如图1所示。
3.1 识别风险
识别风险的步骤中最关键的一步是将不确定性转变为明确的风险。根据一系列方法来确定风险的类型,进而给出对策和建议。风险识别的过程如图2所示。其中风险识别的输入可以是项目的WBS、项目计划、历史项目数据、项目资源要求等信息。在识别过程中故障树、风险树等等都是常用的风险识别工具,项目风险的准确识别与否取决于组织决策者的知识与经验。
3.1.1 检查单法
项目识别最常用也是最简单的方法是建立风险项目检查表。如表3-1所示,为一个软件开发风险检查单的修订版。理想的情况下,项目相关人员的代表小组应该核对一遍项目检查表,以判断哪些风险可能会在项目中出现,然后根据类型来看决策。
项目管理方法认为在项目实施的过程中,评审可以识别出很多问题以及解决方法。有时候,这些问题可以添加到组织风险检查单队列中,以便于新的项目使用。
3.1.2 头脑风暴法
在日常的组织决策中,由于组织中成员们心理作用的影响,决策结果很容易倾向于权威者或大多数成员的意见,由此形成了“群体思维”。而这种群体思维使得组织中成员缺乏批判精神和创造能力,最重要的是这损害了决策质量。为了保证组织管理决策的创造性和有效性,学术界研究并改善了组织决策的新方法,头脑风暴法就是其中的一个。
落实到软件项目开发中,头脑风暴法就是由项目小组成员在一起,不受项目权威影响,每个人充分发挥自己的能力思考项目中可能的风险,自由讨论和发言,充分预测项目中出现的各种情况,最终汇总成为项目的风险表。在此中,头脑风暴法被运用的目的是获得一份客观的、公平的、综合的软件项目风险列表。
3.2 风险评估
風险识别时的一个问题,也是最值得考虑的的问题,就是风险的列表潜在是无限的。为了区分出其中的危害和可能出现的更大的风险,可以通过下面的公式对风险的影响进行评估:
风险影响(RE)=PC
其中可能性P(0P1)是指出现不如意结果的可能性。损失C是不如意的结果发生所带来的后果。而后果是由风险、成本、进度、技术等要素之间的关系来决定。通过风险影响(RE)来量化风险为所有已知风险提供了相对的优先顺序。例如:
时间:测试可能会持续两个多月;可能性=0.8。
风险影响=0.83个月测试带来的损失
正确程度:独立完成检验可能会耗资200 000;可能性=0.7
风险影响=0.7200 000元
成本:恢复测试需要两个工程师花一个月的时间;可能性=0.95
风险影响=0.95恢复测试的成本。
而大多数管理者拒绝对损失或者某些事情发生的可能性进行精确的估计,这其中的原因是大多数的估计都是猜测出来的。因此我们在本文用层次分析法来评估系统:在估计事物的区别时,可用中等、较强、强、较弱、弱五种判断很好的表示。分别用1、3、5、7、9五个数值来表示。当需要更高的精度时,还可以在相邻判断之间做出比较,其间用2、4、6、8来表示。
3.3 风险监控
风险监控是项目风险管理的最后一项,风险在项目的推进过程中可能会增大或者减弱,所以需要进行风险来检查每个风险的化解程度,如果最初的化解措施是无效的,要及时调整应对办法来化解风险,并识别随着它们消失而产生的新的風险。
风险监控的内容包括:
1) 不断地跟踪风险发展变化;
2) 不断地识别新的风险;
3) 不断地分析风险的产生概率;
4) 不断的整理风险表;
5) 不断地规避优先级别高的风险。
4 结论
企业的信息化带来的是软件项目管理的日趋成熟,其中风险也会随着它的进展而不断发生变化,为了有效的控制项目的各项指标,很有必要进行软件项目的风险管理,如果忽视风险管理,可能会导致项目的失败。风险管理包括六个步骤:风险识别、风险分析、风险计划制定、风险应对、风险控制。这六个步骤不是按照串行方式一步一步走的,而是不断循环进行的。最终风险管理的结果要落实到项目管理的文档中,作为历史资料留存。