当前课程知识点:软件工程 >  第5章 团队开发管理 >  5.4 软件项目估算 >  讲课视频

返回《软件工程》慕课在线视频课程列表

讲课视频在线视频

下一节:讨论

返回《软件工程》慕课在线视频列表

讲课视频课程教案、知识点、字幕

项目估算

是要估计完成交付产品的

时间和成本

对于软件项目来说

估算最大的挑战

是项目的复杂性和不确定性

软件规模越大复杂性越高

不确定性就越大

需求的不确定性

也会对项目估算产生很大影响

另外

也缺少可靠的历史数据

为估算提供参考

现实中

许多开发人员不愿做计划

对估算缺乏信心

学生做作业可能有这样的体会

如果没有截止时间的要求

有的作业可能永远都完不成

所以我们要克服困难

努力做出一个相对有价值的估算

随着经验越来越多

估算就会越来越准确

软件项目管理

是为了产出和结果

而不是为了活动

所以估算主要是针对结果进行

估算是在预测未来

不管用什么方法

所有的估计从定义上来说

都只是概率

虽然估计存在不确定性

但是你做出的估计

在很多时候都会变成一种承诺

所以在估计时

要基于事实 考虑风险

做出合理的调整

确保对完成时间有信心

专家判断

是一种常见的估算方法

主要是依赖专家的经验

和类似项目的历史信息

对具体任务

做出时间或者成本的估算

这种方法

主要是依赖专家的能力和经验

来判断哪些项目是相似的

在哪些方面相似

但是有些

表面上看起来相似的项目

实际上可能存在很大不同

比如说一个运动员

在4分钟跑完一英里

我们不可能按照这个速度

推断出

他可以在1小时45分钟

跑完马拉松

因为跑马拉松和跑一英里

存在很大的差别

大部分专家判断

技术过于简单化

很多可能影响工作量的因素

并没有考虑进去

所以这种估算

存在很大的不准确

参数估算也是常用的一种方法

这种方法通过对大量的

项目历史数据进行统计分析

使用项目特性参数

建立经验模型

再根据模型

估算出成本和时间

我们在这里

简单的介绍 功能点 COCOMO

用例点和机器学习方法

大家只需要初步了解

这些方法的基本原理

功能点方法

是根据软件信息域的基本特征

和软件复杂性

估算出软件的规模

并以功能点为单位来进行度量

这种方法使用五种信息域

来刻划软件的基本特性

第一 是外部输入

主要是指通过界面的一些输入

像插入 更新这样的操作

也都是典型的外部输入

第二 是外部输出

像导出 报表 打印都属于输出

第三 是外部查询

查询操作一般是要先输入数据

再根据输入的数据计算得到输出

第四 是内部逻辑文件

可以理解为业务对象

有可能对应多个数据表

第五 外部接口文件

它是指其他应用提供的接口数据

功能点方法

包括以下过程

首先确定功能点计算的范围

和应用程序边界

估计出

所有数据功能及其复杂性

也就是内部逻辑文件

和外部接口文件

再估计出

所有事务功能及其复杂性

也就是外部输入 外部输出

和外部查询

根据信息域的加权因子

计算得出未调整功能点UFC

然后根据所开发系统的特点

得到这个表所列的

14项调整因子值

最后通过这个公式

计算得出已调整的功能点FP

这里功能点

代表了软件规模的度量单位

我们也可以根据

以往项目的历史数据

统计出不同编程语言

对应一个功能点的代码行

进而可以把功能点转化为代码行

结构化成本模型

COCOMO是一种利用经验模型

进行工作量和成本估算的方法

这种模型分为基本 中间 详细

三个层次

分别用于软件开发的

三个不同阶段

也就是系统开发初期

各子系统的设计

以及子系统内部各个模块的设计

这里给出的

是一个基本COCOMO的经验公式

其中PM代表工作量

以人月为单位

A是工作量调整因子

B是规模调整因子

Size代表软件规模

可以是千行代码

或者是功能点数

COCOMO模型

把软件分为组织型 嵌入型

和半独立型三种类型

不同的软件可以对应

这三类软件的适用范围

