界面是直接和用户进行交互的,界面设计的好坏决定了用户使用软件的直观感受
界面测试(UI 测试)一般包括以下内容:
可靠性 是指系统正常运行的能力或者程度,一般用百分比表示
可靠性 = 正常运行时间 / (正常运行时间 + 非正常运行时间)
影响软件可靠性的因素:
容错性 是指因为自身或者外部一些异常的操作使得系统发生异常,系统能够自我处理异常或者错误的能力
容错性测试包含以下几个方面:
用户输入异常数据时,系统会不会给出提示,或者系统内部是否做一些处理
在用户做出一些复杂操作或者可能危害数据安全的操作时,会不会给出提示信息
断电、断网或者硬件设备出问题了,是否可以无缝切换到备用服务器
灾难恢复性测试
人为使服务器发生故障,测试软件系统的环境恢复能力、系统数据恢复能力、以及恢复的时间
对整个开发过程中产生的各种文档,需求文档、设计文档、功能文档、用户使用手册进行测试,验证文档的正确性、一致性和完整性
易用性测试 是指验证用户在使用软件过程中的是否灵活舒适、简单易用
易用性测试一般包括以下几点:
符合标准和规范
对于现在的软件,其 UI 设计的标准已经慢慢被确立,多数用户已经习惯了这种标准和规范。比如,软件发生严重错误时给出提示时图片或者字体的颜色
直观性
要求界面布局合理,软件功能操作简单、清晰易懂
灵活性
用户可以根据自己的习惯选择适合自己的操作方式
比如,手机上的键盘可以切换九宫格、全键盘、手写和五笔输入
舒适性
让用户对自己的操作有感知,不产生焦虑情绪
安装或者下载软件时,添加上进度条
主要的测试点有以下几点:
安全性 是指信息安全,指网络和系统保护用户的数据和隐私不被侵犯和泄露
防病毒、防黑客、防 XSS 注入、防 SQL 注入、防爬虫
在使用软件时,有时会碰到网页打开时越来越慢,查询数据时很长时间才显示列表,这些都是系统的性能问题引起的
常见的性能问题如下:
衡量一个系统性能好坏的关键性指标有,用户操作的响应时间、吞吐量、内存和 CPU 的使用率
内存泄漏会使软件运行越来越慢,最终停止响应
常见的导致内存泄露的原因:
黑盒测试 就是完全不关心软件内部代码的实现和逻辑结构,只关心系统的输入输出是否符合预期,功能是否符合需求说明书的规定
黑盒测试的优点:
黑盒测试的缺点: 由于黑盒测试不关心系统内部代码的实现,导致代码得不到测试
黑盒测试的测试方法:
等价类法、边界值法、错误猜测发、因果图法、场景法、正交法
白盒测试 就是针对代码进行测试,根据代码的逻辑结构设计测试用例,验证代码的实际运行状态是否符合预期状态
白盒测试的测试方法:
语句覆盖:
设计足够的测试用例,使得程序中的 每条语句都被至少执行一次
判定覆盖:
设计足够的测试用例,使得程序中 每个判定语句的每个分支都被至少执行一次。
如: if else 语句中 if 条件为真、为假都要被测试;switch case 语句中每个 case 都要被测试
条件覆盖:
设计足够的测试用例,使得判定语句中 每个逻辑条件为真和为假都至少出现一次
如: if (a > 0 && b < 0) 中,要确保 a > 0、b < 0 两个逻辑条件分别为真和为假的情况都至少出现一次
判定 – 条件覆盖:
设计足够的测试用例,使得判定语句中 每个逻辑条件为真为假都至少出现一次,同时 判定语句的所有可能结果也至少出现一次
如: if (a > 0 && b < 0) 中,要确保 a > 0、b < 0 两个逻辑条件分别为真和为假的情况都至少出现一次,同时 if (a > 0 && b < 0) 判定语句为真和为假的情况也至少出现一次
条件组合覆盖:
设计足够的测试用例,使得判定语句中 逻辑条件结果的所有可能组合至少出现一次
如: if (A && B) 中,存在两个条件 A 和 B,则条件组合覆盖要求测试用例包含以下几种情况:
路径覆盖:
设计足够的测试用例,使得程序中 每一条可能走过的路径都至少执行一次
介于黑盒测试和白盒测试之间的一种测试,多用于集成测试阶段,不仅关注程序的输入和输出,同时也关注程序内部的情况
测试金字塔: 越往下测试效率越高,定位问题越容易
单元测试 是对软件组成的最小单元 —— 模块进行测试,验证软件基本组成模块的正确性
测试阶段: 编码后或者编码前(TDD)
TDD:测试驱动开发,在开发人员编写功能代码之前,先设计好测试用例的代码,然后根据测试用例的代码编写功能代码,最终目的是让开发前设计的测试用例全部都能执行通过
测试对象: 软件的各个模块
测试方法: 白盒测试
测试人员: 白盒测试工程师或者开发人员
测试依据: 详细设计文档
测试内容: 模块的接口、边界测试、异常测试、路径测试、局部数据结构的测试
Java 中使用 Junit 框架进行单元测试
按照一定的策略把单元模块组合起来形成一个大的功能模块,对这个大的功能模块进行测试
测试阶段: 单元测试之后
测试对象: 集成的大模块
测试方法: 灰盒测试
测试依据: 概要设计文档
测试人员: 白盒测试人员或者开发人员
测试内容: 整个模块功能的正确性、单元模块之间接口的正确性、单个模块的缺陷对整个模块功能的影响、模块之间功能的冲突、全局数据结构的测试
对整个软件系统的功能、性能以及软件运行的软硬件环境进行全面测试
测试阶段: 集成测试通过之后
测试对象: 整个软件系统
测试方法: 黑盒测试
测试人员: 黑盒测试人员
测试依据: 需求规格说明文档
测试内容: 功能、界面、兼容性、安全性、性能、可靠性、易用性、容错性
系统测试中还包含有回归测试和冒烟测试:
回归测试: 当系统引入新的代码或者修改了旧代码之后,重新进行测试以确保系统各项功能正常使用
回归测试一般采用自动化测试
冒烟测试: 正式测试之前,会对系统的基本流程和核心功能进行测试,测试通过之后,才会开始正式测试
软件上线前的最后一道测试,由用户或者产品交付方依据用户需求进行测试
测试阶段: 系统测试之后
测试对象: 整个系统
测试人员: 用户或者产品交付方
测试依据: 用户需求
测试方法: 黑盒测试
测试内容: 同系统测试
α 测试 是指让用户或 除了开发人员和测试人员之外 的公司内部人员到开发现场去进行测试
β 测试 是指 实际用户在实际使用环境下 进行测试,不限时间、不限地点
比如:某些游戏在正式上线之前会开启测试服,并邀请一部分玩家进行测试
α 测试和 β 测试的区别:
由第三方软件测试机构 按照业内的标准和规范 对软件进行测试
不运行代码,静态的检查代码中可能出现错误的地方,分析代码的逻辑结构和具体的方法实现是否满足需求
运行代码,执行测试用例进行测试
手工的一个一个的执行测试用例,查看测试结果
优点: 有利于做探索性测试,无法被自动化测试替代
缺点: 用例很多时容易出错,效率也比较低
机器按照事先设定好的条件去执行测试,这些条件包括正常的和异常的
自动化测试按照测试对象还可分为:UI 自动化、接口自动化、性能自动化
自动化的价值和意义: 节省人力,自动化脚本运用率越高,越有价值
不是所有项目都适合自动化测试
自动化测试不适合于项目不稳定,功能频繁变动的功能,一般多用于回归测试和冒烟测试
按照地域划分可以划分为:本地化测试 和 国际化测试
软件的国际化: 开发软件时使用的一种工程技术,使得软件在适用不同国家的语言、风俗以及使用习惯的时候不用更改软件的源码就可以做到
软件的国际化和本地化是面向全球不同地区用户使用的软件系统的两个过程,而本地化测试和国际化测试则是针对这类软件产品进行的测试