当前位置:
文档之家› 软件工程教案_12(第六九节)
软件工程教案_12(第六九节)
ET: 程序中原有的残留错误数 E1: 1号测试员在某一时间内发现的错误数 E2: 2号测试员在同一时间内发现的错误数 E0: 两位测试员共同发现的错误数
第七章 软件维护与软件再工程
§7.1 软件维护的概念
四类维护活动:
• 改正性维护 • 适应性维护 • 扩充与完善性维护 • 预防性维护
三类维护所占比例:
(推测错误产生的时间间隔)
方法:估算平均故障时间(MTTF估算公式)
当故障率为独立于时间的常量λ:
MTTF=λ1
=
1 K(ET/IT- Ec(t)/IT)
K : 经验常数
ET : 程序中原有的残留错误数
IT : 程序长度
t: 测试时间
Ec(t):在0-t期间内发现的错误总数
推测残留在程序中的错误数
常见形式: (1)打印出所有存储内容、代码
(2)程序中设打印语句 (3)用自动纠错工具
效率最低
二.回溯法(跟踪法)
根据错误症状位置,人工沿程 序控制流程向回追踪源代码。
适用于小程序,路径数目很大 时无法进行。
三.消去原因(cause limination)
列出可能原因,逐个排除,找出问题
(1) 试探法 (2) 归纳法 (3) 演绎法 (4) 二分查找法
7.4.3 重新验证程序
1.静态确认 2.计算机确认 3.维护后的验收
从维护角度所需的测试种类:
(1) 对修改事务的测试 (2) 对修改程序的测试 (3) 操作过程的测试 (4) 应用系统运行过程的测试 (5) 使用过程的测试 (6) 系统各部分间接口的测试 (7) 与系统软件接口的测试 (8) 安全性测试 (9) 后备/恢复过程测试
(2)难以跟踪软件的创建过程. (3)难以读懂他人程序.
(4)无文档或不全. (5)软件人员流动性大. (6)设计时未考虑修改需要,修改困难. (7)维护工作无吸引力,缺乏成就感.
§7.3 软件的维护任务
7.3.1 维护机构
修改 负责人
维护申请
配置管理员
维护管理员
系统监督员
维护人员
7.3.2 保存维护记录
改正性 适应性 维 护 维 护 20%
25%
扩充与完 善性维护
50%
其它维护 5%
改正性维护占全部维护量的比率已从80年代初 的20%大幅度下降, 90年代初一些公司的产品 差错率已接近于零
各类维护活动的根本目的是延长软件生存期
2个月-2年
软件 生存 周期
计 划
分 析
设 计
编 码
测 试
1年-10年 运行和维护其(它简维称护维护) 改善期 稳定4期% 陈旧期
维护过程中作应记录的数据
程序标识 源程序语句数目 机器代码指令条数 ....... .......
以收集的数据为基础构造维护数据库, 供维护评价使用.
§7.4 软件维护的实施
7.4.1 修改源程序的三个步骤
分析和理解程序 修改程序 重新验证程序
7.4.2 修改程序的副作用
➢修改代码的副作用 ➢修改数据的副作用 ➢修改文档的副作用
一百万只猴 子在一百万 只键盘上敲 一百万年, 它们最终就 可能写出莎 士比亚话剧 等巨著”.
只要不停电,偶尔能够得到香蕉,猴子就会永远测试下去
猴子的进步
笨猴子:一点也不懂测试软件, 只是随机地单击或按键,
直至发生两件事情之一:完成循环或系统崩溃.
不太笨的猴子: 具有崩溃辨认能力,
能够重新启动系统开始测试
6.7.2 测试测试自动化
另一类软件测试工具,可以自动执行测试用 例、查找软件缺陷、分析并记录测试结果。
测试工作台(下游CASE工具)
测试数据生成器
规约
源代码 测试管理器 测试数据 预测器
动态分析器
被测试 的程序
测试结果 测试预估
执行报告
模拟器
文件比较器 报告生成器
测试结 果报告
随机测试自动化工具:猴子测试员 一个想法: “如果让
错误植入模型
Mills将播种模型用于序中残留错误的估
算,称错误植入模型
播种模型:
N Nt≈
n nt
N: 程序中原有残留的错误数
Nt:新植入的错误数
n: 测试发现的原有错误数
nt :测试发现的植入错误数
N=
n nt
N
t
Hyman对错误植入模型的改进
E E
T
1
≈
E2 E0
E T =E 1 E 2 /E 0
(Playback)
§6.8调试(纠错技术)
测试是找出软件错误的过程, 调试是确定错误的位置、性质 并纠正。
调试的困难在于错误的定位.
调试的执行步骤
测试用例
执行案例
结果
回归 测试
改正
附加 测试
被怀疑 的原因
已识别 的原因
调试
错误现场
6.8.1 排错策略方法
一.强行排错(brute force)
聪明猴子:能够从它的笨兄弟那里获得随机测试的结果,
增加了对环境的认知能力, 有目的地敲键盘, 不仅限于查找崩溃缺陷,同时查看数据,检查 操作结果,找出与预期结果的差别
自动化测试工具实例
美国国际软件自动化(ISA)公司的Panorama for C/C++,j、Java和VB产品,自动化功能包括:
•软件结构分析与逻辑框图的自动化 •软件静态分析 •数据分析 •复杂性分析与分析结果列表的自动化 •软件质量分析 •动态性能分析 •软件代码分支或条件覆盖率分析 •软件测试用例有效性分析与测试用例最小集的自动选取 •软件界面手工操作过程的自动记录与自动再执行
软件工程周期
重构
软件诞生
§7.2 软件维护的特点
7.2.1 维护的成本
M = P+K e(c-d )
M : 维护工作总工作量
P : 生产性工作量 K : 经验常数
c : 复杂度 d : 对该软件熟悉程度的度量
7.2.2 维护中的典型问题
(1)难以跟踪软件版本的进化过程, 软件的变化未在文档中反映出来.
(1) 归纳法
不能
收集 有关 数据
组织 数据
错误 线索
研究 线索
线索 关系
假设 错误
构造
关系
原因 不
线索
能 能证
纠正
证明 明
错误 能 假设
(2) 演绎法
出错
剩余
待定
列举 原因 排除 错因 对保 错因 证明 能
可能
不会
留的
留下
确定
错误
发生
假设
的假
错误
原因
原因
推断
设
无剩余
收集更 多数据
不能
6.8.2 修改错误原则
•注意错误的群集现象,在错误近邻
检查。
•找到错误的本质并修改
•采用回归测试,避免因修改引起的
新错误。
•修改源程序。
§6.9 测试中的可靠性分析
开发过程中,利用测试的统计数据来 估算软件的可靠性,以控制软件的质 量。
•推测错误的产生频度 •推测残留在程序中的错误数 •评价测试的精确度和覆盖率
推测错误的产生频度