课程目标 

了解软件测试的七大原则
掌握软件测试的分类方式
了解各测试阶段的定义、依据、方法等

课程内容

●测试原则
 ●软件测试的分类
 ●软件测试流程
 ●软件测试的过程模式

测试原则

1.所有的测试都应追溯到用户需求 2.应当把“尽早测试和不断地进行软件测试”作为软件测试者的座右铭 3.Pareto原则应用于软件测试 4.测试应从“小规模”开始,逐步转向“大规模” 5.穷举测试是不可能的 6.为了达到最佳效果,应该由独立的第三方来构造测试 7.不充分的测试是不负责任的,过分的测试是一种资源的浪费,同样也是一种不负责任的表现

1.所有的测试都应追溯到用户需求

软件测试的目标在于揭示缺陷和错误。而最严重的错误(从用户角度来看)是那些导致程序无法满足需求的错误,从而无法满足用户需求

2.把“尽早测试和不断地进行软件测试”作为座右铭

不应该将软件测试看成是程序写完之后才开始的一项工作。问题发现得越早,解决问题的代价越小,反之,缺陷发现得越晚,缺陷修复的成本越高。若缺陷遗留到用户手中,则将对公司、对用户都有可能带来极其严重的后果。

3.Pareto原则应用于软件测试

●简单地讲,Pareto原则暗示着测试发现的错误中的80%很可能起源于程序模块中的20%,这就是缺陷群集现象。
 ●造成缺陷群集现象的主要原因:
(1)程序员的疲劳 (2)程序员的习惯

4.测试应从“小规模”开始逐步转向“大规模”

所谓小规模是指测试的粒度,或某种程序的单元测试。进一步的测试将从单个单元的测试逐步过渡到多个单元的组合测试,即集成测试,最终过渡到系统测试。

5.穷举测试是不可能的

(1)每个输入条件的数据量太大,不同输入条件之间的组合情况太多
(2)从输出来看,输出结果太多
(3)数据的处理方式是常规的方法,然而由于要处理的数据量太大,每种数据类型所包含的有效和无效数据往往是无穷多的
(4)从计算来看,由于算法的复杂度越来越高,结合业务的复杂性,导致路径组合近似天文数字,遍历每条路径的穷举测试,即使对于一个非常熟练的测试员而言,也是不可能的

测试出口条件参考标准

遗留缺陷数量低于10个,其中严重的缺陷少于5个
测试用例的执行率为100%,通过率为95%
对于单元测试,关键模块的语句覆盖率为100%,判定覆盖率为85%

6.为达到最佳效果,应该由独立的第三方来构造测试

不愿否定自己的工作
 
受到思维定势的局限
 受进度压力的影响
 程序员对程序的功能和接口很熟悉,这与最终用户的情况往往并不吻合,开发人员自己来测试程序难以具有典型性

7.不充分的测试是不负责的,过分的测试是一种资源的浪费

测试分类的几种情况

 按测试阶段分类
 按是否需要执行被测试软件分类
 按是否需要查看代码分类
 按测试执行时是否需要人工干预 分类
 其他测试类型

定义      单元测试(Unit Testing)又称模块测试(Module Testing),是指对软件中的最小可测试单元进行测试,目的是检查每个单元是否能够正确实现详细设计说明中的功能、性能、接口和设计约束等要求,发现各个模块内部可能存在的各种缺陷。
 优点      是一种管理和组合测试元素的手段
                 减轻调试的难度
                 提供同时测试多个单元的可能

集成测试(Integration Testing)又称组装测试,是在单元测试的基础上,按照设计要求,将通过单元测试的单元组装成系统或子系统而进行的有序的测试,目的是检验不同程序单元或部件之间的接口关系是否符合概要设计的要求,能否正常运行。
 
确认测试是通过检验和提供客观证据,证实软件是否满足特定预期用途的需求。确认测试检测与证实软件是否满足软件需求说明书中规定的要求

系统测试(System Testing)是为了验证和确认系统是否达到其原始目标,而对集成的硬件和软件系统进行的测试,是在真实或模拟系统运行的环境下,检查完整的程序系统是否能和系统(包括硬件、外设、网络和系统软件、支持平台等)正确配置、连接,并满足用户需求。
    系统测试主要由黑盒测试工程师在整个系统集成好之后进行。前期主要看系统功能是否满足需求,这被称为功能测试。后期主要测试系统运行是否满足要求,以及系统在不同硬件和软件环境中的兼容性等,这被分别称为性能测试、兼容性测试、用户界面测试等。有人也喜欢将功能测试从系统测试中单独提出来,作为集成测试和系统测试之间的一个测试环节。
系统测试的主要依据是软件的需求规格说明文档。

定义         验收测试(Acceptance Testing)又称接受测试,是一种正式的测试,是在系统测试后期,以用户测试为主,或有测试人员等质量保证人员共同参与的测试,是一般由用户或其他权威机构来决定是否可以接受一个产品(系统或组件)的验证性测试。验收测试是软件正式交付给用户使用的最后一个测试环节,并决定用户是否最终验收签字和结清所有应付款。
主要依据   软件需求规格说明文档和验收标准。
测试用例   可以直接采用内部测试组所设计的系统测试用例的子集,也可以由验收人员自行设计

