怎样进行灰盒测试

合集下载

怎样进行灰盒测试

怎样进行灰盒测试

★几个基本概念首先,把一些基本概念,简单通俗地说一下。

如果觉得俺解释得不够好,不够细,可以自己去查维基百科的词条:洋文的在“”,中文的词条在“”(可惜中文词条不够全,偏偏缺了“灰盒测试”这一节)。

◇黑盒测试通俗来说:黑盒测试不关注软件内部的实现细节。

他仅仅把被测试的软件当成一个整体来处理,只关注软件的外在表现,不关注内部细节。

典型的黑盒测试,就是光拿着鼠标操作一下用户界面,看看功能是否满足要求。

◇白盒测试白盒测试与黑盒测试相反,重点关注软件内部的实现细节(比如代码覆盖率等)。

◇灰盒测试如果你是从事开发或者测试的行当,应该已经听过黑盒测试与白盒测试这2个概念。

但对灰盒测试,或许比较耳生。

单纯从名称上来看,灰盒测试是介于黑盒测试与白盒测试之间的一种测试方式。

这种测试方式,主要用于多模块构成的稍微复杂的软件系统。

在灰盒测试中,重点关注软件系统的各个组成模块之间的互动。

这里所说的"互动",包括模块之间的互相调用、数据传递、同步/互斥、等等。

◇灰盒测试与黑盒测试的区别如果某软件包含多个模块,当你使用黑盒测试时,你只要关心整个软件系统的边界,无需关心软件系统内部各个模块之间如何协作。

而如果使用灰盒测试,你就需要关心模块与模块之间的交互。

这是灰盒测试与黑盒测试的区别。

◇灰盒测试与白盒测试的区别但是,在灰盒测试中,你还是无需关心模块内部的实现细节。

对于软件系统的内部模块,灰盒测试依然把它当成一个黑盒来看待。

而白盒测试则不同,还需要再深入地了解内部模块的实现细节。

所以,这是灰盒测试与黑盒测试的区别。

◇灰盒测试与单元测试的区别刚才看到有网友在评论中问到此问题,俺补充一下。

首先,在进行单元测试时,需要写一些测试代码(行话叫“桩代码”,洋文叫stub)。

通常测试代码和被测试代码通常是同种语言(比如Java的单元测试通常也用Java来写),且测试代码和被测试代码的耦合很紧密。

因此,单元测试通常由开发人员来完成的,测试人员的能力未必能胜任。

软件测试中的灰盒测试技术与方法

软件测试中的灰盒测试技术与方法

软件测试中的灰盒测试技术与方法为了确保软件质量和稳定性,软件测试是不可或缺的过程。

灰盒测试是软件测试的一种重要方法,结合了黑盒测试和白盒测试的特点,既测试了软件的功能和接口,又关注了内部结构和代码的实现。

本文将介绍软件测试中的灰盒测试技术与方法。

一、灰盒测试的定义和原理灰盒测试,又称半透明测试,是一种软件测试方法,测试人员在了解软件内部结构和代码的基础上进行测试,但并不了解其中所有细节和实现。

这种测试方法旨在测试软件的功能、接口和性能,并暴露潜在的缺陷和问题。

灰盒测试的原理是在黑盒测试的基础上,通过部分透明的测试技术,获取软件内部信息并分析其对功能和性能的影响。

通过测试人员对软件内部的了解,可以选择更加针对性的测试用例,提高测试的有效性和效率。

二、灰盒测试的常用技术与方法1. 静态分析技术静态分析是一种基于源代码或者二进制代码的分析技术,可以检测代码中的潜在问题和错误。

通过对代码的结构、语法和规范进行分析,可以发现代码中可能存在的漏洞和安全隐患。

与灰盒测试相结合,静态分析技术可以帮助测试人员更好地理解软件的内部结构和逻辑,并针对性地设计测试用例。

2. 数据流分析技术数据流分析是一种对程序中数据传递过程的分析技术,可以识别出可能的数据依赖关系和数据异常。

