深入了解软件测试

Posted 眰恦ღ

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了深入了解软件测试相关的知识,希望对你有一定的参考价值。

软件开发模型

在软件开发的几十年实践中,人们总结了很多软件开发模型用来描述和表示一个复杂的开发过程,如:瀑布模型、快速原型模型螺旋模型

瀑布模型

1、是线性模型的一种,在所有模型中占有重要地位,是所有其他模型的一个基础。
2、每一个阶段执行一次,按线性顺序进行软件开发。

测试的切入点:测试阶段处于软件实现后,必须在代码完成后留出足够的时间给测试活动,否则将导致测试不充分,很多问题到项目后期才暴露

优点:开发的各个阶段比较清晰;强调早期计划及需求调查;适合需求稳定的产品开发;

缺点:依赖于早期的需求调查,不适应需求的变化; 单一流程不可逆; 风险往往延至后期才显露,失去及早纠正的机会; 问题在项目后期才开始暴露;前面未发现的错误会传递并扩散到后面的阶段,可能导致项目失败;

改良:每个阶段都可以融入小的迭代工作!

快速原型模型

实现一个基本原型,让用户对原型进行评价,逐步调整,使其满足用户最终需求;

1、建造一个快速原型,实现用户与系统的交互,用户对原型进行评价,进一步细化待开发软件的需求。通过逐步调整原型使其满足用户的要求,开发人员可以确定用户的真正需求是什么。

2、在第一步的基础上开发出用户满意的软件产品。

优点:克服瀑布模型的缺点,更好地满足用户的需求并减少由于软件需求不明确带来的项目开发风险。适合预先不能确切定义需求的软件系统的开发。[适合不能确定需求的软件]

缺点:不适合大型系统的开发(适合开发小型的、灵活性高的系统)。前提要有一个展示性的产品原型,因此在一定程度上可能会限制开发人员的创新。

软件测试&软件工程

软件测试与软件工程息息相关,软件测试是软件工程组成中不可或缺的一部分。在软件工程、项目管理、质量管理得到规范化应用的企业,软件测试也会进行得比较顺利,软件测试发挥的价值也会更大。要关注软件工程、质量管理以及配置管理与软件测试的关系;在不同的开发模式下,如何进行软件测试。

随着测试过程的管理和发展,测试人员通过大量的实践,从而总结出了不少测试模型,如常见的V模型、W模型、H模型等。这些模型与开发紧密结合,对测试活动进行了抽象,成为了测试过程管理的重要参考依据。

软件测试模型

v模型

V模型是最具有代表意义的测试模型,最早是由Paul Rook在20世纪80年代后期提出,由英国国家计算机中心文献中发布,旨在改进软件开发的效率和效果;
V模型推出之前,人们通常把测试过程作为在需求分析、概要设计、详细设计、编码全部完成之后的一个阶段,尽管当时已经出现了测试工作会占用这个项目周期一半的时间,但是大多数人认为测试只是一个收尾工作;V模型在这个时候推出,就是为了改变之前行业的普遍认识。
V模型本身是软件开发中瀑布模型的变种,它反映了测试活动与分析和设计的关系。
V模型标明了测试过程中本身存在的不同阶段,从左到右,描述了开发过程和测试过程间的阶段对应关系。

1、 单元测试:又称模块测试,针对单一的程序模块进行的测试

2、 集成测试:又叫组装测试,在单元测试的基础上,对所有模块进行测试。

3、 系统测试:将整个软件看做一个整体来进行测试,包括功能、性能、兼容性

4、 验收测试:

  • 内测版(alpha)内部交流版本,可能存在很多bug,不建议用户安装。
  • 公测版(beta)面向所有用户,通过用户的反馈再去修改细节。
  • 候选版(gamma)与正式软件相差无几。

优点:包含了底层测试(单元测试)和高层测试(系统测试);清楚的标识了开发和测试的各个阶段;自上而下逐步求精,每个阶段分工明确,便于整体项目的把控。

