目录
按照测试对象分类
界面测试(UI测试)
可靠性测试
容错性测试
文档测试
兼容测试
易用性测试
安装卸载测试
安全测试
性能测试
内存泄漏测试
弱网测试
按照是否查看代码分类
黑盒测试
白盒测试
灰盒测试
面试题
为什么不能让灰盒测试取代黑盒白盒测试?
黑盒测试和白盒测试哪个用的多?(常见测试方法有哪些?)
按照开发阶段划分(只需清楚概念)
单元测试
集成测试
系统测试
回归测试
冒烟测试
验收测试
按测试实施组织
α测试和β测试区别
界面测试(UI测试)
界面重要性:
软件与人的信息交流是通过界面来进行的,界面是软件与用户交流的最直接的一层,界面的设计决定了用户对我们设计的软件的第一印象。
测试方面:
界面测试一般都是以 UI设计稿、软件规格说明书、界面设计规则 为基础来进行测试
样式和布局测试:验证界面元素的样式、颜色、字体、布局和对齐是否符合设计规范。检查元素之间的间距、边框、背景等。
功能和交互测试:测试界面元素的交互行为是否符合预期。包括按钮、链接、下拉菜单、输入框等的点击、悬停、焦点切换、键盘操作等。
表单验证测试:测试表单输入的验证逻辑是否正确。包括必填字段验证、格式验证、长度限制、数据类型验证等。
响应式设计测试:验证界面在不同屏幕尺寸和设备上的响应性。测试界面在不同分辨率、浏览器和移动设备上的显示效果。
错误处理和提示测试:测试界面对错误情况的处理和提示是否准确和友好。包括输入错误、网络错误、服务器错误等的处理和反馈。
多语言支持测试:测试界面在不同语言环境下的显示和布局是否正确。验证界面的翻译、文本长度、字符集等方面的兼容性。
导航和链接测试:验证界面的导航菜单、面包屑导航、内部链接等是否可用和正确导航到相应的页面。
可访问性测试:测试界面是否符合可访问性标准,包括键盘操作、屏幕阅读器兼容性、对色盲用户的友好性等。
兼容性测试:测试界面在不同浏览器、操作系统和设备上的兼容性。验证界面在主流浏览器(如Chrome、Firefox、Safari、Edge等)上的显示和功能是否正常。
界面的布局和色调符合当下时事的发展!
可靠性测试
基本概念:
可靠性旨在评估系统或软件在一定条件下的稳定性、持久性和可靠性。它主要关注系统的长时间运行和负载下的表现,以识别潜在的故障、错误和性能问题。
计算公式:
可靠性 = 正常运行时间/(正常运行时间+非正常运行时间)*100%
- 正常运行时间:系统在规定时间内正常工作的时间
- 非正常运行时间:系统在同一时间段内发生故障或无法正常工作的时间。
计算实例:
在过去的一年中,一个服务器总共有 8,760 小时(365 天 × 24 小时)的运行时间。在这期间,服务器经历了总共 60 小时的故障和维护时间。
- 正常运行时间 = 8760小时
- 正常运行时间 + 非正常运行时间 = 8760小时 + 60小时 = 8820小时
- 可靠性 = (8760小时 / 8820小时) * 100%
- 可靠性 ≈ 99.32%
因此,该网络服务器的可靠性约为 99.32%。这意味着在过去的一年中,该服务器正常运行的时间占总时间的约 99.32%。剩余的时间包括了故障和维护导致的服务器中断。
注意:
军事系统,对系统的可靠性要求极高!
容错性测试
基本概念:
旨在评估系统在面对异常情况或错误条件时的表现和可靠性。该测试旨在验证系统是否能够正确处理异常情况,并在出现错误时保持正常运行或者能够进行适当的恢复。
测试方面:
异常输入测试:输入异常、不合法或无效的数据,观察系统是否能够正确地检测和处理这些输入。例如,在一个登录功能的测试中,尝试使用无效的用户名和密码进行登录,检查系统是否能够正确地拒绝访问。
异常条件测试:测试系统在不同的异常条件下的行为。这可能包括网络中断、数据库故障、硬件故障等情况。例如,模拟网络断开连接的情况,观察系统是否能够正确地处理连接中断并进行适当的错误处理。
容量负载测试:通过增加系统的负载和压力,测试系统在高负载情况下的性能和稳定性。这有助于评估系统在面对高并发访问、大量数据处理等情况下的容错能力。例如,模拟大量并发用户访问系统,观察系统是否能够正常运行,不会因为负载过大而崩溃或出现严重性能下降。
逻辑错误测试:测试系统在逻辑错误或错误的处理流程下的表现。这包括测试系统是否能够正确地捕获和处理逻辑错误,避免数据损坏或不一致。例如,在一个订单处理系统中,测试系统对于重复订单或错误的订单状态处理的准确性。
恢复能力测试:测试系统在发生错误或故障后的恢复能力。这包括测试系统的备份和恢复机制、故障转移和故障恢复过程。例如,测试系统在主数据库故障后能否自动切换到备用数据库,并尽快恢复正常运行。
与可靠性区别:
可靠性关注系统的整体稳定性和持续工作能力,而容错性关注系统在面对错误和故障时的处理和恢复能力。可靠性是系统长时间正常运行的能力,而容错性是系统在面对异常情况时的应对能力。两者共同提高了系统的稳定性和可靠性。 例如,有一架飞机,飞机有三个引擎,其中一个引擎坏了(不可靠性的表现),但是飞机依然可以正常飞行(容错性的表现)。
文档测试
基本概念:
旨在确保文档与实际软件系统的要求和功能相一致,并为用户和开发团队提供准确和清晰的信息。
三大类文件:
- 开发文件:可行性研究报告、软件需求说明书、数据要求说明书、概要设计说明书、详细设计说明 书、数据库设计说明书、模块开发卷宗。
- 用户文件:用户手册、操作手册,用户文档的作用:改善易安装性;改善软件的易学性与易用性;改善 软件可靠性;降低技术支持成本。
- 管理文件:项目开发计划、测试计划、测试分析报告、开发进度月报、项目开发总结报告。
测试要点:
- 文档的术语
- 文档的正确性
- 文档的完整性
- 文档的一致性
- 文档的易用性
兼容测试
基本概念:
旨在验证软件在不同环境、平台、操作系统、浏览器、设备或配置下的正确性和稳定性。它确保软件能够与各种目标环境兼容,并在这些环境中正常运行。
测试方面:
操作系统兼容性测试:验证软件在不同操作系统(例如Windows、Mac、Linux)和操作系统版本下的兼容性。这包括测试在各种操作系统上的安装、配置、功能和性能。
浏览器兼容性测试:验证软件在不同网络浏览器(例如Chrome、Firefox、Safari)和浏览器版本下的兼容性。这包括测试在各种浏览器上的界面、功能、响应和布局。
设备兼容性测试:验证软件在不同硬件设备上的兼容性,如台式机、笔记本电脑、平板电脑、智能手机和其他移动设备。这包括测试在各种设备上的屏幕分辨率、触摸操作、传感器集成等。
数据库兼容性测试:验证软件与不同数据库系统(例如MySQL、Oracle、SQL Server)的兼容性。这包括测试在各种数据库上的数据存储、查询、事务处理和性能。
版本兼容性测试:验证软件在不同软件版本之间的兼容性,包括与旧版本或新版本的兼容性。这确保新版本的软件与现有的版本或数据兼容,并且可以进行平滑的升级和迁移。
国际化和本地化兼容性测试:验证软件在不同地区、语言和文化环境下的兼容性。这包括测试在不同语言、字符集、日期、时间格式和地区特定设置下的界面、文本显示和本地化功能。
易用性测试
基本概念:
旨在评估和验证软件的用户界面和交互设计的易用性。它关注用户与软件之间的交互过程,以确保软件具有良好的用户体验,用户可以轻松地理解和操作软件。
测试方面:
导航和布局:测试软件的导航结构和布局是否直观和清晰。这包括测试菜单、导航栏、按钮和链接的可用性和易理解性。
页面和视觉设计:评估软件的页面设计、颜色、字体和图标等视觉元素是否符合用户期望和美学标准。测试软件的界面是否有足够的对比度、一致性和可读性。
输入和反馈:测试软件对用户输入的响应和反馈机制。这包括测试表单字段的验证、错误消息的清晰度和及时性,以及对用户操作的可见反馈,如进度指示器和确认对话框。
功能和操作流程:评估软件的功能是否符合用户需求和期望。测试软件的操作流程是否直观、简单和一致,以确保用户可以顺利完成任务。
文档和帮助:评估软件的文档、帮助文件和用户指南的可读性和易用性。测试是否有足够的文档支持和提示,以帮助用户理解和使用软件。
用户反馈和满意度:通过用户调查、用户反馈和观察,评估用户对软件易用性的满意度和体验。这可以涉及用户对软件界面的主观评价和建议
安装卸载测试
基本概念:
旨在验证软件在安装和卸载这一最基本功能过程中的正确性和稳定性。一旦出错,就属于最严重、最紧急、优先级最高的缺陷!
测试方面:
- 软件是否有不同的安装卸载方式
- 是否可以在不同环境系统下安装(兼容性测试)
- 安装或卸载过程中是否可以手动暂停或取消
- 安装空间不足是否有提示
- 是否可以正常卸载
- 安装或卸载中出现如,死机、断电、断网问题是否可以正常应对
安全测试
基本概念:
旨在评估和验证软件系统的安全性。它涉及检测和识别潜在的安全漏洞、弱点和威胁,以保护软件系统免受潜在的攻击和安全风险。
测试方面:
身份验证和访问控制:测试软件的身份验证机制和访问控制系统,以确保只有授权用户能够访问系统的敏感功能和数据。这包括测试密码策略、会话管理、角色和权限控制等。
数据保护和加密:测试软件对敏感数据的保护措施,包括数据的存储、传输和加密。这包括测试加密算法的强度、密钥管理、数据遮蔽和数据泄露防护等。
安全配置和漏洞管理:测试软件系统的安全配置和漏洞管理过程,以确保已经采取适当的安全措施来减少系统受攻击的风险。这包括测试系统和组件的安全配置、漏洞扫描和修复过程等。
输入验证和安全漏洞:测试软件对输入数据的验证和处理,以发现潜在的安全漏洞,如跨站脚本攻击(XSS)、SQL注入、命令注入等。这包括测试输入过滤、参数化查询、安全编码等。
安全日志和监控:测试软件的安全日志记录和监控机制,以便及时检测和响应安全事件。这包括测试日志的完整性、可读性、事件触发和告警机制等。
安全性的完整性和可靠性:测试软件系统在面对恶意攻击和异常情况时的稳定性和可靠性。这包括测试系统的鲁棒性、异常处理、安全恢复和系统响应等。
测试方法:
- 静态代码分析
- 漏洞扫描
- 渗透测试
- 安全审计
性能测试
基本概念:
旨在评估和验证软件系统在不同负载条件下的性能和效能。它关注软件系统的响应时间、吞吐量、资源利用率和稳定性,以确保软件在真实使用情况下能够满足性能要求。
测试方面:
负载测试:测试软件系统在正常负载和峰值负载条件下的性能表现。这包括测试系统在高并发情况下的响应时间、吞吐量和资源消耗。
压力测试:测试软件系统在超过正常负载的极限条件下的性能和稳定性。这包括测试系统在大规模并发用户、大数据量或复杂计算场景下的表现。
容量测试:测试软件系统在长时间运行和持续负载下的性能和稳定性。这包括测试系统在持续运行时的内存消耗、资源泄露和系统崩溃等。
性能指标和响应时间:测试软件系统的关键性能指标,如平均响应时间、最大响应时间、吞吐量和并发用户数等。这有助于评估系统的性能水平和瓶颈点。
并发性和并行性:测试软件系统在并发用户和并行处理场景下的性能和可扩展性。这包括测试系统的并发连接数、线程安全性和分布式处理能力。
资源利用率:测试软件系统在不同负载条件下的资源消耗,如CPU利用率、内存占用和网络带宽。这有助于评估系统的效率和优化资源配置。
内存泄漏测试
基本概念:
内存泄露指的是应用程序在运行过程中分配的内存空间无法被正确释放,导致内存使用量不断增加,最终可能导致应用程序崩溃或系统性能下降。
泄漏原因:
未释放动态分配的内存:在使用动态内存分配函数(如malloc、new等)分配内存后,应确保在不再需要时使用对应的释放函数(如free、delete等)释放内存。如果忘记释放内存或释放的方式不正确,就会导致内存泄漏。
死循环:在面向对象编程中,如果对象之间存在循环引用,即彼此持有对方的引用,而没有适时地断开引用关系,就会导致对象无法被垃圾回收器正确回收,从而造成内存泄漏。
缓存未清理:在使用缓存机制时,如果没有适时地清理缓存中不再使用的对象或数据,就会导致这些对象一直存在于内存中,造成内存泄漏。
队列和堆栈未正确管理:当使用队列或堆栈数据结构时,如果没有正确管理入队和出队的元素或节点,就可能导致一些对象无法被正确释放,从而引发内存泄漏。
事件监听器未移除:在事件驱动的编程模型中,如果注册了事件监听器但未适时移除,就会导致监听器对象一直存在于内存中,即使事件已经不再发生,也无法被垃圾回收器回收。
文件或资源未关闭:在使用文件、数据库连接、网络连接等资源时,如果忘记关闭或释放这些资源,就可能导致资源泄漏,进而引发内存泄漏。
弱引用或软引用未使用:在某些情况下,可以使用弱引用(Weak Reference)或软引用(Soft Reference)来引用对象,当对象不再被强引用引用时,垃圾回收器可以自动回收这些对象。如果没有正确使用弱引用或软引用,就可能导致对象无法被垃圾回收器回收,从而产生内存泄漏。
测试方法:
- 人工静态法:依据自我经验用肉眼检查
- 自动工具法:借助内存泄漏工具 Visual Leak Detector 记录每次内存分配,清楚告诉用户内存是怎么泄漏的
弱网测试
步骤:
1.在 Fiddler 中打开限速模式
2.点击打开 订制规则
3.在 订制规则 中找到 OnBeforeRequest 方法中的红框逻辑
黑盒测试
基本概念:
黑盒测试着重于测试软件系统的功能、行为和接口,而不考虑其内部的具体实现细节。在黑盒测试中,测试人员对软件系统的输入和输出进行测试,以验证系统是否按照预期的规格和功能进行操作。
优点:
- 不需要了解程序代码具体内部实现
- 从用户角度出发设计测试用例,容易知道用户会用到哪些功能,遇到哪些问题,锻炼测试人员的思维
- 不容易遗漏软件需求文档中需要测试的功能
缺点:
- 不能覆盖所有代码
常见测试方法:
- 等价类
- 边界值
- 正交法
- 场景法
- 错误猜测法
白盒测试
基本概念:
白盒测试关注测试软件系统内部的结构、逻辑和代码,需要了解软件系统的内部实现细节,以设计测试用例和评估系统的覆盖范围。
目的:
通过检查软件内部逻辑,对软件中逻辑路径进行覆盖测试,在程序不同地方设置检查点,检查程序状态,以确定实际运行状态与预期是否符合一致。
主要测试方法:
- 语句覆盖
- 判定覆盖
- 条件覆盖
- 判定条件覆盖
- 条件组合覆盖
- 路径覆盖
灰盒测试
基本概念:
灰盒测试,是介于白盒测试与黑盒测试之间的一种测试,灰盒测试多用于集成测试阶段,不仅关注输出、输入的正确性,同时也关注程序内部的情况。
面试题
1.为什么不能让灰盒测试取代黑盒白盒测试?
灰盒测试没有白盒测试那么详尽,也没有黑盒测试覆盖产品的广度大,所以灰盒测试不能取代黑盒白盒测试!
2.黑盒测试和白盒测试哪个用的多?(常见测试方法有哪些?)
黑盒测试和白盒测试,测试人员都会使用到,在工作中根据实际情况来结合白盒测试和黑盒测试,但是通常情况下黑盒测试相对用的要多些。黑盒测试一般使用等价类、边界值、正交法、场景法、错误猜测法等测试方法。(可补充这些方法的适用场景)
单元测试
基本概念:
单元测试用于验证代码的最小功能单元(如函数、方法或类)是否按照预期进行工作。它的主要目标是检测软件基本组成单位的正确性。
测试阶段:编码后或编码前
测试对象:最小模块
测试人员:白盒测试工程师和开发工程师
测试依据:代码和注释+详细设计文档
测试方法:白盒测试
测试内容:模块接口测试、局部数据结构测试、路径测试、错误处理测试、边界测试
集成测试
基本概念:
集成测试用于验证多个组件或模块在集成后的协同工作是否符合预期。它的目标是检测不同组件之间的接口问题、数据传递问题以及整体系统的功能和性能。
- 测试阶段:一般单元测试之后
- 测试对象:模块间接口
- 测试人员:白盒测试工程师或开发工程师
- 测试依据:单元测试的模块+概要设计文档
- 测试方法:黑盒测试与白盒测试相结合
- 测试内容:模块之间数据传输、模块之间功能冲突、模块组装功能正确性、全局数据结构、单模块缺陷对系统的影响
系统测试
基本概念:
系统测试用于验证整个软件系统是否符合预期,是否满足功能需求、性能要求和质量标准。它的目标是评估系统在真实环境中的功能、性能、可用性和稳定性。
- 测试阶段:集成测试通过之后
- 测试对象:整个系统(软、硬件)
- 测试人员:黑盒测试工程师
- 测试依据:需求规格说明文档
- 测试方法:黑盒测试
- 测试内容:功能、界面、易用性、可靠性、性能、兼容性、安全性、网络等
回归测试
基本概念:
回归测试用于验证修改、修复或增加功能后的软件是否仍然能够正常工作,并且之前已通过的功能和性能没有受到影响。它的目的是确保对软件进行修改后,原有的功能仍然可靠,不会引入新的错误或导致现有功能出现问题。(隶属于系统测试)
冒烟测试
基本概念:
冒烟测试是软件测试中的一种快速而基础的测试方法,用于验证软件的基本功能是否能够运行良好,是否值得进一步进行详细的测试。它的名称来源于电子设备的测试,指的是在设备上通电后,观察是否有烟雾冒出,即快速检查设备是否能够正常工作。(隶属于系统测试)
验收测试
基本概念:
验收测试是软件开发过程中的最后一个测试阶段,旨在验证软件是否满足用户需求和预期,是否可以接受并投入实际使用。它是用户和开发团队之间的最终确认,用于确定软件是否准备好交付给用户。
- 测试阶段:系统测试通过之后
- 测试对象:整个系统(包括软硬件)
- 测试人员:主要是最终用户或者需求方
- 测试依据:用户需求、验收标准
- 测试方法:黑盒测试
- 测试内容:同系统测试 + 各类文档
α测试和β测试区别
- 环境:α测试是在公司内部进行测试,β测试环境不确定
- 测试人员类型:α测试是公司内部人员,β测试是用户
- 测试人员数量:α测试人员数量较少,β测试人员较多
- 阶段:α测试是在β测试之前测试的
- 测试周期:α测试周期较短,β测试周期较长
面试题
自动化测试是否能够完全代替手工测试?(自动化测试和手工测试哪个好哪个坏?)
不能代替!
测试类型:自动化测试更适合于重复执行的测试任务,如回归测试、性能测试和负载测试等。手工测试更适合于探索性测试、用户体验测试和可用性测试等需要主观判断和人工干预的测试任务。
覆盖范围:自动化测试可以快速执行大量的测试用例,涵盖广泛的功能和场景,提高测试效率和覆盖率。手工测试更适合于深入挖掘和测试特定的功能、复杂的业务流程和边界条件。
可靠性和一致性:自动化测试可以提供一致的执行结果,减少人为错误和主观因素的干扰。手工测试的可靠性和一致性受测试人员的技能水平和主观判断的影响。
人的创造力和洞察力:手工测试可以通过测试人员的创造力和洞察力发现隐藏的缺陷和问题。自动化测试往往只能执行预定义的测试脚本,难以发现未知的问题。
成本和资源:自动化测试在长期来看可以节省时间和资源,特别是对于重复执行的任务。然而,自动化测试的开发和维护需要一定的投入,并且在某些情况下,手工测试可能更经济高效。
自动化测试和手工测试是相辅相成的,各有其适用的场景和优势。在实际测试过程中,可以通过综合使用两种方法,根据测试需求和资源限制,灵活选择合适的测试方式,以获得最佳的测试覆盖和质量保证。