登陆注册
8724600000036

第36章 软件测试的理论及实践(2)

②程序环境复杂性:从程序的环路复杂性可导出程序基本路径集合中的独立路径条数,这是确定程序中每个可执行语句至少执行一次所必需的测试用例数目的上界。

③导出测试用例。

④准备测试用例,确保基本路径集中的每一条路径的执行。

⑤图形矩阵:是在基本路径测试中起辅助作用的软件工具,利用它可以实现自动确定一个基本路径集的功能。

3.正确性测试

正确性测试又称功能测试,它检查软件的功能是否符合规格说明。由于正确性是软件最重要的质量因素,所以其测试也最重要。基本的方法是构造一些合理输入,检查是否得到期望的输出,这是一种枚举方法。测试人员一定要设法减少枚举的次数。成功的关键在于寻找等价区间,因为在等价区间中,只需用任意值测试一次即可。等价区间的概念可表述如下:

记(A,B)是命题f(x)的一个等价区间,在(A,B)中任意取x1进行测试。

如果f(x1)错误,那么f(x)在整个(A,B)区间都将出错。

如果f(x1)正确,那么f(x)在整个(A,B)区间都将正确。

上述测试方法称为等价测试,来源于人们的直觉与经验,可令测试事半功倍。

还有一种有效的测试方法是边界值测试。即采用定义域或者等价区间的边界值进行测试。因为程序员容易疏忽边界情况,程序也“喜欢”在边界值处出错。

例如,测试某一段程序,凭直觉等价区间应是(0,1)和(1,+∞)。可取x=0.5及x=2.0进行等价测试,再取x=0及x=1进行边界值测试。

有一些复杂的程序,难以凭直觉与经验找到等价区间和边界值,这时枚举测试就相当有难度。

在用“白盒测试”方式进行正确性测试时,有个额外的好处:如果测试发现了错误,测试者(开发人员)马上就能修改错误。越早改正错误,付出的代价就越低。所以大多数软件公司要求程序员在写完程序时,马上执行基于单步跟踪的“白盒测试”。

4.容错性测试

容错性测试是检查软件在异常条件下的行为。容错性好的软件能确保系统不发生无法意料的事故。比较温柔的容错性测试通常构造一些不合理的输入来引诱软件出错,例如:

①输入错误的数据类型,如“猴”年“马”月。

②输入定义域之外的数值。

粗暴一些的容错性测试俗称“大猩猩”测试,除了不能“拳打脚踢嘴咬”,什么招术都可以使出来。

5.性能与效率测试

性能与效率测试主要是测试软件的运行速度和对资源的利用率。有时人们关心测试的“绝对值”,如数据送输速率是每秒多少比特,有时人们则关心测试的“相对值”,如某个软件比另一个软件快多少倍。

在获取测试的“绝对值”时,要充分考虑并记录运行环境对测试的影响。例如计算机主频、总线结构和外部设备都可能影响软件的运行速度。

在获取测试的“相对值”时,要确保被测试的几个软件运行于完全一致的环境中。硬件环境的一致性比较容易做到(用同一台计算机即可),但软件环境的因素较多,除了操作系统外,程序设计语言和编译系统对软件的性能也会产生较大的影响。性能与效率测试中很重要的一项是极限测试,因为很多软件系统会在极限测试中崩溃。例如,连续不停地向服务器发请求,测试服务器是否会陷入死锁状态不能自拔;给程序输入特别大的数据,看看它是否吃得消。

6.易用性测试

易用性测试没有一个量化的指标,主观性较强。调查表明,当用户不理解软件中的某个特性时,首先会向同事、朋友请教。要是再不起作用,就向产品支持部门打电话。只有30%的用户会查阅用户手册。一般认为,如果用户不翻阅手册就能使用软件,那么表明这个软件具有较好的易用性。

7.文档测试

文档测试主要检查文档的正确性、完备性和可理解性。好多人甚至不知道文档是软件的一个组成部分。正确性是指不要把软件的功能和操作写错,也不允许文档内容前后矛盾。

