A由B、C、D 3个元素顺序组成根据条件A是B或C或D中的某一个 A由B出现N次(N ≥0组成
6.4.2 改进的Jackson图 6.4.3 Jackson方法
6.5 程序复杂程度的定量度量 6.5.1 McCabe方法 1. 流图(程序图
2. 计算环形复杂度的方法 V(G=流图中的区域数 V(G=E-N+2
其中E是流图中的边数,N是结点数 V(G=P+1
其中P是流图中判定结点的数目 6.5.2 Halstead方法
令N1为程序中运算符出现的总次数,N2为操作数出现的总次数,程序长度N定义为:
N=N1+N2
程序中使用的不同运算符(包括关键字的个数n1,以及不同操作数(变量和常数的个数n2。预测程序长度的公式如下:
H = n1 log2n1 + n2 log2n2
预测程序中包含错误的个数的公式如下: E = N log2 (n1+n2/3000 第7章实现
编码和测试统称为实现。 7.1编码
7.1.1 选择程序设计语言 主要的实用标准: 系统用户的要求 可以使用的编译程序 可以得到的软件工具 工程规模 程序员的知识 软件可移植性要求
软件的应用领域 7.1.2 编码风格
1. 程序内部的文档:恰当的标识符适当的注解程序的视觉组织 2. 数据说明 3. 语句构造 4. 输入输出
5. 效率:程序运行时间存储器效率输入输出的效率 7.2软件测试基础 7.2.1 软件测试的目标
测试是为了发现程序中的错误而执行程序的过程;
好的测试方案是极可能发现迄今为止尚未发现的错误的测试方案; 成功的测试是发现了至今为止尚未发现的错误的测试。 7.2.3 测试方法 黑盒测试(功能测试: 把程序看作一个黑盒子;
完全不考虑程序的内部结构和处理过程; 是在程序接口进行的测试。 白盒测试(结构测试:
把程序看成装在一个透明的盒子里;
测试者完全知道程序的结构和处理算法;
按照程序内部的逻辑测试程序,检测程序中的主要执行通路是否都能按预定要求正确工作。
7.2.4 测试步骤 1. 模块测试(单元测试
保证每个模块作为一个单元能正确运行; 发现的往往是编码和详细设计的错误。 2. 子系统测试
把经过单元测试的模块放在一起形成一个子系统来测试; 着重测试模块的接口。 3. 系统测试
把经过测试的子系统装配成一个完整的系统来测试;
发现的往往是软件设计中的错误,也可能发现需求说明中的错误;
不论是子系统测试还是系统测试,都兼有检测和组装两重含义,通常称为集成测试。
4. 验收测试(确认测试
把软件系统作为单一的实体进行测试;
它是在用户积极参与下进行的,而且可能主要使用实际数据(系统将来要处理的信息进行测试;
发现的往往是系统需求说明书中的错误。