软件工程(导论)

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

目录

  • 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 能力成熟度模型
程序复杂程度的定量度量

程序复杂程度的定量度量总述

详细设计阶段设计出的模块质量可以使用软件设计的基本原理和概念进一步仔细衡量它们的质量。但是,这种衡量毕竟只能是定性的,人们希望能进一步定量度量软件的性质。

定量度量程序复杂程度的作用:

把程序的复杂程度乘以适当常数即可估算出软件中错误的数量以及软件开发需要用的工作量;

定量度量的结果可以用来比较两个不同的设计或两个不同算法的优劣;

程序的定量的复杂程度可以作为模块规模的精确限度。 


一、McCabe方法

1. 流图

McCabe方法根据程序控制流的复杂程度定量度量程序的复杂程度,这样度量出的结果称为程序的环形复杂度。

所谓流图实质上是“退化了的”程序流程图,它仅仅描绘程序的控制流程,完全不表现对数据的具体操作以及分支或循环的具体条件。 

流图的表示:

结点:用圆表示,一个圆代表一条或多条语句。

边:箭头线称为边,代表控制流。在流图中一条边必须终止于一个结点,即使这个结点并不代表任何语句。

区域:由边和结点围成的面积称为区域,包括图外部未被围起来的区域。 

映射方法:

任何方法表示的过程设计结果,都可以翻译成流图。

对于顺序结构,一个顺序处理序列和下一个选择或循环的开始语句,可以映射成流图中的一个结点。

对于选择结构,开始语句映射成一个结点;两条分支至少各映射成一个结点;结束映射成一个结点。

对于循环结构,开始和结束语句各映射成一个结点。


当过程设计中包含复合条件时,应该把复合条件分解为若干个简单条件,每个简单条件对应流图中一个结点。

所谓复合条件,就是在条件中包含了一个或多个布尔运算符(逻辑OR,AND,NAND,NOR)。

2. 计算环形复杂度的方法

环形复杂度定量度量程序的逻辑复杂度。有了描绘程序控制流的流图之后,可以用下述3种方法中的任何一种来计算环形复杂度V(G)。

V(G)=流图中的区域数

V(G)=E-N+2(其中E是流图中的边数,N是结点数)

V(G)=P+1(其中P是流图中判定结点的数目 )


3. 环形复杂度的用途

■定量度量程序内分支数或循环个数,即程序结构的复杂程度;

■定量度量测试难度;

■能对软件最终的可靠性给出某种预测。

■实践表明,模块规模以V(G)≤10为宜。 


三、Halstead方法

Halstead方法根据程序中运算符和操作数的总数来度量程序的复杂程度。

令N1为程序中运算符出现的总次数,N2为操作数出现的总次数,程序长度N定义为:

N=N1+N2

程序中使用的不同运算符(包括关键字)的个数n1,以及不同操作数(变量和常数)的个数n2。预测程序长度的公式如下:

H = n1 log2n1 + n2 log2n2

预测程序中包含错误的个数的公式如下:

E = N log2 (n1+n2)/3000