7.5.3在测试过程中应该注意的几点问题

①明确测试的目的。

测试的目的是为了发现尽可能多的缺陷。这里缺陷是一种泛称,它可以指功能的错误,也可以指性能低下、易用性差等。测试总是先假设程序中存在缺陷,再通过执行程序来发现并最终改正缺陷。理解测试的目的是个很重要的意识问题。如果说测试的目的是为了说明程序中没有缺陷,那么测试人员就会向这个目标靠拢,因而下意识地选用一些不易暴露错误的测试示例,这样的测试是虚假的。

一个成功的测试示例在于发现了至今尚未发现的缺陷。

②测试的心理要求。

测试主要是由人而不是由机器执行,这就不免与心理因素相关。为了测试的真实性,对测试的心理要求是“无情”的,这似乎太残酷了。开发人员不能很好地测试自己的程序有时候是因为做不到“无情”。而测试人员如果做到了“无情”却会引起开发人员的愤怒,影响开发团队的团结。尽管已经明白了测试的目的是为了发现尽可能多的缺陷,但当测试人员真的发现了一堆缺陷时,却不可恭喜那个倒霉的开发者,否则会引起不必要的麻烦。

③测试的真理。

测试只能证明缺陷存在,而不能证明缺陷不存在。这个真理告诉我们,对于一个复杂的系统而言,无论采取什么样的测试手段都不能证明缺陷已经不复存在。“彻底地测试”只是一种理想。在实践中,测试要考虑时间、费用等限制,不允许无休止地测试。

④测试最重要的一件事就是考虑所有的出错可能性。同时还要做一些不是按常规做的、非常奇怪的事。

测试的过程就像黑客的攻击过程那样。可以这么说,像黑客是最好的软件安全测试员,他们专门找软件的漏洞,从而破坏这个软件,但这样也可以促使修复这些漏洞,保证软件的性能。如果找不到这种漏洞,说明软件的质量已经很好了。

⑤测试还要考虑性能问题,也就是要保证软件运行得很好,非常快,没有内存泄漏,不会出现那种越来越慢的情况。

⑥其他技巧和经验。

在制订测试计划的时候,就要考虑到测试的风险,并选择要执行哪些测试,放弃哪些测试;测试计划的评审应该让开发人员参与。

测试模型的制作应该尽可能贴近用户,或者站在用户的使用立场上来评测软件,此时应该能发现更多的问题。

由于在解决问题后还要重新测试,因此测试的时间可能会比实际更长一些。

识别和注意少数重要的方面,而忽略多数次要的方面。有时候少数的问题足以致命,这些问题将是软件测试结果中很严重的错误。

定位错误有时是很难的,要找出必然发生的前因后果,而不至于因为描述错误而误导开发人员。有时候确实存在错误不能重建的问题,解决办法之一就是在错误报告中给予说明。

对错误的描述,应该是准确、完整而简练。因为不准确的描述或者不完整的描述会引起开发人员的误解,其后果是可以想见的。

有时有经验的测试人员凭借直觉就可以发现一些问题,这可称为“错误猜测”。

测试人员容易犯两种错误:一是测试人员发生判断错误,将本没有错误的系统行为报告为错误,或者将错误指定了过高的严重级别,或者过高估计了问题的严重性,这样会引起对开发人员的不信任;二是测试人员将错误的严重性或优先级定得过低,从而产生“测试逃逸”,这样会造成产品质量的风险。

7.6测试自动化工具

测试自动化工具越来越多地出现在市场上,这些工具可以自动执行测试活动。迄今为止,现有工具中还没有哪一种工具能够自动执行所有测试活动。事实上,多数工具是一个或几个活动专用的,有些工具的功能针对性很强,只能处理一个活动的某一部分。评估不同的测试自动化工具时,有必要了解工具类型、工具限制及工具能够处理和自动执行的活动情况。

功能测试工具可以按其执行的功能分类。典型的测试工具有以下几种分类。

①数据获取工具,用于获取要在测试活动中使用的数据。数据可以通过转化、析取、变换或捕捉现有数据来获取,也可通过从用例或补充规约生成获取。

②静态评测工具,用于分析设计模型、源代码或其他固定源中包含的信息。该分析将生成有关逻辑流、数据流或质量指标的信息,如复杂性、可维护性或代码行。

③动态评测工具,用于在代码的执行过程中进行分析。这些评测包括代码运行时的操作,如内存性能和错误检测。

④模拟器或驱动程序,它们执行由于时间、费用或安全原因而无法用于测试的活动。

⑤测试管理工具,用于辅助测试活动或工件的计划、设计、实施、执行、评估和管理。

7.7测试案例

7.7.1单元测试的实例

本实例采用nunit对VB.NET类中的方法进行测试。在极限编程的思想中体现了测试先行的思想。这里我们将采用这一思想,首先构建我们的测试类。我们还要导入NUnit.Framework这个名称空间,这是nunit工具自身所带的。

Imports System

Imports NUnit.Framework

Namespace NUnit.Samples

Public Class SimpleVBTest

Public Sub Add()

dim Test as new TestClass()

Assert.AreEqual(6,Test.add(3+3))

Assert.AreEqual(6,Test.add(2+4))

End Sub

End Class

End Namespace

通过nunit运行上面的代码会报错。因为我们还没有实现类和它里面的方法Add(),下面我们添加类和它的实现方法。

Imports System

Public class TestClass

Public function add(byval a as integer,byval b as integer)as integer

Return(a+b)

End function

End class

再运行测试类,nunit可以成功地通过测试。以后我们对实现类的方法进行改动或者添加其他的方法,只需要在测试类中添加相应的测试类就可以了。这样,如果代码进行改动,我们只需要通过运行测试类就可以看到代码改动对程序的影响。当然设计一个好的测试类是非常必要的,因为要考虑很多的情况,尽可能地进行覆盖测试。

7.7.2压力测试的实例

在Web工程进行集成测试或系统测试中,我们通常要进行许多方面的测试,如压力测试、容量测试、链接测试等。我们以其中的压力测试为例来简单介绍工具为Microsoft的Web Application Stress Tool(WAS,Web应用负载测试工具)在Web服务器性能测试中的应用。

要对网站进行负载测试,首先必须创建WAS脚本模拟用户活动。我们可以用下面四种方法之一创建脚本:通过记录浏览器的活动、通过导入iis日志、通过把WAS指向Web网站的内容或者手工制作。

页面摘要部分提供了页面的名字,接收到第一个字节的平均时间(TTFB),接收到最后一个字节的平均时间(TTLB),以及测试脚本中各个页面的命中次数。TTFB和TTLB这两个值对于计算客户端所看到的服务器性能具有重要意义。TTFB反映了从发出页面请求到接收到应答数据第一个字节的时间总和(以毫秒计),TTLB包含了TTFB,它是客户机接收到页面最后一个字节所需要的累计时间。报表中还包含了所有性能计数器的信息。这些数据显示了运行时各个项目的测量值,同时还提供了最大值、最小值、平均值等。报表实际提供的信息远远超过了我们这里能够介绍的内容。

7.8主流自动化测试工具

思考题

1.软件测试的目的是什么?

2.软件测试过程主要涉及哪些文档资料?

3.简述软件测试的分类。

4.在任何时候,单元测试都是可能的吗?都是需要的吗?

