软件工程(导论)

成秀秀、杨玲、戚爱斌、苗世迪、温东新

目录

  • 1 软件与软件工程
    • 1.1 软件
    • 1.2 软件危机
    • 1.3 软件工程
    • 1.4 软件生命周期
    • 1.5 软件过程模型
    • 1.6 学生成果分享
  • 2 可行性研究与项目开发计划
    • 2.1 可行性研究的任务
    • 2.2 可行性研究过程
    • 2.3 进度计划
    • 2.4 学生成果分享
  • 3 需求分析
    • 3.1 需求分析的任务
    • 3.2 与用户沟通获取需求的方法
    • 3.3 分析建模与规格说明
    • 3.4 实体-联系图
    • 3.5 数据规范化
    • 3.6 状态转换图
    • 3.7 其它图形工具
    • 3.8 验证软件需求
  • 4 总体设计
    • 4.1 系统流程图
    • 4.2 数据流图
    • 4.3 数据字典
    • 4.4 设计过程
    • 4.5 设计原理
    • 4.6 启发规则
    • 4.7 描绘软件结构的图形工具
    • 4.8 面向数据流的设计方法
  • 5 详细设计
    • 5.1 结构程序设计
    • 5.2 人机界面设计
    • 5.3 过程设计的工具
    • 5.4 面向数据结构的设计方法
    • 5.5 程序复杂程度的定量度量
  • 6 软件编码
    • 6.1 程序设计语言
    • 6.2 编码风格
  • 7 软件测试
    • 7.1 软件测试基础
    • 7.2 单元测试
    • 7.3 集成测试
    • 7.4 确认测试
    • 7.5 白盒测试技术
    • 7.6 黑盒测试技术
    • 7.7 调试
    • 7.8 软件可靠性
  • 8 软件项目管理
    • 8.1 估算软件规模
    • 8.2 工作量估算
    • 8.3 人员组织
    • 8.4 质量保证
    • 8.5 软件配置管理
    • 8.6 能力成熟度模型
进度计划

进度计划总述

软件项目的进度安排通过把工作量分配给特定的软件工程任务并规定完成各项任务的起止日期,从而将估算出的项目工作量分布于计划好的项目持续期内。

进度计划将随着时间的流逝而不断演化。


一、估算开发时间

各种模型估算开发时间的方程很相似,例如: 

■Walston_Felix模型  

T=2.5E0.35

■原始的COCOMO模型  

T=2.5E0.38

■COCOMO2模型  

T=3.0E0.33+0.2×(b-1.01)

■Putnam模型  

T=2.4E1/3

其中,E是开发工作量(以人月为单位),T是开发时间(以月为单位)。 

经验告诉我们,随着开发小组规模扩大,个人生产率将下降,以致开发时间与从事开发工作的人数并不成反比关系。出现这种现象主要有下述两个原因: 

当小组变得更大时,每个人需要用更多时间与组内其他成员讨论问题、协调工作,因此增加了通信开销。

如果在开发过程中增加小组人员,则最初一段时间内项目组总生产率不仅不会提高反而会下降。

Brooks规律:向一个已经延期的项目增加人力,只会使得它更加延期。

存在一个最佳的项目组规模Popt,这个规模的项目组其总生产率最高。项目组的最佳规模是5.5人,即Popt=5.5。


二、Gantt图

Gantt(甘特)图是历史悠久、应用广泛的制定进度计划的工具。


例子:

旧木板房刷漆工程(15名工人,工具各5把) 


Gantt图的主要优点:

■Gantt图能很形象地描绘任务分解情况,以及每个子任务(作业)的开始和结束时间。

■具有直观简明和容易掌握、容易绘制的优点。

Gantt图的3个主要缺点: 

■不能显式地描绘各项作业彼此间的依赖关系;

■进度计划的关键部分不明确,难于判定哪些部分应当是主攻和主控的对象;

■计划中有潜力的部分及潜力的大小不明确,往往造成潜力的浪费。 


三、工程网络

工程网络是制定进度计划时另一种常用的图形工具,它同样能描绘任务分解情况以及每项作业的开始时间和结束时间。

它能显式地描绘各个作业彼此间的依赖关系。

工程网络是系统分析和系统设计的强有力的工具。


符号:


四、估算工程进度

工程网络必要的信息:

每个作业估计需要使用的时间:箭头长度和它代表的作业持续时间没有关系,箭头仅表示依赖关系,它上方的数字才表示作业的持续时间。

最早时刻EET:该事件可以发生的最早时间。

最迟时刻LET:在不影响竣工时间的前提下,该事件最晚可以发生的时刻。

机动时间:实际开始时间可以比预定时间晚一些,或者实际持续时间可以比预定的持续时间长一些,而并不影响工程的结束时间。 

最早时刻的计算:

事件的最早时刻是该事件可以发生的最早时间。

通常工程网络中第一个事件的最早时刻定义为零,其他事件的最早时刻在工程网络上从左至右按事件发生顺序计算。

计算最早时刻EET使用下述3条简单规则: 

■考虑进入该事件的所有作业;

■对于每个作业都计算它的持续时间与起始事件的EET之和;

■选取上述和数中的最大值作为该事件的最早时刻EET。 


最迟时刻的计算:

事件的最迟时刻是在不影响工程竣工时间的前提下,该事件最晚可以发生的时刻。

按惯例,最后一个事件(工程结束)的最迟时刻就是它的最早时刻。其他事件的最迟时刻在工程网络上从右至左按逆作业流的方向计算。

计算最迟时刻LET使用下述3条规则: 

■考虑离开该事件的所有作业;

■从每个作业的结束事件的最迟时刻中减去该作业的持续时间;

■选取上述差数中的最小值作为该事件的最迟时刻LET。 


五、机动时间

某些作业有一定程度的机动余地——实际开始时间可以比预定时间晚一些,或者实际持续时间可以比预定的持续时间长一些,而并不影响工程的结束时间。

机动时间=(LET)结束-(EET)开始-持续时间=右下角-左上角-持续时间

在制定进度计划时仔细考虑和利用工程网络中的机动时间,往往能够安排出既节省资源又不影响最终竣工时间的进度表。 


六、关键路径

最早时刻和最迟时刻相同的事件(机动时间为0的作业)定义了关键路径,在图中关键路径用粗线箭头表示。

关键路径上的事件(关键事件)必须准时发生,组成关键路径的作业(关键作业)的实际持续时间不能超过估计的持续时间,否则工程就不能准时结束。