免费智能真题库 > 历年试卷 > 软件设计师 > 2015年下半年 软件设计师 上午试卷 综合知识
  第19题      
  知识点:   软件项目管理   人员管理   软件项目管理   项目管理
  关键词:   软件项目   项目管理        章/节:   软件工程基础知识       

 
以下关于软件项目管理人员管理的叙述,正确的是(19)。
 
 
  A.  项目组成员的工作风格也应该作为组织团队时要考虑的一个要素
 
  B.  鼓励团队的每个成员充分地参与开发过程的所有阶段
 
  C.  仅根据开发人员的能力来组织开发团队
 
  D.  若项目进度滞后于计划,则增加开发人员一定可以加快开发进度
 
 
 

 
  第19题    2010年下半年  
   54%
在软件开发过程中进行风险分析时,(19)活动的目的是辅助项目组建立处理风险的策略,有效的策略应考虑风险避免、风险监控、风险管..
  第19题    2018年上半年  
   29%
 某软件项目的活动图如下图所示,其中顶点表示项目里程碑,连接顶点的边表示包含的活动,边上的数字表示活动的持续天数,则..
  第19题    2017年上半年  
   41%
在进行软件开发时,采用无主程序员的开发小组,成员之间相互平等;而主程序员负责制的开发小组,由一个主程序员和若干成员组成,成..
   知识点讲解    
   · 软件项目管理    · 人员管理    · 软件项目管理    · 项目管理
 
       软件项目管理
               软件项目管理涉及的范围
               有效的软件项目管理集中在4个P上,即人员(Person)、产品(Product)、过程(Procedure)和项目(Project)。
               软件项目估算
               软件项目估算涉及人、技术、环境等多种因素,因此很难在项目完成前准确地估算出开发软件所需的成本、持续时间和工作量。因此,需要一些方法和技术来支持项目的估算,常用的估算方法有下列3种。
               (1)基于已经完成的类似项目进行估算。这是一种常用的也是有效的估算方法。
               (2)基于分解技术进行估算。分解技术包括问题分解和过程分解。问题分解是将一个复杂问题分解成若干个小问题,通过对小问题的估算得到复杂问题的估算。过程分解是指先根据软件开发过程中的活动(分析、设计、编码、测试等)进行估算,然后得到整个项目的估算值。
               (3)基于经验估算模型的估算。典型的经验估算模型有IBM估算模型、CoCoMo模型和Putnam模型。
               进度管理
               软件开发项目的进度安排有两种方式:系统最终交付日期已经确定,软件开发部门必须在规定期限内完成;系统最终交付日期只确定了大致的年限,最后交付日期由软件开发部门确定。
               进度安排的常用图形描述方法有甘特(Gantt)图和计划评审技术(PERT)图。
               1)Gantt图
               Gantt图中横坐标表示时间,纵坐标表示任务,图中的水平线段则表示对一个任务的进度安排,线段的起点和终点对应在横坐标上的时间分别表示该任务的开始时间和结束时间,线段的长度表示完成该任务所需的时间。
               Gantt图能清晰地描述每个任务从何时开始,到何时结束以及各个任务之间的并行性;但是它不能清晰地反映出各任务之间的依赖关系,难以确定整个项目的关键所在,也不能反映计划中有潜力的部分。
               2)PERT图
               PERT图是一个有向图,箭头表示任务,它可以表示完成该任务所需的时间;箭头指向节点表示流入节点的任务的结束,并开始流出节点的任务,这里把节点当成事件。只有当流入该节点的所有任务都结束时,节点所表示的事件才出现,流出节点的任务才可以开始。事件本身不消耗时间和资源,它仅表示某个时间点。一个事件有一个事件号和出现该事件的最早时刻和最迟时刻。每个任务还有一个松弛时间,表示在不影响整个工期的前提下,完成该任务有多少机动余地。
               PERT图不仅给出了每个任务的开始时间、结束时间和完成该任务所需的时间,还给出了任务之间的关系,即哪些任务完成后才能开始另外一些任务,以及如期完成整个工程的关键路径。松弛时间则反映了完成某些任务是可以推迟其开始时间或延长其所需的完成时间。但是PERT图不能反映任务之间的并行关系。
               软件项目组织
               开发组织采用什么形式组织,不仅要考虑软件项目的特点,还需要考虑参与人员的素质。在软件项目组织中,其组织原则有以下3条。
               (1)尽早落实责任。在软件项目开始组织时,要尽早指定专人负责,使他有权进行管理,并对任务的完成负全责。
               (2)减少交流接口。一个组织的生产率随着完成任务时存在的通信路径数目的增加而降低。要有合理的人员分工、好的组织结构、有效的通信,减少不必要的生产率的损失。
               (3)责权均衡。软件管理人员承担的责任不应比赋予他的权利还大。
               软件配置管理
               软件配置管理(Software Configure Management,SCM)用于整个软件工程过程。其目标是标识变更、控制变更、确保变更正确地实现、报告有关变更。SCM是一组管理整个软件生存期各阶段中变更的活动。
               1)基线
               基线是软件生存期中各开发阶段的一个特定点,它的作用是把开发各阶段工作的划分更加明确化,使本来连续的工作在这些点上断开,以便于检查与肯定阶段成果。因此,基线作为一个检查点,在开发过程中,当采用的基线发生错误时,可以知道所处的位置,返回到最近和最恰当的基线上。
               2)软件配置项
               软件配置项(SCI)是软件工程中产生的信息项,它是配置管理的基本单位,对已经成为基线的SCI,虽然可以修改,但必须按照一个特殊的、正式的过程进行评估,确认每一处修改。
               3)版本控制
               表达系统不同版本的一种表示方法如下图所示。
               
               系统不同版本的一种表示方法
               4)变更控制
               变更控制是一项最重要的软件配置任务。为有效地实现变更控制,须借助配置数据库和基线的概念。
               配置数据库可以分为3类,即开发库、受控库和产品库。
               风险分析
               1)风险识别
               风险识别是试图系统化地确定对项目计划的威胁。风险识别的一个方法是建立风险条目检查表。该检查表可以用于识别风险,并使得人们集中来识别下列常见的、已知的及可预测的风险:产品规模、商业影响、客户特性、过程定义、开发环境等。
               2)风险预测
               风险预测又称为风险估算,它从两个方面评估一个风险:风险发生的可能性或概率;以及如果风险发生所产生的后果。通常项目计划人员与管理人员、技术人员一起,进行4种风险预测活动:建立一个尺度或标准,以反映风险发生的可能性;描述风险的后果;估计风险对项目和产品的影响;标注风险预测的整体精确度,以免产生误解。
               3)风险评估
               在进行风险评估时,建立了以下形式的三元组,即
               (ri,li,xi)
               式中:ri为风险;li为风险发生的概率;xi为风险产生的影响。
               一个对风险评估很有用的技术就是定义风险参照水准。对于大多数软件项目来说,成本、进度和性能就是3种典型的风险参照水准。
               在风险评估过程中,需要执行下面步骤:①定义项目的风险参考水平值;②建立每一组与每一个参考水平值之间的关系;③预测一组临界点以定义项目终止区域;④预测什么样的风险组合会影响参考水平值。
               4)风险控制
               一个有效的策略必须考虑3个问题:①风险避免;②风险监控;③风险管理及意外事件计划。如果软件项目组对于风险采取主动的方法,则避免是最好的策略。
 
       人员管理
        合理地组织好参加软件项目的人员,有利于发挥每个人的作用,有利于软件项目的成功开发。在人员组织时,应考虑软件项目的特点、软件人员的素质等多方面的因素。
        可以按软件项目对软件人员进行分组,如需求分析组、设计组、编码组、测试组和维护组等,为了控制软件的质量,还可以有质量保证组。
        程序设计小组的组织形式也可以有多种,如主程序员组、无主程序员组和层次式程序员组等。
        (1)主程序员组。主程序员组由一名主程序员、一名后备程序员(back up programmer)、一名资料员和若干名程序员组成。主程序员由经验丰富、能力强的高级程序员担任,他是该组织的技术领导和项目负责人,全面负责软件项目的开发。后备程序员是主程序员的助手,协助主程序员工作,必要时能代替主程序员工作。资料员负责保存和管理所有的软件配置元素,如文档资料、程序清单和存储介质等,还编译和链接代码、对提交的所有模块进行初步的测试。程序员则集中精力负责完成主程序员分配给他的最擅长的任务——编程。这种组织形式便于集中领导,步调统一,容易按规范办事,但不利于发挥个人的积极性。
        (2)无主程序员组。无主程序员组中的成员之间相互平等,工作目标和决策都由全体成员民主讨论,根据需要也可以轮流坐庄。这种组民主气氛比较足,依赖个人的成分少,有利于发挥每个人的积极性。但这种组中交流量大,往往职责不明确,出了问题谁也不负责,而且不利于与外界的联系。
        (3)层次式程序员组。层次式组中有一位组长,组长负责全面的工作,他领导若干名高级程序员,每个高级程序员又领导若干名程序员。这种组适合于具有层次结构特点的更大型的软件项目,该项目可分成若干个子项目,每个高级程序员负责一个子项目,然后再对子项目分解,并分配给程序员。
 
       软件项目管理
        软件项目管理的对象是软件项目。为了使软件项目开发获得成功,必须对软件开发项目的工作范围、可能遇到的风险、需要的资源(人、硬/软件)、要实现的任务、经历的里程碑、花费的工作量(成本)以及进度的安排等做到心中有数。而软件项目管理可以提供这些信息。这种管理的范围覆盖了整个软件工程过程,即开始于技术工作开始之前,在软件从概念到实现的过程中持续进行,最后终止于软件工程过程结束。
               成本估算
               由于软件具有可见性差、定量化难等特殊性,因此很难在项目完成前准确地估算出开发软件所需的工作量和费用。通常可以根据以往开发类似软件的经验(也可以是别人的经验)来进行成本估算。也可以将软件项目划分成若干个子系统或按照软件生存周期的各个阶段分别估算其成本,然后汇总出整个软件的成本。此外,还可以使用经验公式和成本估算模型来进行估算。
                      成本估算方法
                      (1)自顶向下估算方法。该方法是估算人员参照以前完成的项目所耗费的总成本(或总工作量),来推算将要开发的软件的总成本(或总工作量),然后把它们按阶段、步骤和工作单元进行分配。这种方法的优点是对系统级工作的重视,所以估算中不会遗漏诸如集成、配置管理之类的系统级事务的成本估算,且估算工作量小、速度快。它的缺点是往往不清楚低级别上的技术性困难问题,而这些困难将会使成本上升。
                      (2)自底向上估算方法。该方法是将待开发的软件细分,分别估算每一个子任务所需要的开发工作量,然后将它们加起来,得到软件的总开发量。这种方法的优点是对每一部分的估算工作交给负责该部分工作的人来做,所以估算较为准确。其缺点是其估算往往缺少各项子任务之间相互联系所需要的工作量和与软件开发有关的系统级工作量,所以估算往往偏低。
                      (3)差别估算方法。该方法是将待开发项目与一个或多个已完成的类似项目进行比较,找出与某个相类似项目的若干不同之处,并估算每个不同之处对成本的影响,导出待开发项目的总成本。该方法的优点是可以提高估算的准确度,缺点是不容易明确“差别”的界限。
                      (4)其他估算方法。主要有专家估算法、类推估算法和算式估算法等。
                      .专家估算法:依靠一个或多个专家对要求的项目做出估算,其精确性取决于专家对估算项目的定性参数的了解和他们的经验。
                      .类推估算法:在自顶向下的方法中,类推估算法将估算项目的总体参数与类似项目进行直接比较得到结果;在自底向上方法中,类推估算法是在两个具有相似条件的工作单元之间进行。
                      .算式估算法:专家估算法和类推估算法的缺点在于它们依靠带有一定盲目性和主观性的猜测对项目进行估算。算式估算法则是企图避免主观因素的影响。用于估算的方法有两种基本类型:由理论导出和由经验导出。
                      成本估算模型
                      常用的软件成本估算模型有Putnam模型和COCOMO模型。Putnam模型是一种动态多变量模型,它是假设在软件开发的整个生存期中工作量有特定的分布。COCOMO模型是最精确、最易于使用的成本估算模型之一。COCOMO模型可以分为如下3种:
                      (1)基本COCOMO模型:是一个静态单变量模型,它是对整个软件系统进行估算。
                      (2)中级COCOMO模型:是一个静态多变量模型,它将软件系统模型分为系统和部件两个层次,系统由部件构成,它把软件开发所需人力(成本)看作是程序大小和一系列“成本驱动属性”的函数。
                      (3)详细COCOMO模型:它将软件系统模型分为系统、子系统和模块三个层次,它除包括中级模型所考虑的因素外,还考虑了在需求分析、软件设计等每一步的成本驱动属性的影响。
               风险分析
               当在软件工程环境中考虑风险时,主要是基于关心未来、关心变化、关心选择这三个概念提出的。在进行软件工程分析时,项目管理人员要进行4种风险评估活动,包括建立表示风险概念的尺度,描述风险引起的后果,估计风险影响的大小,确定风险估计的正确性。
               风险分析实际上是4个不同的活动:风险识别,风险预测,风险评估和风险控制。
                      风险识别
                      风险识别是试图系统化地确定对项目计划(估算、进度、资源分配)的威胁。风险识别的一种方法是建立风险条目检查表。该检查表可以用于识别风险,并使得人们集中来识别下列常见的已知的及可预测的风险:
                      (1)产品规模。与要建造或要修改的软件的总体规模相关的风险。
                      (2)商业影响。与管理或市场所加诸的约束相关的风险。
                      (3)客户特性。与客户的素质以及开发者和客户定期通信的能力相关的风险。
                      (4)过程定义。与软件过程被定义的程度以及它们被开发组织所遵守的程度相关的风险。
                      (5)开发环境。与用以构建产品的工具的可用性及质量相关的风险。
                      (6)构建的技术。与待开发软件的复杂性及系统所包含技术的“新奇性”相关的风险。
                      (7)人员数目及经验。与参与工作的软件工程师的总体技术水平及项目经验相关的风险。
                      风险预测
                      风险预测,又称风险估算,它从两个方面评估一个风险:风险发生的可能性或概率,以及如果风险发生了,所产生的后果。通常,项目计划人员与管理人员、技术人员一起进行如下所述的4种风险预测活动:
                      (1)建立一个尺度或标准,以反映风险发生的可能性。
                      (2)描述风险的后果。
                      (3)估计风险对项目和产品的影响。
                      (4)标注风险预测的整体精确度,以免产生误解。
                      风险评估
                      一种对风险评估很有用的技术就是定义风险参照水准。对于大多数软件项目来说,成本、进度和性能就是三种典型的风险参照水准。也就是说,对于成本超支、进度延期、性能降低(或它们的某种组合),有一个表明导致项目终止的水准。
                      在进行风险评估时,需要建立(rilixi)形式的三元组。其中,ri表示风险,li表示风险发生的概率,xi则表示风险产生的影响。在风险评估过程中,需要执行以下4个步骤:
                      (1)定义项目的风险参考水平值。
                      (2)建立每一组(rilixi)与每一个参考水平值之间的关系。
                      (3)预测一组临界点以定义项目终止区域,该区域由一条曲线或不确定区域所界定。
                      (4)预测什么样的风险组合会影响参考水平值。
                      风险控制
                      这一步的所有风险分析活动只有一个目的——辅助项目组建立处理风险的策略。一个有效的策略必须考虑风险避免、风险监控、风险管理及意外事件计划方面的问题。
                      如果软件项目组对于风险采用主动的方法,则避免永远是最好的策略。这可以通过建立一个风险缓解计划来达到。
                      风险管理策略可以包含在软件项目计划中,或者风险管理步骤也可以组织成一个独立的风险缓解、监控和管理计划(RMMM计划)。RMMM计划将所有风险分析工作文档化,并由项目管理者作为整个项目计划中的一部分来使用。
               进度管理
               进度的合理安排是如期完成软件项目的重要保证,也是合理分配资源的重要依据,因此进度安排是管理工作的一个重要组成部分。软件开发项目的进度安排有如下两种方式:
               (1)系统最终交付日期已经确定,软件开发部门必须在规定期限内完成。
               (2)系统最终交付日期只确定了大致的年限,最后交付日期由软件开发部门确定。
               进度安排的常用图形描述方法有Gantt图(甘特图)和项目计划评审技术(Program Evaluation&Review Technique,PERT)图。
                      Gantt图
                      Gantt图是一种简单的水平条形图,它以日历为基准描述项目任务。水平轴表示日历时间线(如时、天、周、月和年等),每个条形表示一个任务,任务名称垂直地列在左边的列中,图中水平条的起点和终点对应水平轴上的时间,分别表示该任务的开始时间和结束时间,水平条的长度表示完成该任务所持续的时间。当日历中同一时段存在多个水平条时,表示任务之间的并发。下图所示的Gantt图描述了三个任务的进度安排。任务1首先开始,完成它需要6个月时间;任务2在1个月后开始,完成它需要9个月时间;任务3在6个月后开始,完成它需要5个月时间。
                      Gantt图能清晰地描述每个任务从何时开始,到何时结束,任务的进展情况以及各个任务之间的并行性。但是其缺点是不能清晰地反映出各任务之间的依赖关系,难以确定整个项目的关键所在,也不能反映计划中有潜力的部分。
                      
                      Gantt图实例
                      PERT图
                      PERT图是一个有向图,图中的箭头表示任务,它可以标上完成该任务所需的时间;图中的节点表示流入节点的任务的结束,并开始流出节点的任务,这里把节点称为事件。只有当流入该节点的所有任务都结束时,节点所表示的事件才出现,流出节点的任务才可以开始。事件本身不消耗时间和资源,它仅表示某个时间点。一个事件有一个事件号和出现该事件的最早时刻和最迟时刻。最早时刻表示在此时刻之前从该事件出发的任务不可能开始;最迟时刻表示从该事件出发的任务必须在此时刻之前开始,否则整个工程就不能如期完成。每个任务还可以有一个松弛时间(slack time),表示在不影响整个工期的前提下,完成该任务有多少机动余地。为了表示任务间的关系,图中还可以加入一些空任务(用虚线箭头表示),完成空任务的时间为0。下图是PERT图的一个实例。不难看出,下图中的松弛时间为0的这些任务是完成整个工程的关键路径,其事件流为1→2→3→4→6→8→10→11。
                      
                      PERT图实例
                      PERT图不仅给出了每个任务的开始时间、结束时间和完成该任务所需的时间,还给出了任务之间的关系,即哪些任务完成后才能开始另外一些任务,以及如期完成整个工程的关键路径。图中的松弛时间则反映了完成某些任务时可以推迟其开始时间或延长其完成所需的时间。但是,PERT图不能反映任务之间的并行关系。
               人员管理
               合理地组织好参加软件项目的人员,有利于发挥每个人的作用,有利于软件项目的成功开发。在人员组织时,应考虑软件项目的特点、软件人员的素质等多方面的因素。
               可以按软件项目对软件人员进行分组,如需求分析组、设计组、编码组、测试组和维护组等,为了控制软件的质量,还可以有质量保证组。
               程序设计小组的组织形式也可以有多种,如主程序员组、无主程序员组和层次式程序员组等。
               (1)主程序员组。主程序员组由一名主程序员、一名后备程序员(back up programmer)、一名资料员和若干名程序员组成。主程序员由经验丰富、能力强的高级程序员担任,他是该组织的技术领导和项目负责人,全面负责软件项目的开发。后备程序员是主程序员的助手,协助主程序员工作,必要时能代替主程序员工作。资料员负责保存和管理所有的软件配置元素,如文档资料、程序清单和存储介质等,还编译和链接代码、对提交的所有模块进行初步的测试。程序员则集中精力负责完成主程序员分配给他的最擅长的任务——编程。这种组织形式便于集中领导,步调统一,容易按规范办事,但不利于发挥个人的积极性。
               (2)无主程序员组。无主程序员组中的成员之间相互平等,工作目标和决策都由全体成员民主讨论,根据需要也可以轮流坐庄。这种组民主气氛比较足,依赖个人的成分少,有利于发挥每个人的积极性。但这种组中交流量大,往往职责不明确,出了问题谁也不负责,而且不利于与外界的联系。
               (3)层次式程序员组。层次式组中有一位组长,组长负责全面的工作,他领导若干名高级程序员,每个高级程序员又领导若干名程序员。这种组适合于具有层次结构特点的更大型的软件项目,该项目可分成若干个子项目,每个高级程序员负责一个子项目,然后再对子项目分解,并分配给程序员。
 
       项目管理
        构建嵌入式系统是一项复杂的任务,尤其是涉及到很多人员共同长期工作的时候。为了使嵌入式项目开发获得成功,必须对系统开发项目的工作范围、花费的工作量(成本)、可能遇到的风险、进度的安排、要实现的任务、经历的里程碑以及需要的资源(人、硬/软件)等做到心中有数,而项目管理可以提供这些信息。项目管理的过程一般包括初启、计划、执行、监控、结项,项目管理的范围覆盖整个系统生命周期过程。
               管理范围
               有效的项目管理集中于4P,即人员(People)、产品(Product)、过程(Process)和项目(Project)。必须将人员组织起来以有效地完成产品构建工作;必须和客户及其他利益相关者很好地沟通,以便了解产品的范围和需求;必须选择适合于人员和产品的过程;必须估算完成工作任务的工作量和工作时间,从而制订项目计划。
               “人的因素”非常重要,在所有项目中,最关键的因素是人员,涉及项目管理人员、高级管理人员、开发人员、客户和最终用户。人员能力成熟度模型(People Capability Maturity Model,PCMM)针对人员定义了以下关键实践域:人员配备、沟通与协调、工作环境、业绩管理、培训、报酬、能力素质分析与开发、个人事业发展、工作组发展以及团队精神或企业文化培育等。PCMM成熟度达到较高水平的组织,更有可能实现有效的项目管理事件。
               在制订项目计划之前,首先确定产品的目标和范围,考虑可选的解决方案,识别技术和管理上的限制。如果没有这些信息,就无法进行合理(精确)的成本估算,也无法进行有效的风险评估和适当的项目任务划分,更无法制定可管理的项目进度计划来给出意义明确的项目进展标志。确定产品的目标只是识别出产品的总体目标,而不用考虑如何实现这些目标。确定产品的范围是识别出产品的主要数据、功能和行为特性,并且应该用量化的方式界定这些特性。然后开始考虑备选解决方案,不讨论细节,使管理者与参与开发的人员根据特定的约束条件选择相对最佳的方案,约束条件有产品的交付期限、预算限制、可用人员、技术接口以及其他各种因素。
               开发过程提供了一个框架,一小部分框架活动适用于所有的项目,多种不同的任务集合使得框架活动适合于不同项目的特性和项目团队的需求。普适性活动(如质量管理、配置管理、测量等)覆盖了过程模型,独立于任何一个框架活动,且贯穿于整个过程之中。
               为了成功地管理项目,需要有计划、可控制,这样才能管理复杂的系统开发;需要了解可能会出现的各类问题以便加以避免。可以采用的方法有:
               (1)在正确的基础上开始工作。
               (2)保持动力。
               (3)跟踪进度。
               (4)做出正确的决策。
               (5)进行事后分析。
               成本估算
               系统开发成本估算主要指系统开发过程中所花费的工作量及相应的代价。为了使开发项目能够在规定的时间内完成,而且不超过预算,成本预算和管理控制是关键。项目开发成本的估算主要靠分解和类推的手段进行。分解技术是将项目分解成一系列较小的、容易理解的问题进行估算。常用的分解技术有:基于问题的估算、基于代码行(LOC)估算、基于功能点(FP)的估算、基于过程的估算、基于用例的估算。选择或结合使用分解技术,进行成本估算。基本的成本估算方法有如下几种。
               (1)自顶向下估算方法。估算人员参照以前完成的项目所耗费的总成本(或总工作量)来推算将要开发的系统的总成本(或总工作量),然后把它们按阶段、步骤和工作单元进行分配。
               自顶向下估算方法的主要优点是对系统级工作的重视,所以估算中不会遗漏集成、配置管理等系统级事务的成本估算,且估算工作量小、速度快。其缺点是不清楚低级别上的技术性困难,而这些困难将会使成本上升。
               (2)自底向上估算方法。自底向上估算方法是将待开发的系统细分,分别估算每一个子任务所需要的开发工作量,然后将它们加起来,得到系统的总开发量。这种方法的优点是对每一部分的估算工作交给负责该部分工作的人来做,所以估算较为准确。其缺点是缺少对各项子任务之间相互联系所需要工作量和与开发有关的系统级工作量的估算,因此预算往往偏低。
               (3)差别估算方法。差别估算方法是将开发项目与一个或多个已完成的类似项目进行比较,找出与某个相类似项目的若干不同之处,并估算每个不同之处对成本的影响,导出开发项目的总成本。该方法的优点是可以提高估算的准确度,缺点是不容易明确“差别”的界限。
               除以上方法外,还有许多方法,大致可分为三类:专家估算法、类推估算法和算式估算法。
               (1)专家估算法。该方法依靠一个或多个专家对要求的项目做出估算,其精确性取决于专家对估算项目的定性参数的了解和他们的经验。
               (2)类推估算法。在自顶向下的方法中,它是将估算项目的总体参数与类似项目进行直接比较得到结果;在自底向上方法中,类推是在两个具有相似条件的工作单元之间进行。
               (3)算式估算法。专家估算法和类推估算法的缺点在于它们依靠带有一定盲目性和主观性的猜测对项目进行估算。算式估算法则是企图避免主观因素的影响,用于估算的方法有两种基本类型:由理论导出和由经验导出。
               典型的成本估算模型主要有动态多变量普特南(Putnam)模型和层次结构的结构性成本模型(Constructive Cost Model,COCOMO)的升级模型COCOMOII等。普特南模型基于软件方程,它假设在软件开发的整个生命周期中有特定的工作量分布。COCOMOII模型层次结构中有三种不同的估算选择:对象点、功能点和源代码行。
               风险分析
               新的系统建立时,总是存在某些不确定性。例如,用户要求是否能确切地被理解?在项目最后结束之前要求实现的功能能否建立?是否存在目前仍未发现的技术难题?在项目出现严重延期时是否会发生一些变更?等等。风险是潜在的,需要识别、评估发生的概率、估算其影响、并制定实际发生时的应急计划。
               风险分析在项目管理中具有决定性作用。当在软件工程的环境中考虑风险时,主要关注以下三个方面。一是关心未来。风险是否会导致项目失败;二是关心变化。用户需求、开发技术、目标机器以及所有其他与项目有关的实体会发生什么变化;三是必须解决需要做出选择的问题,即应当采用什么方法和工具,应当配备多少人力,在质量上强调到什么程度才满足要求等。
               风险分析实际上是贯穿软件工程中的一系列风险管理步骤,其中包括风险识别、风险估计、风险管理策略、风险解决和风险监控。
               进度管理
               进度安排包括把一个项目所有的工作分解为若干个独立的活动,并描述这些活动之间的依赖关系,估算完成这些活动所需的工作量,分配人力和其他资源,制定进度时序。进度的合理安排是如期完成软件项目的重要保证,也是合理分配资源的重要依据,因此进度安排是管理工作的一个重要组成部分。有两种安排软件开发项目进度的方式:
               (1)系统最终交付日期已经确定,系统开发部门必须在规定期限内完成;
               (2)系统最终交付日期只确定了大致的年限,最后交付日期由软件开发部门确定。
               进度安排的常用图形描述方法有Gantt图(甘特图)和PERT(Program Evaluation&Review Technique,项目计划评审技术)图。
               (1)Gantt图。Gantt图中横坐标表示时间(如时、天、周、月、年等),纵坐标表示任务,图中的水平线段表示一个任务的进度安排,线段的起点和终点对应在横坐标上的时间分别表示该任务的开始时间和结束时间,线段的长度表示完成该任务所持续的时间。当日历中同一时段中存在多个水平条时,表示任务之间的并发。下图所示的Gantt图描述了三个任务的进度安排。该图表示:任务1首先开始,完成它需要12周时间;任务2在2周后开始,完成它需要18周;任务3在12周后开始,完成它需要10周。
               
               Gantt图实例
               Gantt图能清晰地描述每个任务从何时开始,到何时结束,任务的进展情况以及各个任务之间的并行性;但是它不能清晰地反映出各任务之间的依赖关系,难以确定整个项目的关键所在,也不能反映计划中有潜力的部分。
               (2)PERT图。PERT图是一个有向图,其基本符号如下图所示。
               
               PERT图的基本符号
               PERT图中的有向弧表示任务,可以标上完成该任务所需的时间,图中的结点表示流入结点的任务已结束,并开始流出结点的任务,这里把结点称为事件。只有当流入该结点的所有任务都结束时,结点所表示的事件才出现,流出结点的任务才可以开始。事件本身不消耗时间和资源,它仅表示某个时间点。每个事件有一个事件号及出现该事件的最早时刻和最迟时刻。最早时刻表示在此时刻之前从该事件出发的任务不可能开始;最迟时刻表示从该事件出发的任务必须在此时刻之前开始,否则整个工程就不能如期完成。每个任务还可以有一个松弛时间(slack time),表示在不影响整个工期的前提下,完成该任务有多少机动时间。为了表示任务间的关系,图中还可以加入一些空任务(用虚线有向弧表示),完成空任务的时间为0。
               PERT图的一个实例如下图所示,该图所表示的工程可分为12个任务,事件号1表示工程开始,事件号11表示工程结束(完成所有任务需要23个时间单位)。松弛时间为0的任务构成了完成整个工程的关键任务,其事件流为1→2→3→4→6→8→10→11,也就是说,这些任务不能拖延,否则整个工程就不能在23个时间单位内完成。
               
               PERT图示例
               PERT图不仅给出了每个任务的开始时间、结束时间和完成该任务所需的时间,还给出了任务之间的关系,即哪些任务完成后才能开始另外一些任务,还可以找出如期完成整个工程的关键任务。任务的松弛时间则反映了完成任务时可以推迟其开始时间或延长其所需完成的时间。PERT图不能反映任务之间的并行关系。
   题号导航      2015年下半年 软件设计师 上午试卷 综合知识   本试卷我的完整做题情况  
1 /
2 /
3 /
4 /
5 /
6 /
7 /
8 /
9 /
10 /
11 /
12 /
13 /
14 /
15 /
 
16 /
17 /
18 /
19 /
20 /
21 /
22 /
23 /
24 /
25 /
26 /
27 /
28 /
29 /
30 /
 
31 /
32 /
33 /
34 /
35 /
36 /
37 /
38 /
39 /
40 /
41 /
42 /
43 /
44 /
45 /
 
46 /
47 /
48 /
49 /
50 /
51 /
52 /
53 /
54 /
55 /
56 /
57 /
58 /
59 /
60 /
 
61 /
62 /
63 /
64 /
65 /
66 /
67 /
68 /
69 /
70 /
71 /
72 /
73 /
74 /
75 /
 
第19题    在手机中做本题