同类推荐
  • 条形码技术与应用

    条形码技术与应用

    条形码是一种可供电子仪器自动识别的标准符号,是由一组黑白相间、粗细不同的条、空符号按一定编码规则排列组成的标记,用以表示一定的信息,确认某个物体或规定它的移动,能正确快速地为产、供、销各环节在采集、处理和交换信息时提供标识。
  • 计算机网络技术与应用

    计算机网络技术与应用

    本书共8章,系统地介绍了计算机网络的发展和基本原理体系结构、局域网、广域网、网络服务、网络安全、典型网络的结构特点等内容。除第8章外,其他各章都附有练习题。为了加强学习效果,本书围绕知识点的典型性,精选了6个实验。此外,在本书的第8章,我们综合各章知识设计了“办公局域网组建设计”和“中小型企业局域网组建设计”这两个常用的计算机网络技术应用实例,供学生学习和参考。本教材适合作为本科非计算机专业学生的计算机网络教材。
  • Delphi程序设计教程

    Delphi程序设计教程

    本书为适应不同层次读者的需要,从Delphi的基本知识讲起,由浅入深,全面讲述了Delphi的集成开发环境、Delphi的编程语言——ObjectPascal、常用组件的使用、窗体的设计、菜单的设计、对话框的设计、多文档界面程序的设计、多媒体编程和数据库应用程序设计等内容。
  • 如何建设网站

    如何建设网站

    本书以问答的方式介绍了建设网站的基本知识,内容包括:网站设计的八个步骤、建设网站需要掌握的工具软件、网页中插入图像、在网页中隐藏内容等。
  • 组建家庭局域网与无线网

    组建家庭局域网与无线网

    该书是“快乐驿站”丛书之一,是一本精心为初级家庭电脑用户打造的局域网与无线网组建入门与提高的图书,同时还涉及一些办公网络的组建内容。《组建家庭局域网与无线网》以局域网和无线网的功能、设置以及实际应用为导向,用生动的实例、形象的图解和幽默的语言循序渐进地介绍了局域网和无线网的概念、产品、设计、组建、调试与维护的相关内容。
热门推荐
  • 冰山校草之爱上拽丫头

    冰山校草之爱上拽丫头

    当冰山王子白玉玺爱上拽丫头林诗雨时他们最后会有什么样的结果呢?
  • 昔日青青今不再

    昔日青青今不再

    王小青是一个不折不扣的死宅糙妹子。虽然是个品学兼优的学霸,却沉迷动漫和游戏,不爱社交,所拥有的好友也只有社团活动认识的寥寥数人。有一天,她大学最好的朋友失恋了……
  • 金银双珏

    金银双珏

    德仁皇后仓惶西逃途中,来不及卷走皇室里的许多价值连城的财宝,为了不让财宝不落入贼寇手中,命人把财宝藏在一个地形隐秘的地方,并且精心绘制了一副藏宝路线图,为了防止藏宝路线图轻易落入他人之手,又命人找了技艺高超的玉匠,把路线图隐于金银玉珏中。但是,这块藏有巨额财富的玉珏——金银玉珏被德仁皇后不慎遗落,消息一出,江湖有实力的帮派开始了残酷的争夺。齐润峙、秦苕昉、迟娜菱,以及后来的秦鸯虹,无意卷入此次争夺之战,而因此演出了一场爱恨情仇的故事.
  • 天行

    天行

    号称“北辰骑神”的天才玩家以自创的“牧马冲锋流”战术击败了国服第一弓手北冥雪,被誉为天纵战榜第一骑士的他,却受到小人排挤,最终离开了效力已久的银狐俱乐部。是沉沦,还是再次崛起?恰逢其时,月恒集团第四款游戏“天行”正式上线,虚拟世界再起风云!
  • 掠爱撩情之前妻别玩火

    掠爱撩情之前妻别玩火

    传闻,他金屋藏娇,隐婚三年不曾让老婆跨门半步,绝对是对老婆宠爱有佳的深情好男人。扔下报纸,他鹰眸轻挑薄唇上扬:“呵呵呵……”传闻,她温惋贤淑,结婚三年不曾与他吵过半句嘴,绝对是对老公死心塌地的温柔好女人。抿一口茶,她柳眉微拧红唇勾起:“呵呵呵……”事实上他选中她无非就是看中她三大优点:第一胸大,第二脑残,第三败金。事实上她找上他无非也是看中他三大优点:第一有钱,第二有钱,第三有钱。“说个数!”三个字如同他本人一般沉稳内敛,随着扔到她眼前的一纸离婚协议书,他的身体肆意的靠在真皮坐椅里,静等她狮子大开口。“俗话说一日夫妻百日恩,怎么说也合作了三年之久,钱嘛?你看着给。跟你合作,鄙人一直就觉着十分愉快!”她红唇染笑大笔一挥签上了柳璃二字。“找好下家了?”某男剑眉轻拧,眸里闪过一丝阴霾。“嗯,算是吧!有机会再合作哦。”话落,她踩着七公分的高跟鞋爽快利索的走出他能冻死人的视线。后来,他形容她说:“这女人不但胸大脑残败金,还没心没肺。”后来,她形容他说:“这男人除了钱多钱多钱多,还厚颜无耻。”新剧抢先看:剧场一:她酒气冲天,迷离醉眼之中满是氤氲。凑到仿佛至身事外的他耳畔,勾起红唇冷嘲热讽:“想不到堂堂墨腾私底下也会干这种下三滥的勾当。”他温雅一笑,迷惑众生:“哪里哪里,不过是为柳小姐铺筑一条康庄大道罢了,柳小姐应该感激我。”他笑的魅惑,气定神闲;她手握酒瓶,血压飙升。“康庄大道……我去泥玛的康庄大道。”随着问候他的话落,同时落在他头上的除了那瓶八万块钱的拉菲,还有从她嘴里突然喷出来的秽物……这女人不但打了他,竟然还吐了他满身?柳璃定论:对付渣男,能动手时尽量少动口。剧场二:再次面对狗仔队的强压式采访,她依旧惶恐无助,他突然出现在她身边:“她不需要做出任何解释,因为她是我墨承皓的女人。”某女蹙眉,低声怒问:“你到底是来雪中送炭的还是来落井下石的?”某男苦笑:“我是认真的。”某女攥拳:“今年奥斯卡金奖非你莫属,能把戏演的这么逼真,你怎么不去当演员?”某男无耐:“麻烦请你认真点。”话落,当着闪个不停的媒体,他突然俯首吻上了那抹喋喋不休的红唇。某女抓狂:“你个衣冠禽兽……”某男偷笑:“严肃一点,这是剧情需要……”柳璃定论:人生三大防,防偷防抢防色狼(墨承皓)。大嘻定论:(错字连篇惹人厌,剧情狗血招人烦,作者大嘻最欠扁,嘻笑怒骂还请看。)
  • 顾少爷很酷

    顾少爷很酷

    他是顾家的第三辈的二少爷,特别神秘。从小一起长大的青梅竹马,冷酷的杀手,花痴的小学妹……
  • 天行

    天行

    号称“北辰骑神”的天才玩家以自创的“牧马冲锋流”战术击败了国服第一弓手北冥雪,被誉为天纵战榜第一骑士的他,却受到小人排挤,最终离开了效力已久的银狐俱乐部。是沉沦,还是再次崛起?恰逢其时,月恒集团第四款游戏“天行”正式上线,虚拟世界再起风云!
  • 金有陀罗尼经

    金有陀罗尼经

    本书为公版书,为不受著作权法限制的作家、艺术家及其它人士发布的作品,供广大读者阅读交流。
  • 两狱

    两狱

    这两狱,即是两域,又是两狱。轩辕大陆,一个以斗士为荣的世界,一个兴兴向荣的大陆,却变得不得安宁………
  • 魔鬼代名词:特种兵Ⅰ

    魔鬼代名词:特种兵Ⅰ

    看着车窗外花花绿绿的世界,孟军的思绪回到了十年前。那是过完七岁生日的第二天早晨6点,爸爸把他从热乎乎的被窝里叫起来:“军军,你已经七岁了,以后和解放军叔叔一起训练好吗?”虽然不懂老爸的意思,但幼小的他那时对老爸是言听计从,就这么傻乎乎地跟了出去。也就是那天起,他美好的童年生活就已经逝去,取而代之的是无穷无尽的训练。每天早晨6点,他都要和一群士兵没完没了地跑,跑不动就爬,那段时间爸爸在他心里简直就是“魔鬼”的代名词,甚至比“魔鬼”还恐怖。