软件测试方法的总结

来源:互联网 发布:小游戏c语言代码 编辑:程序博客网 时间:2024/05/16 07:03

点击打开链接1、按是否查看程序内部结构分为:

(1)黑盒测试(black-box testing):只关心输入和输出的结果。

(2)白盒测试(white-box testing):去研究里面的源代码和程序结构。

(3)灰盒测试(Gray-box testing)关注输出对于输入的正确性,同时也关注内部表现,但这种关注不像“白盒”那样详细、完整。

黑盒测试

黑盒测试也称功能测试或数据驱动测试,它是在已知产品所应具有的功能,通过测试来检测每个功能是否都能正常使用,在测试时,把测试对象看作看不见内部的黑盒,在完全不考虑程序内部逻辑结构和处理过程的情况下,测试者仅依据程序功能的需求规范考虑确定测试用例和推断测试结果的正确性,程序是否能适当地接收输入数据而产生正确的输出信息,并且保持外部信息(如数据库或文件)的完整性。

“黑盒”测试意味着要在软件的接口处进行测试,它着眼于程序外部结构,不考虑内部逻辑结构,主要针对软件界面和软件功能进行测试。因此,可以说“黑盒”测试是站在使用软件和程序的角度,从输入数据和输出数据的对应关系出发进行的测试。

黑盒测试方法主要有等价类划分法、边界值分析法、因果图法、错误推测法等,主要用于软件确认测试。“黑盒”法是穷举输入测试,只有把所有可能的输入都作为测试情况使用,才能以这种方法查出程序中所有的错误。实际上测试情况有无穷多个,人们不仅要测试所有合法的输入,而且还要对那些不合法但是可能的输入进行测试。

黑盒测试分为功能测试和性能测试:

1) 功能测试(functiontesting),是黑盒测试的一方面,它检查实际软件的功能是否符合用户的需求。包括

a、逻辑功能测试(logicfunction testing)

b、界面测试(UItesting)UI=User Interface

c、易用性测试(usabilitytesting):是指从软件使用的合理性和方便性等角度对软件系统进行检查,来发现软件中不方便用户使用的地方。

d、兼容性测试(compatibilitytesting):包括硬件兼容性测试和软件兼容性测试

2)性能测试(performancetesting)
软件的性能主要有时间性能和空间性能两种,时间性能:主要指软件的一个具体事务的响应时间(respond time);空间性能:主要指软件运行时所消耗的系统资源。

软件性能测试分为:

a、   一般性能测试:指的是让被测系统在正常的软硬件环境下运行,不向其施加任何压力的性能测试。

b、   稳定性测试也叫可靠性测试(reliability testing):是指连续运行被测系统检查系统运行时的稳定程度。

c、   负载测试(loadtesting):是指让被测系统在其能忍受的压力的极限范围之内连续运行,来测试系统的稳定性。

d、   压力测试(stresstesting):是指持续不断的给被测系统增加压力,直到将被测系统压垮为止,用来测试系统所能承受的最大压力。(Validatethe system or software can allowed the biggest stress.)

e、   并发测试:验证系统的并发处理能力。一般是和服务器端建立大量的并发连接,通过客户端的响应时间和服务器端的性能监测情况来判断系统是否达到了既定的并发能力指标。负载测试往往就会使用并发来创造负载,之所以把并发测试单独提出来,是因为并发测试往往涉及服务器的并发容量,以及多进程/多线程协调同步可能带来的问题。这是要特别注意,必须测试的。

f、   基准测试:当软件系统中增加一个新的模块的时候,需要做基准测试,以判断新模块对整个软件系统的性能影响。按照基准测试的方法,需要打开/关闭新模块至少各做一次测试。关闭模块之前的系统各个性能指标记下作为基准(Benchmark),然后与打开模块状态下的系统性能指标作比较,以判断模块对系统性能的影响。