通过对程序中变量、参数和返回值的跟踪,可以发现潜在的数据错误和异常。

灰盒测试可以利用数据流分析技术,设计测试用例以覆盖各种数据路径,发现潜在的问题和缺陷。

3. 覆盖率分析技术覆盖率分析是一种测试评估技术,用于度量测试用例对代码的覆盖率。

通过统计测试用例执行过程中覆盖到的代码行数、分支数等指标,可以评估测试的全面性和深度。

在灰盒测试中,覆盖率分析技术可以帮助测试人员评估测试用例的质量和有效性,并发现未覆盖的代码区域。

4. 接口测试技术接口测试是一种对软件接口的测试技术,用于验证接口的正确性和稳定性。

在灰盒测试中,接口测试可以通过了解接口的调用方式、接口参数和返回值,设计测试用例以模拟各种接口调用情况,测试接口的正确性和可用性。

软件评测灰盒测试技巧

软件评测灰盒测试技巧

软件评测灰盒测试技巧软件评测是为了确保软件的质量和稳定性,灰盒测试则是评测中的一种重要方法。

通过灰盒测试,我们可以检验和评估软件在不同环境下的表现和功能性。

本文将介绍几种常用的灰盒测试技巧,帮助您更有效地进行软件评测。

一、逆向工程技术逆向工程是灰盒测试中常用的技术手段之一。

通过逆向工程,测试人员可以深入软件内部,分析和理解其构造和运行机制。

逆向工程技术可以帮助测试人员快速获得软件的源代码、配置文件和关键算法等信息。

通过分析这些信息,测试人员可以更准确地进行功能性和安全性评估。

二、代码覆盖率分析代码覆盖率分析是评测软件质量的重要指标之一。

通过分析软件的代码覆盖率,测试人员可以评估每个功能模块的测试程度,以及测试用例是否充分覆盖了代码的不同执行路径。

对于灰盒测试而言,代码覆盖率分析是十分关键的,它可以帮助测试人员发现未被测到的代码段,从而提高评测的全面性和准确性。

三、边界值分析边界值分析是一种常用的灰盒测试技巧,它主要用于评估软件在输入边界条件下的表现。

通过设定输入参数的边界值,测试人员可以评估软件在不同情况下的响应和执行结果。

边界值分析帮助测试人员发现软件对于边界条件是否处理得当,以及软件在输入参数边界情况下是否会出现错误或异常。

四、模糊测试模糊测试是一种常用的灰盒测试技术。

通过模糊测试,测试人员可以向软件注入非预期的、异常的或随机的输入数据,来检验软件在不同情况下的响应和稳定性。

模糊测试可以帮助测试人员发现软件在处理异常输入时是否会崩溃、出现错误或产生安全漏洞。

五、安全测试安全测试是评测软件安全性的重要手段。

在灰盒测试中,安全测试尤为关键。

通过安全测试,测试人员可以评估软件在不同安全攻击下的表现和抵抗能力。

安全测试可以包括漏洞扫描、渗透测试、身份验证和数据加密等手段,来对软件进行全面的安全性评估。

六、性能测试性能测试是另一个重要的评测标准。

在灰盒测试中,性能测试可以帮助测试人员评估软件在不同负载条件下的响应速度、稳定性和扩展能力。

灰盒测试测试方法详解

灰盒测试测试方法详解

灰盒测试Gray Box定义灰盒测试,是介于白盒测试与黑盒测试之间的,可以这样理解,灰盒测试关注的是输出对于输入的正确性,同时也关注内部表现。

但这种关注不像白盒那样详细、完整,只是通过一些表征性的现象、事件、标志来判断内部的运行状态,有时候输出是正确的,但内部其实已经错误了。

这种情况非常多,如果每次都通过白盒测试来操作,效率会很低,因此需要采取这样的一种灰盒的方法。

灰盒测试结合了白盒测试和黑盒测试的要素。

