(一)成本估算
软件具有可见性差、定量化难等特殊性,很难在项目完成前准确地估算出开发软件所需的工作量和费用。
(1)常见估算
①根据以往开发类似软件的经验(或者别人的经验)来估算。
②将软件项目划分成若干个子系统或按照软件生存周期的各阶段分别估算,最后汇总成本。
③使用经验公式和成本估算模型。
(2)成本估算方法
ID | 方法 | 说明 | 优缺点 | |
1 | 自顶向下估算法 | 参照过去项目的耗费,推算总成本(或总工作量),然后按阶段、步骤和工作单元进行分配 | 优点: (1)重视系统级,不会遗漏系统级事务成本估算; (2)估算工作量小、速度快。 缺点: 不清楚低级别技术性困难问题,使成本上升。 | |
2 | 自底向上估算 | 将待开发软件细分,分别估算每个子任务所需要的工作量,然后累加 | 优点:分解后估算比较准确 缺点:缺少各项子任务之间相互联系所需要的工作量和系统级工作量,估算往往偏低。 | |
3 | 差别估算法 | 比较已完成的类似项目,估算每个差异对成本的影响,导出总成本 | 优点:可提高估算准确度 缺点:不容易明确“差别"界限 | |
4 | 其他估算法 | 专家估算法 | 依靠专家估算,精确性取决于专家对项目定性参数的了解和经验 | |
类推估算法 | 将项目总体参数与类似项目直接比较(自顶向下); 在两个具有相似条件的工作单元之间进行(自底向上) | |||
算式估算法 | 试图避免前述方法的主观因素影响。两种基本类型:由理论导出和由经验导出。 |
(3)成本估算模型
ID | 模型 | 说明 | |
1 | Putnam模型 | 是一种动态多变量模型。假设在软件开发整个生存期中工作量有特定的分布 | |
2 | COCOMO模型 | 是最精确、最易于使用的成本估算模型 | |
基本COCOMO模型 | 静态单变量模型,对整个系统进行估算 | ||
中级COCOMO模型 | 静态多变量模型,将模型分为系统和部件,系统由部件构成,把开发所需人力(成本)看作是程序大小和一系列"成本驱动属性"的函数 | ||
详细COCOMO模型 | 将模型分为系统、子系统和模块三个层次,除考虑中级模型,还考虑了成本驱动属性的影响 |
(二)风险分析
在进行软件工程分析时,项目管理人员要进行4种风险评估活动,包括建立表示风险概念的尺度,描述风险引起的后果,估计风险影响的大小,确定风险估计的正确性。
ID | 风险分析 | 说明 | 描述 |
1 | 风险识别 | 试图系统化地确定对项目计划(估算、进度、资源分配)的威胁。 | 建立风险条目检查表(识别风险) (1)产品规模(总体规模有关风险) (2)商业影响(管理或市场约束) (3)客户特性(客户素质、与客户沟通能力) (4)过程定义(过程定义的程度和遵守程度) (5)开发环境(构建工具可用性及质量) (6)构建的技术(复杂性和技术新奇性) (7)人员数目及经验(人员总体水平及经验) |
2 | 风险预测 | 又称风险估算 (1)风险发生的可能性或概率 (2)风险发生的后果 | 四种风险预测活动 (1)建立尺度或标准,反映风险发生的可能性 (2)描述风险的后果 (3)估计风险对项目和产品的影响 (4)标注风险预测整体精确度,以免产生误解 |
3 | 风险评估 | 定义风险参照水准 | 成本(超支)、进度(延期)和性能(降低)就是三种典型的风险参照水准。 建立(ri、li、xi)形式三元组。ri表示风险,li表示风险发生概率,xi则表示风险产生的影响。 |
4 | 风险控制 | 目的:辅助项目组建立处理风险的策略 | 有效的策略必须考虑:风险避免、风险监控、风险管理(RMMM)及意外事件计划方面的问题 主动避免(缓解风险)永远是最好的策略 风险缓解、监控和管理计划,又称RMMM计划(Risk Mitigation,Monitoring,and Management Plan) |
(三)进度管理
进度的合理安排是如期完成软件项目的重要保证,也是合理分配资源的重要依据。
(1)进度安排方式
①交付日期己经确定,必须如期完成。
②交付日期大致确定,最后交付日期自行确定。
(2)进度安排方法
1)Gantt 图
定义:是一种简单的水平条形图,以日历为基准描述项目任务。
优点:能清晰地描述每个任务从何时开始,到何时结束,任务进展情况以及各个任务之间的并行性。
缺点:不能清晰地反映出各任务之间的依赖关系,难以确定整个项目关键所在,也不能反映计划中有潜力的部分。
2) PERT(Program Evaluation & Review Technique, PERT 项目计划评审技术 )图
定义:是一个有向图,图中的箭头表示任务,可以标上完成该任务所需的时间;
节点(事件)表示流入节点的任务的结束,并开始流出节点的任务。
松弛时间(slacktime):表示在不影响整个工期的前提下,完成该任务有多少机动余地。
空任务(用虚线箭头表示):表示任务间的关系,空任务的时间为0。
PERT图不仅给出了每个任务的开始时间、结束时间和完成该任务所需的时间,还给出了任务之间的关系,以及如期完成整个工程的关键路径。
松弛时间反映了完成某些任务时可以推迟其开始时间或延长其完成所需的时间。
PERT图不能反映任务之间的并行关系。
(四)人员管理
意义:合理组织好参加项目人员,有利于发挥每个人的作用,有利于项目成功开发。在人员组织时,应考虑软件项目的特点、软件人员素质等多方面的因素。
分组:按软件项目进行分组,如需求分析组、设计组、编码组、测试组和维护组,以及质量保证组等。
程序设计组也可分为主程序员组、无主程序员组和层次式程序员组等。
ID | 分类 | 说明 | 备注 |
1 | 主程序员组 | 主程序员*1、后备程序员*1、资料员*1、程序员*n ①主程序员:技术领导和项目负责人,全面负责项目开发 ②后备程序员:协助主程序员工作,必要时主持工作 ③资料员:负责保管所有软件配置元素,如文档资料、程序清单和存储介质等,编译和链接代码、模块初步测试 ④程序员:集中精力完成编程 | 优点:便于集中领导,步调统一,容易按规范办事 缺点:不利于发挥个人积极性 |
2 | 无主程序员组 | 成员之间相互平等,工作目标和决策都由全员民主讨论,根据需要也可以轮流坐庄。 | 优点:平等民主,依赖个人成分少,有利于发挥个人积极性。 缺点:交流量大,往往职责不明确,出了问题无人负责,而且不利于与外界联系。 |
3 | 层次式程序员组 | 1名组长管理若干高级程序员 1名高级程序员管理若干程序员 | 优点:适合具有层次结构的较大型项目(可分成若干子项目),每个高级程序员负责一个子项目,子项目分解并分配给程序员 |