1、前言
1.1什么是软件测试?
软件测试是一系列过程活动,包括软件需求分析,测试计划分析,测试用例设计,执行测试用例等。它贯穿于整个软件测试的周期,在软件项目的每个阶段,都需要进不同目的的内容的测试活动,以保证各个阶段的正确性。
1.2为什么要进行软件测试?
假如你安装的软件是一个未经测试的软件,那么在使用过程中可能会遇到:软件死机,账号被盗,资金被转等,而软件测试工程师的出现正是为了规避这些问题。
1.3软件研发初期的过程
2.研发模型
2.1 瀑布模型
计划--需求分析--设计--编码--测试--运行和维护
特点
:
- 线性化的研发模型
- 各阶段具有里程碑的特征
- 基于文档的驱动
- 严格的阶段评审机制
优点
:
- 有利于大型软件研发过程中的人员组织和管理
- 有利于开发方法和工具的使用
- 提高了软件的质量和效率
缺点
:
- 不灵活
2.2 V模型
用户需求--需求分析--概要设计--详细设计--编码--单元测试--集成测试--系统测试--验收测试
优点
:
- 软件测试分为若干个级别,更能提高软件的质量
- 软件测试和开发级别一一对应
缺点
:
1.忽略了软件测试对象不止有程序还包括文档
2.验收测试是最后阶段,需求阶段的问题只能到验收阶段才能发现
2.3 W模型
优点
:
- w模型,又称双v模型,测试活动和开发活动同步进行
- 软件测试的对象不仅仅是程序,还包括文档
- 尽早投入测试可以降低开发成本
缺点
:
无法迭代,指的相对的,不是绝对的
2.4 X模型
- 最早引用
探索性测试
的研发模型- 软件分为几个片区,然后集成在一起形成最终的软件
2.5 螺旋模型
- 非线性化的研发模型
- 引入了
风险管理
,进行评估
2.6 快速模型
又称原型定义,非线性化研发模型,主要适用于小公司,客户到了最后才知道软件的最终模样,先做一个dome(模型或样本),给客户进行产品的预演。
2.7迭代开发
每次只设计和实现产品的一部分,通过逐步完成的方法叫
迭代开发
,每次设计和实现一个阶段叫迭代
优点
:
- 降低需求变更的成本
- 得到早期的用户反馈
- 持续的集成和测试
2.8 敏捷开发
敏捷开发以用户需求进化为核心,采用迭代,循序渐进的方法进行软件开发
敏捷开发的核心价值观
:
- 个人交互
重于
过程和工具(个体交互主要指人和人之间的沟通)- 可用的软件
重于
完备的文档- 客户协作
重于
合同谈判- 响应变化
重于
遵循计划
优点
:
敏捷确实是项目进入实质的迭代阶段,用户很快可用看到一个基本架构版的产品,敏捷注重市场快速反应能力
缺点
:
敏捷注重人员的沟通,忽略了文档的重要性,若项目人员流动太大,又给维护带来了不少难度,特别是项目中新员工比较多,老员工比较累。
tips
:
敏捷和迭代虽然不一样,但是他们是分不开的,迭代开发和敏捷开发的结合,既保证了产品的质量又在项目产品的持续改进中具有一定的优势,吸取精华,剔除糟粕,只有这样,项目才会达到趋近完美的程度。
2.9 软件的生命周期
需求--设计--编码--测试--维护--升级--废弃
2.11 项目中的成员
- 项目经理(PM)
- 架构师
- 程序员(码农)
- 软件测试工程师:初级、中级、高级、技术专家、测试经理、交付经理、部门经理
- 资料工程师(大公司才有)
- 配置管理员(CMO)
- QA(大公司才有)
- 产品经理(BA)
- UI设计(界面设计)
- DBA(数据库管理员)
3.软件测试基础
3.1 软件测试的定义
在规定条件下操作程序,发现缺陷,评估软件质量
3.2 软件测试的目的
尽可能多的发现软件的缺陷,预防缺陷,对软件的质量进行评估,以提高软件的质量
3.3 软件测试的范围
或对象
程序、文档、数据
3.4 软件测试的原则
-
所有的测试都应该追溯到用户需求
需求是软件测试的依据
-
应当把尽早测试和不断测试作为软件测试的座右铭
尽早测试能够降低开发成本不断测试更能提高软件的质量
-
完全测试是不可能的,测试需要终止
出于成本考虑和现实考虑
-
软件测试无法显示潜在缺陷
缺陷有时候需要在特定的情况下才会出现
-
充分注意群集现象
二八原则,80%的缺陷出现在20%的模块上,发现bug越多的模块,残留的bug越多
-
避免程序员检查自己的程序
开发沿用之前的开发思路,去找问题很难发现问题
-
``避免软件测试的随机性`
测试需要计划,节约成本和人力
3.5 软件测试的风险
进度风险,质量风险,人员风险,成本风险,变更风险
3.6 测试工程师所具备的素质
综合素质
:
- 细心,耐心,责任心,自信心
- 沟通能力,语言以及文字表达能力
- 团队协作的能力
- 发现问题的敏锐程度以及观察能力
- 逻辑思维能力和发散性思维能力
- 具有丰富的软件测试经验
专业素质
:
- 熟悉软件研发流程以及测试流程的知识
- 熟悉软件测试理论知识
- 掌握测试工具,管理工具,自动化工具,集成工具,性能工具,安全工具…
- 计算机相关知识,数据库,操作系统,网络基础,开发语言
4.软件测试的分类
4.1 按照阶段 阶段
划分
单元测试--集成测试--系统测试--验收测试
单元测试
- 对于软件中最小可测单元进行检查和验证:如:java中的类,C语言中的函数,UI界面
- 依据:
详细设计
- 谁测试:90%是开发人员测试,因为必须具有代码阅读能力
- 单元测试能够发现
80%
左右的缺陷- 单元测试工具:java语言中的junit,python语言中的unittest,pytest
- 侧重于检查程序内部结构,逻辑控制和异常处理
集成测试
- 在单元测试基础上,把模块组装成系统或者子系统,然后进行测试,又称
联合测试
,组装测 试
- 依据: