测试方法论

测试方法论持续更新

Posted by Shi Hai's Blog on July 27, 2017

一、概况

软件测试定义:软件测试是旨在评估程序或系统的属性或能力并确定其满足其所需结果的任何活动。软件测试是预算,时间和质量之间的平衡。 编程语言学习曲线点这里

二、历史

  测试与调试拆分由Glenford J.Myers于1979年引入。虽然他的注意力是破坏测试,但它表明了软件工程社区将基本开发活动与验证分离的愿望。

三、软件测试基本概念

软件测试发展至今有不同维度的划分类别。

  • 从是否执行程序角度上看,软件测试可划分为:

    • 静态/动态测试:软件测试中有很多方法可用。review、walkthrough及inspection可以被视为静态检查,除此之外都是动态检查。
  • 从是否关心软件内部结构和具体实现的角度上看,软件测试可划分为:

    • 白盒测试:测试程序的内部结构或工作,而不是暴露给最终用户的功能。如:API测试、代码覆盖度测试等。
    • 黑盒测试:黑盒测试检查功能而不需要内部实现的知识&不需要查看源代码。
    • 灰盒测试:灰盒测试者只知道部分的内部结构(如:内部使用的数据结构文档、采用的算法等)。
    • 黑盒测试-模糊测试:模糊测试是一种介于完全的手工渗透测试与完全的自动化测试之间的安全性测试类型。它充分利用了机器的能力:随机生成和发送数据;同时,也尝试将安全专家在安全性方面的经验引入进来。
  • 从软件开发阶段角度上看,软件测试可划分为:

    • 单元测试:又称模块测试,单元测试是指验证特定代码段功能的测试,通常在功能级别。它由软件开发人员在软件开发生命周期的施工阶段执行。
    • 集成测试:将单独的软件模块组合在一起并进行测试。
    • 系统测试:软件或硬件的系统测试是在完整的集成系统上进行测试以评估系统是否符合其规定的要求。系统测试属于黑盒测试的范围,因此不需要知道代码或逻辑的内部设计。
    • 验收测试:由用户执行验收测试。
  • 从测试的具体目的角度上看,软件测试可划分为:

    • 安装测试:在软件行业中,安装测试是一类质量保证工作。安装测试聚焦于用户如何成功的安装和初始化系统。该过程可能会涉及到全量/部分的升级/安装/卸载过程。
    • 兼容性测试:软件故障的常见原因是缺乏与其他应用软件、操作系统的兼容性测试。
    • 冒烟和健康测试:健康检查确定进一步测试是否合理。冒烟测试包含软件操作的最小尝试,旨在确定是否存在任何基本问题,从而防止它发生故障。这样的测试可用作构建验证测试(VT)。
    • 回归测试:回归测试用于验证之前开发和测试的软件在更改或与其他软件进行链接后仍然执行相同的方式。在回归测试期间,可能会发现新的软件错误或回归。回归测试的目的是为了确保软件变更没有引入新的错误并确定软件一部分的更改是否影响软件的其他部分。
    • 功能性测试/非功能性测试:功能性测试是指验证代码的具体操作或功能性的活动。
    • 软件性能测试:软件性能测试可用于确定系统或子系统在特定工作负载下的响应时间和稳定性方面的表现。
    • 安全测试:pass
    • 并发测试:pass
  • 从测试手段的自动化角度上看,软件呢测试可划分为:

    • 手动测试:pass
    • 自动测试:pass
    • 持续测试:持续测试指的是执行自动化测试的过程,该过程是软件交付管道的一部分并对相关软件版本进行测试并及时反馈最后结果。
  • 按测试组织角度划分,软件测试可划分为:

    • Alpha测试:Alpha测试是由潜在用户或者测试团队对系统发起的模拟或者真实的操作测试,是内部验收测试的一种形式。
    • Beta测试:Beta测试来自于Belta测试,可以被认为是外部用户验收的一种形式。该版本被称为beta版本,被发布给有限的受众之外的编程团队。
    • Gamma测试:Gamma是很少被提及的非正式测试阶段,该测试阶段对应的是对“存在缺陷”产品的测试。

四、业界经典分层测试理念

4.1 测试金字塔

越是底部的测试,测试执行成本越低,所以尽量多做底部的测试。 测试倒金字塔模式 多团队协同操作不当也可能陷入"蛋糕杯"反模式中。 蛋糕杯反模式 若陷入蛋糕杯反模式中,则需要多团队对齐目标,调整各自工作重心从而协调回倒倒金塔模式。

4.2 菱形测试模型

  从网上能找到的观点认为是因为互联网发布快所以来不及做单元测试以及微服务模式,所以互联网的测试重心是API测试。对于互联网产品是否不做单元测试,在《软件测试52讲》中得到了比较清晰的答案。互联网产品通常会分为应用层和后端服务,后端服务又可以进一步细分为应用服务和基础服务。后端基础服务和一些公共应用服务相对稳定,而且对于系统全局来说是 “ 牵一发而动全身 ” ,所以后端服务很有必要开展全面的单元测试;而对于变动非常频繁的客户端应用和非公用的后端应用服务,一般很少会去做单元测试。另外,对于一些核心算法和关键应用,比如银行网关接口,第三方支付集成接口等,也要做比较全面的单元测试。 总结来讲,互联网产品的全面单元测试只会应用在那些相对稳定和最核心的模块和服务上,而应用层或者上层业务服务很少会大规模开展单元测试。 菱形模型

五、引用文献

若本文引用涉及内容及图片未在此章节注明或被禁止引用,欢迎大家纠正,谢谢。