β测试的优势

    提升了产品价值。
  ●    可发现一些在测试实验室无法发现、甚至重复出现的缺陷。β测试常常会发现产品的局限所在,并测试产品的整个开发过程。
  ●    可以将公司推到“基准框架”之外。
  ●    有助于产品的成功发布。

2、按是否需被测试软件分类

一、静态测试
二、动态测试

定义  静态测试(Static Testing)又称静态分析(Static Analysis),是不实际运行被测软件,而是直接分析软件的形式和结构,查找缺陷。
主要包括对源代码、程序界面和各类文档及中间产品(如产品规格说明书、技术设计文档等)所做的测试。

(1)对于源代码
              静态测试主要是看代码是否符合相应的标准和规范,如可读性、可维护性等,其工作过程类似一个编译器,随着语法分析的进行做特定工作,如分析模块调用图、程序的控制流图等图表,度量软件的代码质量等。
(2)对于程序界面
             静态测试主要是查看软件的实际操作和运行界面是否符合需求中的相关说明。
(3)对于文档

1. 静态测试主要是检查用户手册与需求说明是否真正符合用户的实际要求。
2. 静态测试是采用走查、同行评审、会审等方法来查找错误或收集所需度量数据的。其不需要运行程序,所以相对动态测试,可以更早地进行。
3. 静态分析的查错和分析功能是其他方法所不能替代的,静态分析能发现文档中的问题(也只能通过静态测试发现),通过文档中的问题或其他软件评审发现来找出需求分析、软件设计等问题,而且能有效地检查代码是否具有可读性、可维护性,是否遵守编程规范,包括代码风格、变量/对象/类的命名、注释行等。
 4. 静态测试已被当做一种主要的自动化代码校验方法。

定义    动态测试(Dynamic Testing)又称动态分析(Dynamic Analysis),是指需要实际运行被测软件,通过观察程序运行时所表现出来的状态、行为等发现软件缺陷,包括在程序运行时,通过有效的测试用例(对应的输入、输出关系)来分析被测程序的运行情况或进行跟踪对比,发现程序所表现的行为与设计规格或客户需求不一致的地方。

●    往往需要借助测试用例来完成。即通过执行测试用例、分析测试用例来对被测软件重点考查,以期发现缺陷。相比静态测试,动态测试增加了测试用例的设计、执行和分析,以及由测试用例所带来的用例组织与管理等一系列活动。
●    需要搭建软件特定的运行环境,增加了有关测试环境的配置、维护和管理的工作量。
●    不能发现文档问题,必须等程序代码完成后进行,发现问题相对迟得多。

    (1)协同性
静态测试是保守和健壮的,其测试结果离我们的期望值可能还有距离,但它保证了将来的执行。
动态测试是有效和精确的,它不需要花费大量的分析过程,尽管它确实需要测试用例的设计、执行和结果分析。动态测试给出了高度精确的结果。
     (2)独立性
静态测试需要建立程序的状态模型(如函数调用图、控制流图等),在此基础上确定程序对该状态的反映(如通过各种图表分析,找出多入口多出口的模块、高层控制模块等)。因系统可能执行的状态有很多,测试必须跟踪多个不同的状态,通常经过大量细致的分析后也不一定能考虑到所有的系统状态。因此,静态分析通常采用程序状态的抽象模型,并需要较长时间的等待。
动态测试过程中不存在近似和抽象的概念,它直接执行程序段,检查实时的行为,在控制流程路径中,几乎不存在不确定因素。

3、按是否需要查看代码分类

黑盒测试
 白盒测试
 灰盒测试

黑盒测试是将被测试软件看做一个黑盒子,只考虑系统的输入和输出,完全不考虑程序内部逻辑结构和处理过程。黑盒测试的依据是各阶段的需求规格说明(如需求分析阶段是产品的需求规格说明书,单元测试阶段是函数的详细设计说明书)。
黑盒测试又称功能性测试(Functional Testing)或数据驱动测试(Data-driven Testing)。但是,功能性测试不等于功能测试。黑盒测试是从功能的角度检查软件是否满足需求规格说明的要求,但并不仅限于功能测试。

    白盒测试是将黑盒子打开,研究源代码和程序内部的逻辑结构。白盒测试的依据是程序代码。
       白盒测试又称结构性测试(Structural Testing)或逻辑驱动测试(Logic-driven Testing)。
          值得注意的是,白盒测试并非仅限于对程序源代码的测试。对于高层的测试,仍然可以采用某些白盒测试的方法。

