一、 功能测试
功能测试在单元测试、集成测试、系统测试中都有进行。
在单元测试阶段,功能测试目的是保证所测试的每个独立模块的功能是正确的。
在系统集成过程中和系统集成之后进行的功能测试,不仅要考虑模块之间的相互作用,而且要考虑系统的应用环境。
功能测试是指在规定的一段时间内运行系统的所有功能,以验证软件系统的功能是否正确。正确性是软件最重要的因素。
- 功能测试的方法采用黑盒测试。
- 功能测试的方法:等价类划分法、边界值分析法、 错误推测法、 因果图法、 组合分析法
目的和内容:
程序安装、启动正常,有相应的提示框、错误提示等
每项功能符合实际要求
系统的界面清晰、美观
菜单、按钮操作正常、灵活,能处理一些异常操作
能接受正确的数据输入,对异常数据的输入有提示、容错处理等
数据的输出结果准确,格式清晰,可以保存和读取
功能逻辑清楚,符合使用者习惯
系统的各种状态按照业务流程而变化,并保持稳定
支持各种应用的环境
能配合多种硬件周边设备
软件升级后,能继续支持旧版本的数据
与外部应用系统的接口有效
二、 回归测试
1.回归测试的目的 :
所做的修改达到了预定的目的,如错误得到了改正,新功能得到了实现,能够适应新的运行环境等;
不影响软件原有功能的正确性。
2.回归测试的方法 :
再测试全部用例
基于风险选择测试
基于操作剖面选择测试
再测试修改的部分
3.回归测试的组织和实施:回归测试可遵循下述基本过程进行
1,识别出软件中被修改的部分
2,从原有基线测试用例库T中,排除所有不再适用的测试用例,确定那些对新的软件版本依然有效的测试用例,其结果是建立一个新的基线测试用例库T0
3,依据一定的策略从T0中选择测试用例测试被修改的软件
4,如果回归测试包不能达到所需要的覆盖要求,必须补充新的测试用例使覆盖率达到规定的要求,生成新的测试用例T1,用于测试T0无法充分测试的软件部分。
5,用T1执行修改后的软件
第2,3步测试验证修改点是否破坏了现有的功能,第4,5步测试验证修改工作本身。
三、 性能测试
通过测试以确定性能相关指标而进行的测试。一般在真实环境、特定负载条件下,通过工具模拟实际软件系统的运行及其操作,同时监控性能各项指标,最系统运行时的性能表现,如得到运行速度、响应时间、占有系统资源等方面的系统数据。
性能测试就是为了发现系统性能问题或获取系统性后对测试结果进行分析来确定系统的性能状况。
一些常见的性能问题:
- 启动系统、打开页面越来越慢
- 查询数据,很长时间才显示列表
- 网络下载速度很低,如5k/s
- 资源耗尽,如CPU使用率达到100%
- 资源泄漏,如内存泄漏 ,最终会导致资源耗尽
- 资源瓶颈,如线程、GDI、DB连接等资源变得稀缺
(1)用户对软件性能的关注:
软件对用户操作的响应时间,如用户提交一个查询操作,打开一个web页面的链接等等
业务可用度,或者系统的服务水平如何
(2)系统管理员对软件性能的关注
管理员关心的问题 | 软件性能描述 |
服务器的资源使用状况合理吗 | 资源利用率 |
应用服务器和数据库的资源使用状况合理吗 | 资源利用率 |
系统是否能够实现扩展 | 系统可扩展性 |
系统最多能支持多少用户的访问?系统最大的业务处理量是多少 | 系统容量 |
系统性能可能的瓶颈在哪里 | 系统可扩展性 |
更换哪些设备能够提高系统性能 | 系统可扩展性 |
系统能否支持7×24小时的业务访问 | 系统稳定性 |
(3)开发人员对软件性能的关注
开发人员关心的问题 | 问题所属层次 |
架构设计是否合理 | 系统架构 |
数据库设计是否存在问题 | 数据库设计 |
代码是否存在性能方面的问题 | 代码 |
系统中是否有不合理的内存使用方式 | 代码 |
系统中是否存在不合理的线程同步方式 | 设计与代码 |
系统中是否存在不合理的资源竞争 | 设计与代码 |
性能测试目的和需求:
目的: 为了验证系统是否达到用户提出的性能指标,同时发现系统中存在的性能瓶颈,起到优化系统的目的。
性能测试需求: 用户对各项指标提出的明确需求;如果用户没有提出性能指标,则根据用户需求、测试设计人员的经验来设计各项测试指标。(需求+经验)
主要的性能指标: 服务器的各项指标(CPU、内存占用率等)、后台数据库的各项指标、网络流量、响应时间
响应时间:应用系统从请求发出开始到客户端接收到最后一个字节数据所消耗的时间,是作为用户视角的软件性能的主要体现。
并发用户数:系统用户数、同时在线用户人数。
吞吐量:单位时间内系统处理的客户请求的数量,直接体现软件系统的性能承载能力。 表示方法:请求数/秒、页面数/秒、人数/天、处理的业务数/小时。
资源占用率:体现软件的面向用户特性。
性能测试方法
负载模拟 :并发用户+思考时间+每次请求的数据量+负载模式
性能测试步骤 :
1.根据测试需求,选择测试工具和开发相应的测试脚本
2.建立性能测试负载模型,就是确定并发虚拟用户的数量、每次请求的数据量、思考时间、加载方式和持续加载的时间等
3.执行性能测试
4.结果分析,并提交性能测试报告
举例:
网络性能测试主要是为了准确展示带宽、延迟、负载和端口的变化是如何影响用户的响应时间的。在实际的软件项目中,主要是测试用户数目与网络带宽的关系。
编写用例的格式如表3(表格中的数据为示例数据):
四、其它非功能性测试
1.压力测试
压力测试(Stress test),也称为强度测试、负载测试。压力测试是模拟实际应用的软硬件环境及用户使用过程的系统负荷,长时间或超大负荷地运行测试软件,来测试被测系统的性能、可靠性、稳定性等。
例如对一个网站进行测试,模拟10到50个用户同时在线并观测系统表现,就是在进行常规性能测试;当用户增加到系统出项瓶颈时,如1000乃至上万个用户时,就变成了压力测试。
在一种需要反常(如长时间的峰值)数量、频率或资源的方式下,执行可重复的负载测试,以检查程序对异常情况的抵抗能力,找出性能瓶颈。从本质上来说,测试者是想要破坏程序。
并发性能测试、 疲劳强度测试 、大数据量测试
1)考并发性能测试、察客户端应用的性能,测试的入口是客户端。
并发性能测试的过程,是一个负载测试和压力测试的过程。即逐渐增加并发虚拟用户数负载,直到系统的瓶颈或者不能接收的性能点,通过综合分析交易执行指标、资源监控指标等来确定系统并发性能的过程。并发性能测试是负载压力测试中的重要内容。
2)疲劳强度测试
疲劳强度测试是在系统稳定运行下模拟最大用户数量、并长时间运行系统,通过综合分析执行指标和资源监控来确定系统处理最大业务量时的性能。
疲劳强度测试的目的就是检验系统长时间运行后的性能,因此设计用例时,需要编写不同参数或者负载条件下的多个测试用例,对服务器、软件、网络进行不同条件下的综合测试分析,测试时要记录系统发生故障的信息作为测试结果。疲劳强度测试也是采用测试工具进行的。
3)大数据量测试
大数据量测试分为两种:一个是针对某些系统存储、传输、统计查询等业务进行大数据量的测试;另一个是与前面并发测试相结合的综合数据测试。编写用例时主要编写前一部分,后一部分尽量放在并发测试中。
大数据量测试一般是针对那些对数据库有特殊要求的系统进行测试,
例如电信业务系统的手机短信息表,由于有的用户关机或者不在服务区,每秒钟需要有大量的短信息保存,同时在用户联机后还要及时发送,因此对数据库性能有极高的要求,需要专门测试。
2.容量测试
容量测试目的是通过测试预先分析出反映软件系统应用特征的某项指标的极限值(如最大并发用户数、数据库记录数等),系统在其极限值状态下还能保持主要功能正常运行。
容量测试还将确定测试对象在给定时间内能够持续处理的最大负载或工作量。
容量可以看作系统性能指标中一个特定环境下的一个特定性能指标,即设定的界限或极限值。
如某个电子商务网站所能承受的、同时进行交易或结算的在线用户数。知道了系统的实际容量,如果不能满足设计要求,就应该寻求新的技术解决方案,以提高系统的容量。
3. 安全性测试
安全性测试是检查系统对非法侵入的防范能力。安全测试期间,测试人员假扮非法入侵者,采用各种办法试图突破防线。
例如: 想方设法截取或破译口令; 专门开发软件来破坏系统的保护机制; 故意导致系统失败,企图趁恢复之机非法进入; 试图通过浏览非保密数据,推导所需信息等等。
理论上讲,只要有足够的时间和资源,没有不可进入的系统。因此系统安全设计的准则是,使非法侵入的代价超过被保护信息的价值,此时非法侵入者已无利可图。
功能性测试 vs.安全性测试:
功能性测试:软件做它应该做的事,验证正确的输出 不正确的输出 /行为 / 缺陷(Bug)
安全性测试:软件不做它不应该做的事, 应用输入验证, 没有不安全的事情发生 在测试软件系统中对危险防止和危险处理设施进行的测试,以验证其是否有效
安全性缺陷(漏洞,脆弱性,Vulnerability)
不同的安全性风险:
跨站点脚本(cross-site scripting,XSS)攻击;
SQL注入式漏洞;
URL和API的身份验证 缓冲区溢出;
不安全的数据存储或传递;
不安全的配置管理;
有问题的访问控制,权限分配有问题;
口令设置不严,包括长度、构成和更新频率 暴露的端口或入口;
4.可靠性测试
可靠性(Reliability)是产品在规定的条件下和规定的时间内完成规定功能的能力,它的概率度量称为可靠度。软件可靠性是软件系统的固有特性之一,它表明了一个软件系统按照用户的要求和设计的目标,执行其功能的可靠程度。软件可靠性与软件缺陷有关,也与系统输入和系统使用有关。理论上说,可靠的软件系统应该是正确、完整、一致和健壮的。
规定的时间 规定的环境条件 规定的功能
成熟性度量可以通过错误发现率DDP(Defect Detection Percentage)来表现。在测试中查找出来的错误越多,实际应用中出错的机会就越小,软件也就越成熟。
DDP=测试发现的错误数量/已知的全部错误数量 已知的全部错误数量是测试已发现的错误数量加上可能会发现的错误数量之和。
5.容错性测试
容错性测试是检查软件在异常条件下自身是否具有防护性的措施或者某种灾难性恢复的手段。如当系统出错时,能否在指定时间间隔内修正错误并重新启动系统。
容错性测试包括两个方面:
输入异常数据或进行异常操作,以检验系统的保护性。如果系统的容错性好的话,系统只给出提示或内部消化掉,而不会导致系统出错甚至崩溃。
灾难恢复性测试。通过各种手段,让软件强制性地发生故障,然后验证系统已保存的用户数据是否丢失、系统和数据是否能尽快恢复。
五、系统测试工具及其应用 LoadRunner
Mercury LoadRunner是一种预测系统行为和性能的负载测试工具。
通过使用LoadRunner,企业能最大限度地缩短测试时间,优化性能和加速应用系统的发布周期 测试原理:用多线程或多进程的方式向服务器端发送大量的数据包,同时接收服务器的返回结果。
六、从质量三个纬度看系统测试
质量维度 | 测试类型 |
可靠性 | 完整性测试:侧重于评估测试对象的强壮性(防止失败的能力),语言、语法的技术兼容性以及资源利用率的测试。该测试针对不同的测试对象实施和执行,包括单元和已集成单元。 结构测试:侧重于评估测试目标是否符合其设计和构造的测试。通常对基于 Web 的应用程序执行该测试,以确保所有链接都已连接、显示正确的内容以及没有孤立的内容。 |
功能 | 配置测试:侧重于确保测试对象在不同的硬件和/或软件配置上按预期运行的测试。该测试还可以作为系统性能测试来实施。 功能测试:侧重于核实测试对象按计划运行,提供需求的服务、方法或用例的测试。该测试针对不同的测试对象实施和执行,包括单元、已集成单元、应用程序和系统。 安装测试:侧重于确保测试对象在不同的硬件和/或软件配置上,以及在不同的条件下(磁盘空间不足或电源中断)按预期安装的测试。该测试针对不同的应用程序和系统实施和执行。 安全测试:侧重于确保只有预期的主角才可以访问测试对象、数据(或系统)的测试。该测试针对多种测试对象实施和执行。 |
质量维度 | 测试类型 |
功能 | 容量测试:侧重于核实测试对象对于大量数据(输入和输出或驻留在数据库内)的处理能力的测试。容量测试包括多种测试策略,如创建返回整个数据库内容的查询;或者对查询设置很多限制,以至不返回数据;或者返回每个字段中最大数据量的数据条目。 |
性能 | 基准测试:一种性能测试,该测试将比较(新的或未知的)测试对象与已知的参照负载和系统的性能。 竞争测试:侧重于核实测试对象对于多个主角对相同资源(数据记录、内存等)的请求的处理是否可以接受的测试。 负载测试:一种性能测试,用于在测试的系统保持不变的情况下,核实和评估系统在不同负载下操作极限的可接受性。 评测包括负载和响应时间的特征。如果系统结合了分布式构架或负载平衡方法,将执行特殊的测试以确保分布和负载平衡方法能够正常工作。 性能曲线:在该测试中,将监测测试对象的计时配置文件,包括执行流、数据访问、函数和系统调用,以确定并解决性能瓶颈和低效流程。 强度测试:一种性能测试,侧重于确保系统可在遇到异常条件时按预期运行。系统面对的工作强度可以包括过大的工作量、不充足的内存、不可用的服务/硬件或过低的共享资源。 |