测试用例-软件测试技术实战(3)

发表于:2017-7-11 11:47

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:顾翔    来源:51Testing软件测试网原创

分享:
  1.1.9  软件测试类型
  关于软件测试类型,可以参照ISO 225000(替代ISO 9126)软件质量模型,如图1-13所示。
  
图1-13  ISO225000(替代ISO 9126)软件质量模型
  1.功能测试
  功能测试对测试对象侧重于所有可直接追踪到用例或业务功能和业务规则的软件测试需求。这种软件测试的目标是核实数据的接收、处理和检索是否正确,以及业务规则的实施是否恰当。此类软件测试可以通过黑盒测试技术或白盒测试技术来实现,该技术通过图形用户界面(GUI)或其他方式与应用程序进行交互,并对交互的输出或结果进行分析,以此核实应用程序及其内部功能。
  案例1-5:功能测试。
  图1-14所示是电子商务计价系统界面。随着电子商务网站越来越多,某些商品在节假日可以打折,会员可以享受会员价,购买物品达到一定数量或金额后,也可以打折或者免运费。这些条件给计价系统的准确性带来很复杂的功能,软件测试工程师应该设计好各种测试用例,来检测系统的功能。
图1-14  电子商务计价系统界面
  2.易用性测试(用户体验性测试)
  易用性测试指的是在指定条件下使用时,软件产品被理解、学习、使用和吸引用户的能力。
  这里的用户包括。
  (1)操作人员。
  (2)最终用户。
  (3)受该软件的使用影响或者依赖于该软件的间接用户。
  易用性质量特性。
  · 易理解性。
  · 易学性。
  · 易操作性。
  · 吸引性。
  易用性测试采取技术。
  · 人工检查  审查或者评审。
  · 问卷调查  通过问卷调查方式得到用户使用软件的反馈。
  · 验证和确认  针对软件产品的实现,进行验证和确认。
  · 软件测试法。
  案例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注入。
  如果没有对HTML特殊字符进行处理(HTML特殊字符见附录A),在浏览页面时会运行JavaScript代码,如果输入的JavaScript代码具有恶意获得用户信息的功能,就会产生安全问题,如输入:" <script type="text/javascript">var sys = getBrowserInfo();document.write (sys.browser + "的版本是:" + sys.ver);</script>",页面在显示时就会把用户当前的浏览器版本和型号都显示出来。这样,黑客就可以根据获取的信息采取进一步攻击。
  案例1-11:SQL注入。
  SQL注入比XSS注入更加危险。下面的例子可以造成用户不注册就能登录系统:下面是登录系统的SQL语句:select count(*) from user where name='$name' and password='$password'。上面是用户登录的SQL语句,如果count(*)不为零,用户即可进入系统。$name,$password为用户在界面中输入的值,这里作为一个变量存储。$name可以任意输入,如输入"Jerry",$password输入类似于"2222' or 1=1;-- '",由于这样SQL语句变为select count(*) 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)核实软件在安装后可立即正常运行。
  卸载测试有4个检查点:
  (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属性,如:
  <input type="button" value="点击">
  如果采用手工测试,是没有关系的,但是采用自动化测试,就带来很大困难,于是把HTML代码改为:
  <input type="button" value="点击" name="click" id="my_click">
  关于WebDriver的介绍参看本书第二篇第11.2节"Selenium和WebDriver工具入门"介绍。
  在软件测试工作中除了关注ISO 22500标准外,我们还经常用到以下测试方法。
  9.数据和数据库完整性测试
  在项目名称中,数据库和数据库进程应该作为一个子系统来进行软件测试。测试这些子系统时,不应将测试对象的用户界面用作数据的接口。对于数据库管理系统(DBMS),需要进行深入研究,以确定可以支持以下测试的工具和技术。数据库测试包括以下几个方面。
  数据库设计测试。
  SQL代码规范测试:可使用工具为SQL BPA。
  SQL语句效率测试。
  SQL语句兼容性测试:SQL语句标准FIPS 127-2,基于SQL-92标准。
本文选自《软件测试技术实战-设计、工具及管理》第一章,本站经人民邮电出版社和作者的授权。
版权声明:51Testing软件测试网获人民邮电出版社和作者授权连载本书部分章节。任何个人或单位未获得明确的书面许可,不得对本文内容复制、转载或进行镜像,否则将追究法律责任。
32/3<123>
精选软件测试好文,快来阅读吧~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号