●程序代码往往具有多个分支。白盒测试可以利用不同的覆盖准则来测试这些分支,黑盒测试则无法做到这一点。
●白盒测试的覆盖指标可以充当黑盒测试的检查手段。例如,若采用黑盒方法设计的测试用例(如边界值测试)没有满足某些白盒测试覆盖指标(如判定覆盖)的要求,则证明该测试用例集合必然存在漏洞。
●代码中常存在内存泄露的问题,尤其是C/C++程序,白盒测试可以方便地发现内存泄露的问题,且是直接定位缺陷,而黑盒测试只能通过长时间运行程序,并仔细地检查用例执行结果,才能发现这类问题。
●有时只有在某种极端的条件下才会出现的情况,是难以直接进行功能测试的,如卫星在太空中收到电磁辐射。这时,缺陷预防是测试的主要目的,白盒测试通过对源代码的静态分析可以发现该类问题。

●程序代码往往具有多个分支。白盒测试可以利用不同的覆盖准则来测试这些分支,黑盒测试则无法做到这一点。
●白盒测试的覆盖指标可以充当黑盒测试的检查手段。例如,若采用黑盒方法设计的测试用例(如边界值测试)没有满足某些白盒测试覆盖指标(如判定覆盖)的要求,则证明该测试用例集合必然存在漏洞。
●代码中常存在内存泄露的问题,尤其是C/C++程序,白盒测试可以方便地发现内存泄露的问题,且是直接定位缺陷,而黑盒测试只能通过长时间运行程序,并仔细地检查用例执行结果,才能发现这类问题。
●有时只有在某种极端的条件下才会出现的情况,是难以直接进行功能测试的,如卫星在太空中收到电磁辐射。这时,缺陷预防是测试的主要目的,白盒测试通过对源代码的静态分析可以发现该类问题。

介于白盒测试和黑盒测试之间的测试。灰盒测试关注输出对于输入的正确性;同时也关注内部表现,但这种关注不像白盒测试那样详细、完整,只是通过一些表征性的现象、事件、标志来判断内部的运行状态。
灰盒测试结合了白盒测试和黑盒测试的要素。它考虑了用户端、特定的系统知识和操作环境。它在系统组件的协同性环境中评价应用软件的设计

    软件测试方法和技术的分类与软件开发过程相关联,它贯穿了整个软件生命周期。走查、单元测试、集成测试、系统测试应用于整个开发过程中的不同阶段。开发文档和源程序可以应用单元测试应用走查的方法;单元测试可应用白盒测试方法;集成测试应用近似灰盒测试方法;而系统测试和确认测试应用黑盒测试方法。

4、按是否需要人工干预分类

手工测试
自动测试

     手工测试是完全由人
工完测试工作,包括测试
计划的制定,测试用例的
设计和执行,以及测试结
果的检查和分析等。传统
的测试工作都是由人工来
完成的。

       自动测试是各种测试活动的
管理与实施,是使用自动化测试
工具或自动化测试脚本来进行的
测试,包括测试脚本的开发与执
行等,以某种自动测试工具来验
证测试需求。这类测试在执行过
程中一般不需要人干预,通常在
功能测试、回归测试和性能测试
中使用较为广泛。

5、其他测试类型

冒烟测试
 随机测试

冒烟测试

定义
在测试中发现问题,找到了一个缺陷,然后开发人员回来修复这个缺陷。这时想知道这次修复是否真解决了程序的缺陷,或者是否会对其他模块造成影响,就需要针对此问题进行专门测试,这个过程就被称为冒烟测试在冒烟测试。
优点
节省测试时间,防止创建失败
缺点
覆盖率比较低
冒烟测试是自由测试的一种

定义
根据测试说明书执行样例测试的重要补充手段,是保证测试覆盖完整性有效方式和过程冒烟测试。
特点
主要是对被测软件的一些重要功能进行复测,也包括测试那些当前的测试样例没有覆盖到的部分。另外,对于软件更新和新增加的功能要重点测试。重点对一些特殊情况点、特殊的使用环境、并发性进行检查。尤其对以前测试发现的重大缺陷进行再次测试,可以结合回归测试一起进行

    ※   V模型是最具有代表意义的测试模型,V模型最早是由Paul Rook在20世纪80年代后期提出的,V模型在英国国家计算中心文献中发布,旨在改进软件开发的效率和效果。
   ※   V模型是软件开发传统开发模型-瀑布模型的变种,它反映了测试活动与分析和设计的关系,描述了基本的开发过程和测试行为,非常明确地标明了测试过程中存在的不同级别,并且清楚地描述了这些测试阶段和开发过程中各阶段的对应关系。

局限性:    V模型存在一定的局限性,它仅仅把测试过程作为在需求分析、概要设计、详细设计及编码之后的一个阶段。容易使人理解为测试是软件开发的最后的一个阶段,主要是针对程序进行测试寻找错误,而需求分析阶段隐藏的问题一直到后期的验收测试才被发现。

    ※ 2.W模型应用
             W模型由Evolutif公司提出,相对于V模型,W模型更科学。W模型可以说是V模型自然而然的发展。它强调:测试伴随着整个软件开发周期,而且测试的对象不仅仅是程序,需求、功能和设计同样要测试。可以说,测试与开发是同步进行的,从而有利于尽早地发现问题。

X模型提出探索性测试,即无事先计划的测试,只是随便测一下,这样有助于有经验的测试人员在计划外发现更多的软件缺陷。

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