当前位置:文档之家› 第六章系统实现与软件测试

第六章系统实现与软件测试

第六章系统实现与测试
系统实现
编码
软件测试
数据管理
环境安装
人员培训
系统切换
对源程序的质量要求
效率
可靠性
可维护性
可移植性
结构化程序设计
关于GOTO语句
结构化程序设计的原则
使用基本控制结构表示程序逻辑
控制结构只有一个入口和一个出口
程序结构组成容易识别的块
复杂结构由基本结构嵌套实现
用前后一致的程序段代替没有的控制结构 严格控制GOTO语句的使用
结构化程序设计
程序设计自顶向下,逐步求精 数据结构的合理化
程序设计风格
源程序文档化 数据说明的方法 语句结构
输入输出方法
程序效率
算法对效率的影响
影响存储器效率的因素 影响输入输出的因素
程序设计语言
程序设计语言特性的比较
软件心理学(一致性、二义性、简洁性、局
部性、线性、传统)
软件工程(详细设计、可移植、编译、工
具、可维护)
语言的技术性能(对模块化、独立性、数
据、特别性能)
程序设计语言的分类
程序设计语言的选择
软件度量
代码行度量法
McCabe度量法
Halstead的软件科学 软件复杂性的综合度量
代码行度量方法
将功能成本用代码行表达,通常根据历史经验加以评估
确定功能,通过分解使对每个功能能做可靠的估算
估算出每个功能的代码行数EV=(S OPT +4S M +S PESS )/6 计算生产率、成本、所需工作量,人月等
生产率=kLOC / PM
质量=错误数/ kLOC
成本=元/ LOC 文档=文档页数/ kLOC
(注意LOC的单位,考虑归一化后计算)
McCabe度量法
基于程序控制流的复杂性度量法。

V(G)=m-n+p
与程序中覆盖的路径条数有关。

复杂性可相加。

小程序复杂性。

缺点
Halstead软件科学
程序长度:
实际长度:
程序词汇表:
程序量
程序量比率
程序员工作量
程序潜在错误
结论:可从词汇表预测程序长度
软件复杂性综合度量
文档
软件微观复杂性
软件宏观复杂性
软件复杂性综合度量公式(MMC)
∑=

