基于Delphi7的项目风险管理支持系统.doc
基于 Delphi7 的项目风险管理支持系统 摘 要关键字:风险管理、 Delphi7、项目管理、支持系统。 风险管理是项目管理的一个重要领域,我试着学习 Delphi7 来构建一个信息系统,使得经理们在进行风险管理的时候更加方便;之所以选择 Delphi7 作为软件开发工具是因为它具有强大的面向对象的编程技术,并且这些工具都能与数据库( InterBase, SQL Server,Paradox,DB2 已广泛运用)实现连接。 RM1(Risk Management version 1.0)包括后台的 Paradox7 数据库,以及用 Delphi7 来编写的前台用户界面。作为风险管理的重要组成部分,风险管理分为四个步骤。它们分别是: 识别风险 ,估计风险 ,评价风险和管理风险。第一步辅助我们将潜在的可能影响项目整体水平的风险识别出来;我们在第二步中主要是运用数学的方法将风险量化;第三步是将量化出来的风险分级并显示出总体情况;最后一步是给出风险的应对策略并对风险实行监控。该系统将注意力集中在风险管理的两个主要方面。一个是能给高级经理提供一个对本公司所有项目一个总览的功能,从而对每一个项目都能实现监控;第二个功能是满足项目经理的需要,使得他们不仅能够监控本项目现阶段的风险水平,同时还能够与项目成员一起通过风险管理(广义风险管理)的识别,分析,评 估和管理(狭义风险管理)等步骤得出新阶段的风险管理政策。因此,该系统包含两个主界面,以供来自不同用户角色的人使用。当然,系统通过一个登陆界面以及后台的数据表能将他们区别开来。当然,我在项目管理领域的研究是相当粗浅的, RM1 与实际运用的系统尚有一段距离。不过这一次是一个大胆的尝试,将理论知识运用到实际中去,开发了一个应用程序的原形,我们完全能够对该原形进行修改和再次开发直到用户满意为止。 目 录 第 一 章 前 言----------------------------------------------------------5 第 二 章 风险管理基础知识 2.1 风险识别-------------------------------------------------6 2.2 风险评估-------------------------------------------------6 2.3 识别和评估表---------------------------------------------10 2.4 风险评价-------------------------------------------------11 2.5 风险分析方法简介 -----------------------------------------12 2.6 风险管理-------------------------------------------------12 2.7 本章小结-------------------------------------------------13 第 三 章 RM1 的组成结构 3.1 RM1 是如何实现风险识别的 ---------------------------------14 3.2 RM1 是如何实现风险评估的 ---------------------------------14 3.3 RM1 是如何实现风险评价的 ---------------------------------15 3.4 RM1 是如何实现风险管理的 ---------------------------------15 3.5 RM1 是如何实现对项目风险的主观评分 -----------------------19 3.6 RM1 是如何实现登陆和Splash 界面的 ------------------------19 3.7 本章小结-------------------------------------------------20 第 四 章 结束语 4.1 全文总结 -------------------------------------------------21 4.2 心得和体会 -----------------------------------------------214.3 致谢-----------------------------------------------------21 4.4 参考文献-------------------------------------------------21 第 一 章 前 言我们首先来看一则报道:‚据最新消息:在已经过去的 2002 年,三峡工程施工队完成了导流明渠封堵,举世瞩目的三峡工程取得了阶段性胜利。在高强度的施工过程中,三峡工程总公司狠抓工程质量问题,确保千年工程以质为本;工程资金快速到位,确保工程如期进行;各专业施工队把安全施工作为一项基本准则,继续保持着开工十年来零死亡的安全记录;移民和对口支援工作继续展开, 135M 蓄水位以下的处理项目和移民安置顺利 ““““““ ‛‚同三峡工程一样,我国现阶段的载人航天、南水北调、西气东送等工程都具有投资大、收益高、风险大的特点。因此,对这些关系到国计民生的工程实施风险管理,是十分适宜的。同样,在国民经济微观活动中,有很大一部分是属于有事先设定结束日期的一次性项目,如工程建设、农业技术推广、软件开发、科学研究、技术培训、影视制作、设立新服务、研制新产品、处理突发事件等。国民经济各部门都有大量的项目活动。有些组织,企业活动主要采取项目的形式,如工程设计和施工、软件开发等。一个项目,从立项、可行性研究、规划、评估、审核、准备 、组织、实施,直到完成是一个整体过程。大量的中小型项目更与国民经济和人民生活休戚相关。因此,项目风险管理,作为现代项目管理的一个重要组成部分,其重要性不言而喻。一般而言,风险管理分为六个小步骤,它们是:风险识别、风险估计、风险评价、风险规划、风险控制及风险监督。而包括以上六个步骤的风险管理通常称为广义风险管理。其中的前三个步骤,即识别、估计、评价又称为风险分析;后三个步骤,即规划、控制、监督又称为狭义风险管理。因此可以用下图来表示它们之间的关系: 结合以上理论特点,同时为了使得软件易于实现,本文将风险管理分为四个步骤,它们分别是:风险识别、风险评估、风险评价和风险管理。 第 二 章 风险管理基础知识 风险分析的作用是将潜在的可能影响项目成果的因素识别出来。在具体 的操作过程中风险分析可以分为三步进行。第一步 :收集资料;第二步 :根据直接或间接的症状将潜在的风险识别出来;第三步 :将我们识别出来的风险对应风险征兆表进行估计(包括估计可能性和损失值)。 2.1 风险识别 2.1.1 收集资料我们要判断某件事物当前所处的状态如何,当然是要看它的一些外在的迹象和表现。因此,资料和数据是否已掌握,并且这些资料是否如实地反映情况是整个风险管理的基础。具体的资料包括:( 1)项目产品或服务的说明书;项目完成之后,要向市场提供产品或服务。项目产品或服务的性质涉及到多种不确定性,在很大程度上决定 了项目会遇到何种风险。有一句英国谚语是:bring coal to Newcastle.中文按字面译为:运煤到纽卡斯尔。但它的真正意义为‚多此一举‛,因为纽卡斯尔是英国著名的煤产地,一般都往外运煤。同理,如果我们不收集项目的实际情况:即没有掌握运煤到纽卡斯尔是否有销路就盲目投资,那么项目注定要失败。( 2)项目的前提、假设和制约因素;不管项目管理班子和其他有关各方是否意识到,项目的建议书、可行性分析报告、设计或其他文件一般都是建立在一些前提和假设之上的。我们必须寻找资料来核实这些前提和假设是否成立。例如,我们 要在某所著名大学旁修建一栋大楼。按照正常速度,工程应在两年内完成,但是由于市政府规定,靠近学校的工程夜间不能施工。同时,工程车辆必须绕行已躲避行人和自行车。由此,原来的施工进度的假设不能成立,必须另行测算。( 3)可与本项目类比的先例;即以前曾经进行过的项目,其成功的经验和失败的教训都可以用来识别即将进行的项目。实际表明,此种资料最为有用。 2.1.2 风险形势估计风险形势估计是要明确项目的目标、战略、战术以及实现项目目标的手段和资源,以确定项目及其环境的变数;同时还要明确项目的前提和假设;并最终比较项目行动路线 和判断项目最终能否实现目标。2.1.3 根据直接或间接的症状将风险识别出来,进入如下将要讲到的风险评估阶段。 2.2 风险评估我们要做决策,必须选定不同的行动路线,而不同的路线包含不同的风险,我们必须采用定性或定量的方法对风险进行估计。 2.2.1 风险评估的主要内容 l 选定计量项目变数的标度(标识、序数、基数、比率) l 确定风险事件发生的概率 l计算风险的数值大小 l确定估计数值的变化范围及其限定条件2.2.2 获取风险事件发生概率的方法 1)根据历史资料 2)根据经验,主观判断2.2.3 风险评估的方法 1) 确定型风险评估 这种方法的特点是假定项目各种状态出现的概率是 1,计算并比较各种方案在不同状态下的后果,进而选择出风险不利后果最小,有利后果最大的方案的过程可称之为确定型风险估计。其中比较典型的有盈亏平衡分析。 盈亏平衡分析研究项目产品或服务数量、成本和利润三者之间的关系,以达到收益与成本平衡,即利润为零时的情况为基础,测算项目的生产负荷状况,计量项目的风险承受能力。盈亏平衡点越低,标明项目适应市场变化的能力越强,承受风险的能力越大。设项目正常运转时每年向市场提供产品和服务的数量为 Q,单价为 P,单位成本,即变动成本为 W,税率 为 r,年固定成本为 F。于是 项目年总收入为 Tr = PQ 年总成本为 Tc= WQ+ rQ + F 年总利润为 P= Tr- Tc= pQ – WQ-rQ-F =(P-W-r)Q-Fl 盈亏平衡点 年总利润 P 等于零,即 Tr= Tc 时的产品或服务的数量 Q 称为盈亏平衡点或盈亏界限。产量盈亏界限为 Qb=F/(p-w-r)项目年总收入 Tr 和年总成本 Tc 同产量的关系以及产量盈亏界限 Qb 表示在图 2-1 中。 从图中可以看出,当实际年产量达到产量盈亏界限时,项目不会亏损;超过产量盈亏界限时,项目就能盈利;而达不到产量盈亏界限时,项目就要亏损。从风险管理的角度,项目管理班子要设法确保项目的产出达到甚至超过产量盈亏界限。l 生产负荷率设项目的年设计产出能力为 Qt,则比值 BEP( Q)= Qb/Qt 叫做项目的生产负荷率。生产负荷率是项目生产负荷状况的重要指标。在项目的多种方案比较中,生产负荷率越低越好。一般认为,当生产负荷率不超过 0.7 时,项目可承受较大风险。 下面我们来看一看比较普遍的不确定型风险分析 2)不确定型风险估计:如果对于各种自然状态发生的概率一无所知,而且对于有哪种状态可能出现,也心中无数。在这种情况下,可以遵循几种不同的公认原则进行估计。e.g(案例选自《项目风险管理》 卢有杰、卢家仪 清华大学出版社 Page66)东北林区搞木材综合利用的合成板生产项目。因生产过程中要产生大量的污水, 建立了 污水处理设施。项目竣工验收之后,应该马上投产。这时,有人提出:该污水处理设施采用的处理工艺以前在该地区并未使用过,行不行还不知道,项目管理班子听到后形成了两套观点:一,认为没有问题,立即投产。二,请设计单位重新设计污水 处理工艺,采用稳妥可靠的工艺流程但这样以来,就要增加费用。各方案的损益矩阵为下表 2-1: 表 2-1 根据决策者对于风险的喜好程度不同,有不同的原则 — 小中取大原则(沉稳型决策) 从各方案中找出最小的,然后在从中选出最大的方案作为选择 — 大中取大原则(冒险型决策) 从各方案中找最大的,在从各方案中选择最大的作为选择 — 最大数学期望原则(比较理性)(依据等可能概率) E{A1}=x11p11 + x12p12 =900 *0.5 +( -500) *0.5=200 E{A2}=x21p21 + x21p21 =630*0.5 + 630*0.5 =630 按该原则就选择方案 2。 我们对该问题进行以下延伸:假设项目管理班子想请一家环保咨询公司来检查一下污水处理工艺是否有问题,但该公司只能检查,不能设计。咨询费用是 5 万元。项目管理班子现在有第三个方案:即请咨询公司来检查,如果有问题,再重新设计,因此有表 2-2: 第三种方案的数学期望为: E{A3}=x31 p + x32(1-p)=270p+625 如果按照等可能概率,则有 E{A1}=200; E{A2}=630; E{A3}=760 因此我们花了 5 万元的咨询费,获得了 E{A3}-E{A2}=130 万元的收益,也就是说:咨询公司的完全情报 价值为 130 万。因此 ,花钱买情报,值!当然,如果现实中的咨询花费大于情报的价值的话,那就没有必要购买情报。 然而更贴近实际的情况却是这样的:现实中的问题并不能通过情报就一定能解决。即不完全情报的情况:由于仪器的原因,环保公司并不能完全保证能够查出污水处理工艺中的问题。如果污水处理真有问题,他们有 98%的可能查出来。相反,如果污水处理没有问题,它却有 5%的可能说工艺有问题。因此还需要请咨询么? 我们用 P{A1}和 P{A2}表示采用方案一和方案二的概率;用 B1 和 B2 分别表示采用方案一和方案二的收益或损失,实际有问题的概率设为 P{F},没有问题的概率设为 P{Nf}.则由于请环保公司来检查而导致的两种方案后果的数学期望是 E{A3}=P{A1}B1 +P{A2}B2 B1=P{Nf|A1}*900+P{F|A1}*(-500) B2=P{Nf|A2}*630+P{F|A2}*630 按全概率公式,有 P{A1}=P{A1|F}P{F} + P{A1|Nf} P{Nf} P{A2}=p{A2|F}P{F} + P{A2|Nf} P{Nf}依据条件概率公式,依次算出 P{Nf|A1},P{F|A1},P{Nf|A2},P{F|A2}代入算出 B1=870.6 ,B2=630 最终 E{A3}=P{A1}B1 +P{A2}B2=746.7 也就是说,虽然比起完全情报的 760 的收益少了 13.3 万元,但是仍然比第二种方案高了 746.7-630=116.7 万的收益 ,花钱买不完全情报,值!刚才我们叙述了确定型风险分析,发现它有任何事件都一定发生的特点;又探讨了不确定型风险分析,发现我们是在对该类事件是否发生一无所知的基础上进行风险分析的;现在我们来讨论如下情形。 3)随机型风险分析,它的特点是我们知道有哪些事件出现,并且知道这些事件发生的概率(可能性大小) 。 e.g (案例选自《项目风险管理》 卢有杰、卢家仪 清华大学出版社 Page75)某环保公司,经政府授权准备建设一个城市污水处理系统,希望通过向用户收取污水排放服务费回收建设投资并维系本系统的长期运转。能否达到这一目标取决于有多少用户愿意将自己的污水排放管道接到这个新的系统上来。为此,该环保公司进行了抽样调查。根据调查结果,把将来用户的情况分成三种状态:用户多,用户一般和用户少。各种状态出现的概率如下。在调查的基础上提出了三种建设方案:大规模,中等规模和小规模。三种方案在不同的用户情况下盈亏数额也列在表 2-3 中 相应的可以依据的原则如下 l 最大可能原则 选择出现概率最大也即最 有可能发生的选项进行建设。 l 最大数学期望原则 E{A1}=300*0.25+190*0.55+120*0.20=203.5 E{A2}=240*0.25+200*0.55+150*0.20=200E{A3}=165*0.25+165*0.55+165*0.20=165 选择具有最大数学期望的选项进行建设。 l 最大效用数学期望原则如果以上的损益表情况变为如下的表 2-4: 那么有 E{A1}=304*0.25+240*0.55- 40*0.20=200 E{A2}=240*0.25+200*0.55+150*0.20=200 即如果按照最大数学期望原则的话,A1 和 A2 方案无法区别其好坏,因此有最大效用数学期望原则。最大效应数学期望能够反映决策者对风险的个人感觉,我们对决策 者做心理测试 ,得出如图 2-2所示的效用曲线 因此三个规模的效用数学期望分别是: E{A1}=U(304)*0.25+U(240)*0.55+U(-40)*0 =1*0.25+0.9*0.55+0 =0.735 同理 E{A2}=U(240)*0.25+U(200)*0.55+U(150)*0.20 =0.778 图 2-2E{A3}=0.7 因此,用户可以选择第二种方案进行设计。 2.3 识别和评估表以上,我们介绍了风险识别和评估,表 2-5 是国际上比较规范的识别和估计表。 表 2-5 TeraQuest August,1999.Permission granted for use and modification, given that this citation remains in the resulting copies. 2.4 风险评价此前,我们定性或定量地对单个风险进行了估计,现在我们需要综合地考虑所有风险对项目的共同作用,并随之采取不同的应对措施。 — 确定风险评价基准(项目应达到的目标通常情况下即为基准) — 确定项目整体风险水平(考虑那些出现概率大,但是破坏力小的以及出现几率小,但其后果却是灾难性的风险,而且要注意那些风险的耦合) — 将项目 风险水平与基准进行比较 2.4.1 我们主要介绍主观评分法:主观评分法:它为每一个风险赋予一个权值,例如从 0到 9 之间的某一个数。风险越大,权值越大。我们以例子来阐明该问题: e.g(案例选自《项目风险管理》 卢有杰、卢家仪 清华大学出版社 Page89)某项目要经过 5 个工序。表 2-6 的横向是项目识别出来的 5 个风险。表的竖向是项目的 5个工序。假定项目整体风险评价基准为 0.6。每一个工序的 5 个风险权值从左至右加起来,和数放在表最右边的一栏;然后这六个和数在从上到下加起来,全部风险权值之和放在表最下一行的右端。另外,在 计算最大风险权值和。用表的行数乘以列数,再乘以表中最大风险权值,就得到最大风险权值和。全部风险权值和除以最大风险权值和就是该项目整体风险水平。各单个风险水平可类似比较 表 2-6 表中最大风险权值是 9,因此最大风险权值和 =5*5*9=225。全部风险权值和 =114,该项目整体风险水平 =114/225=0.5067<0.6。因此该风险可以接受。 2.5 风险分析方法简介 2.5.1 风险识别技术和工具项目工作分解结构 (WBS)经验、常识和判断实验和试验结果敏感性 分析事故树分析核对表 表 2-72.6 风险管理 2.6.1 风险管理简介在做完风险分析的风险识别,风险估计以及风险评价之后,我们应该采取应对措施了。它主要包括风险规 划和控制。当然,任何时候对于风险的监督都是必不可少的。 2.6.2 风险规划风险规划就是制定风险规避策略以及具体实施措施和手段的过程。风险规避的策略介绍 — 减轻风险:降低风险发生的可能性和减少后果的不利影响; — 预防风险: 对员工实行风险教育,对可能的事故做好预防措施; — 转移风险:将不能承受的风险转移出去,一旦事故发生,向第三方追加责任;出售、发包、开脱、责任合同、保险与担保、回避、自留等。 2.6.3 风险控制风险控制就是在风险事件发生时实施风险管理计划中预定的规避措施。另外,当项目的情况发生变化时,要重新进行风险 分析,并指定新的规避措施。风险控制的依据包括风险管理计划、实际发生了的风险事件和随时进行的风险识别结果。风险控制的手段除了风险管理计划中预定的规避措施之外,还应有根据实际情况确定的权变措施。如果实际发生的风险事件事先未曾预料到,或其后果比预期的严重,风险管理计划中预定的规避措施也不足以解决时,必须重新制定风险规避措施。 2.6.4 风险监督风险监督是项目实施过程中的一项重要工作。监督风险实际是监视项目的进展和项目环境,即项目变数的变化。其目的是,核对这些策略和措施的实际效果是否与预见的相同;寻找机会改善和细化 风险规避计划;获取反馈信息,以便将来的决策更符合实际。对那些新出现的以及预先制定的策略或措施不见效或性质随着时间的拖延而发生变化的风险进行控制。对项目进展的评价要反复不断地进行。不管预先计划好的策略和措施是否付诸实施,风险监督都一日不可或缺。如果发现已作出的决策是错误的,就一定要尽早承认,立即采取纠正行动。如果决策正确,但是结果却不好,这时不要惊惶,不要过早地改变正确地决策。频繁地改变注意,不仅会减少应急用地后备资源,而且还会大大增加项目以后阶段风险事件发生的可能性,加重不利后果。 监督风险之所以非常必要, 是因为时间的影响是很难预计的。一般说来,风险的不确定性随着时间的推移而减小。随着项目的进展,有关项目风险本来性质的信息、资料会越来越多。风险存在的基本原因,是由于缺少信息和资料、缺少控制呢,还是由于缺少时间?所有这些都会变得越来越清楚。如果原来的风险识别、估计和评价做得正确,则原来的风险将量化得越来越准。2.7 本章小结以上,我们从项目风险管理的最主要的部分――风险分析入手,介绍了它的基本概念和理论原理。总结出风险分析包括风险识别、风险评估、风险评价三个步骤,同时还引入了识别和评估的方法和广泛应用的工具,最后 初步了解了风险分析的方法和风险管理策略。 第 三 章 RM1 的组成结构 3.1 RM1(Risk Management System Version 1.0)是如何实现风险识别的 RM1 主要是根据本项目的相关信息,项目成员在项目经理的带领下对工作分解结构中的工作包来识别出每一个阶段的风险。这里的阶段指的是系统规划,系统分析,系统设计,系统实施这几个较为典型的生命周期阶段。因为该系统主要针对中小型项目,所以风险管理的阶段可以适当的增长,变为里程碑式风险管理。我们从下图 3-1 中可以看到,项目经理张无忌登陆入界面,主界面 MFR_Pm 读取数据库,得出相应的他所负责的项目 —— 京沈高速公 路收费系统,将所有情况显示在提示区域(界面中绿色区域)内。同时项目经理在左下角的操作区域(界面中的白色区域)选择按钮‚风险分析‛来对相应阶段的风险进行分析,图中他选择了系统设计阶段。单击‚开始‛之后,风险识别显示灯亮,表示进入识别界面,此时我们根据风险影响的方面(人员,过程,产品,技术)将他认为与系统设计有关的风险通过‚添加 /删除‛按钮加入右边的风险列表。该界面简单明了,比较形象化。下面先来简要介绍如何构造该界面。如图 3-1:3.1.1 菜单栏: 菜单栏主要是将左下角的操作按钮以菜单的形式在菜单中列出,同时 还包括了一些系统操作,包括连接数据库 (以后用于连接远程数据库 ),以及退出、帮助等基本操作 .3.1.2 提示区域:在正上方绿色的提示区域是本系统所有界面的共同特点。它由一个Panel 控件布局,其上设置了一些标签控件显示固定信息。同时含有 7 个 Dbtext控件用来显示可变数据,这些控件由一个 Q_hint 查询控件控制,会根据不同的项目显示不同的数据。 3.1.3 左下角的白色操作区域是本系统所有界面的共同特点。‚开始‛和‚结束‛按钮主要功能是对数据库中的表单和查询作初始化和关闭工作。 3.1.4 蓝色显示区域由一个多 页窗体控件 pagecontrol 作为主载体 .第一个页面为风险识别,它包括 5 个 Dbgrid 控件,前四个将数据库中的风险总表的所有项目按四种不同分类显示(人员、过程、产品、技术)。第 5 个用来显示临时生成的风险列表的内容,即用户识别出来的风险。这些风险可随意添加或者删除。 图 3-2 我们可以看到,第二页除了显示已经生成的风险列表,同时有一个风险征兆(该区域是后来开发的接口,用来进行二次开发时的扩充),一个可能性列表栏,损失值列表栏,其中的数据可以从下拉菜单中选择,也可以自己输入。它们都是从 0.1 到 0.9 的数字,其中可能性表示该风险发生的概率大小,损失值表示对项目的影响程度。在程序中,这些可以选择和输入的组合框以及他们前面的提示标签都是由以下语句灵活生成的: for i:1 to Table_risk.recordcount do begin //根据记录数来确定控件数 Lablearray1[I]:=Tlabel.create(self); //动态生成控件 Lablearray1[I].parent:=MDF_Pm; //标明控件的父类 comboboxarray[I]:=Tcombobox.create(self); comboboxarray[I].parent:=MDF_PM; 从而使得该程序能够动态地响应用户地需求而不浪费内存空间,同时可以实现随意地更改。例如 ,此时用户可以单击‚上一步‛按钮,增加或者删除一些风险,甚至可以重构整个表。因此该部分能够为以后的学习和工作提供广泛的借鉴。 3.3 RM1 是如何实现风险评价的 RM1 是按照现在较为通用且简单的方法来评价风险的。该方法描述如下:用风险可能性乘上风险损失值,其结果就等于风险水平。它将由系统自行计算。 3.4 RM1 是如何实现风险管理的 风险管理包括项目经理对自己负责的项目的控制和监督,同时还包括高层经理对公司所有项目的控制和监控。按照刚才的流程,我们先来介绍项目经理是如何管理风险的。 3.4.1 对风险分析得出的风 险进行管理 按照较为通行的方法, RM1 为项目经理识别和评价出来的风险一一指定风险负责人,他们按照风险总表所提供的解决周期在规定的期限内完成不同的风险应对策略。具体实现如下图 3-3: 在 PageControl 控件中显示第三页,名字叫做风险管理,同时左下角的操作区域内风险管理指示灯亮。在蓝色的显示区域内,用了一个 Dbgrid 控件显示我们前面进行风险识别和评估的成果,如上图所示,该表单列出了风险因素,发生的可能性、影响值、风险水平、以及应对策略等。这时候,我们只需要在右边的编辑框和掩码框内输入该风险的负责人以及完成时间即可。这里值得一提的仍然是灵活地生成控件数组,使得我们能够自如地添加和删除风险 .除此之外,如何实现错误处理也是值得与大家分享的心得。图中有一组用于输 入时间日期的掩码框,能够方便用户输入,但是这里有一个问题,就是如何处理输入过程中的非法输入,例如月份为 13 月,输入为 4 月 30 日之类的错误。并且难点是风险因素是动态可变的。在这里,我们利用了 Deiphi 语言良好的异常处理功能来进行编程,使得这些发生可能性虽小,但却是不得不防备的错误得到了妥善处理。其代码为: try for I:=1 to T_temp.recordcount do beginT_temp.fieldvalues(’Who’) :=Whoarray[I].text; //‚负责人‛编辑框数组T_temp.fieldvalues(‘ Date’ ):=strtodate(Datearray[I].text);//将字符串转换为时间类型 End;Except //错误捕捉 messageDlg('有的负责人没有确定,或是时间不对,请确认所有的输入筐不为空! ' ,mtWarning, [mbyes],0); //错误接口 end; //end for try 它的功能为将 try 直到 end 以前的代码进行保护,如果一切正常,编译器将执行 try 关键字后面的正常模块。一旦发现出错,将执行Except 后的语句,在本例中, strtodate()函数为字符串转时间日期函数,在软件运行过程中有可能出现上文所提到的非法输入。因此运用这种方法解决此类问题是一个不错的选择。 3.4.2 项目经理对整个项目进行监督和管理 正如上文所述,风险监督是一个反复进行的过程。因此, RM1 给高级经理以及项目经理提供了对项目的风险进行监控的平台。对项目经理而言,监控当前项目所在的阶段的风险是至关重要的, Rm1 实现了将风险水平由大到小进行排序,使得项目经理及成员对目前的首要工作倍加注意。比如项目经理张无忌进入系统,单击白色操作区域内的‚项目浏览‛按钮,能 够对项目所有阶段的风险水平进行一个总览。如图 3-4,他选择了‚系统实施‛阶段的风险清单,因此蓝色显示区域就按照从大到小的顺序将该阶段的风险水平显示出来。 图 3-4 其实现方式主要是先将临时生成的 Temp 表进行查询排序,其语句为: With Query1 do begin //打开 query1 域 Close; //关闭查询为输入做准备 Sql.clear; //清空 SQL 语句 Sql.add(‘ select * from temp.db’ ); //编写 SQl 语句 Sql.add(‘ order by Rank DESC’ ); //降序排列 Open; //查询打开 End;然后生成的风险清单。并且,为了方便用户,笔者在系统中设计了‚报表预览‛按钮,能够以图表的形式对所 有风险作一个汇总,以方便打印和浏览。如图 3-5 它主要利用了 Delphi 中的 Quickrep 控件功能。笔者在此不加赘述。 3.4.3 高层经理对公司所有项目进行监 督和管理 对于风险监督,除了项目经理应该负起责任来之外。高级经理更是要对公司内部的所有项目进行监控。因此, RM1 的高层经理界面当然少不了对所有项目的浏览功能。如图 3-6 所示: 图 3-6 在高级经理‚余光中‛进入之后,单击操作区域中的‚项目浏览‛按钮,我们可以看到 Treeview1 控件根据数据库中所有在建项目自动生成了相应的节点,使得所有在建的项目以浏览树的形式呈现在高级经理眼前。它的实现方式为:var node: TtreeNode;begin Node :=Treeview1.items.add(nil, ‘ First level’ ); //生成第一层节点 Treeview1.items.addchild(Node ,‘ Second level’ ); //生成子节点 End; 以此 来动态生成节点。并且,当我们单击任意一个项目的任意一个阶段时,都会自动显示被选中阶段的风险清单。同时,绿色提示区域中的信息会随之而改变。不仅如此,当高级经理单击操作区中的‚项目报告‛按钮时,将会对当前公司的所有在建项目的风险情况作一个汇报。同样,我们也可以以报表的形式将它打印出来。 3.5 RM1 是如何实现对项目风险的主观评分在 RM1 系统中,主观评分法是由高层经理组织专家来完成的,所以用户角色应该为高层经理,相应地,高层经理在进入系统后点击白色操作区域中的‚项目分析‛按钮,弹出‚项目评审‛界面,如图 3-7: 图 3-7 在其正上方,用 Dbgrid 控件列出了当前正在招投标或在审批的项目,我们可以任意选择一个项目进行分析(图中选择为世纪馆信息系统项目)在窗口的中部,我们把 系统周期的四个阶段作为左列,风险因素影响的各个主要方面作为横列。它们包括成本、进度、质量、范围这四个方面,其思想与上文介绍的主观评分法并无二致。从图中可以看出,该项目经过专家评审的总体风险水平为0.5069,低于公司可接受风险水平 0.6。 3.6 RM1 是如何实现登陆模块和 Splash 画面的 为了实现软件保密性,笔者以登陆界面区别不同的用户角色。对于错误的以及没有相应权限的用户拒绝登陆,对于合法用户调用不同的程序界面。它的思路比较简单,主要利用了两个查询(Query)控件。如图 3-8 图 3-8 为了使软件更加专业化,我设计了 Splash 画面,它将在用户点击程序图标之后出现在屏幕中央,停留约两秒钟后消失。其编程方法与通用的 Splash 相同。如图 3-9 所示: 图 3-93.7 本章小结 本章主要从实际的角度对风险管理的知识内容进行了模拟和应用,并生成了风险管理支持系统 RM1(Risk Management System Version 1.0)。它牢固遵循我们在第二章中阐述的风险管理的四个步骤。同时,为了使得软件更加专业化,笔者根据通用的设计方式构建了登陆和 Splash 画面。 第 四 章 结 束 语 4.1 全文总结本文在第一章中阐明了风险管理的重要性;在第二章中介绍了风险管理的理论知识,着重阐述风险识别、风险评估、风险评价和风险管理;为了使理论结合实际,在本文第三章中详细介绍了 RM1- Risk Management Version 1.0 的组成以及它是如何实现相应的风险管理步骤的。 4.2 心得和体会首先,该软件有很大的改进空间。比如,在高层经理进入系统之后,对每一个项目,应该列出风险水平最大的几个风险以引起高层经理的重视,但是由于没有掌握主从查询等技术而未能实现这些功能。希望以后能够不断改进和升级。不过 ,由于是首次学习和使用 Delphi7,能够克服相当多的技术难题并最终实现该系统,笔者甚感欣慰,尤其是在非典型性肺炎肆虐的 2003 年春季。其次,笔者在这次设计过程中发现,学习知识必须注意理论与实际工作相结合。只有通过实际操作,才能真正理解所学知识。 4.3 致谢 在此向我的导师左美云博士表示感谢,他对我们的毕业设计要求严格,工作认真严谨,让我受益匪浅。 4.5 参考文献【 1】卢有杰 ,卢家仪 著:《项目风险管理》,清华大学出版社 1998【 2】左美云,邝孔武 主编:《信息系统的开发与管理教程》,清华大学出版社 2001【 3】萨师煊,王珊 著 :《数据库系统概论》第三版,高等教育出版社 2001【 4】小塞谬尔 J 惠特尔 等著,林树岚等译:《项目管理实践》 电子工业出版社 2002【 5】 (美 )凯西 施瓦尔贝 著,王金玉 等 译:《 IT 项目管理》 机械工业出版社 2002【 6】周果宏,罗述谦,罗起 编著:《 Deiphi 程序设计》清华大学出版社 2001【 7】 (美 )Marco Cantu 著,王辉 等 译:《 Deiphi6 从入门到精通》 电子工业出版社 2002【 8】肖建,杨新臣 等 编著:《 Deiphi7 编程基础》 清华大学出版社 2003