g、   可恢复测试:测试系统能否快速地从错误状态中恢复到正常状态。比如,在一个配有负载均衡的系统中,主机承受了压力无法正常工作后,备份机是否能够快速地接管负载。可恢复测试通常结合压力测试一起来做。

提示:每种测试有其存在的空间和目的。当我们接手一个软件项目后,在有限的资源条件下,选择去做哪一种测试,这应该根据当前软件过程阶段和项目的本身特点来做选择。比如,在集成测试的时候要做基准测试,在软件产品每个发布点要做性能测试。

白盒测试

白盒测试也称结构测试或逻辑驱动测试,是一种按照程序内部逻辑结构和编码结构设计测试数据并完成测试的测试方法。它是基于一个应用代码的内部逻辑知识,测试覆盖全部代码、分支、路径和条件。它利用查看代码功能和实现方式得到的信息来确定那些需要测试、哪些不需要测试、如何展开测试。

“白盒”测试一般分为静态测试和动态测试,静态测试不实际运行软件,主要是对软件的编程格式、结构等方面进行评估,采用的是代码走查、代码审查、程序结构分析、控制流分析、数据流测试及信息流分析等;而动态测试需要在Host环境或Target环境中实际运行软件,并使用设计的测试用例去探测软件缺陷。所采用的设计方法是逻辑覆盖(包括语句覆盖、分支覆盖、条件覆盖、分支条件覆盖自己路径覆盖)。

它是知道产品内部工作过程,可通过测试来检测产品内部动作是否按照规格说明书的规定正常进行,按照程序内部的结构测试程序,检验程序中的每条通路是否都有能按预定要求正确工作,而不顾它的功能,“白盒”测试的主要方法有逻辑驱动、基路测试等,主要用于软件验证。

“白盒”法全面了解程序内部逻辑结构、对所有逻辑路径进行测试。“白盒”法是穷举路径测试。在使用这一方案时,测试者必须检查程序的内部结构,从检查程序的逻辑着手,得出测试数据。贯穿程序的独立路径数是天文数字。但即使每条路径都测试了仍然可能有错误。第一,穷举路径测试决不能查出程序违反了设计规范,即程序本身是个错误的程序。第二,穷举路径测试不可能查出程序中因遗漏路径而出错。第三,穷举路径测试可能发现不了一些与数据相关的错误。

黑盒、白盒,动态、静态测试之间的关系

它们只是一个测试的不同分类角度而已,同一个测试,既有可能属于黑盒测试,也有可能属于动态测试;既有可能属于静态测试,也有可能属于白盒测试。而且它们之间还有包括交叉的关系,总结以下4句话:
黑盒测试有可能是动态测试(运行程序,只看输入和输出),也有可能是静态测试(不运行程序,只是查看界面)

“白盒”测试有可能是动态测试(运行程序,并分析代码结构),也有可能是静态测试(不运行程序,只是静态查看代码)

动态测试有可能是“黑盒”测试(运行程序,只看输入和输出),也有可能是“白盒”测试(运行程序,并分析代码结构)

静态测试有可能是“黑盒”测试(不运行程序,只是查看界面),也有可能是“白盒”测试(不运行程序,只是静态查看代码)

灰盒测试

灰盒测试是一种综合测试法,它将“黑盒”测试、“白盒”测试结合在一起,是基于程序运行时的外部表现又结合程序内部逻辑结构来设计用例,执行程序并采集程序路径执行信息和外部用户接口结果的测试技术。可以这样理解,“灰盒”测试关注输出对于输入的正确性,同时也关注内部表现,但这种关注不像“白盒”那样详细、完整,只是通过一些表征性的现象、事件、标志来判断内部的运行状态,有时候输出是正确的,但内部其实已经错误了,这种情况非常多,如果每次都通过“白盒”测试来操作,效率会很低,因此需要采取这样的一种灰盒的方法。灰盒测试结合了“白盒”测试和“黑盒”测试的要素.它考虑了用户端、特定的系统知识和操作环境。它在系统组件的协同性环境中评价应用软件的设计。

