免费智能真题库 > 历年试卷 > 程序员 > 2021年上半年 程序员 上午试卷 综合知识
  第56题      
  知识点:   基本概念   甘特图   软件项目管理   网络图   项目管理
  关键词:   甘特图   软件项目   网络   项目管理        章/节:   软件基础知识       

 
甘特图网络图常用于软件项目管理中的( )。
 
 
  A.  质量管理
 
  B.  进度管理
 
  C.  成本管理
 
  D.  配置管理
 
 
 

 
  第26题    2016年下半年  
   25%
假设系统有n(n≥3)个进程共享资源R,且资源R的可用数3。若采用PV操作,则相应的信号量S的取值范围应为(26)。
  第26题    2021年上半年  
   17%
在进程的三态模型中,进程从 “运行 ” 状态转换为 “就绪 ” 状态的原因是( )。
  第26题    2010年上半年  
   59%
若一个单处理器的计算机系统中同时存在3个并发进程,则同一时刻允许占用处理器的进程数(26);如果这3个进程都要求使用2个..
   知识点讲解    
   · 基本概念    · 甘特图    · 软件项目管理    · 网络图    · 项目管理
 
       基本概念
        在计算机系统上运行的程序是指令的集合,每一个程序完成特定的任务。在只允许一个程序运行的系统(称为单道系统)中,这个程序独占系统资源,而系统按程序的指令顺序运行,程序的顺序执行有两个基本特征:程序的封闭性和程序的可再现性。
        .封闭性:指程序运行时独占系统资源,只有程序本身能改变系统的状态。
        .可再现性:指程序运行不受外部因素的影响,只要初始条件相同,运行结果就相同。
        多道程序系统让多个程序在系统中轮流运行,当一个程序不用处理机时,另一个程序就使用。也就是说,处理机在程序间来回切换,从而获得宏观上的并行(微观上的串行),以提高处理机的利用率。这种切换,通常是由中断引起的。由于中断以不可预测的次序发生,即程序的指令执行序列也以不可预测的次序前进,这样就会产生操作系统的另一个特性一一不确定性。即在多道程序系统中,顺序程序的封闭性和可再现性消失了,需要采用一个新的概念——进程来描述程序的执行。进程是运行中的程序,是系统进行资源分配和调度的独立单位。
               进程及其组成
               进程是一个程序关于某个数据集的一次运行。进程是一个动态的概念,而程序是静态的概念,是指令的集合。因此,进程具有动态性和并发性。
               进程通常由程序、数据和进程控制块(PCB)组成。程序是进程运行所对应的运行代码,一个进程对应于一个程序,一个程序可以同时对应于多个进程,代码在运行过程中不会被改变的程序,常称为纯码程序或可重入程序,这类程序是可共享的程序。
               进程控制块是进程动态特性的集中反映,也是进程存在的唯一标志。在操作系统中,进程是进行系统资源分配、调度和管理的最小单位。现代操作系统中还引入了线程,线程是比进程更小的、能独立运行的基本单位,在引入线程的操作系统中,线程是进程中的一个实体,是CPU调度和分派的基本单位,是处理机分配的最小单位。
               进程的状态及其转换
               在多道系统中,进程的运行是走走停停的,在处理机上的交替运行,使它的运行状态不断变化。进程的状态主要有三态模型和五态模型。三态模型中最基本的状态有3种:运行、就绪和阻塞。
               .运行(running):正占用处理机。
               .就绪(ready):只要获得处理机即可运行。
               .阻塞(blocked):也称等待或挂起状态,正等待某个事件(如I/O完成)的发生。
               在进程运行的过程中,由于自身进展情况及外界环境的变化,这3种基本状态可以在一定的条件下相互转换,进程的状态及转换如下图所示。
               
               进程状态及其转换图
               五态模型比三态模型更加复杂,在三态模型的基础上增加了新建态和终止态。新建态对应于进程刚刚被创建还没有被提交时的状态,此时应在等待系统完成创建进程的所有必要信息。创建进程时分两个阶段:第一个阶段为一个新进程创建必要的管理信息;第二个阶段让该进程进入就绪状态。有了新建态,操作系统往往因系统的性能和内存容量的限制推迟新建态进程的提交。进程的终止态也可分为两个阶段:第一个阶段等待操作系统进行善后处理;第二个阶段释放内存。
 
       甘特图
        甘特图(Gantt图)是第一次世界大战期间由美国亨利·甘特开发的,也称作线条图或横道图。下图是某项目的甘特图,图中,横向表示时间进度,纵向表示项目中的一系列工作,每件工作从开始到结束的持续过程用横道表示。用甘特图表示项目计划,简单、明了、直观,易于编制,因此在中小项目中得到广泛应用。即使在大型工程项目中,它也是高级管理层了解全局、基层安排进度时的有用工具。
        甘特图可用来安排项目中各项工作的进度,同时还能和各项资源在不同阶段的需求数量结合,有利于对项目管理过程进行有效的控制,当项目中某些工作进度安排有机动时间时,可以利用机动时间安排工作的实施进度,使项目对资源的集中需求尽可能分散,得到合理利用。例如,某项目的任务如下表所示,其甘特图如下图所示。
        
        项目任务分解表
        
        项目进度计划甘特图
 
       软件项目管理
        软件项目管理的对象是软件项目。为了使软件项目开发获得成功,必须对软件开发项目的工作范围、可能遇到的风险、需要的资源(人、硬/软件)、要实现的任务、经历的里程碑、花费的工作量(成本)以及进度的安排等做到心中有数。而软件项目管理可以提供这些信息。这种管理的范围覆盖了整个软件工程过程,即开始于技术工作开始之前,在软件从概念到实现的过程中持续进行,最后终止于软件工程过程结束。
               成本估算
               由于软件具有可见性差、定量化难等特殊性,因此很难在项目完成前准确地估算出开发软件所需的工作量和费用。通常可以根据以往开发类似软件的经验(也可以是别人的经验)来进行成本估算。也可以将软件项目划分成若干个子系统或按照软件生存周期的各个阶段分别估算其成本,然后汇总出整个软件的成本。此外,还可以使用经验公式和成本估算模型来进行估算。
                      成本估算方法
                      (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)层次式程序员组。层次式组中有一位组长,组长负责全面的工作,他领导若干名高级程序员,每个高级程序员又领导若干名程序员。这种组适合于具有层次结构特点的更大型的软件项目,该项目可分成若干个子项目,每个高级程序员负责一个子项目,然后再对子项目分解,并分配给程序员。
 
       网络图
               网络计划技术
               甘特图虽然简单直观,但对于复杂的大型项目来说,很难清楚表明各项工作之间的逻辑关系,时间参数计算也不便,不能指出影响项目周期的关键所在,难以对计划在执行过程中进行明确的修改和调整。网络计划技术是指在应用网络模型的基础上,利用相关信息进行分析计算,通过对时间、费用、资源等要素的不断调整优化,并在工作过程中加强控制,以达到节省费用、缩短工期、提高工作效率,它是能有效实现项目目标的一种科学管理方法。网络计划技术的基本原理,可以归纳为以下4点。
               (1)把一个项目的全部实现过程分解成若干项工作,并按各项工作的开展顺序和相互制约关系,绘制成网络图形。
               (2)通过网络图时间参数计算,找出关键工作和关键线路。
               (3)利用最优化原理,不断改进网络计划的初始方案,寻求其最优方案。
               (4)在网络计划执行过程中,对其进行有限监督和控制,合理安排人力、物力和资源,以最少的资源消耗,获得最大的经济效果。
               网络图
               网络图是网络计划技术的基础。网络图是由箭线和节点组成,用来表示工作流程的方向、顺序的网状图形,一个网络图表示一个项目任务。网络图包含三个因素即作业、事件和路线。作业,是指一项工作或一道工序,需要消耗人力、物力和时间的具体活动过程,在网络图中作业用箭线或节点表示;事件是指某项作业的开始或结束,它不消耗任何资源和时间;路线,是指自网络始点开始,顺着箭线的方向,经过一系列连续不断的作业和事件直至网络终点的通道,一条路线上各项作业的时间之和是该路线的总长度(路长)。
               
               双代号网络图
               网络图有双代号网络图和单代号网络图两种。双代号网络图又称箭线式网络图,它是以箭线及其两端节点的编号表示工作,同时,节点表示工作的开始或结束以及工作之间的连接状态,如上图所示;单代号网络图又称节点式网络图,它是以节点及其编号表示工作,箭线表示工作之间的逻辑关系,如下图所示。
               
               单代号网络图
               网络图的绘制
               网络图中工作的表示方法如下图一和下图二所示。网络图中的节点都必须有编号,其编号严禁重复,并应使每一条箭线上箭尾节点编号小于箭头节点编号。在双代号网络图中,一项工作必须有唯一的一条箭线和相应的一对不重复出现的箭尾、箭头节点编号。因此,一项工作的名称可以用其箭尾和箭头节点编号来表示。可以允许存在虚箭线,虚箭线不代表实际工作,我们称之为虚工作。虚工作既不消耗时间,也不消耗资源。虚工作主要用来表示相邻两项工作之间的逻辑关系。但有时为了避免两项同时开始、同时进行的工作具有相同的开始节点和完成节点,也需要用虚工作加以区分。而在单代号网络图中,一项工作必须有唯一的一个节点及相应的一个代号,该工作的名称可以用其节点编号来表示。在单代号网络图中,虚拟工作只能出现在网络图的起点节点或终点节点处。
               
               双代号网络图工作表示法
               
               单代号网络图工作表示法
               工作之间先后顺序关系是项目逻辑关系的组成部分。工作关系可以被描述为紧前工作、紧后工作和平行工作。紧前工作、紧后工作及平行工作是工作之间逻辑关系的具体表现,只要能根据工作之间的关系明确其紧前或紧后关系,即可据此绘出网络图。它是正确绘制网络图的前提条件。
               (1)紧前工作。在网络图中,相对于某工作而言,紧排在该工作之前的工作称为该工作的紧前工作。在双代号网络图中,工作与其紧前工作之间可能有虚工作存在。
               (2)紧后工作。在网络图中,相对于某工作而言,紧排在该工作之后的工作称为该工作的紧后工作。在双代号网络图中,工作与其紧后工作之间也可能有虚工作存在。
               (3)平行工作。在网络图中,相对于某工作而言,可以与该工作同时进行的工作即为该工作的平行工作。
               在关于网络图的描述中还有几个相关概念:
               (1)先行工作和后续工作:先行工作指对于某工作而言,从网络图的第一个节点(起点节点)开始,顺箭头方向经过一系列箭线与节点到达该工作为止的各条通路上的所有工作。后续工作指相对于某工作而言,从该工作之后开始,顺箭头方向经过一系列箭线与节点到网络图最后一个节点(终点节点)的各条通路上的所有工作。
               (2)线路:网络图中从起点节点开始,沿箭头方向顺序通过一系列箭线与节点,最后到达终点节点的通路称为线路。线路既可依次用该线路上的节点编号来表示,也可依次用该线路上的工作名称来表示。如下图所示,该网络图中有2条线路,可表示为:①—②—③—⑤—⑥和①—②—④—⑤—⑥,也可表示为:A—B—D—F和A—C—E—F。
               
               双代号网络图
               网络图的绘图一般应遵循以下基本规则:
               (1)网络图必须按照已定的逻辑关系绘制。
               (2)网络图中严禁出现循环回路。
               (3)网络图中的箭线(包括虚箭线,以下同)应保持自左向右的方向,不应出现箭头指向左方的水平箭线和箭头偏向左方的斜向箭线。
               (4)网络图中严禁出现双向箭线和无箭头箭线,严禁出现没有箭尾节点的箭线和没有箭头节点的箭线。
               (5)严禁在箭线上引出箭线。
               (6)应避免出现交叉箭线,当不可避免时,可采用过桥法和指向法处理。
               (7)网络图中应只有一个起点节点和一个终点节点(任务中部分工作需要分期完成的网络计划除外)。除网络图的起点节点和终点节点外,不允许出现没有外向箭线的节点和没有内向箭线的节点。
               网络计划及参数计算
               网络计划是指在网络图上加注时间参数而编制的进度计划。网络时间参数是指网络计划及其工作、节点所具有的各种时间值。网络时间参数的计算应在各项工作的持续时间确定之后进行。
               (1)网络时间参数及含义。
               工作持续时间是指一项工作从开始到完成的时间。
               工作的最早开始时间(ES)是指在其所有紧前工作全部完成后,本工作有可能开始的最早时刻。工作的最早完成时间(EF)是指在其所有紧前工作全部完成后,本工作有可能完成的最早时刻。工作的最早完成时间等于本工作的最早开始时间与其持续时间之和。
               工作的最迟完成时间(LF)是指在不影响整个任务按期完成的前提下,本工作必须完成的最迟时刻。工作的最迟开始时间(LS)是指在不影响整个任务按期完成的前提下,本工作必须开始的最迟时刻。工作的最迟开始时间等于本工作的最迟完成时间与其持续时间之差。
               工作的总时差(TF)是指在不影响总工期的前提下,本工作可以利用的机动时间。工作的自由时差(FF)是指在不影响其紧后工作最早开始时问的前提下,本工作可以利用的机动时间。对于同一项工作而言,自由时差不会超过总时差。当工作的总时差为零时,其自由时差必然为零。
               (2)网络时间参数的计算。
               网络参数的计算应在确定各项工作的持续时间之后进行,网络计划的起点节点的最早开始时间为零。
               网络计划中各项工作的最早开始时间(ES)和最早完成时间(EF)的计算应从网络计划的起点节点开始,顺着箭线方向依次逐项计算。工作的最早开始时间等于该工作的各个紧前工作的最早完成时间的最大值,ES=max{紧前工作的EF};工作的最早完成时间等于该工作的最早开始时间加上其持续时间,EF=ES+本工作持续时间。
               网络计划中各项工作的最迟开始时间(LS)和最迟完成时间(LF)的计算应以项目规定或计算的工期为基准,从网络计划的终止节点,逆着箭线方向依次逐项计算。某工作的最迟完成时间等于该工作的各项紧后工作的最迟开始时间的最小值,LF=min{紧后工作的LS};最迟开始时间等于本项工作的最迟完成时间减本项工作的持续时间,LS=LF-工作的持续时间。
               某项工作总时差(TF)等于该工作最迟完成时间与最早完成时间之差,或该工作最迟开始时间与最早开始时间之差,TF=LF-EF或TF=LS-ES。
               某项工作自由时差(FF)的计算有两种情况,对于有紧后工作的工作,其自由时差等于本工作之紧后工作最早开始时间减本工作最早完成时间所得之差的最小值,FF=min{ES(紧后工作)}-EF;对于无紧后工作的工作,也就是以网络计划终点节点为完成节点的工作,其自由时差等于计划工期与本工作最早完成时间之差。
 
       项目管理
        构建嵌入式系统是一项复杂的任务,尤其是涉及到很多人员共同长期工作的时候。为了使嵌入式项目开发获得成功,必须对系统开发项目的工作范围、花费的工作量(成本)、可能遇到的风险、进度的安排、要实现的任务、经历的里程碑以及需要的资源(人、硬/软件)等做到心中有数,而项目管理可以提供这些信息。项目管理的过程一般包括初启、计划、执行、监控、结项,项目管理的范围覆盖整个系统生命周期过程。
               管理范围
               有效的项目管理集中于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图不能反映任务之间的并行关系。
   题号导航      2021年上半年 程序员 上午试卷 综合知识   本试卷我的完整做题情况  
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 /
 
第56题    在手机中做本题