1.1.9 软件测试类型
关于软件测试类型,可以参照ISO225000(替代ISO 9126)软件质量模型,如图1-13所示。
图1-13 ISO225000(替代ISO 9126)软件质量模型
1.功能测试
功能测试对测试对象侧重于所有可直接追踪到用例或业务功能和业务规则的软件测试需求。这种软件测试的目标是核实数据的接收、处理和检索是否正确,以及业务规则的实施是否恰当。此类软件测试可以通过黑盒测试技术或白盒测试技术来实现,该技术通过图形用户界面(GUI)或其他方式与应用程序进行交互,并对交互的输出或结果进行分析,以此核实应用程序及其内部功能。
案例1-5:功能测试。
图1-14所示是电子商务计价系统界面。随着电子商务网站越来越多,某些商品在节假日可以打折,会员可以享受会员价,购买物品达到一定数量或金额后,也可以打折或者免运费。这些条件给计价系统的准确性带来很复杂的功能,软件测试工程师应该设计好各种测试用例,来检测系统的功能。
图1-14 电子商务计价系统界面
2.易用性测试(用户体验性测试)
易用性测试指的是在指定条件下使用时,软件产品被理解、学习、使用和吸引用户的能力。
- 这里的用户包括。
(1)操作人员。
(2)最终用户。
(3)受该软件的使用影响或者依赖于该软件的间接用户。
- 易用性质量特性。
Ø 易理解性。
Ø 易学性。
Ø 易操作性。
Ø 吸引性。
- 易用性测试采取技术。
Ø 人工检查 审查或者评审。
Ø 问卷调查 通过问卷调查方式得到用户使用软件的反馈。
Ø 验证和确认 针对软件产品的实现,进行验证和确认。
Ø A/B软件测试法。
案例1-6:易用性测试。
如图1-15所示,对于安卓系统卸载APP软件,必须进入设置界面,找到软件,再单击【卸载】按钮才可以卸载;而苹果系统只要在界面上长按APP软件图标3s,点左上角的叉,即可删除。由此可见,苹果系统的卸载APP的软件易用性明显优于安卓系统。另外,现在我们给易用性测试起了一个更好听的名字,叫“软件用户体验性测试”。
图1-15 安卓系统与苹果系统的卸载APP功能
3.可靠性测试
可靠性测试的目的之一是对软件成熟度在时间上的统计度量指标进行监控,并将其与既定目标比较。可靠性对应3个指标,如图1-16所示。
(1)平均失效间隔时间MTBF(这次失效到下次失效的时间)。
(2)平均修复时间MTTR(本次失效修复的时间)。
(3)平均失效前时间MTTF(修复完毕到下次失效的时间)。
通过图1-16所示,可以看出:MTBF=MTTR+MTTF。
另外,可靠性失效指标的一般公式:可靠性失效指标=MTTR/MTBF×100%
案例1-7:电信系统软件的可靠性。
在电信领域,可靠性失效指标要达到著名的5个9,即99.999%,也就是说一年中允许设备故障的时间为:365×(1−99.999%)天=8760×(1−99.999%)小时=525600×(1−99.999%)分钟=5.256分钟。
4.性能测试
性能测试的类型比较多,这里主要考虑以下3种类型。
(1)基本性能测试:正常情况下软件的响应速度。
(2)负载测试(LOAD测试):通过增加负载(一般为并发用户或数据库容量)来评估组件或系统性能的软件测试方法。
测试方法:以一定的负载作为起点,观察系统吞吐率,不断加大负载个数,直到吞吐率达到饱和,这时负载为该产品这个功能的最大负载。
(3)压力测试:评估系统处于一定的负载下(最大负载乘以一定百分比),让系统运行一段时间,观察系统各项指标是否正常。
案例1-8:Web系统的性能测试。
在Web页面对用户登录功能进行负载测试,获取最大负载数,并以最大负载的80%,持续运行48小时进行压力测试,观察系统各项指标是否正常运行。
关于性能测试,本篇第5.1节将会详细讲解。
5.安全性测试
软件安全性包括功能安全性和信息安全性,本节只考虑信息安全性。
信息安全性:指的是软件产品保护信息和数据的能力,及未授权的人员或者系统不能阅读或者修改这些信息和数据,而不拒绝授权人员或者系统对它们进行访问。信息安全性测试的关注点。
- 对应用程序/数据进行未授权的复制。
- 未授权的访问控制。
- 出入域溢出导致的缓存区溢出。
- 服务拒绝,阻止用户与应用程序的交互。
- 在网络上窃听数据传输获取敏感信息。
- 破解保护敏感信息的加密代码。
- 逻辑炸弹/复活节彩蛋。
信息安全性分类。
- 与用户接口相关。
- 与文件系统相关。
- 与操作系统相关。
- 与外部软件相关。
信息安全性测试方法。
- 使用工具创建系统概况或网络图。
- 使用多种工具进行漏洞扫描。
- 获得信息研制“攻击方案”。
- 根据安全专家(白帽子黑客)的建议进行多种攻击。
案例1-9:黑客侵入。
某公司开发一套网上答题系统,题目均为单项选择题,可以选择A、B、C、D中的任意一项,每一周评选最高得分者,可以在电视节目中参加一个益智类的栏目。为了防止网友对所有题选择某个相同的答案(如对所有题都选择D),或者有规律的选择(如选题都是A、C、D、B、A、C、D、B…)在前端JavaScript程序里做了控制:如果连续5次选择同一个答案或者有规律地选择的答题者将被答题系统自动踢出。该程序经过严格测试后上线使用。可是,上线不到4周,发现每周最高得分者均为一个姓张的先生,查看其答案,竟然所有题目都答成B,这让开发工程师感到很奇怪。两周后,公司的开发经理在网站群聊中找到这位张先生,张先生告诉开发经理,系统在前端JavaScript做了控制,但是在后端JavaBean中没进行控制,所以他自己写了个程序绕过前端,这个程序是一个死循环,7×24小时一直发送答案B给后端系统。
案例1-10:XSS注入[J1]
如果没有对HTML特殊字符进行处理(HTML特殊字符见附录A),在浏览页面时会运行JavaScript代码,如果输入的JavaScript代码具有恶意获得用户信息的功能,就会产生安全问题,如输入:“ var sys = getBrowserInfo();document.write (sys.browser + "的版本是:" + sys.ver);”,页面在显示时就会把用户当前的浏览器版本和型号都显示出来。这样,黑客就可以根据获取的信息采取进一步攻击。
案例1-11:SQL注入。
SQL注入比XSS注入更加危险。下面的例子可以造成用户不注册就能登录系统:下面是登录系统的SQL语句:selectcount(*) from user where name='$name'and password='$password'。上面是用户登录的SQL语句,如果count(*)不为零,用户即可进入系统。$name,$password为用户在界面中输入的值,这里作为一个变量存储。$name可以任意输入,如输入“Jerry”,$password输入类似于“2222'or1=1;-- '”,由于这样SQL语句变为selectcount(*) from user where name='Jerry'and password='2222'or 1=1;-- ',where语句后的条件永远为真,所以判断语句count(*)一定不为零。
6.相容性测试
相容性测试又称兼容性测试,指的是软件产品与一个或者多个规定的系统之间进行交互的能力。该项测试用于验证软件产品或者应用程序在各种指定的目标环境下是否可以正常工作,主要包括。
(1)硬件。
(2)软件。
(3)中间件。
(4)操作系统。
(5)其他。
兼容性测试包括:输入的兼容性、输出的兼容性以及自适应性。
案例1-12:设备接口兼容性。
某些设备厂商生产出的产品需要被其他厂商调用,或者调用其他厂商的接口。在这些厂商中,北向接口与南向接口经常被提及。北向接口和南向接口如图1-17所示。
- 北向接口:我的设备使用其他设备的功能,这个接口为北向接口。
- 南向接口:其他设备使用我的设备的功能,这个接口为南向接口。
可以看出,如果用单元测试做一个比喻,北向接口设备相当于驱动函数,而南向接口设备相当于桩函数。
案例1-13:屏幕分辨率测试。
屏幕分辨率测试属于兼容性测试的范畴,要求测试在不同屏幕分辨率下。界面的美观程度,可分为800×600,1024×768,1152×864,1280×768,1280×1024,1200×1600等,不同字号下的测试。
7.可移植性测试
可移植性测试通常和软件移植到某个特定的运行环境中的难易程度相关,包括第一次建立或从现有环境移植到另一个环境。这种测试类型包括。
(1)可安装性测试。
(2)适应性测试。
(3)可替换性测试。
案例1-14:网络设备移植测试。
某软件从网络设备A移植到网络设备B中,发生了错误。后经过排查,结论是网络设备A的IP地址用的是用户地址序列(高位在前,低位在后)。而网络设备B的IP地址用的是网络地址序列(低位在前,高位在后)。如IP地址是192.168.0.8,转化为十六进制为C0.A8.00.08,在设备A上是用户地址序列为C0A80008。在设备B上是网络地址序列为0800A8C0。
故障转移和恢复测试属于可移植性测试范畴,它可确保软件测试对象能成功完成故障转移,并能从意外数据损失或数据完整性破坏的各种硬件、软件或网络故障中恢复。
- 故障转移测试可确保对于必须持续运行的系统,一旦发生故障,备用系统就将不失时机地“顶替”发生故障的系统,以避免丢失任何数据或事务。
- 恢复测试是一种对抗型测试过程。在这种软件测试中,将把应用程序或系统置于极端(或者是模拟的极端)的条件下,使其产生故障(如设备输入/输出(I/O)故障或无效的数据库指针和关键字)。然后调用恢复进程,并监测和检查应用程序和系统,核实应用程序或系统以及数据已得到正确恢复。
安装、卸载测试也属于移植性测试,安装测试有两个检查点。
(1)确保该软件在正常情况和异常情况的不同条件下(如进行首次安装、升级、完整的或自定义的安装)都能进行安装。异常情况包括磁盘空间不足、缺少目录创建权限等。
(2)核实软件在安装后可立即正常运行。
卸载测试有四个检查点:
(1)卸载是否正常、卸载后的软件是否不能够运行。
(2)核实卸载软件的数据与文件都删除干净。
(3)卸载后的软件重新安装是没有问题的。
(4)卸载后的软件不影响其他软件的工作。
8.可维护性测试
可维护性测试指的是软件产品可被修改的能力,包括纠正、改进或者软件对环境、需求和功能规格说明变化的适应能力。
案例1-15:代码可维护性测试。
某公司生产了ERP产品给A企业,3年后由于公司ERP流程发生变化,需要在原来基础上进行更新,但是由于3年来近一半的开发工程师发生了变动,代码注释又不规范,给新功能开发带来很大困难,这就产生了代码可维护性的问题。为了解决这个问题,软件工程师把代码进行了如下优化,如图1-18所示。
图1-18 代码的可维护性
要做好代码的可维护性,最好是在编码后期做好严格的代码审核(Code Review)工作。
案例1-16:产品的可测试性。
某B/S产品决定采用WebDriver进行测试,由于HTML代码中的元素都没有id、name或者class属性,如:
点击”>
如果采用手工测试,是没有关系的,但是采用自动化测试,就带来很大困难,于是把HTML代码改为:
点击”name=“click”id=”my_click”>
关于WebDriver的介绍参看本书第二篇第11.2节“Selenium和WebDriver工具入门”介绍。
在软件测试工作中除了关注ISO 22500标准外,我们还经常用到以下测试方法。
9.数据和数据库完整性测试
在项目名称中,数据库和数据库进程应该作为一个子系统来进行软件测试。测试这些子系统时,不应将测试对象的用户界面用作数据的接口。对于数据库管理系统(DBMS),需要进行深入研究,以确定可以支持以下测试的工具和技术。数据库测试包括以下几个方面。
l 数据库设计测试。
l SQL代码规范测试:可使用工具为SQL BPA。
l SQL语句效率测试。
l SQL语句兼容性测试:SQL语句标准FIPS 127-2,基于SQL-92标准。
扩展阅读:FIPS标准和SQL-92标准1.FIPS标准 FIPS(Federal Information Processing Standards)即(美国)联邦信息处理标准。它是批准技术与标准国家协会(National Institute of Standards and Technology),为联邦计算机系统制定标准和指南。 2.SQL-92标准SQL-92,是数据库的一个ANSI/ISO标准。 SQL92标准有4个层次 l 入门级 这是大多数开发商符合的级别。这一级只是对前一个标准SQL89稍做修改。所有数据库开发商都不会有更高的级别,实际上,美国国家标准和技术协会NIST(National Institute of Standards and Technology,这是一家专门检验SQL合规性的机构)除了验证入门级外,甚至不做其他的验证。Oracle 7.0于1993年通过了NIST的SQL92入门级合规性验证,那时我也是小组中的一个成员。如果一个数据库符合入门级,它的特性集则是Oracle 7.0的一个功能子集。 l 过渡级 这一级在特性集方面大致介于入门级和中间级之间。 l 中间级 这一级增加了许多特性,包括(以下所列并不完整): Ø 动态SQL Ø 级联DELETE以保证引用完整性 Ø DATE和TIME数据类型[J2]
|
Ø 域 Ø 变长字符串 Ø CASE表达式 Ø 数据类型之间的CAST函数 l 完备级 增加了以下特性(同样,这个列表也不完整): Ø 连接管理 Ø BIT串数据类型 Ø 可延迟的完整性约束 Ø FROM子句中的导出表 Ø CHECK子句中的子查询 Ø 临时表 入门级标准不包括诸如外联结(outer join)和新的内联结(inner join)语法等特性。过渡级则指定了外联结语法和内联结语法。中间级增加了更多的特性,当然,完备级就是SQL-92全部。有关SQL-92的大部分书都没有区别这些级别,这就会带来混淆。这些书只是说明了一个完整实现SQL-92的理论数据库会是什么样子。所以无论你拿起哪一本书,都无法将书中所学直接应用到任何SQL-92数据库上。关键是,SQL-92最多只达到入门级,如果你使用了中间级或更高级里的特性,就存在无法“移植”应用的风险。
|
10.本地化测试
本地化测试是指为各个地方开发产品的软件测试,如英文版、中文版等,包括程序是否能够正常运行,界面是否符合当地习俗,快捷键是否正常起作用等,特别要测试在A语言操作系统环境下运行B语言软件(如在英文版的Windows操作系统下试图运行中文版的程序),运行是否正常。
11.文字测试
文字测试主要测试文字是否拼写正确、是否易懂、不存在二义性、没有语法错误;文字与内容(包括图片、文字)是否有出入等。
12.发布测试
主要在产品发布前对一些附带产品,如说明书、广告稿等进行软件测试。发布测试在验收测试中进行。
说明书测试
说明书测试主要为语言检查、功能检查、图片检查。
- 语言检查:检查说明书语言是否正确,用词是否易于理解。
- 功能检查:功能是否描述完全,或者描述了并没有的功能等。
- 图片检查:检查图片是否正确。
宣传材料测试
主要测试软件产品中附带的宣传材料中的语言、描述功能、图片。
产品说明书的测试
产品说明书是用户(特别是一些新用户)了解产品的一个有力工具。所以,软件测试工程师应该对产品说明书中的每一条功能进行严格核实。除此之外,还应从用户的角度思考,考虑是否将注意事项告诉了用户,产品说明书是否便于阅读,产品说明书的书写逻辑是否合理以及说明书中章节的前后顺序是否需要进行调整。
产品广告
产品广告往往是由市场人员为了推销产品而书写的,对于广告中提及的功能,我们要与市场和销售人员进行及时沟通,弄清楚每条语句是在哪个模块的哪个功能点上实现的,然后在产品上具体操作一下,看是否是那么一回事。广告具有一定的夸大性,这在所难免。但是,对于夸大过份的内容,软件测试工程师有提出修改建议的责任。
顾翔凡言:
在正确的道路上作自己擅于做得事,大方向把握好,不要过于纠结,就可以了。