它考虑了用户端、特定的系统知识和操作环境。

它在系统组件的协同性环境中评价应用软件的设计。

灰盒测试由方法和工具组成,这些方法和工具取材于应用程序的内部知识和与之交互的环境,能够用于黑盒测试以增强测试效率、错误发现和错误分析的效率。

灰盒测试涉及输入和输出,但使用关于代码和程序操作等通常在测试人员视野之外的信息设计测试。

学术含义灰盒(Gray Box)是一种程序或系统上的工作过程被局部认知的装置。

灰盒测试,也称作灰盒分析,是基于对程序内部细节有限认知上的软件调试方法。

测试者可能知道系统组件之间是如何互相作用的,但缺乏对内部程序功能和运作的详细了解。

对于内部过程,灰盒测试把程序看作一个必须从外面进行分析的黑盒。

灰盒测试通常与web服务应用一起使用,因为尽管应用程序复杂多变,并不断发展进步,因特网仍可以提供相对稳定的接口。

由于不需要测试者接触源代码,因此灰盒测试不存在侵略性和偏见。

开发者和测试者间有明显的区别,人事冲突的风险减到最小。

然而,灰盒测试相对白盒测试更加难以发现并解决潜在问题,尤其在一个单一的应用中,白盒测试的内部细节可以完全掌握。

灰盒测试结合了白盒测试盒黑盒测试的要素。

它考虑了用户端、特定的系统知识和操作环境。

它在系统组件的协同性环境中评价应用软件的设计。

灰盒测试由方法和工具组成,这些方法和工具取材于应用程序的内部知识盒与之交互的环境,能够用于黑盒测试以增强测试效率、错误发现和错误分析的效率。

软件测试中的灰盒测试技术与方法

软件测试中的灰盒测试技术与方法

软件测试中的灰盒测试技术与方法在软件开发过程中,测试是不可或缺的环节,它是验证软件是否符合预期功能的重要手段。

而灰盒测试作为软件测试的一种方法,结合了黑盒测试和白盒测试的优点,能够有效提高测试覆盖率和发现隐藏的缺陷。

本文将介绍软件测试中的灰盒测试技术与方法。

一、灰盒测试概述灰盒测试是介于黑盒测试和白盒测试之间的一种测试方法。

黑盒测试仅关注软件功能是否符合需求,不考虑内部实现细节;而白盒测试则深入分析软件的内部结构,测试代码的覆盖率等。

而灰盒测试在黑盒测试的基础上,通过了解部分内部结构和算法来选择测试用例,以增加测试覆盖度和发现潜在的缺陷。

二、灰盒测试技术1. 代码覆盖率分析代码覆盖率分析是灰盒测试中常用的技术之一。

通过分析已测试代码在执行过程中被覆盖到的程度,可以评估测试用例的有效性,提供测试覆盖率报告,从而帮助测试人员发现测试的空白点,进一步优化测试用例。

常见的代码覆盖率分析方法有语句覆盖、判定覆盖、条件覆盖等。

2. 数据流测试数据流测试是灰盒测试中另一个重要的技术。

它通过跟踪程序中的数据流动过程,识别潜在的数据缺陷和逻辑错误。

常用的数据流测试方法有数据定义使用测试、变量定义-使用测试、路径测试等。

3. 边界值分析边界值分析是一种针对输入和输出的测试方法,通过选取边界值来测试软件在边界情况下的行为。

在灰盒测试中,通过对程序内部边界值进行分析,选择测试用例进行边界值测试,可以有效地发现边界条件下的错误。

4. 异常处理测试异常处理测试是针对程序中异常情况的测试方法,通过模拟各种异常情况,验证软件对异常情况的响应和处理能力。

灰盒测试中,通过对程序内部异常处理代码的分析,选择适当的测试用例进行异常处理测试,可以检测出程序在异常情况下的错误和异常处理逻辑是否正确。

三、灰盒测试方法1. 基于模型的灰盒测试基于模型的灰盒测试是一种通过分析软件的模型结构来指导测试的方法。

通过建立软件模型,分析模型的内部结构和逻辑,选择测试用例进行测试,以提高测试覆盖率和发现隐藏的缺陷。

安全测试中的黑盒与灰盒测试方法

安全测试中的黑盒与灰盒测试方法

安全测试中的黑盒与灰盒测试方法安全测试是一种确保系统或软件在面对潜在威胁时依然可以正常运行的过程。

在进行安全测试时,黑盒测试和灰盒测试是两种常用的测试方法。

本文将介绍这两种测试方法的基本概念、特点和适用场景。

一、黑盒测试方法黑盒测试又称为功能测试,是一种基于需求和规格说明的测试方法。

测试人员在进行黑盒测试时,无需了解系统或软件内部的工作原理,只需关注其输入和输出。

1. 特点(1)测试人员无需了解内部细节:黑盒测试强调测试的功能,而不是依赖于程序的内部逻辑。

因此,测试人员不需要了解内部细节,只需通过给定的输入来验证输出是否符合预期。

(2)更加接近用户角度:黑盒测试更加注重系统或软件的外部行为,更接近用户的操作和使用方式。

通过模拟真实用户的操作,以确保系统在用户实际使用时的正常工作。

(3)需求覆盖全面:黑盒测试基于需求和规格说明进行测试,因此能够确保覆盖系统或软件的所有功能,并验证是否满足预期需求。

2. 适用场景(1)新系统或软件的测试:在系统或软件尚未完全开发完成之前,黑盒测试能够验证各功能是否按照需求工作,减少项目进展过程中的问题。

(2)无需关注内部细节的测试:某些测试场景下,可能没有必要了解系统或软件的内部工作原理,只需要验证其功能是否正常即可。

二、灰盒测试方法灰盒测试介于黑盒测试和白盒测试之间,既考虑了系统或软件的功能,也关注其中的一些内部逻辑。

测试人员在进行灰盒测试时,可以了解系统或软件的大致结构和一些内部代码。

1. 特点(1)部分了解内部细节:与黑盒测试不同,灰盒测试允许测试人员部分了解系统或软件的内部结构和代码,以更好地定位潜在问题。

(2)更具灵活性和准确性:灰盒测试既关注系统或软件的外部行为,也关注一些内部逻辑。

测试人员可以在确认功能是否正常的同时,通过探索内部细节和逻辑,发现潜在的安全漏洞。

2. 适用场景(1)部分了解内部结构的测试:当测试人员对系统或软件的内部有所了解,并希望结合内外因素进行测试时,灰盒测试是一个较为适合的方法。

软件测试中的灰盒测试方法

软件测试中的灰盒测试方法

软件测试中的灰盒测试方法在软件开发过程中,为了确保软件的质量和稳定性,测试是一个非常重要的环节。

灰盒测试方法是一种结合白盒测试和黑盒测试的测试技术,它能够有效地发现软件中的潜在问题。

本文将介绍灰盒测试的概念、原理以及常用的灰盒测试方法。

一、灰盒测试的概念灰盒测试是一种软件测试方法,它结合了白盒测试和黑盒测试的特点。

与黑盒测试只关注输入和输出结果的差异,而不关心内部结构,白盒测试则对软件的内部结构进行全面的测试不同,灰盒测试不仅关注软件的功能性,还对软件的内部逻辑进行一定程度的了解和验证。

二、灰盒测试的原理灰盒测试通过访问和操作软件的内部信息来识别和验证软件中的问题。

在进行灰盒测试时,测试人员通常具备一定的软件开发背景知识,能够理解和分析软件的源代码、设计文档或者配置文件等信息。

通过使用灰盒测试技术,测试人员能够更加全面地了解软件的内部逻辑,并通过对关键路径、核心函数或者算法的测试,发现潜在的问题。

