软件测试技术与测试实训教程黎连业王华李龙黎照北京:机械工业出版社2012.05第17讲:软件的其他测试技术•软件的其他测试技术不是一个基本过程测试技术,是一个辅助的测试技术,用于软件测试过程中。本章重点讨论以下内容:★可用性测试;★压力测试;★确认测试;★容错性测试;★易用性测试;★安全性测试;★需求检查测试;★可靠性测试;★Web测试;★接口测试;★安装和反安装测试。在本讲中您能了解如下主要知识点:17.1可用性测试•可用性测试(UsabilityTesting)是指在设计过程中被用来改善易用性的一系列方法。我们为用户提供一系列操作场景和任务让他们去完成,这些场景和任务与您的产品或服务密切相关。通过观察,我们来发现过程中出现了什么问题、用户喜欢或不喜欢哪些功能和操作方式,原因是什么。针对问题所在,我们会提出改进的建议。17.1.1可用性测试的概念•可用性测试的概念主要表现为:1.可用性是产品的一个基本的自然属性,是最终用户使用产品的可用的程度。2.可用性测试是依照可用性标准对GUI的系统评估。3.可用性是在产品和用户的相互作用中体现出来。4.可用性测试是用户在和系统(网站,软件应用程序,移动技术或任何用户操作的设备)5.交互时对用户体验质量的度量。6.可用性的基本评价指标是效率、满意和安全(容错,无错)。17.1.2可用性测试的方法•浙江理工大学心理学研究所葛列众博士教授认为:“我们把可用性测试的方法大致分为主观测试、客观测试两大类。”如表17-1所示。•表17-1可用性测试方法的分类•可用性测试的方法主要表现为:1.对同一测试内容在同时采用多指标的测试;2.对同一测试内容在不同时间采用采用多指标的测试;3.用户测试法(UserTest)就是让用户真正地使用软件系统,由实验人员对实验过程进行观察、记录和测量。这种方法可以准确地反馈用户的使用表现、反映用户的需求,是一种非常有效的方法。用户测试可分为实验室测试和现场测试。实验室测试是在可用性测试实验室里进行的,而现场测试是由可用性测试人员到用户的实际使用现场进行观察和测试。17.1.3可用性测试的目的•可用性测试的目的主要表现为:1.可用性测试的目的是确定用户界面设计在两个层面上的问题;2.概念的层面-和导航,用户定位和UI一致性相关地关键问题;3.详细设计的层面-遵循GUI标准和指南,使用的术语,特定的问题。•这些问题一旦被收集,将按照严重程度给它们划分优先级别。另外,对于每个主要的问题,提议做一个重设计的建议。17.2压力测试•所谓压力测试(stresstesting)是指对系统不断施加压力的测试,是通过确定一个系统的瓶颈或者不能接收的性能点,来获得系统能提供的最大服务级别的测试。•压力测试主要表现为:压力测试的定义、压力测试的目标。17.2.1压力测试的定义、特点和核心原则1.什么是压力测试•压力测试(StressTest)也就是强度测试,压力测试是指模拟巨大的工作负荷来测试应用程序在峰值情况下如何执行操作。在实际的软硬件环境下,压力测试主要是以软件响应速度为测试目标,尤其是针对在较短时间内大量并发用户访问时软件的抗压能力。其目的是找到系统在哪里失效以及如何失效的地方。感兴趣的是这些对系统的处理时间有什么影响?需要的资源是什么?需要的环境是什么?需要做什么样的配套工作?一般状态下包括以下3点:(1)短时间的极端负载测试;(2)在过量用户下的负载测试;(3)连续执行所有能做的操作。2.压力测试的特点•压力测试具有以下特点:(1)压力测试通过增加访问量使应用系统的资源使用保持在一定的水平上,以此检验应用的表现,重点在于有无出错信息产生,系统对应用的响应时间等。(2)通过压力测试使系统的资源使用达到较高的水平。一般情况下,CPU的使用率要达到75%以上、内存使用率要达到70%以上。3.压力测试和负载测试的区别•压力测试是在超常规负荷条件下,长时间连续运行系统,检验应用程序的各种性能表现和反应。•负载测试是指测试应用程序在常规负荷下,确认响应时间和其它的性能和表现。4.压力测试的核心原则压力测试的核心原则是:•重复:最明显且最容易理解的压力原则就是测试的重复。•并发:并发是同时执行多个操作的行为。•大数据量:给每个操作增加超常规的负载量。•随机。17.2.2压力测试的目标•压力测试的目标主要是通过极限测试方法,发现系统在极限或恶劣环境中自我保护能力。主要验证系统的可靠性。在具体操作上表现为:1.检查最终用户的响应时间。根据系统设计说明书确定的功能和性能要求完成一个业务流程应所需的时间;2.检查可靠性。检查系统功能和性能有没有错误?在大数据量状态下系统运行是否会发生故障?3.检查硬件或软件的可靠性;4.检查硬件配置是否合理;5.检验系统容量。在没有显著的性能下降情况下,系统能处理的最大负荷。17.3确认测试确认测试(ValidationTest)的目的是向用户表明系统能够像预定要求那样工作。17.3.1确认测试的定义•确认测试又称有效性测试。确认测试是在模拟的环境下,运用黑盒测试的方法,验证被测软件是否满足需求说明书,功能说明书,性能说明书列出的需求。确认软件的功能和性能及其他特性是否与用户的要求一致。17.3.2确认测试的内容•确认测试内容主要包括功能和性能两部分。(1)功能测试•功能测试考察软件对功能需求完成的情况,应该设计测试用例使需求规定的每一个软件功能得到执行和确认。★按照系统给出的功能列表,逐一设计测试案例;★对于需要资料合法性和资料边界值检查的功能,增加相应的测试案例;★运行测试案例;★检查测试结果是否符合业务逻辑;★评审功能测试结果。(2)性能测试•性能测试是检验软件是否达到需求规格说明中规定的各类性能指标,并满足一些与性能相关的约束和限制条件。★测试软件在获得定量结果时程序计算的精确性;★测试在有速度要求时完成功能的时间;★测试软件完成功能时所处理的数据量;★测试软件各部分工作的协调性,如高速操作、低速操作的协调性;★测试软件/硬件中因素是否限制了产品的性能;★测试产品的负载潜力及程序运行时占用的空间。17.4容错性测试•容错测试(Tolerancetest)是一种对抗性的测试过程。当软件运行出现故障时,如何进行故障的转移与恢复当前系统产生的实时数据。又如何去转移有用的数据(文件),应用系统出现故障时能否成功地将运行的系统或系统某一关键部分转移到其他设备上继续运行,使备用系统不失时机地“顶替”已发生故障的系统,避免丢失数据(文件),不影响用户的使用。17.4.1容错性测试的概念•容错性测试是检查软件在异常条件下自身是否具有防护性的措施或某种灾难性恢复的手段。当系统出大错时,能否在指定时间间隔内修正错误并重新启动系统。当系统出现非关性错误时能否保证系统继续运行。17.4.2容错性测试的内容•容错性测试包括两个方面:★输入异常数据或进行异常操作,以检验系统的保护性。如果系统的容错性好,系统只给出提示或内部消化掉,而不会导致系统出错甚至崩溃。★灾难恢复性测试。通过各种手段,让软件强制性地发生故障,然后验证系统已保存的用户数据是否丢失,系统和数据是否能尽快恢复。17.4.3需考虑的特殊事项•从容错性测试的概念和内容可以看出,当软件出现故障时如何进行故障的转移与恢复有用的数据是十分重要的。对于如何进行容错性测试,这是我们关心的事情,所进行容错性测试需要考虑以下的特殊事项。•故障发生时数据的转移与数据的恢复故障发生时数据的转移是为了确保在出现故障时能成功的转移有效的数据,防止因故障的发生导致意外的破坏各种硬件、软件和网络设备。数据的恢复是为了能够继续运行系统,同时,一旦系统发生故障,备用系统将不失时机地“顶替”已发生故障的系统。•容错性测试目前主要做的事情容错性测试目前主要做的事情表现为:★服务器断电;★网络设备断电;★数据库系统发生故障;★应用系统文件发生故障;★系统软件发生故障。17.5易用性测试•易用性(Useability)是交互的适应性、功能性和有效性的集中体现。人体工程学(ergonomics)是一门将日常使用的东西设计为易于使用和实用性强的学科。在2003年颁布的GB/T16260-2003(ISO9126-2001)《产品质量》质量模型中,提出易用性包含易理解性、易学习性和易操作性;即易用性是指在指定条件下使用时,软件产品被理解、学习、使用和吸引用户的能力。17.5.1易用性测试的定义•易用性(Useability)是交互的适应性、功能性和有效性的集中体现。•易用性一般分为两个层次,即用户界面的易用性和操作系统的易用性。•易用性测试包括针对应用程序的测试,同时还包括对用户手册系统文档的测试。通常采用质量外部模型来评价易用性。17.5.2易用性测试的内容•易用性测试的内容包括:1.用户界面测试•用于与软件交互的方式称为用户界面或UI,易用性包括如下方面的测试:(1)符合标准和规范•用户界面要素要符合软件现行的标准和规范。(2)直观•用户界面是否洁净、不拥挤;•布局是否合理;•是否有多余功能。(3)一致•如果软件或者平台有一个标准,就要遵守它。如果没有,就要注意软件的特性,确保相似的操作以相似的方式进行。(4)灵活•多种视图的选择;•状态跳转;•状态终止和跳过;•数据输入和输出。(5)舒适•软件使用起来应该舒适,不能给用户工作制造障碍和困难。(6)实用•是否实用事优秀用户界面的最后一个要素。•操作系统的易用性2.操作系统有内置的支持。如windows系统提供了:粘滞键,筛选键,切换键,声音卫士,声音显示,高对比度,鼠标键,串行键。17.6安全性测试•安全性测试是软件生命周期中一个重要的环节,安全性测试在单元测试、集成测试、系统测试里一起做,以便在破坏之前预防并识别软件的安全问题。17.6.1什么是软件安全•软件安全问题是一个非常重要的问题。在20世纪80年代计算机处于单机运行状态,安全显得不是十分重要,互联网出现以后,软件应用系统基本上都是在局域网络环境下运行的,局域网络容易遭受黑客、病毒的威胁,软件安全就显得非常重要。•对于软件安全一般分为以下两个方面:(1)应用程序的安全性•应用程序的安全性,包括程序、数据的安全,应用程序一般指应用系统,访问者必须要有访问的权限和级别才能够进入应用系统,数据一般指数据库,同样访问者必须有访问的权限和级别,才能够访问数据当中的内容。(2)操作系统的安全性•操作系统是计算机系统核心,它肩负着整个系统运行、调度、指挥、控制,它的安全性是非常重要的,要求访问者要有足够的权限和级别才能登陆或远程访问。17.6.2安全性测试•安全性测试(SecurityTesting)是指验证应用程序的安全级别和识别潜在安全性缺陷的过程。应用程序(应用系统)的安全性测试主要是查找软件(系统)自身设计中存在的安全隐患,并检查应用程序(应用系统)对非法侵入的防范能力,根据国家信心安全的有关规范和标准,对不同级别的应用程序(应用系统)有着不同的要求。1.安全性测试安全性测试包括:★防止外界人员想方设法截取或破译口令;★专门开发软件来破坏系统的保护机制;★故意导致系统失败;★试图通过浏览保密数据获得所需信息等。2.安全性测试方法(1)应用程序(应用系统)级别的安全性测试方法★对数据或业务功能的访问,在预期的安全性情况下,操作者只能访问应用程序的特定功能、有限的数据;★操作者只能访问其所属用户类型已被授权访问的那些功能或数据;★不同权限的用户类型,创建各用户类型并用各用户类型所特有的事务来核实其权限,最后修改用户类型并为相同的用户重新运行测试。★测试结果的安全性分析●分析所有测试用例,测试是否通过。●测试代码是否按照要求分析,并达到相应的测试覆盖率。●对测试结果进行分析,以验证所有的安全性需求是否得到了满足。(2)系统级别的安全性测试策略和方法★只有具备系统访问权限的用户才能访问应用程序,而且只能通过相应的网关来访问,包括对系统的登录或远程访问;★只有具备系统和应用程序访问权限的操作者才能访问系统和应用程序。17.7需求分析的测试17.7.1需求