测试人家

天行健,君子以自强不息
读书笔记-软件测试-4-7章

读书时间:2011-7-9  周六 3小时

阅读书名:《软件测试》第二版  Ron Patton 张小松等译

阅读章节第二部分 测试基础(第4-7章)

凡是原书内容,均以引号标注,其余均为本人个人观点。

通读第二部分,总体的感觉就是:软件测试方法是一门需要系统学习和掌握的技术;本部分的内容从方法论的角度,整体包含了软件测试的基础:

静态黑盒测试:检查产品说明书(MRD文档),并在软件编写之前找出问题。

u  动态黑盒测试:在不了解软件如何工作的前提下进行测试;是软件测试最常见的方式。

u  静态白盒测试:通过正式审查和检验检查代码的细节;传说中CodeReview。

u  动态白盒测试:在看到软件(代码)的工作方式时,根据获得的信息对软件进行测试。

“从某种意义上说,这就是软件测试的全部内容”。当然,这是从方法论的角度来看,在实际的测试过程中,光有方法,和实际运用是两码事。“成为一个优秀的软件测试员需要有大量精力的投入和艰苦的努力。”“经过不断实践和经验的积累才能掌握如何合理地运用这些基本技术”

非常推荐认真精读两遍这部分内容,不仅能获取方法论理解的提升,而且很多的实例有很高的参考价值。

第四章 检查产品说明书

“编写软件之前找出缺陷”,测试人员往往忽略产品说明书(类似MRD文档)的重要性,觉得那只是作为测试用例设计(系统级用例,黑盒测试用例)的依据,从未对其内容的合理性作出过质疑。本章的后面会介绍一些检查产品说明书的技术手段。

描述软件测试的分类方式有两个不同维度,分别为(黑盒测试+白盒测试)(静态测试+动态测试),测试产品说明书属于静态黑盒测试(这一点常被忽略)。

“对产品说明书进行高级审查”,这种审查不是马上钻进去找缺陷,而是站在一个高度上进行审查(从用户、经理、产品的角度)。审查的目的是为了找到根本性的问题、疏忽或遗漏之处。这听起来更像是研究,的确如此,这给了我一些思路上的提醒,也就是作者给出的三个很好的做法:

1)“假设自己是客户”,用户的角度;这是个意识问题;

2)“研究现有的标准和规范”,软件、WEB服务都会有一个标准问题,如GUI的外观、安全标准等;作为一名测试员,要做到观察、检查采用的标准是否正确、有无遗漏;在我看来,是说要有行业背景知识,这是个专业知识问题;

3)“审查和测试类似软件”,“了解软件最终结果的最佳方法是研究类似软件,例如竞争对手开发的产品或者小组开发的类似产品;这是个方法问题;

“产品说明书的低层次测试技术”,这是本章的第二大内容;在高级审查之后,就可以开始很好地了解产品以及影响其设计的外部因素。作者提供了两份非常有价值的清单:

1)  产品说明书属性检查清单:8大重要属性,完整、准确、精确、一致、贴切、合理、代码无关、可测试性。

2)  产品说明书术语检查清单:检查文档用语,这是对第一个清单的完美补充。

补充材料:Fagan的软件检查网站:www.mfagan.com

总结一下,高级审查技术可以查出遗漏和丢失之处,低层次测试技术可以确保所有的细节都被定义。

第五章 带上眼罩测试软件

本章介绍的是我最熟悉的“动态黑盒测试”(功能测试)方法。“要成为一个成功的软件测试员,需要采用更结构化的、目标明确的方法进行测试”。

“选择测试用例是软件测试员最重要的一项任务”,的确,测试用例的选择几乎是整个软件过程的全部,不正确的用例选择会导致测试量过大或者过小、测试目标错误等,从而引发各种严重的后果(漏测、线上问题等)。

软件测试两种基本方法:通过性测试(test-to-pass)和失效性测试(test-to-fail),顾名思义,很好理解。“纯粹为了破坏软件而设计和执行的用例称为失效型测试”。

接下来,介绍了等价类划分,这是整个软件测试方法的“基石”,是解决软件测试无法穷尽的理论基础;书中强调了两点:

