软件测试理论基础(概述)
1、按是否查看程序内部结构划分:
(1)黑盒测试(black-box testing):只关心输入和输出的结果(主要测试软件的功能和需求说明是否相符)—— 黑盒测试通常用于功能测试,不可视化。像用户一样看待产品就好了。优缺点:不考虑内部的实现;更贴近用户的角度。覆盖率较低;复用率较低;维护成本较高。
关注:是否有不正确或遗漏的功能?输入和输出是否满足预期要求;是否有数据结构错误或外部信息访问错误;性能上是否满足要求?
(2)白盒测试(white-box testing):去研究软件里面的源代码和程序结构(主要是测试代码的)—— 白盒测试通常用于单元测试,可视化
缺点:1昂贵 2无法坚持代码中遗漏的路径和数据敏感性错误 3不能直接验证需求的正确性。优点:检测内部代码的实现;更容易检测代码内部的逻辑。
(3)灰盒测试(gray-box testing):介于黑白盒两者之间的一种测试,在白盒测试交叉使用黑盒测试方法,在黑盒测试交叉使用白盒测试方法—— 灰盒测试通常用于网页测试
总结:测试是从用户需求的角度去对软件质量进行检测,具体使用黑盒,白盒,灰盒,不需要明确的区分,应该多角度去设计测试用例,
多角度测试软件,找出bug,才是一个测试工程师具备的思想。在测试过程中,涉及软件的功能测试,建议先考虑使用黑盒测试,然后统计相应的覆盖率,涉及到软件的性能测试,
再设计黑盒测试加上适当的白盒测试用例作为补充来测试软件的性能,以保证软件测试的完整性。
2、按照是否使用自动化测试工具划分:
(1)手工测试(手工测试(Manual Testing)就是由人去一个一个的输入用例,然后观察结果和机器测试相对应属于比较原始但是必须的一个步骤。
(补充:手工测试只是功能测试的一种方式。二者的区别主要是划分规则的不同手工测试是根据是否使用自动化测试
工具划分的而功能测试是根据质量模型的六大特征划分的。)
它是依靠人来查找缺陷。一般采用黑盒测试方法(等价类划法,边界值划分法,决策表法、错误推测法,因果图法,场景法、正式试验法)
(2)自动化测试(自动化测试(Automated Testing)是把以人为驱动的测试行为转化为机器执行的一种过程,强调使用第三方工具。
通常在设计了测试用例并通过评审之后由测试人员根据测试用例中描述的规程一步步执行测试得到实际结果和期望结果的比较,
在此过程中,为了节省人力、时间或者硬件资源,提高测试效率从而引进了自动化测试的概念)注意:一般用于接口测试,UI测试、性能测试等
3、按是否运行程序划分:
(1)静态测试(结构分析)(static testing):是指不实际运行被测软件,而只是静态地检查程序代码、界面或文档可能存在的错误的过程。
静态测试包括:互审(技术评审)-走查(桌面走查,代码走查,代码审查)-静态分析
a 对于代码测试,主要是测试代码是否符合相应的标准和规范。
b 对于界面测试,主要测试软件的实际界面与需求中的说明是否相符。
c 对于文档测试,主要测试用户手册和需求说明是否真正符合用户的实际需求。
(2)动态测试(结构化测试)(dynamic testing),是指实际运行被测程序,输入相应的测试数据,检查输出结果和预期结果是否相符的过程
4、按阶段划分:
(1)单元测试(unit testing),是指对软件中的最小可测试单元进行检查和验证。即由测试人员设计测试用例,开发人员编写测试代码,测试人员执行测试用例。
桩模块(stud)是指模拟被测模块所调用的模块,驱动模块(driver)是指模拟被测模块的上级模块,驱动模块用来接收测试数据,启动被测模块并输出结果。
(2)集成测试(integration testing),是单元测试的下一阶段,是指将通过测试的单元模块组装成系统或子系统,再进行测试,重点测试不同模块的接口。
集成测试就是用来检查各个单元模块结合到一起能否协同配合,正常运行。测试对象是已经进行过单元测试的各个模块组合起来测试
(3)确认测试(integration testing),是集成测试的下一阶段,是指已经按照设计把所有的模块组装成一个完整的软件系统,接口错误也已经基本排除了,
接着就应该进一步验证软件的有效性,这就是确认测试的任务,即软件的功能和性能如同用户所合理期待的那样。
(4)系统测试(system testing),指的是将整个软件系统看做一个整体进行测试,包括对功能、性能,以及软件所运行的软硬件环境进行测试。【业务角度】
将系统或程序与初始目标进行比较。
系统测试的主要依据是《系统需求规格说明书》文档。
(5)验收测试(acceptance testing),指的是在系统测试的后期,以用户测试为主,或有测试人员等质量保障人员共同参与的测试,它也是软件正式交给用户使用的最后一道工序。也称交付测试。
(β测试,也叫Beta测试。是软件的多个用户在一个或多个用户的实际使用环境下进行的测试。开发者通常不在测试现场,Beta测试不能由程序员或测试员完成。
a测试,又叫Alpha测试。是由一个用户在开发环境下进行的测试,也可以是公司内部的用户在模拟实际操作环境下进行的受控测试,Alpha测试不能由该系统的程序员或测试员完成。)
细分:用户验收测试【包含Beta和Alpha测试,用户角度】、运行验收测试【运维角度】、合同和规范验收测试
5、按测试策略划分:这几种测试出现在软件测试的周期中,既不算具体明确的测试阶段,也不是具体的测试方法
【1】回归测试 是指对软件的新的版本测试时,重复执行上一个版本测试时的用例。重心在关键模块和重点功能组件上。
【2】冒烟测试 是指在对一个新版本进行大规模的测试之前,先验证一下软件的基本功能是否实现,是否具备可测性。
【3】随机测试 是指测试中的所有输入数据都是随机生成的,其目的是模拟用户的真实操作,并发现 一些边缘性的错误。
【4】探索式测试 是一种测试思维技术,强调主观能动性,抛开用例和测试方法。
【5】安全测试 是在产品开发基本完成至发布阶段,对产品进行检验。
6、按实施组织划分:
开发商测试:软件开发,软件测试,产品销售都属于同一个公司
外包测试:把一套成套的产品交给专业的组织进行测试。服务模式:现场测试;安全离岸外包;设立联合研发中心。
7、按测试范围划分:
本地化测试:特定目标区域设置,重点测试 基本功能测试,安装/卸载测试,当地区域的软硬件兼容测试
全球化测试:保证软件在全世界不同地域都能正常运行
国际化测试:修改代码支持多语言
多语言测试:测试软件在不同语言系统下GUI显示的正确性
八、常见的测试方法:
功能测试 界面测试
性能测试 配置测试
压力测试 文档测试
负载测试 兼容性测试
易用性测试 安全性测试
安装测试 恢复测试
软件测试分为黑盒测试和白盒测试
黑盒测试称数据驱动测试或功能测试,
主要(黑盒测试用例设计方法)有:等价类划分法、边界值分析法、因果图法、状态图法、场景图法、正交试验法。其他测试方法如:错误推测法、通过测试与失败测试、随机测试【静态黑盒测试和动态黑盒测试】
黑盒测试常用工具有:winrunner、QTP、
白盒测试称逻辑驱动测试测试或结构测试,主要有:代码检查法(桌面检查,代码走查,代码检查3种方式)、静态结构分析法、静态质量度量法;逻辑覆盖法(语句覆盖,判定覆盖或分支覆盖,条件覆盖,判定-条件覆盖,路径覆盖)、基本路径测试法、域测试、符号测试、Z路径覆盖、程序变异【静态白盒测试和动态白盒测试】
白盒测试常用工具有:logiscope、Jtest、Junit。
软件测试的分类:
按阶段分:单元测试、集成测试、确认测试、系统测试、验收测试
按是否使用自动化测试工具分:手工测试、自动化测试
按是否运行程序分:静态测试、动态测试
按是否查看代码分:白盒测试、黑盒测试、灰盒测试
按测试策略划分:冒烟测试、回归测试、随机测试、探索式测试、安全测试
按是非功能分:功能测试、性能测试
什么是软件测试?
使用人工或自动的手段来运行或测量软件系统的过程【测试手段可以是人工或自动】,
以检验软件系统是否满足规定的要求,并找出与预期结果之间的差异。
软件测试的目的?
增强对质量的信心——发现bug——为决策者提供信息——预防bug
软件测试所遵循的原则?
1测试由第三方来构造
2穷尽测试是不可能的,应设定及时终止的条件
3测试应该尽早进行
4缺陷具备群集特性
5测试的杀虫剂悖论
6测试应追溯需求
7必须确定预期结果
8必须彻底检查每个测试结果
9其他值得注意的规律和经验
正确认识软件测试的4个方面:
1、软件质量不是靠软件测试出来的
2、软件测试并不开发容易
3、软件测试需要开发人员和测试人员共同努力
4、软件测试并不是一个阶段,需要贯穿于整个软件开发阶段
软件测试工程师必备技能:
1、测试专业技能
2、软件编程技能
3、网络、数据库、操作系统、中间件等知识
软件测试工程师必备素质:
1、正确高效的沟通能力
2、超强的责任心
3、耐心、细心、信心
4、要坚持原则
5、团队合作精神