http://blog.csdn.net/aidisheng/article/details/3025617
一,软件测试的分类:
1.
按是否需要执行被测软件的角度,可分为静态测试和动态测试,前者不利用计算机运行待测程序而应用其他手段实现测试目的,如代码审核。(我认为主要是让测试人员对编译器发现不了的潜在错误进行分析,如无效的死循环,多余的变量等),而动态测试则通过运行被测试软件来达到目的。
2、按阶段划分: 1 单元测试 单元测试是对软件中的基本组成单位进行的测试,如一个模块、一个过程等等。它是软件动态测试的最基本的部分,也是最重要的部分之一,其目的是检验软件基本组成单位的正确性。因为单元测试需要知道内部程序设计和编码的细节知识,一般应由程序员而非测试员来完成,往往需要开发测试驱动模块和桩模块来辅助完成单元测试。因此应用系统有一个设计很好的体系结构就显得尤为重要。 一个软件单元的正确性是相对于该单元的规约而言的。因此,单元测试以被测试单位的规约为基准。单元测试的主要方法有控制流测试、数据流测试、排错测试、分域测试等等。 2 集成测试 集成测试是在软件系统集成过程中所进行的测试,其主要目的是检查软件单位之间的接口是否正确。它根据集成测试计划,一边将模块或其他软件单位组合成越来越大的系统,一边运行该系统,以分析所组成的系统是否正确,各组成部分是否合拍。集成测试的策略主要有自顶向下和自底向上两种。 3 系统测试 系统测试是对已经集成好的软件系统进行彻底的测试,以验证软件系统的正确性和性能等满足其规约所指定的要求,检查软件的行为和输出是否正确并非一项简单的任务,它被称为测试的“先知者问题”。因此,系统测试应该按照测试计划进行,其输入、输出和其他动态运行行为应该与软件规约进行对比。软件系统测试方法很多,主要有功能测试、性能测试、随机测试等等。 4 验收测试 验收测试旨在向软件的购买者展示该软件系统满足其用户的需求。它的测试数据通常是系统测试的测试数据的子集。所不同的是,验收测试常常有软件系统的购买者代表在现场,甚至是在软件安装使用的现场。这是软件在投入使用之前的最后测试。 5 回归测试 回归测试是在软件维护阶段,对软件进行修改之后进行的测试。其目的是检验对软件进行的修改是否正确。这里,修改的正确性有两重含义:一是所作的修改达到了预定目的,如错误得到改正,能够适应新的运行环境等等;二是不影响软件的其他功能的正确性。 6 Alpha 测试:在系统开发接近完成时对应用系统的测试;测试后,仍然会有少量的设计变更。这种测试一般由最终用户或其他人员员完成,不能由程序员或测试员完成。 7 Beta 测试:当开发和测试根本完成时所做的测试,而最终的错误和问题需要在最终发行前找到。这种测试一般由最终用户或其他人员员完成,不能由程序员或测试员完成。 3、按测试方法划分: 1 白盒测试 白盒测试也称结构测试或逻辑驱动测试,是指基于一个应用代码的内部逻辑知识,即基于覆盖全部代码、分支、路径、条件的测试,它是知道产品内部工作过程,可通过测试来检测产品内部动作是否按照规格说明书的规定正常进行,按照程序内部的结构测试程序,检验程序中的每条通路是否都有能按预定要求正确工作,而不顾它的功能,白盒测试的主要方法有逻辑驱动、基路测试等,主要用于软件验证。 “白盒”法全面了解程序内部逻辑结构、对所有逻辑路径进行测试。“白盒”法是穷举路径测试。在使用这一方案时,测试者必须检查程序的内部结构,从检查程序的逻辑着手,得出测试数据。贯穿程序的独立路径数是天文数字。但即使每条路径都测试了仍然可能有错误。第一,穷举路径测试决不能查出程序违反了设计规范,即程序本身是个错误的程序。第二,穷举路径测试不可能查出程序中因遗漏路径而出错。第三,穷举路径测试可能发现不了一些与数据相关的错误。 白盒测试可以借助一些工具来完成如Junit Framework,Jtest等。 2 黑盒测试 黑盒测试是指不基于内部设计和代码的任何知识,而基于需求和功能性的测试,黑盒测试也称功能测试或数据驱动测试,它是在已知产品所应具有的功能,通过测试来检测每个功能是否都能正常使用,在测试时,把程序看作一个不能打开的黑盆子,在完全不考虑程序内部结构和内部特性的情况下,测试者在程序接口进行测试,它只检查程序功能是否按照需求规格说明书的规定正常使用,程序是否能适当地接收输入数锯而产生正确的输出信息,并且保持外部信息(如数据库或文件)的完整性。黑盒测试一般分为功能测试和非功能测试,功能测试方法主要有等价类划分、边值分析、因—果图、错误推测法,场景法,判定表驱动,正交实验法,功能图法等,主要用于软件确认测试。非功能测试主要有性能测试,强度测试,兼容性测试,配置测试,安全测试等。 “黑盒”法着眼于程序外部结构、不考虑内部逻辑结构、针对软件界面和软件功能进行测试。“黑盒”法是穷举输入测试,只有把所有可能的输入都作为测试情况使用,才能以这种方法查出程序中所有的错误。实际上测试情况有无穷多个,人们不仅要测试所有合法的输入,而且还要对那些不合法但是可能的输入进行测试。白盒测试的方法有:程序插桩,逻辑覆盖,基本路径测试,域测试,符号测试,z路劲覆盖,程序变异。
程序插桩:向源程序中添加一些语句,实现对程序语句的执行,变量变化等的情况进行检查。比如在程序中插入打印语句。
![]()
![]()
语句覆盖
语句覆盖 SC(Statement Coverage),就是设计若干个测试用例,运行被测程序, 使得程序中 每一可执行语句 至少执行一次 。这里的“若干个”,意味着使用 测试用例 越少越好。 语句覆盖 在测试中主要发现缺陷或错误语句。判定覆盖(分支覆盖)判定覆盖DC(Decision coverage),有时也称分支覆盖,就是指设计若干测试用例,运行被测程序, 使得 每个判定 的取真分支和取假分支至少评价一次 。例如上边的Coverage类代码,path ace,path abd,path abe,path acd 四条路径均是符合 判定覆盖 要求的路径。 判定覆盖 虽然把程序所有分支均覆盖到了,但其主要对整个 表达式 最终取值进行度量,忽略了表达式内部取值。条件覆盖判定条件覆盖
判定条件覆盖CDC(Condition/ Decision Coverage),设计足够多的测试用例,使得 判定中的每个条件 的所有可能(真/假)至少出现一次,并且每个判定本身的判定结果也至少出现一次。条件组合覆盖条件组合覆盖,也称多条件覆盖MCC (Multiple Condition Coverage),设计足够多的测试用例,使得每个判定中条件的 各种可能组合 都至少出现一次(以数轴形式划分区域,提取交集,建立最少的测试用例)。这种方法包含了“ 分支覆盖 ”和“ 条件覆盖 ”的各种要求。满足 条件组合覆盖 一定满足 判定覆盖 、条件覆盖、判定条件覆盖。路径覆盖路径覆盖率的公式:路径覆盖率=被执行到的路径数/程序中总的路径数。优点: 路径覆盖是覆盖率最高的一种覆盖技术。路径覆盖测试步骤:3. 生成路径图;4. 进行路径编码;5. 经过 译码得到执行的路径;7. 修正的条件判断覆盖率(MC/DC)