三、常用的灰盒测试方法1.代码覆盖率测试代码覆盖率测试是灰盒测试中比较常用的一种方法。

通过分析软件的源代码,确定需要测试的代码片段,并运行测试用例来验证这些代码的执行情况。

代码覆盖率测试能够帮助测试人员了解哪些代码没有被执行到,从而找到可能存在的问题。

2.路径覆盖测试路径覆盖测试是一种基于控制流图的测试方法。

测试人员根据软件的控制流图,设计测试用例,确保软件能够覆盖所有可能的路径。

通过路径覆盖测试,可以发现软件中存在的逻辑问题和流程异常。

3.数据流测试数据流测试是一种基于软件数据流的测试方法。

测试人员通过分析软件的数据流图,识别和测试关键数据的传输和转换过程,以发现可能存在的数据错误和数据丢失等问题。

数据流测试可以增强对软件的数据处理能力的验证。

4.接口测试接口测试是一种灰盒测试的重要方法。

软件系统通常由多个模块或组件组成,这些模块之间通过接口进行数据和功能的交互。

测试人员通过对接口进行测试,验证模块之间的数据传输和功能执行是否正常,以保证整个系统的稳定性和一致性。

灰盒测试策略与实施

灰盒测试策略与实施

灰盒测试策略与实施灰盒测试(Grey-box testing)是一种将黑盒测试和白盒测试相结合的软件测试方法。

它基于对系统内部运行机制的了解,既关注用户界面和功能,又可以检查代码和逻辑。

本文将介绍灰盒测试的策略和实施方法。

1. 灰盒测试概述灰盒测试是介于黑盒测试和白盒测试之间的一种测试方法。

与黑盒测试只关注功能和用户界面不同,灰盒测试需要对系统内部进行一定程度的了解,以便设计更全面的测试用例和检查系统漏洞。

灰盒测试可以发现一些黑盒测试无法覆盖到的细节问题,并且相对于白盒测试,它更加注重测试用例的设计效率和实际应用场景。

2. 灰盒测试的策略(1)需求分析:明确系统需求,并进行功能分解,分析系统的关键功能点和影响因素。

(2)设计测试用例:基于需求分析和对系统内部的了解,设计具有高覆盖率且能够检查系统各种路径的测试用例。

(3)确定测试边界:对系统的输入、输出、数据范围等进行测试边界的确定,以验证系统在极限情况下的表现。

(4)错误注入:通过有意识地注入错误或不合理的数据,观察系统对异常情况的处理能力。

(5)性能测试:对系统的性能进行测试,包括响应时间、并发用户数、负载等方面的评估。

(6)安全性测试:针对系统的安全隐患进行测试,验证系统的安全性和防护能力。

(7)异常处理测试:检查系统对各类异常情况的处理能力,包括系统崩溃、错误提示、异常退出等情况。

3. 灰盒测试的实施方法(1)源代码扫描:通过对系统源代码的扫描,分析代码的结构和逻辑,发现潜在的缺陷和漏洞。

(2)路径覆盖测试:通过识别代码的各个路径,设计测试用例以实现对代码路径的覆盖,以此来发现隐藏的错误。

(3)输入输出测试:对系统的输入输出进行详细的测试,特别是对边界情况和非正常输入数据的测试。

(4)重点功能测试:根据需求分析和用户关注的功能,设计测试用例对关键功能点进行特别的测试。

(5)集成测试:对系统的各个模块进行整合测试,验证模块间的接口和交互是否正常。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

灰盒测试优缺点分析★几个基本概念首先,把一些基本概念,简单通俗地说一下。

如果觉得俺解释得不够好,不够细,可以自己去查维基百科的词条:洋文的在“这里”,中文的词条在“这里”(可惜中文词条不够全,偏偏缺了“灰盒测试”这一节)。

◇黑盒测试通俗来说:黑盒测试不关注软件内部的实现细节。

他仅仅把被测试的软件当成一个整体来处理,只关注软件的外在表现,不关注内部细节。