2、按是否运行程序分为:

(1)静态测试(static testing):是指不实际运行被测软件,而只是静态地检查程序代码、界面或文档可能存在的错误的过程。
静态测试包括:
对于代码测试,主要是测试代码是否符合相应的标准和规范。
对于界面测试,主要测试软件的实际界面与需求中的说明是否相符。
对于文档测试,主要测试用户手册和需求说明是否真正符合用户的实际需求。

(2)动态测试(dynamic testing),是指实际运行被测程序,输入相应的测试数据,检查输出结果和预期结果是否相符的过程

3、按阶段划分:

(1)单元测试(unit testing),是指对软件中的最小可测试单元进行检查和验证。
桩模块(stud)是指模拟被测模块所调用的模块,驱动模块(driver)是指模拟被测模块的上级模块,驱动模块用来接收测试数据,启动被测模块并输出结果。

(2)集成测试(integration testing),是的下一阶段,是单元测试指将通过测试的单元模块组装成系统或子系统,再进行测试,重点测试不同模块的接口部门。
集成测试就是用来检查各个单元模块结合到一起能否协同配合,正常运行。

(3)系统测试(system testing),指的是把整个软件系统看做一个整体进行测试,包括对功能、性能,以及软件所运行的软硬件环境进行测试。
系统测试的主要依据是《系统需求规格说明书》文档。

(4)验收测试(acceptance testing),指的是在系统测试的后期,以用户测试为主,或有测试人员等质量保障人员共同参与的测试,它也是软件正式交给用户使用的最后一道工序。
验收测试又分为a测试和beta测试,其中a测试指的是由用户、 测试人员、开发人员等共同参与的内部测试,而beta测试指的是内测后的公测,即完全交给最终用户测试。

(5)回归测试(regression testing)是指对软件的新的版本测试时,重复执行上一个版本测试时的用例。

4、按执行时是否需要人工干预划分

(1)人工测试:人工测试是由测试人员手工逐步执行所有的活动,并观察每一步是否成功完成。人工测试是任何测试活动的一部分,在开发初始阶段软件及其用户接口还未足够稳定时尤其有效,因为这时自动化并不能发挥显著作用。即使在开发周期很短以及自动化测试驱动的开发过程中,人工测试技术依然具有重要的作用。

(2)自动化测试:使用自动化测试工具来进行测试,这类测试一般不需要人干预,通常在GUI、性能等测试和功能测试中用得较多。通过录制测试脚本,然后执行这个测试脚本来实现测试过程的自动化。自动化测试工具有QTP/UFTAutoRunner和TAR等。

5、按测试实施的组织划分

(1)开发方测试:通常也叫“难证测试”或“alpha”。开发方通过检验和提供客观证据,证实软件的实现是否满足规定的需求。验证测试是在软件开发环境下,由开发者检测与证实软件的实现是否满足软件设计说明或软件需求说明的要求。主要是指在软件开发完成以后,开发方对要提交的软件进行全面的自我检查与验证,可以和软件的“系统测试”一并进行

(2)用户测试:是在用户的应用环境下,用户通过运行和使用软件,检测与核实软件实现是否符合自己预期的要求。通常情况用户测试不是指用户的“验收测试”,而是指用户的使用性测试,由用户找出软件的应用过程中发现的软件的缺陷与问题,并对使用质量进行评价。

beta测试通常被看成一种“用户测试”。beta测试主要是把软件产品有计划地免费分发到目标市场,让用户大量使用,并评价、检查软件。通过用户各种方式的大量使用,来发现软件存在的问题与错误,把信息反馈给开发者修改。beta测试中厂商攻取的信息,可以有助于软件产品的成功发布。

