读书笔记-软件测试-4-7章
读书时间:2011-7-9 周六 3小时
阅读书名:《软件测试》第二版 Ron Patton著 张小松等译
阅读章节—第二部分 测试基础(第4-7章)
凡是原书内容,均以引号标注,其余均为本人个人观点。
通读第二部分,总体的感觉就是:软件测试方法是一门需要系统学习和掌握的技术;本部分的内容从方法论的角度,整体包含了软件测试的基础:
u 静态黑盒测试:检查产品说明书(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) 条件覆盖
至此,软件测试的方法理论部分已经全部介绍完毕。当然,就我们的实际工作而言,很多方法如“正交分析设计测试用例”等,这里并没有涉及,我们可以通过其他途径了解。在第三部分中,将讲述如何实际应用这些“白盒、黑盒测试”技能。
浙公网安备 33010602011771号