典型的黑盒测试,就是光拿着鼠标操作一下用户界面,看看功能是否满足要求。

◇白盒测试白盒测试与黑盒测试相反,重点关注软件内部的实现细节(比如代码覆盖率等)。

◇灰盒测试如果你是从事开发或者测试的行当,应该已经听过黑盒测试与白盒测试这2个概念。

但对灰盒测试,或许比较耳生。

单纯从名称上来看,灰盒测试是介于黑盒测试与白盒测试之间的一种测试方式。

这种测试方式,主要用于多模块构成的稍微复杂的软件系统。

在灰盒测试中,重点关注软件系统的各个组成模块之间的互动。

这里所说的"互动",包括模块之间的互相调用、数据传递、同步/互斥、等等。

◇灰盒测试与黑盒测试的区别如果某软件包含多个模块,当你使用黑盒测试时,你只要关心整个软件系统的边界,无需关心软件系统内部各个模块之间如何协作。

而如果使用灰盒测试,你就需要关心模块与模块之间的交互。

这是灰盒测试与黑盒测试的区别。

◇灰盒测试与白盒测试的区别但是,在灰盒测试中,你还是无需关心模块内部的实现细节。

对于软件系统的内部模块,灰盒测试依然把它当成一个黑盒来看待。

而白盒测试则不同,还需要再深入地了解内部模块的实现细节。

所以,这是灰盒测试与黑盒测试的区别。

◇灰盒测试与单元测试的区别刚才看到有网友在评论中问到此问题,俺补充一下。

首先,在进行单元测试时,需要写一些测试代码(行话叫“桩代码”,洋文叫stub)。

通常测试代码和被测试代码通常是同种语言(比如Java的单元测试通常也用Java来写),且测试代码和被测试代码的耦合很紧密。

因此,单元测试通常由开发人员来完成的,测试人员的能力未必能胜任。

其次,单元测试的颗粒度会更细(会细到类一级、函数一级),而灰盒测试仅仅到模块一级。

★相对于黑盒测试的优点灰盒测试相对黑盒测试的优点,其实有不少,俺挑几个重要的来说说。

◇测试可以及早介入由于黑盒测试把整个软件系统当成一个整体来测试。

如果系统的某个关键模块还没有完工,那测试人员就无法对整个系统进行测试,只好闲着没事干。

而灰盒测试是针对模块的边界进行,模块开发完一个就测试一个。

◇有助于测试人员理解系统结构为了进行灰盒测试,测试人员首先要熟悉内部模块之间的协作机制。

在熟悉的过程中,“顺便”也就对整个系统(及其结构)有一个初步的、宏观的认识。

这有助于测试人员发现一些系统结构方面的Bug。

而对于黑盒测试来说,由于测试人员不清楚软件系统的内部结构,难以发现一些结构性的缺陷。

◇有助于管理层了解真实的开发进度一些复杂的大系统,经常会发生开发进度失控的情况。

因为很多开发人员有报喜不报忧的倾向。

当某个开发人员号称自己的工作已经完成了90%,往往意味着他/她还要花同样多的时间来完成剩下的10%。

这导致负责项目管理的人,无法了解开发的真实进度。

由于灰盒测试针对对每一个模块进行,而且测试人员会从一个客观的角度来反馈模块的完成情况,这非常有利于管理层了解整个系统的真实完成情况。

◇可以构造更好的测试用例如果仅仅用黑盒的方式测试系统的外部边界(通常是用户界面),有很多软件缺陷是不容易发现的。

俺分别以B/S系统和C/S系统来举例。

假设开发一个复杂的(Windows环境下的)C/S软件。

那么,这个软件通常不会仅仅只有一个EXE文件。

它可能会有若干个EXE文件以及若干个DLL文件。

假如某个DLL 提供的导出函数,没有按照约定对输入参数进行有效性判断(比如指针是否为空),那你用黑盒测试的方式,难以暴露出这种缺陷。

