软件测试一 软件测试基础理论


软件的概念

软件是计算机系统中与硬件相互依存的另一部分

1.程序

按事先设计的功能和性能要求执行的指令序列

2.数据

使程序能正常操作信息的数据结构

1)文本

2)图片

3)音频

4)视频

3.相关文档

与程序开发,维护和使用有关的图文材料

软件的十大特性

1.形态特性

2.智能特性

3.开发特性

4.质量特性

5.生产特性

6.管理特性

7.环境特性

8.维护特性

9.废弃特性

10.应用特性

软件的分类

1.系统软件

负责管理计算机系统中各种独立的硬件,使得它们可以协调工作

1)服务性程序

(1)诊断程序

(2)排错程序

(3)练习程序

2)语言程序

(1)汇编程序

(2)编辑程序

(3)解释程序

3)操作系统

  Windows

4)数据库管理系统

MySQL数据库

2.应用软件

为了某种特定的用途而被开发的程序

1)浏览器

(1)Edge

(2)Chrome

2)一组功能

3)互相协作的程序的集合

(1)QQ

(2)微信

软件的生命周期

1.问题定义

2.可行性研究

3.需求分析

4.概要设计

5.详细设计 

6.编码和单元测试

7.综合测试

8.软件维护

软件开发模型

规定了每个阶段要完成的任务和活动

1.边做边改

1)特点

前期没有经过设计

直接进入开发

2)优点

快速迭代

3)缺点

项目后期维护困难

2.瀑布模型

1)结构

(1)计划

(2)需求分析

(3)设计

(4)编码

(5)测试

(6)运行维护

2)特点

(1)线性

(2)当前活动接受上一项活动的结果

(3)当前活动的结果需要验证

(4)文档驱动

3)缺点

(1)增加了开发的风险

(2)早期的错误可能要后期才能发现

3.原型模型

1)结构

客户与开发公司紧密联系

2)特点

(1)客户与系统的交互

(2)开发人员可以确定客户的真正需求

3)缺点

(1)开发周期长

(2)会受到需求变更影响

4.螺旋模型

1)结构

(1)制定计划

(2)风险分析

(3)实施工程

(4)客户评估

2)特点

(1)将瀑布模型与快速原型模型结合

(2)强调了风险分析

3)缺点

(1)强调风险分析,客户不容易接受

(2)会受到需求变更影响

5.敏捷模型

1)结构

敏捷开发是以人为核心、迭代、循序渐进的开发方法

2)特点

(1)短周期开发

(2)增量开发

(3)由自动化测试来监控开发进度

(4)测试先行

3)缺点

人员要求高

软件测试

1.概念

人工或自动化来测定某个软件的过程,判断预期结果与实际结果的差别

2.目的

1))发现代码错误或者业务逻辑错误

2)验证软件是否符合用户的需求

3)提高用户体验

软件测试文档  

1.需求分析文档
2.概要设计文档
3.详细设计文档
4.测试设计文档
5.测试用例
6.测试报告

项目进程

1.编程

1)单元测试

2)白盒测试

2.编程完成

1)开发联调

2)集成测试

3.提测

冒烟测试

1)自动化

2)手工

4.测试

系统测试

1)黑盒功能测试

2)自动化测试

3)接口测试

4)性能测试

5.验收

验收测试

软件测试方法和分类

1.生命周期划分     

1)单元测试
2)冒烟测试
3)集成测试
4)系统测试
5)验收测试

2.测试方法划分

1)白盒测试

(1)静态分析

(2)动态分析

A.逻辑覆盖测试

A)语句覆盖
B)判定覆盖
C)条件覆盖
D)路径覆盖

B.插桩测试

2)黑盒测试

(1)功能测试

A.界面测试

B.冒烟测试

C.回归测试

D.业务测试

E.兼容性测试

F.易用性测试

(2)自动化测试

A.web自动化测试

B.接口自动化测试

(3)性能测试

A.性能测试

B.负载测试

C.压力测试

D.容量测试

E.并发测试

F.持久性测试

(4)安全测试

A.手动测试

B.自动化审计

3)灰盒测试

3.其他划分

1)随机测试

2)探索性测试

3)alpha测试

4)beta测试

5)Gamma测试

生命周期各测试方法对比

软件测试常用术语

1.C/S

客户端/服务端

2.B/S

浏览器/服务端

3.缺陷(BUG/Defect)

不符合用户需求的问题

4.测试环境

1)软件

2)硬件

3)网络

5.测试用例(Test Case)

1)测试方案

(1)测试环境

(2)测试步骤

(3)测试数据

(4)预期结果

2)测试用例

(1)输入

A.测试数据

B.操作步骤

(2)输出

预期结果

(3)测试环境

系统环境配置

6.冒烟测试(Smoke Testing)

验证软件基本功能

7.alpha测试

内部测试

1)用户

2)测试

3)开发

8.beta测试

公测

最终用户测试

软件测试常见模型

1.V模型

1)瀑布模型改进

2)减少了bug的几率

2.W模型(双V模型)

1)测试与开发同步

2)尽早的全面的发现问题

3.H模型

将测试活动完全独立出来

方便外包

4.X模型

   适合有经验的测试人员

软件测试覆盖率

1.概念

覆盖率=(至少被执行一次的item数)/item总数

2.特点

1)检测测试是否充分

2)分析测试的弱点

3)有效提高测试质量

3.对于黑盒测试

1)需求覆盖

需求覆盖=被验证到的需求数量/总的需求总数

2)用例覆盖

需求覆盖=验证通过的用例数量/总的用例总数

测试覆盖率的实际应用

1.简单的测试覆盖率

本次测试执行的用例数/所有用例数

1)总用例数编写全面

2)覆盖率100%

3)抽样验收

2.基于产品的测试覆盖率

已测试需求点/设计所有需求数

1)覆盖率100%

2)抽样验收

3.基于白盒的测试覆盖率

单元测试代码覆盖代码总行/总代码行

1)覆盖率80%

2)缺点

覆盖率数据只能代表测试过,不能代表测试好

4.基于自动化的测试覆盖率

自动化覆盖的测试场景(测试用例)/所有测试场景(用例)

1)80/20原则

2)更着重回归验证

3)不要求高覆盖率

5.测试覆盖率的最终意义

测试停止标准

测试团队组织架构

1.金字塔管理

2.矩阵化管理

软件测试人员需要的知识体系

1.软件测试基础知识
2.软件测试流程
3.测试用例设计方法
4.兼容性/易用性测试
5.缺陷管理
6.测试用具使用
7.测试文档编写

测试人员具备的素质    

1.踏实细心
2.积极主动
3.好奇心
4.良好交流
5.自我提高和总结
6.责任感

软件测试的原则

1.所有的测试都应追溯到用户需求

产品缺陷80%以上都是需求定义阶段引入的

2.尽早启动测试工作

越后面成本越高

3.Pareto法则

28效率原则

4.穷尽测试是不可能的

1)全面测试

适当利用风险分析

2)全过程测试

3)独立,迭代的测试

5.杀虫剂怪事

测试越多,免疫越强

6.前进两步,后退一步

缺陷修复会以(20-50)%的几率引入新的缺陷

7.三心二意

三心

1)细心

2)信心

3)耐心

二意

1)沟通意识

2)预防意识

软件测试规范

1.软件工程标准

1)ISO9000

2)CMM

2.软件测试规范

1)组成 

2)规范过程