软件项目管理1.管理的对象及内容对象:软件工程项目内容:项目工作范围;可能遇到的风险;需要的资源(人、软/硬件);要完成的任务;经历的里程碑;花费的工作量(成本);工作进度。方法:制定项目开发计划,对计划的实施进行追踪、监控。2.管理过程的活动软件项目启动:在系统工程阶段确定软件项目的目标和范围。目标指出项目的目的。范围标明项目实现的基本功能。度量:度量是对计划进行追踪的基本手段、作用是有效地,定量地进行管理。历史项目的度量数据是对项目进行估算制定项目开发计划的依据,是改进软件过程的依据。估算:以软件项目的工作范围、历史项目度量为基础把项目分解为可单独进行估算的小块估算项目需要的资源、开发周期、成本。风险分析:寻找项目开发中可能出现的不确定因素。如对用户需求的理解程度。可能出现的技术障碍、资源(人、资金、软/硬件、设备)的变更。协作环境的变化等,对进度、成本、质量造成的影响。制定计划:资源分配、进度安排、风险分析及处理方案。追踪控制:在软件项目过程中通过日报、周报、月报、例会等形式及收集各种度量数据对资源使用情况,进度进行追踪与计划进行比较,进行必要的更改、调整。保证项目按时、按质低成本地完成。3.软件工程基本概念3.1软件定义:软件是计算机系统中与硬件相互依存的另一部分,它是包括程序、数据及其相关文档的完整集合。软件的特点:(1)软件是一种逻辑实体,而不是具体的物理实体。(2)在软件的开发过程中没有明显的制造过程。一旦某一软件项目研制成功,可以大量地复制同一内容的副本。必须着重在软件开发方面下功夫。(3)没有硬件那样的机械磨损,老化问题。不存在磨损和老化问题。而它存在退化问题。软件维护比硬件维护要复杂得多。(4)对计算机系统有着不同程度的依赖性。(5)至今尚未完全摆脱手工艺的开发方式。大多是“定做”的。(6)软件是复杂的。软件开发,特别是应用软件的开发常常涉及到其他领域的专门知识。(7)软件的研制工作须要投入大量的、复杂的、高强度的脑力劳动,它的成本是比较高的。(8)相当多的软件工作涉及到社会因素。软件的分类:(1)按软件的功能划分系统软件:与计算机硬件紧密配合在一起,使计算机系统各个部件、相关的软件和数据协调、高效地工作的软件。支撑软件:是协助用户开发软件的工具性软件。应用软件:是在特定领域内开发,为特定目的服务的一类软件。(2)按软件规模进行划分(3)按工作方式划分实时处理软件;分时软件;交互式软件;批处理软件。3.2软件工程定义:软件工程是指导计算机软件开发和维护的工程学科。采用工程的概念、原理、技术和方法来开发与维护软件。软件工程要素:方法、工具(环境)、过程、标准(规范)。方法:是软件开发“如何做”的技术。如项目计划方法,需求分析方法,数据结构设计方法,系统设计方法,算法、编码、测试、维护方法。工具:为软件工程方法提供的自动、半自动软件支撑工具。各种软件工具、开发机器等组合形成软件工程环境。过程:软件工程是开发、运行、维护和修复软件的系统方法。软件工程过程是将软件工程的方法和工具综合起来以达到合理、及时地进行计算机软件开发的活动的序列。过程定义了方法使用的顺序、要求交付的文档资料、为保证质量计划需求分析运行·维护设计编码测试维护阶段定义阶段开发阶段和协调变化所需要的管理、及软件开发各个阶段完成的时程碑。标准:软件工程实施过程中的一系列统一的约束和规定。软件工程项目基本目标:付出较低的开发成本;达到要求的软件功能;取得较好的软件性能;开发的软件易于移植;需要较低的维护费用;能按时完成开发工作,及时交付使用。3.3软件生存周期定义:软件孕育、诞生、成长、成熟、衰亡的生存过程。一般称其为计算机软件的生存期。生存周期阶段:软件生存期分为六个阶段,即制定计划、需求分析和定义、软件设计、程序编写、软件测试、运行维护。生存期模型:软件生存模型是从软件项目需求定义直至软件经使用后废弃为止,跨越整个生存期的系统开发、运作和维护所实施的全部过程、活动和任务的结构框架。瀑布模型:规定了各项软件工程活动,自上而下、相互衔接的固定次序,如同瀑布流水,逐级下落。软件生存期的瀑布模型演化模型:进行两次开发,第一次是试验开发,其产品为“原型”,第二次是正式开发得到满意的软件产品。螺旋模型:螺旋模型3.4软件文档定义:文档是指某种数据媒体和其中所记录的数据。它具有永久性,并可以由人或机器阅读,通常仅用于描述人工可读的东西。在软件工程中,文档常常用来表示对活动、需求、过程或结果进行描述、定义、规定、报告或认证的任何书面或图示的信息。文档的作用:(1)提高软件开发过程的能见度。(2)提高开发效率。(3)在一定阶段的工作成果和结束标志。(4)便于协调以后的软件、开发、使用和维护。(5)便于管理人员、开发人员、操作人员、用户之间的协作、交流和了解。(6)便于用户了解软件的功能、性能等各项指标。文档的种类:(1)开发文档;(2)管理文档;(3)用户文档4.软件度量4.1什么是软件度量软件度量就是在软件开发过程中把反映或影响软件开发成本、开发效率、软件质量的各种数据测量出来并记录下来。风险分析制定计划客户评估实施工程4.2软件度量的作用为了有效地定量地进行管理________计划、估算、过程监控、评价。是改进过程提高软件质量的重要手段。4.3从CMMLevel2(可重复级)的特征看度量的重要性(1)管理制度化,建立了基本的管理制度和规程,管理工作有章可循。(2)初步实现标准化,开发工作较好地实施标准。(3)变更依法时行,做到基线化。(4)新项目的计划和管理基于过去的实践经验,具有重复以前成功项目的环境和条件。管理工作主要跟踪经费支出(资金、设备、人员、工时)进度、功能以及识别存在的问题。4.4度量的内容(1)过程属性的度量1)工作量度量工作产品(对象)标识:项目、文档、模块、工作时间(月、周、日、时)工作内容:调研、编写文档、编码、测试、评审、改错、项目例会工作成果:文档页数、代码行数、模块数、发现或纠正的错误数工作量:人月、人周、人时2)资源费用度量工作产品(对象)标识:项目、模块时间:起止年/月/日资源:人数、设备数、支持工具数、资金数、场地面积3)事件度量工作产品标识:项目发生时间:年/月/日事件描述:更改、偏离计划(进度、费用)处理结果:更改/不更改、处理花费(损失)事件发生总数或频率(2)产品属性度量1)面向产品规模的度量工作产品标识:项目、模块代码行数:千行语句数、字符数、字节数注释率:注释语句数/代码行数2)面向功能的度量度量内容工作产品标识:项目、模块用户输入数据数:在系统运行时要用户输入的数据用户输出数据数:在系统运行时用户要求输出的数据用户请求(查询)数:用户交互式有实时响应的次数内部文件数(数据库):数据库中与本系统有交换的数据结构数外部文件数:本系统运行时机器可读的有交换的外系统数据结构数功能点计算加权因数直接测量项计数简单中间复杂加权计数用户输入数据数346用户输出数据数457用户请求(查询)数346内部文件数71015外部文件数5710总计数功能点FP=总计数×(0.65+0.01×SUM(Fi))Fi(i=1···14)为其它影响因素对计算功能点的校正值。3)错误缺陷及改正率度量工作产品标识产品规模千行代码或功能点数错误级别分三级或五级错误个数改正个数错误率错误数/软件规模改正率改正错误数/发现错误数4)测试覆盖率测量工作产品标识语句覆盖率测试经历语句数/总语句数分支覆盖率测试经历支路数/总支路数简单路径覆盖率测试经历简单路径数/总简单路径数5)生产率、单位成本的计算生产率=工作成果/工作量单位成本=资源消耗折算成的成本(元)/产生的成果(最终成果)5.软件项目估算(1)软件规模估算软件项目分解:把软件分解成一些小的可分别独立进行估算的子功能,从而能根据历史数据估算出每个子功能的规模。估算出期望的软件规模数L=(a+4m+b)a为最佳、m为可能的、b为最差的估计值。a、m、b都从历史上同类功能软件度量数据中获得。(2)工作量及工作周期的估算建立企业的估算模型E=aLbE——工作量(人月),L——软件规模(千条语句数、功能点数)利用历史上多个项目实际度量得到的L、E进行回归计算确定a、b值。IBM模型:1997年从60个项中得到下列模型。E=5.2L0.91L——千条语句数E——人月数类似方法得到:D=4.1L0.36=13.47E0.35D——持续时间(月)S=0.54×E0.6S——人数DOC=49×L1.01DOC——文档页数COCOMO模型(ConstructiveCostModel)由Boehm在63个项目的历史数据中得到,对于规模不大(<5万行=的软件有基本模型MM=2.4(KDSI)1.05MM——工作量(人月数)KDSI千条语句数TDEV=2.5(MM)0.38TDEV——持续时间(月)COCOMO模型还考虑各种(15种)影响因素而进行修正的值,(例如,人员能力,使用语言的经验、程序设计技术、工具支持程度……)。(3)估算成本根据历史项目的单位规模成本或人月成本计算软件成本C=单位语句成本×LC=单位人月成本×E6.风险分析目的:一是关心未来,风险是否会导致软件项目失败?二是关心变化,在用户需求、开发技术、目标机器、以及所有其他与项目有关的实体中会发生什么变化?三是必须解决选择问题:应当采用什么方法和工具,应当配备多少人力,在质量上强调到什么程度才满足要求?4个活动:风险识别,风险估计,风险评价和风险驾驭。(1)风险识别项目风险识别潜在的预算、进度、个人(包括人员和组织)、资源、用户和需求方面的问题。如项目复杂性、规模和结构等都可构成风险因素。技术风险识别潜在的设计、实现、接口、检验和维护方面的问题。规格说明的多义性、技术上的不确定性、技术陈旧、最新技术(不成熟)也是风险因素。商业风险建立的软件不是真正所想要的;建立的软件不适合整个软件产品战略;销售部门不清楚如何推销这种软件;失去上级管理部门的支持;失去预算或人员的承诺(预算风险)。(2)风险估计估计风险发生的可能性。估计风险可能产生的结果。1)建立一个尺度或标准来表示一个风险的可能性;2)描述风险的结果;3)估计风险对项目和产品的影响;4)确定风险估计的正确性。(3)风险评价风险评价时,进一步检验在风险估计时所得到的估计的准确性,对已暴露的风险进行优先排队,考虑控制和(或)消除可能出现风险的方法。风险评价很有用的技术就是定义风险参照水准。有一个表明导致项目终止的水准。风险的某种组合造成了一些问题,从而超出了一个或多个参照水准,就要中止工作。(4)风险驾驭和监控风险驾驭是指利用某些技术,及某些项目管理方法等设法避开或转移风险。例如,一项风险影响的估计值是:项目开发时间增加15%,总成本增加12%。采取风险驾驭步骤带来了额外的项目成本。要对风险驾驭部分进行评价。风险消除步骤,经过估算,将增加15%的项目成本和开发时间,则管理或计划人员可以决定不实现这个风险驾驭步骤。如果估算出这些风险消除步骤仅增加了5%的成本和3%的开发时间。风险监控:1)做风险因素跟踪;2)进行风险再估计;3)收集可用于将来的风险分析的信息。7.制定计划制定计划的目的是要回答:这个软件项目的范围是什么?需要哪些资源?花费多少工作量?要用的成本有多少?进度如何安排等等一系列问题。软件计划的类型1)项目实施计划(称为软件开发计划):这是软件开发的综合性计划,通常应包括任务、进度、人力、环境、资源、组织等多个方面。2)质量保证计划:把软件开发的质量要求具体规定为在每个开发阶段中可以检查的质量保证活动。3)软件测试计划:规定测试活动的任务、测试方法、进度、资源、人员职责等。4)文档编制计划:规定所开发项目应编制的文档种类、内容、进度、人员职责等。5)用户培训计划:规定对用户进行培训的目标、要求、进度、人员职责等。6)软件分发计划:软件开发项目完成后,如何提供给用户。进度安排:(1)估算软件任务所需人月数。(2)开发阶段