而灰盒测试就容易发现此类问题(具体如何发现,后续的帖子会细说)。

假如你开发的是一个Web应用系统,那么,这种系统的服务端多半会提供若干个Web 接口用于被客户端调用。

假如某个Web接口存在安全性问题/并发性问题/健壮性问题/XX 问题,你单纯用黑盒测试的手段,同样难以发现,而灰盒测试就可以搞定(灰盒测试是如何搞定的,后续帖子会细说)。

◇利于提升测试人员能力很多公司搞的黑盒测试,就是让测试人员用鼠标(键盘都难得用)操作用户界面。

在这种的环境里,测试人员干的活,很多都是重复性的体力劳动,技术能力难以得到提高。

而如果搞灰盒测试,测试人员就需要多懂一点技术背景知识,必要时还得写点测试脚本,对测试人员的能力提升很有好处。

★相对于白盒测试的好处灰盒测试相对白盒测试的好处,比较容易概括。

简单来说,就是白盒测试较费钱(研发成本较高)。

这多出来的研发成本,体现在如下几个方面。

◇首先,招聘成本较高在人才市场上,100个应聘的测试人员中,未必能够找到一个合适的白盒测试人员。

至少从俺及周围同事的面试经历来看,难得碰到具备白盒测试能力的人。

所以,你可能要花很长时间才能找到合适的人,时间成本浪费掉了。

◇其次,培训成本较高可能有同学会说,招不到就内部培养呗。

这个说起来容易,但是培训也是有成本的。

而且周期还不短,同样要耗费时间成本。

◇再其次,人力成本较高物以稀为贵是一条普遍的经济学规律。

由于能搞白盒测试的家伙是稀有动物,你自然不能给他/她开太低的薪水。

否则人家待不了多久就跑路了。

薪水开得高了,人力成本自然也就提高了。

★其它的一些好处前面拿灰盒测试分别跟黑盒/白盒进行了对比,列举了一些优点。

还有另外一些优点,和黑盒/白盒没啥关系,单独列在这里。

◇顺便强化开发文档对于一个复杂的软件系统,模块之间的接口是很重要的,因此捏,接口文档也是很重要滴。

而开发人员不爱写文档/不爱更新文档,(在软件业内)已经是臭名昭著了。

很多软件开发到后期,模块之间的接口文档要么没有,要么和代码实现严重脱节。

但是,如果引入测试人员对模块之间的接口进行测试,就可以有效防止此种弊端。

因为测试人员在测试前,首先要看模块间的接口文档,然后再根据接口文档设计测试用例,最后再执行用例。

因此,一旦接口文档和代码实现不符,立马就露馅了。

◇顺便搞搞自动化灰盒测试如果落实到位,还可以跟自动化测试相结合。

从此可以大大提升测试的效率,进而大大提升软件的质量。

(如何进行自动化的灰盒测试,后面的帖子会细谈)★灰盒测试有啥缺点?当然,凡事都有优点和缺点,灰盒测试自然也不例外。

下面列举它的主要缺点。

◇不适用于简单的系统所谓的简单系统,就是简单到总共只有一个模块。

由于灰盒测试关注于系统内部模块之间的交互。

如果某个系统简单到只有一个模块,那就没必要进行灰盒测试了。

◇对测试人员的要求比黑盒测试高从上面的介绍来看,灰盒测试要求测试人员清楚系统内部由哪些模块构成,模块之间如何协作。

因此,对测试的要求就提高了。

因此,会带来一定的培训成本。

不过捏,依照俺的经验,培训难度不大。

稍微有点基础的测试人员,都可以在短期培训之后胜任。

◇不如白盒测试深入显然,灰盒不如白盒那么深入。

不过捏,考虑到灰盒测试相比白盒测试有显著的成本优势,该缺点不是太明显。

★总结总而言之,言而总之,灰盒测试是一个很不错的东东,其优点明显而缺点容易克服。