×
+
=
k
i
Docum
i
MC
i
SC
MMC
1
)
1(
)}
(
)
(
{
MC(I):第i个子程序的微观复杂性;
SC(I):第i个子程序的宏观复杂性;
))
(
1(
)]
(
)1
(
)(
[
)(i
Docum
i
local
k
i
Glob
i
SC−
×
+

×
=
软件实现的策略
自顶向下的实现策略
典型业务的优先实现
以数据存储重要性为核心的版本划分
软件测试
软件测试的目的和原则 软件错误分类
软件测试策略
软件测试工具
软件测试用例的设计
软件测试基础
什么是软件测试
软件测试是为了发现错误而执行程序的过程。

或者说,软件测试是根据软件开发阶段的规格说明和程序的内部结构而精心设计一批测试用例(既输入的数据及其预期的输出结果),并利用这些用例去运行程序,以发现程序错误的过程。

软件测试基础
软件测试的目的
测试是程序的执行过程,目的在
于发现错误;
一个好的测试用例在于能发现至
今未发现的错误;
一个成功的测试是发现了至今未
发现的错误的测试。

Davie测试原则
所有测试都应追述到用户需求
应在测试前较早时间就制定测试计划 应用Pareto的原则到测试中
测试从“小规模”到“大规模”
穷举测试是不可能的
应该由第三方来构造测试
软件测试基础
软件测试的原则
尽早和不断地进行软件测试
测试用例合理
程序员避免检查自己的程序
用例应包括不合理的输入条件
注意错误的群集现象(80%错误来自20%的模块) 严格执行测试计划
对测试结果作全面检查
妥善保存测试计划和用例。

软件测试的对象
软件测试信息流
软件可测试性
可操作性
可观察性
可控制性
可分解性
简单性
稳定性
易理解性
软件测试类型
测试与软件开发各界段的关系
测试用例设计思路
问题:
考虑一百行C语言程序,外层是可达20次的循环,内部有四个
白盒测试
白盒测试依赖对程序细节的严密检验,提供运用特定条件和与循环集的测试用例,对软件逻辑路径进行测试,在不同点检验“程序的状态”以判定预期状态或待验证状态与真实状态是否相符。

白盒测试方法
黑盒测试
黑盒测试是指在软件界面上的测试,黑盒测试的设计是为了发现软件错误,但更常的是用于证实软件功能的可操作性;证实能很好地接受输入,并正确的产生输出;以及证实对外部信息完整性的保持。

黑盒测试检验系统的一些基本特征,很少涉及软件的内部逻辑结构。

黑盒测试方法
等价划分
边界值分析
错误推测法
因果图
C/S体系结构的测试
整体C/S测试策略(三个不同层次)
客户端应以“分离的”模式被测试
(不考虑服务器和底层网络的运行)
客户端软件和关联的服务器端应用被一起测试(网络运行不被明显考虑)
完整的C/S体系结构(包括网络运行和性能)被测试
C/S常用测试方法
客户端应用功能测试
服务器测试(协调和数据管理功能、性能)
数据库测试
事务测试
网络通信测试
软件测试的策略
单元测试
组装测试
确认测试
系统测试
单元测试
内容
接口测试
数据结构测试
路径测试
错误处理(非正常)测试
边界测试
步骤
驱动模块—辅助模块
桩模块---辅助模块
单元测试
集成测试
模块连接时,穿越模块的数据是否会丢失; 是否会对另外模块产生不利影响;
各子模块组合能否达到预期的父模块功能; 全局数据结构是否有问题;
各模块误差的累积是否到了无法接受。

自顶向下集成方式
功能测试
功能测试的目的和内容
程序安装、启动正常,有相应的提示框、错误提示等
每项功能符合实际要求
系统的界面清晰、美观
菜单、按钮操作正常、灵活,能处理一些异常操作
能接受正确的数据输入,对异常数据的输入可以进行提示、容错处理等 数据的输出结果准确,格式清晰,可以保存和读取
功能逻辑清楚,符合使用者习惯
系统的各种状态按照业务流程而变化,并保持稳定
支持各种应用的环境
能配合多种硬件周边设备
软件升级后,能继续支持旧版本的数据
与外部应用系统的接口有效
功能测试的方法
等价类划分法
边界值分析法
错误推测法
因果图法
组合分析法
组合分析是一种基于每对参数组合的测试技术,主要考虑参数之间的影响是主要的错误来源和大多数的错误起源于简单的参数组合。

系统测试
压力测试(Stress test)
容量测试(Capacity test)
性能测试(Performance test) 安全测试(Security test)
容错测试(Recovery test)
确认测试
验收测试(Acceptance Testing)
验收测试是以用户为主的测试,一般使用用户环境中的实际数据进行测试。

在测试过程中,除了考虑软件的功能和性能外,还应对软件的兼容性、可维护性、错误的恢复功能等进行确认。

α测试与β测试
α测试与β测试是产品在正式发布前经常进行的两种测试;
α测试是由用户在开发环境下进行的测试;
β测试是由软件的多个用户在实际使用环境下进行的测试。

确认测试
软件测试与可靠性
软件可靠性定义:
在给定的时间间隔内和给定的环境下,按照规格说明书的规定成功地运行的概率。

软件可用性:
在给定的时间点,按照规格说明书的规定成功地运行的概率。

软件稳定性:Ass=MTTF/(MTTF+MTTR)
软件可靠性分析
可靠性分析的内容:
推测错误产生的频度
推测残留在程序中的错误 评价测试的精确度和覆盖度
错误产生的频度通过估算平均失效等待
1n
1
MTTF
错误产生频度计算)(t cε
估算软件中错误总数
用Shooman模型估算E ,检错时
立的测试现对程序作两次互相独
用植入法估算固有错误总数
估计故障数
植入故障法:N=(n/n s)N s
N s 植入故障数n
s
查出的植入故障数
•分别测试法:用原有故障作为测试故障由两名程序员作测试:
T=t1时甲发现的故障数为B
1
T=t1时乙发现的故障数为B
2
T=t1时两个人发现的共同故障数为b
c
则:B
0=(B
2
/b
c
) B
1。

相关主题