登陆注册
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.在任何时候,单元测试都是可能的吗?都是需要的吗?

同类推荐
  • EDA技术

    EDA技术

    根据课堂教学和实验操作的要求,以提高实际工程设计能力为目的,深入浅出地对EDA技术相关知识作了系统和完整的介绍,相关知识作了系统和完整的介绍。
  • 数字博物馆研究与实践:2009

    数字博物馆研究与实践:2009

    本书汇集了“2009年北京数字博物馆研讨会”与会代表提交的60余篇论文和演讲报告、应用案例,分为数字博物馆(科技馆)发展研究探讨、数字博物馆(科技馆)多样性发展模式、数字技术在博物馆(科技馆)展陈中的应用、数字博物馆(科技馆)建设实践、数字博物馆(科技馆)实现技术和数字博物馆调研报告等六个部分。本书内容囊括了对数字博物馆(科技馆)建设宏观层面的全局思考以及微观层面的具体实践。在宏观层面,介绍了数字博物馆(科技馆)在国内外的发展现状与趋势,通过剖析典型案例,探讨数字博物馆(科技馆)建设的意义、目标、作用、建设原则、要素、特征及目前建设工作中存在的现实问题与对策。
  • 黑客就在你身边

    黑客就在你身边

    互联网络正在改变着我们的生活,每个人都处在互联网的天罗地网之中。本书以轻松的笔调,向人们介绍了有关“黑客”的知识。当你读完这本书后,你会发觉“黑客”一点都不神秘,他们渴望全社会对他们有一个公正的评价。
  • 体感交互技术

    体感交互技术

    本书提出了体感计算的研究,探讨了基于体验性认知的个性化电子学习方式,并且分析了面向儿童的艺术创造体验,在体感虚拟化身的帮助下,用户可以通过身体运动,促进情感心智的全面发展,
热门推荐
  • 假如你等我

    假如你等我

    人生就是在不停的抓紧,不停的错过。每当想紧紧盯着眼前的一件事物时,就会错过身边的很多风景。而上天总会在你错过之后让你幡然醒悟,原来曾经错过的风景,是那么美好。这个时候总会有一个声音告诉你放下吧,既然错过了那就珍惜眼前吧。有意思的是越是没得到,我们心里就会觉得越珍贵,越难割舍。
  • 天行

    天行

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

    TFBOYS之初心不忘

    这是我第一次写小说,想坚持把它写下去,所以希望大家不要打击我。
  • 失控时代

    失控时代

    碧霄余鹤,有梦来龙。苍风聚海,竖岭皆无。阴谋和野心的血色舞台,钢铁与术法的殊死较量。命运变成破碎的定式,未来是场失控的旅程;欢迎来到《失控时代》若干年前我以笔名渊璃写过一本《斗魔传》,本作是其续集。两部作品世界观设定相同,剧情有一定联系,但并不影响单独阅读。
  • 五岁萝莉少女:死神进行时

    五岁萝莉少女:死神进行时

    千暧一朝穿越竟然变成了五岁萝莉,幸运地契约了三只受伤成为“鱼肉”的上古神兽,逐渐走上了大陆的强者之路,可爱、阴险、冷血、腹黑、娇气、风雅、酷都在她的性格之内。百种性格,千种变化。当她展开双翅就是凌傲天下的凤凰,将一切风华聚集一身。
  • 最休闲的笑话

    最休闲的笑话

    人生不能没有欢笑,笑是人类共同的语言。不论什么肤色,什么民族,什么国家,使用哪一种语言,笑都是表示善意,表示友好,表示合谐的通用表情。
  • 我和三个穿CK的美女

    我和三个穿CK的美女

    珠光宝气的三个美女和孑然一身的我。美女们穿CK的T字裤,¥1199;我也不赖,内裤商标处印有硕大的对号,只是对号的下面写的是Adidas。美女们身处上流社会;我成分稍逊一筹,只能算下流的人。美女们的上流生活中有项重要内容,誉为社交;我有多种下流生活方式,姑且称作猥亵……
  • 异世灵尊

    异世灵尊

    别人穿越到异界,都是修真者至高无上,然后横行无忌,大杀四方。龙晏重生的崑玄大陆,修真者是大陆公敌,人人得而诛之!更奇怪的是,龙晏从高中开始就做一个相同的怪梦。警官大学毕业之后,当警察才三个月,也因为这个怪梦发生意外,然后穿越异界重生。可是,龙晏重生的地点、时间都不对,各方势力正在大漠上争抢藏宝图。他什么都还没搞清楚,就卷入一连串的混战。按常理,人死了之后残魂不灭,才会穿越重生。龙晏的情况极其诡异,他发现地球上的自己并没死,而且还立功受奖,步步高升!一次偶然的机会,龙晏发现了大破灭前的巨大阴谋!
  • 晨曦微晓

    晨曦微晓

    在她生命中出现过的每个人心中,她都如同她的名字“晨曦”一般,穿破黑暗,为他们黑暗孤寂的心带来光明,带来晨曦破晓时的感动与温暖。他们都想要她幸福,想要她的笑容永远绽放。然而,在爱的名义下,他们却带给她一次又一次不堪承受的不幸和伤痛;在被爱的光环中,她对他们的信任换来的却是一个又一个的欺骗和隐瞒。面对这些,她伤心过也失望过,不甘过也绝望过,甚至与死神擦肩而过过,但彷徨过后,她总能像穿破黑暗的晨曦般重新光亮自己,温暖他人,只因她勇于面对,只因她心地善良……
  • 天行

    天行

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