1)  避免过度划分等价类,这会增加风险,对于初学者而言,可请经验丰富的测试员审查划分好的等价类别;

2)  等价类划分也可能是主观的;衡量标准就是用例是否足以覆盖测试对象;

“对软件的最简单的认识就是将其分为两部分:数据和程序。”相应地,测试也可以划分为数据测试和(程序)状态测试两大部分。这两部分都有详细的介绍。

数据测试,以数据为中心来开展测试工作,用到的核心就是等价类划分,而进行等价类划分有以下关键的原则:

1)  边界条件,这个很好理解,也就是边界值分析;

2)  次边界条件(内部边界条件),这个其实已经设计到产品的实现方式问题,需要测试员进行白盒测试,当然,这里可以通过和开发者交流获得信息;

3)  考虑空值、默认、空白和无

4)  考虑非法、错误、不正确和垃圾数据

状态测试,验证程序的逻辑流程,“测试员必须测试程序的状态及其转换”。这里通过性测试包括建立状态转换图、如何减少要测试的状态及转换的数量、执行等。失败状态测试往往是测试时容易发现问题的方法,进行失效性测试需要考虑:

1)  竞争条件和时序错乱;

2)  重复、压迫和重负;

除了数据测试、状态测试外,黑盒测试技术还包括:

1)  像笨拙的用户一样操作

2)  在已经找到软件缺陷的地方再找找

3)  像黑客一样考虑问题

4)  凭借经验、直觉和语感

“使用黑盒测试技术并不必成为程序员”,这章并不是测试全部,相反,仅仅是开始。

第六章 检查代码

检查代码,是一种静态白盒测试。(还有一种,就是检查设计,也就是我们所谓的设计评审)

本章没有太多可写的内容,这就是传说的CodeReview,作者更多地描述了传统软件行业中,进行代码检查的方式和流程。

1)正式审查,比如同事审查、走查、检验;个人感觉,名字实在不是很重要,重要的是看流程和效果;

2)编码标准和规范,使用的原因和可靠性、可读性、可维护性、可移植性紧密相关;

3)通用代码审查清单(这份清单很重要,可以直接拿来参考、修改、补充),这里不一一列举,可到书中详细阅读;

第七章 带上X光眼镜测试软件

本章是四个基本测试技术中,我最感兴趣的一个,也是我后续工作中需要持续改进和完善的地方。

动态白盒测试,又称为结构化测试(structural testing),因为软件测试员可以查看并使用代码的内部结构,从而设计和执行测试。这里我得承认,白盒测试是有其优缺点的,但是优点是大于缺点,而且缺点是可以得以避免的。

在单元测试(模块测试)、集成测试中,桩和驱动的概念的提出,很好地解决了白盒测试的根本性难题,使得白盒测试的功力大增。

“在进行白盒测试之前,一定要根据说明书建立黑盒测试用例”,作者强调这个的原因在于避免测试员在阅读完代码后存在偏见,导致用例遗漏。

与黑盒测试一样,白盒测试也可以从数据和状态(或者程序流程)两个维度进行技术的分解和使用。在白盒测试中,重要的是覆盖率的考虑。

数据覆盖

1)  数据流覆盖,主要指在软件中完全跟踪一批数据;

2)  次边界;

3)  公式和等式;有些公式是有除数的;

4)  错误强制;有时候可以利用调试器强制赋值,来执行某些难以构建的测试用例。

代码覆盖,一个很重要的工具叫做“代码覆盖率分析器”;需要明确以下几个概念

1)  程序语句和代码行覆盖,statement coverage

2)  分支覆盖(路径覆盖)

3)  条件覆盖

至此,软件测试的方法理论部分已经全部介绍完毕。当然,就我们的实际工作而言,很多方法如“正交分析设计测试用例”等,这里并没有涉及,我们可以通过其他途径了解。在第三部分中,将讲述如何实际应用这些“白盒、黑盒测试”技能。

posted on 2011-07-16 19:38  涅磐  阅读(214)  评论(0)    收藏  举报