缺点:自上而下的顺序导致了,测试工作在编码之后,就导致错误不能及时的进行修改;实际工作中,需求经常变化,导致v模型步骤,反复执行,返工量很大,灵活度较低。

改良:每个步骤都可以进行小的迭代工作。


w模型

IEEE std1012-1998《软件验证和确认(V&V)》的原则中提出了在软件的需求和设计阶段也应有测试活动,并且提出了相应的原则;W模型由Evolutif公司提出:开发一个V,测试一个V,组合的W模型;测试伴随着整个软件开发周期,并且测试的对象不仅仅是程序,需求和设计同样要测试。

开发一个v;测试一个v组合起来的模型(w模型也叫双v模型)

优点:开发和测试伴随着整个开发周期,需求和设计同样要测试;更早的介入测试,可以发现初期的缺陷,修复成本低;分阶段工作,方便项目整体管理。

缺点:开发和测试依然是线性的关系,需求的变更和调整,依然不方便;如果没有文档,根本无法执行w模型;对于项目组成员的技术要求更高!


H模型(了解)

人们发现虽然软件开发中需求、设计、编码等活动被分阶段执行、但是实践中,他们并不是完全串行的,它们之间更多时候是交叉进行的,更多的是迭代执行。

为了解决上面的问题,有专家专门提出了H模型,它将测试活动完全独立出来,形成一个完全独立的流程,同时将测试准备和测试执行也清晰表现出来。

测试准备:所有测试执行活动的准备;判断是否到测试就绪点;
测试就绪点:测试准入准则,即是否可以开始执行测试的条件;
测试执行:具体的执行测试的程序。
其他流程:具体开发中的流程,如:设计流程

优点:开发的H模型揭示了软件测试除测试执行外,还有很多工作;软件测试完全独立,贯穿整个生命周期,且与其他流程并发进行;
软件测试活动可以尽早准备、尽早执行,具有很强的灵活性;软件测试可以根据被测物的不同而分层次、分阶段、分次序的执行,同时也是可以被迭代的。

缺点管理型要求高:由于模型很灵活,必须要定义清晰的规则和管理制度,否则测试过程将非常难以管理和控制;技能要求高:H模型要求能够很好的定义每个迭代的规模,不能太大也不能太小;测试就绪点分析困难:测试很多时候,你并不知道测试准备到什么时候是合适的,就绪点在哪里,就绪点的标准是什么,这就对后续的测试执行的启动带来很大困难;对于整个项目组的人员要求非常高:在很好的规范制度下,大家都能高效的工作,否则容易混乱。例如:你分了一个小的迭代,但是因为人员技能不足,使得无法有效完成,那么整个项目就会受到很大的干扰。

总结:v模型适用于中小企业,w模型适用于中大型企业(因为人员要求高),h模型人员要求非常高,很少有公司使用。

软件测试分类

按测试阶段分类

单元测试

又称模块测试,针对软件设计中的最小单位——程序模块,进行正确性检查的测试工作。单元测试需要从程序的内部结构出发设计测试用例。多个模块可以平行地独立进行单元测试。

单元定义:C中指一个函数,Java中指一个类,在图形化的软件中,单元一般指1个窗口,1个菜单。

集成测试

又叫组装测试,通常在单元测试的基础上,将所有程序模块进行有序的、递增的测试。重点测试不同模块的接口部分。

系统测试

指的是将整个软件系统看为一个整体进行测试,包括对功能、性能、以及软件所运行的软硬件环境进行测试。
系统测试在系统集成完毕后进行测试,前期主要测试系统的功能是否满足需求,后期主要测试系统运行的性能是否满足需求,以及系统在不同的软硬件环境中的兼容性等。


按是否查看源代码分类

黑盒测试(black-box testing)

