一、软件测试的定义
使用人工或者自动的手段来运行或测定某个软件产品系统的过程,其目的是在于
检验是否满足规定的需求或者弄清预期结果与实际结果的区别。
描述一种用来促进鉴定软件的正确性、完整性、安全性和质量的过程。
换句话说,软件测试是一种实际输出与预期输出之间的审核或者比较过程。
二、软件测试的目的
测试是运行或测定程序的过程,目的在于确保在用户使用之前发现错误bug。
确保产品完成了它所承诺或公布的功能,还有没有做需求没有要求它做的事情(功能需求)
确保产品满足性能和效率的要求 (性能性需求)
确保产品是健壮的、适应用户环境的。(易用性、可靠性)
三、在不影响用户使用的大前提下,不是所有的缺陷都需要被修复。例如以下这些情况:
缺陷修复成本太高
现有的技术,无法修复
由框架引起的缺陷
项目比较紧张,来不及修改
第三方软件造成的缺陷
四、软件测试的意义
1、提高软件质量;
2、保障软件的安全;
3、降低软件开发成本;
软件缺陷越早发现修复成本越低
需求阶段成本最低
需求阶段发现的问题最多
4、降低因软件缺陷带来的商业风险;
5、为用户接受软件提供有力的依据;
6、树立用户对软件的信心。
五、软件测试的分类及方法
按测试策略可分:
1.1---功能性测试、易用性测试、性能测试、安全和可靠性测试、可移植性和兼容性测试
1.2---文档测试
文档测试内容:
B/S架构不需要执行安装卸载测试,只有CS架构才需要安装卸。
1.4--- 本地化和国际化测试、α/β测试、A/B测试、灰度测试、交叉测试、数据测试
1.5---冒烟测试、回归测试、探索测试(错误推测法)、敏捷测试
1、所有的测试都应追溯到用户需求
测试的是需求
测试必须站在用户的角度进行测试
2、穷举测试不可能
所以说需要采用一些测试方法
从而无法保证测试过的软件没有缺陷
3、尽早和不断的测试
4、缺陷集群性
缺陷往往集中在某几个模块
二八原则—80%的缺陷集中在20%模块里面
5、杀虫剂悖论
要随时更新测试用例
测试用例不是一劳永逸的事情,是需要不断的升级和维护
6、妥善保存一切测试过程文档
测试过程中产生的文档
7、程序员应避免检查自己的代码
单元测试、代码检查
8、尽量避免测试随意性
需要有测试用例,不要想到哪测哪
七、软件生命周期
指软件从产生到报废或停止使用的生命周期。
按阶段划分为:
1、问题定义
提出要解决的问题,即要做什么软件
2、可行性研究
经济可行性
技术可行性
解决到底要不要做这款软件
3、需求分析
软件要做成什么样子,具体有哪些功能
万丈高楼平地,需求分析排第一
4、概要设计(总体设计)
设计软件的一个框架和结构
5、详细设计
完善每个具体的功能
6、编码和单元测试
代码的开发
开发编写完代码后,需要进行单元测试,还有自测
单元测试
对程序中最小单元的测试,对代码层面进行测试
要求对应的测试人员要有一定的代码基础
实际一般由开发自己完成,但所有测试工作,最后是由测试完成
7、综合测试
测试
8、软件维护
产品上线后运维跟进这款软件的使用
八、软件开发过程模型
1.瀑布模型
需求分析
开发、测试等根据需求文档进行需求分析
设计
包括概要设计、详细设计、UI设计、数据库结构设计
优点
①开发的各个阶段比较清晰。
②当前一阶段完成后,只需关注后续阶段
缺点
①依赖于早期的需求调查,不适应需求的变化。
②风险往往延至后期才显露,失去及早纠正的机会。
③前面未发现的错误会传递并扩散到后面的阶段,可能导致项目失败。
④瀑布模型开发周期长
2.增量模型
增量模型是把待开发的软件系统模块化,将每个模块作为一个增量组件,从而分批次地分析、设计、编码和测试这些增量组件。也就说,将软件先模块化,然后再逐一进行开发,每个模块在开发的时候,还是使用的瀑布模型,该模块开发完后,在集成到系统中,然后需要对整个系统进行测试。
优点:
①将待开发的软件系统模块化,可以分批次地提交软件产品,使用户可以及时了解软件项目的进展。
②以组件为单位进行开发降低了软件开发的风险。一个开发周期内的错误不会影响到整个软件系统。
③开发顺序灵活。开发人员可以对组件的实现顺序进行优先级排序,先完成需求稳定的核心组件。当组件的优先级发生变化时,还能及时地对实现顺序进行调整。
缺点:
①要求待开发的软件系统可以被模块化。如果待开发的软件系统很难被模块化,那么将会给开发带来很多麻烦。
②对管理人员的要求比较高
3.敏捷模型
以产品为中心,注重结果而不强调过程;快速响应需求变更,拥抱变化。
特点:
个体交互重于过程和工具
传统模型中,开发过程都会借助于各种流程和项目管理工具
敏捷模型更强调面对面的沟通(有效)
可用的软件重于完备的文档
传统模型强调过程,该有的文档必须要有
敏捷模型注重结果,不必要的文档可以不要
必要的文档——需求
客户协作重于合同谈判
传统模型先签合同在开发
敏捷模型边谈边开发
响应变化重于遵循计划
传统模型强调按照计划进行开发
敏捷模型拥抱变化
九、软件测试过程模型
1.V模型
单元测试
检测代码的开发是否符合详细设计的要求,依据详细设计说明书
集成测试
检测此前测试过的各组成部分是否能完好地结合到一起
接口测试
模块间的集成、可方法之间调用、也可系统之间调用,依据概要设计说明书
系统测试
检测已集成在一起的产品是否符合需求规格说明书要求,依据需求规格说明书
验收测试
则检测产品是否符合最终用户的需求,依据需求规格说明书
优点:
测试V模型即包含了底层测试又包含了高层测试;
底层测试:检验源代码质量的测试,如:单元测试;
高层测试:检验整个系统的需要,如:系统测试;
V模型清楚地标识出了软件开发的阶段。
整个开发过程分成不同阶段,每阶段工作明确,因此便于控制开发过程。
缺点:
测试介入太晚,到了测试阶段,程序已经完成,错误已经产生,很多前期的错误一直到测试阶段才发现,甚至无法发现,往往无从修改了。
不适应需求的变更,实际的开发过程中,在需求阶段很难把用户的需求完全明确下来,因此,当需求变更时将会导致阶段反复,而且都要重复需求、设计、编码、测试等过程,返工量非常大,模型灵活性比较低。
2.W模型
优点:
测试贯穿于整个开发周期,并且测试和开发是并行的关系,因此
测试介入早,不仅仅对程序进行测试,还对需求、设计等文档进行测试
可以及时发现需求、设计阶段产生的缺陷
W模型有利于尽早地全面的发现问题,有利于降低开发成本
缺点:
需求分析、设计、编码是串行的关系,因此周期特别长,无法支持迭代
测试和开发活动也保持着一种线性的前后关系,上一阶段完全结束,才可正式开始下一个阶段工作,因此,对于当前软件开发复杂多变的情况,W模型并不能解除测试管理面临着困惑。
3.敏捷测试模型
是一套解决方案、一类测试操作与管理的框架、一组实践或由一定顺序的测试活动构成的特定的测试流程。
内容:
持续测试,不在关注测试阶段
重点关注持续迭代地测试新功能,而不再强调严格的测试阶段。
尽早测试:
当某个功能模块开发完后,即可进行模块层面的单元测试,同时随着测试深入,持续进行回归测试保证之前测试过内容的正确性。
4.V模型、W模型优缺点
5. 传统模型与敏捷模型优缺点
十、ISO软件质量管理体系
十一、CMM软件能力成熟度模型