选取相应的参数

由于这种模型是根据

以前的和局部的数据得出的

不可能完全适用于

当前所有的软件项目

和开发环境

所以它的计算结果

只能是一个大概的参考

用例点估算

主要是对面向对象软件的

开发规模和工作量进行估计

它和功能点方法比较类似

但是比功能点要简单一些

这是一个顾客到银行存钱 取钱

和转帐的用例图

其中像个小人这样的一个符号

代表着和系统进行交互的角色

可以是使用者

也可以是其他系统

椭圆符号

代表着描述系统功能的用例

关于用例图的内容

我们将在有关需求建模的

相关章节

进行详细讲解

这里大家只要大概知道

用例和角色的一个含义就行

用例点估算

首先需要建立用例模型

然后通过以下步骤进行估算

第一步

计算角色复杂度

角色可以分成简单 一般

和复杂三种类型

简单角色

是通过API或者接口

和系统进行交互的其他系统

一般角色

是通过协议

比如说TCPIP和系统

进行交互的其他系统

复杂角色

是通过界面和系统进行交互的人

他们的权重分别是1 2和3

通过加权求和

可以得到角色复杂度UAW

第二步 计算用例复杂度

用例复杂度也是分成

简单 一般和复杂三种类型

可以根据涉及的数据库实体数

操作步骤数

和实现所用类的个数来区分

权重分别是5 10和15

同样

可以通过加权求和的方式

得到用例复杂度UUCW

第三步

把角色复杂度和用例复杂度相加

得到未平衡的用例点

第四步

计算技术复杂度因子

和环境复杂度因子

计算得到最终的用例点

接下来

我们还可以根据历史数据

得知完成每个用例点的平均时间

进一步可以计算出

项目开发的工作量

关于生产率

用例点发明者建议

完成每个用例点

一般会使用16-30人时

可以取平均值20人时

技术复杂度

一共有13项调整因子

可以按照上面给出的经验公式

进行计算

这里有8项环境复杂度调整因子

上面的公式

是计算环境复杂度的经验公式

机器学习方法

是使用历史项目数据

通过机器学习算法

来找出数据中的规律

并以此估算新的项目

神经网络

就是一种机器学习方法

这个图

说明了如何使用神经网络

对工作量进行估算

它把影响工作量的四个因素

也就是问题复杂性

应用新颖性

使用设计工具和团队规模

来作为输入

通过三层网络计算出工作量

它使用过去项目的历史数据

作为训练集

再用训练好的网络

来估算新的项目

还有一种基于案例推理的

机器学习方法

首先

把一个新的问题标识为一个案例

系统从历史的信息库中

检索出相似的案例

加以复用

在调整这些案例

使其适合新的项目参数

同时 把新的输出案例

加到案例库中

不断地丰富已有的案例

软件工程课程列表:

第1章 初识软件工程

-1.1 软件无处不在

--讲课视频

-1.2 软件的本质特性

--讲授视频

-1.3 软件工程的产生与发展

--讲授视频

-1.4 软件工程的基本概念

--讲授视频

-1.5 软件质量实现

--讲授视频

-1.6 业界人士谈软件工程

--海芯科技创始人施侃乐访谈

-测验题--作业

-讨论题

--讨论题

-作业题

--第一张 作业题

第2章 编写高质量代码

-2.1 编程过程与规范

--讲课视频

-2.2 良好的编程实践

--讲课视频

-2.3 Python集成开发环境

--讲课视频

-2.4 代码静态检查

--讲课视频

-2.5 代码性能分析

--讲课视频

-2.6 结对编程实践

--讲课视频

-2.7 刘贺谈软件工程

--讲课视频

--讨论

-测验题--作业

-作业题

--第二章 作业题

第3章 单元测试

-3.1 单元测试概述

--讲课视频

-3.2 黑盒测试方法

--黑盒测试方法

-3.3 白盒测试方法

--基本概念

--代码覆盖标准

--基本路径测试

-3.4 单元测试工具

--单元测试工具

--html

-测验题--作业

-作业题

--第三章 作业题

--作业题附件

第4章 软件开发过程

-4.1 软件过程

--讲课视频

-4.2 软件过程模型

--讲课视频

-4.3 敏捷开发过程

--讲课视频

-4.4 微软公司开发过程

--邹欣经理自我介绍

--微软开发过程之一

--微软开发过程之二

-测验题--作业

第5章 团队开发管理

-5.1 团队组织与管理

--讲课视频

-5.2 项目沟通管理

--讲课视频

-5.3 软件项目计划

--讲课视频

-5.4 软件项目估算

--讲课视频

-测验题--作业

-讨论题

--讨论

第6章 敏捷开发与配置管理

-6.1 敏捷开发之Scrum

-- 敏捷开发之Scrum

--html

-6.2 用户故事与估算

--讲课视频

-6.3 团队协作工具Tower

--Tower工具介绍(1)

--Tower工具介绍(2)

-6.4 配置管理

--讲课视频

-6.5 配置管理工具Git

--讲课视频

-测验题--作业

-作业题--作业

第7章 需求获取

-7.1 需求工程师

--讲课视频

-7.2 需求定义

--讲课视频

-7.3 需求的类型

--讲课视频

--讲课视频(2)

-7.4 需求工程过程

--讲课视频

-7.5 需求的主要来源

--讲课视频

-7.6 需求获取技术

--讲课视频

--讲课视频二

--讲课视频三

-7.7 撰写需求文档

--讲课视频

-测验题--作业

-讨论题

--讨论

第8章 用例建模

-8.1 用例建模概念

--讲课视频

-8.2 用例建模过程

--讲课视频

-8.3 用例建模精讲

--讲课视频

-8.4 建模工具介绍

--讲课视频

-8.5 微信抢票应用案例

--讲课视频

-测验题--作业

-讨论题

--讨论

第9章 面向对象分析与设计

-9.1 面向对象分析

--讲课视频

-9.2 CRC卡片分拣法

--讲课视频-1

--讲课视频-2

-9.3 面向对象设计

--讲课视频-1

--讲课视频-2

-9.4 类图建模

--讲课视频-1

--讲课视频-2

-第9章 面向对象分析与设计--测验题

-讨论题

--讨论

第10章 行为建模

-10.1 顺序图概念

--讲课视频

-10.2 顺序图建模

--讲课视频

-10.3 顺序图风格

--讲义视频

-10.4 状态建模

--讲课视频

-10.5 状态图

--讲课视频

-10.6 状态图精讲

--讲义视频

-测验题--作业

-讨论题

--讨论

第11章 软件系统设计

-11.1 软件体系结构概念

--讲授视频

-11.2 软件设计原则

--讲授视频

-11.3 软件体系结构风格(一)

--讲授视频

-11.4 软件体系结构风格(二)

--讲授视频

-11.5 软件体系结构风格(三)

--讲授视频

-11.6 软件设计过程

--讲授视频

-11.7 Web系统架构设计

--讲授视频

-11.8 数据库选择策略

--讲授视频

-测验题--作业

-作业题

--html

--html

--html

-作业题--作业

第12章 软件交互设计

-12.1 交互设计概述

--讲授视频

-12.2 交互设计目标

--讲授视频

-12.3 GUI设计原则

--讲课视频

-12.4 KLM效率模型

--Video

-12.5 Fitts定律

--讲授视频

-12.6 交互设计过程

--讲授视频

-测验题--作业

第13章 软件系统测试

-13.1 软件测试概念

--讲课视频

-13.2 软件测试类型

--讲课视频

-13.3 软件功能测试

--讲课视频

-13.4 软件性能测试

--讲课视频

-测验题--作业

第14章 软件交付与维护

-14.1 软件部署与交付

--讲课视频

-14.2 软件演化与维护

--讲课视频

-测验题--作业

第15章 期末考试与总结

-第一部分:基础知识

-第二部分:编程与测试(选做)

--编程与测试(选做)

讲课视频笔记与讨论

也许你还感兴趣的课程:

© 柠檬大学-慕课导航 课程版权归原始院校所有,
本网站仅通过互联网进行慕课课程索引,不提供在线课程学习和视频,请同学们点击报名到课程提供网站进行学习。