又称数据驱动测试,完全不考虑程序内部结构和特性,注重于测试软件的功能需求,只关心软件的输入数据和输出数据。

黑盒测试能发现的错误:功能不对或功能遗漏;界面错误;数据库访问或者处理错误;性能问题

优点:测试人员不需要了解实现的细节,包括特定的编程语言(没有编程经验的人也可以设计测试用例);测试人员和编程人员是相互独立的(黑盒测试用例设计与程序如何实现无关);从用户的角度进行测试,很容易被接受和理解;有助于暴露任何与规格不一致或者歧异的地方;

缺点:不能测试程序内部特定部位;如果程序未执行的代码无法发现;不可能做到穷举测试;

白盒测试(white-box testing)

指的是把盒子打开,去研究里面的源代码和程序结构。

在软件公司,往往采用黑盒测试&白盒测试相结合的方式。

灰盒测试

介于白盒测试与黑盒测试之间的一种测试,既可保证黑盒的关注点又可掌控白盒的内部结构,但不会去对内部程序功能和运作做详细了解,灰盒测试结合了白盒测试和黑盒测试的要素。

按是否运行分类

静态测试 [static testing] 指不实际运行被测软件,而只是静态地检查程序代码、界面或文档中可能存在的错误过程。

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

其他测试类型

验收测试

α测试:Alpha 是内测版本,即现在所说的CB,此版本表示该软件仅仅是一个初步完成品, 通常只在软件开发者内部交流, 也有很少一部分发布给专业测试人员。一般而言, 该版本软件的bug 较多, 普通用户最好不要安装。

β测试:Beta是公测版本,是对所有用户开放的测试版本。该版本相对于α 版已有了很大的改进,消除了严重的错误, 但还是存在着一些缺陷,需要经过大规模的发布测试来进一步消除。这一版本通常由软件公司免费发布, 用户可从相关的站点下载。通过一些专业爱好者的测试, 将结果反馈给开发者, 开发者们再进行有针对性的修改。该版本也不适合一般用户安装。

γ测试:Gamma版本,指的是软件版本正式发行的候选版。该版本已经相当成熟了, 与即将发行的正式版相差无几, 成为正式发布的候选版本。

随机测试(探索测试)

主要是对被测软件的一些重要功能进行复测,也包括测试那些当前的测试用例没有覆盖到的部分。另外,对于软件更新和新增加的功能要重点测试。重点对一些特殊点情况点、特殊的使用环境、并发性、进行检查。尤其对以前测试发现的重大Bug,进行再次测试,可以结合回归测试(Regressivetesting)一起进行。

黑盒测试分类

功能测试(functiontesting)

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

  • 逻辑功能测试(functiontesting)
  • 界面测试(UItesting)
  • 易用性测试(usability testing)
  • 安装测试(installationtesting)
  • 兼容性测试(compatibilitytesting)

性能测试(performance testing)峰值(后面详细 现在了解)

是软件测试的高端领域,性能测试工程师的待遇和白盒测试工程师不相上下,通常我们所说的高级软件测试工程师一般就是指性能测试或是白盒测试工程师。

  • 时间性能(事务响应时间等)
  • 空间性能(系统资源消耗)
  • 一般性能测试
  • 稳定性测试
  • 负载测试:通过负载测试来确定在各种工作负载下,系统各项性能指标的变化情况。
  • 压力测试:通过确定一个系统的瓶颈或者刚好不能接受的性能点,来获得系统能够提供的最大服务级别。

以上是关于深入了解软件测试的主要内容,如果未能解决你的问题,请参考以下文章

基础算法(数据结构笔试复测Leecode牛客)

深入了解软件测试

排序相关代码(数据结构笔试复测Leecode牛客)

动态规划(数据结构笔试复测Leecode牛客)

Ubuntu16.04 本地提权漏洞复测过程

数据结构栈队列相关代码(数据结构笔试复测Leecode牛客)