(3)第三方测试:介于软件开发方和用户方之间的测试组织的测试。第三方测试也称为独立测试。软件质量工程强调开展独立验证和确认(IV&V)活动。IV&V是由在技术、管理和财务上与开发组织具有规定程度独立的组织执行验证和确认过程。软件第三方测试也就是由在技术、管理和财务上与开发方和用户方相对独立的组织进行的软件测试。情况下是在模拟用户真实应用环境下,进行软件确认测试。

5、其他测试类型:

(1)冒烟测试(smoke testing),是指在对一个新版本进行大规模的测试之前,先验证一下软件的基本功能是否实现,是否具备可测性。

(2)随机测试(random testing),是指测试中所有的输入数据都是随机生成的,其目的是模拟用户的真实操作,并发现一些边缘性的错误。

(3)用户界面测试(User interfacetesting)简称UI测试,测试用户界面的功能模块的布局是否合理,整体风格是否一致和各个控件的放置位置是否符合客户使用习惯,更重要的是要符合操作便捷,导航简单易懂,界面中文字是否正确,命名是否统一,页面是否美观,文字、图片组合是否完美等等

(4)随机测试(Ad-hoc testing),软件测试中除了根据测试用例和测试说明书进行测试外,还需要进行随机测试(Ad-hoc testing),主要是根据测试者的经验对软件进行功能和性能抽查,是保证测试覆盖完整性的有效方式和过程。

(5)本地化测试(Localization testing),本地化就是将软件版本语言进行更改,比如将英文的windows改成中文的windows就是本地化。本地化测试的对象是软件的本地化版本。本地化测试的目的是测试特定目标区域设置的软件本地化质量。本地化测试的环境是在本地化的操作系统上安装本地化的软件。从测试方法上可以分为基本功能测试,安装/卸载测试,当地区域的软硬件兼容性测试。测试的内容主要包括软件本地化后的界面布局和软件翻译的语言质量,包含软件、文档和联机帮助等部分。

(6)卸载测试(UninstallTesting),卸载测试是对软件的全部、部分或升级卸载处理过程的测试。主要是测试软件能否卸载,卸载是否干净,对系统有无更改,在系统中的残留与后来的生成文件如何处理等。还有原来更改的系统值是否修改回去.

(7)安全性测试(Security Testing),安全测试是测试系统在防止非授权的内部或外部用户的访问或故意破坏等情况时怎么样。这可能需要复杂的测试技术。安全测试检查系统对非法侵入的防范能力。安全测试期间,测试人员假扮非法入侵者,采用各种办法试图突破防线。

例如:①想方设法截取或破译口令;②专门定做软件破坏系统的保护机制;③故意导致系统失败,企图趁恢复之机非法进入;④试图通过浏览非保密数据,推导所需信息,等等。理论上讲,只要有足够的时间和资源,没有不可进入的系统。因此系统安全设计的准则是,使非法侵入的代价超过被保护信息的价值。此时非法侵入者已无利可图。

安全性一般分为两个层次,即应用程序级别的安全性和系统级别的安全性,针对不同的安全级别,其测试策略和方法也不相同。

应用程序级别的安全性,包括对数据或业务功能的访问,在预期的安全性情况下,操作者只能访问应用程序的特定功能、有限的数据。其测试是核实操作者只能访问其所属用户类型已被授权访问的那些功能或数据。测试时,确定有不同权限的用户类型,创建各用户类型并用各用户类型所特有的事务来核实其权限,最后修改用户类型并为相同的用户重新运行测试。

系统级别的安全性,可确保只有具备系统访问权限的用户才能访问应用程序,而且只能通过相应的网关来访问,它包括对系统的登录或远程访问。其测试是核实只有具备系统和应用程序访问权限的操作者才能访问系统和应用程序。

(8)兼容性测试(Compatibility Testing),兼容测试是测试软件在一个特定的硬件/软件/操作系统/网络等环境下的性能如何。向上兼容向下兼容,软件兼容硬件兼容。软件的兼容性有很多需要考虑的地方。

 

 

 

 

 

0 0