另外,俺前后在两家公司的研发部门推行过,效果不错的说。

大伙儿值得去尝试一下。

今天光说了优缺点对比,在管理层面和技术层面,具体该如何落实?。

当你企图推行某个东东的时候,真正的障碍往往是管理上的,而不是技术上的。

所以,今天先介绍一下,推行灰盒测试之前,需要进行哪些管理上的准备工作。

管理方面的准备工作★观念上的改变可能是因为黑盒测试应用太广的缘故,导致很多开发人员和测试人员认为黑盒测试就是测试的全部。

由于黑盒测试关注的是软件系统的外部边界。

在大多数的软件公司里,软件的外部边界主要就是用户界面。

这就造成了一个误区:把软件测试和用户界面测试等同起来。

如果开发人员持有这个错误观念,他/她就把精力放在:如何让软件的界面操作正常。

至于软件的内部模块,其接口是否正常、协同是否正常,就不太关注了。

用某些开发人员的话来讲,就是:“软件只要能貌似正常地工作,就行了”。

同样的,如果测试人员持有这样的观念,他/她就仅仅去测试软件的外部边界(比如用户界面),而毫不关心软件内部模块的问题。

在这种误区的影响下,最终发布出来的软件产品,多半是“金玉其外、败絮其中”。

所以,在管理上,要通过各种方式,首先改变这种错误的观念,让开发人员和测试人员都注重内部模块的协同问题。

★设计上的改变说完观念上的改变,再来谈谈设计上的改变。

大部分开发人员在设计内部模块的接口时,往往只考虑开发上的便利,而不考虑测试上的便利。

结果捏,软件开发完之后,测试人员在进行模块接口的测试时,会非常费力,甚至无从下手。

所以,俺在进行模块接口的设计评审时,会非常强调“可测试性”的考虑。

◇以动态库接口为例当你用C++开发一个动态库时,对于动态库的导出函数可以有两种风格:C++风格和纯C风格(extern "C")。

在俺负责的产品中,动态库的接口设计通常要求用纯C风格的导出函数。

抛开各种高深的设计理念不谈(这不是今天的重点),单纯考虑“可测试性”,纯C风格的函数接口非常方便测试。

很多时候,测试用一些简单的脚本,就可以对“纯C风格”的导出函数进行测试。

具体如何做,下一帖会具体介绍。

◇以Web接口为例考虑到有些网友不是搞C/S开发的(尤其不是搞C++的),可能看不懂上述例子。

俺再举一个Web接口的例子。

和动态库的接口风格类似,Web接口也有两种常见的风格:SOAP和REST(两者的介绍参见“这里”和“这里”)。

同样的,俺比较倾向于使用REST风格。

抛开其它的优缺点不谈,单纯从“可测试性”来看,REST的优势非常明显——更简单、更可读。

★文档上的改变由于灰盒测试侧重于内部模块的接口测试,因此接口文档就显得非常重要了。

模块的其它文档可以省略,但是模块的接口文档是一定不能马虎的。

接口文档不光是开发人员与开发人员之间的契约,而且是开发人员与灰盒测试人员之间的契约。

这玩意儿的重要性,无须多说,想必大伙儿也应该明白。

由于很多开发人员不愿意/不屑于写文档,还有一些开发人员是在编码完成之后,再补文档。

这些都对灰盒测试的开展很不利。

如果没有彻底改变,灰盒测试很难开展。

对于接口文档的要求,俺主要强调两点:一个是文档的内容,一个是完成文档的时间点。

◇接口文档的内容接口文档在内容上一定要简洁、实用,而且要确保测试人员能看懂——毕竟测试人员的技术水平不如开发人员那么高。

另外,不同类型的接口,会有不同的接口文档形式,俺会在后面的帖子里面详细介绍。

◇接口文档的完成时间关于时间点,俺的做法是:在内部模块的编码之前,一定要先让开发人员把接口文档写出来,并经过评审。

相关文档
最新文档