不管做什么事情,都需要提前进行检查,那么,其检查的意义是什么呢?是为了该事情能够顺利进展。那么,软件的测试也是一样,都是为了确保该产品能够正式上线所做的一些准备。上一篇中,米么信息给大家介绍了用户体验,那么,今天就来说一说测试对于一款软件的意义吧。
一、什么是软件测试?
软件测试是一项检查实际结果是否符合预期结果并确保软件系统没有缺陷的活动。软件测试还有助于识别不符合实际需求或缺少项目的产品。测试活动可以手动或自动化工具进行。有些人喜欢称软件测试为白盒测试和黑盒测试。
二、为什么需要测试
往往许多人都使用自动化工具进行测试,原因主要有两点:
1、保证这个 commit不会影响其他部分的逻辑。
2、保证这个 commit的功能代码没有任何 bug。
第一点是最重要的因素。想象一下,你还记得一个月前在一个大项目中写的代码吗?您记得小伙伴提交的是什么代码吗?您知道这个代码对上下游之间的影响吗?到那时,自动化测试的好处就很明显了,它可以在更短的时间内确定 commit对整个逻辑的影响,如果整个自动化测试用例都被忽略,那么它影响其他业务逻辑部分的可能性就很小。假如我们正在建造一座大厦,自动化测试将确保每一块砖头、每一粒沙子都符合质检要求。
《快速软件开发》指出,修正bug的代价是bug出生时修正的代价的10倍。小编认为,对于比较复杂的系统,成本远远不止10倍。磨刀不误砍柴,在研发过程中,自动化测试是锐利的宝剑,在一定程度上有效地保证了合并代码的可靠性,是快速反复的基础之一,最终提高了研发效率,保证了产品质量。
防火胜于救火,我们必须用各种手段尽量避免bug,不要制作渐进、有成就感的开发状态,制作出不同的shit,每个人都成为救火队员。
三、测试的分类
从层次的纬度,可以将测试分为三类:单元测试、集成测试、性能测试
1、单元测试是面向函数级的、由开发者编写的、用于测试一个或多个函数功能的测试用例。单元测试环境应该易于构建和运行,通常运行时不依赖其他服务:例如数据库、缓存、第三方服务等等,因此 mock框架常常需要生成其他依赖项,这样有助于提高开发效率。单元测试集中于覆盖范围,通常大约70-80%的覆盖范围能够满足大多数场景。
2、集成测试是一个面向API的测试用例,由开发人员/测试人员编写,用来测试一个或多个API是否正常工作,以及多个组件是否相互协作正常工作。集成测试环境的构建相对复杂,可能依赖于数据库、缓存、第三方服务等,而且一般都是大家分享的。
3、性能测试主要用于测试性能、分析性能瓶颈等。类似于高级测试。受各种条件的影响,不同应用的性能测试方法是不一样的,这里不展开。
通常常情况下,每次commit都要先跑单元测试和集成测试,然后才能提交。每次发布上线,都必须确保发布的版本可以通过单元测试和集成测试,有些应用甚至要求跑单性能测试。
四、什么时候更需要测试
1、项目的核心程度
不用说,核心项目越多,需要越多的测试用例来确保其代码质量。
2、代码量
测试用例越多,整个项目的代码越多,就越需要保证其质量。大量代码意味着理解所有逻辑变得更加困难,而且每一次 commit都会产生更多的不确定性。个别人认为,当功能代码在数千行时,您可以自己决定是否需要测试;当功能代码超过5000行时,请补充单元测试;如果应用程序具有 API,请补充集成测试。
3、开发人员数量
开发人员的数量越多,测试用例就越必要。开发人员越多,特别是水平不一致时,交流成本大幅度增加,研发效率下降,导入缺陷的概率增加。因此,开发人员越多,就越需要自动门槛,过滤低质量的commit。
4、编程语言
通常情况下,动态类型语言在运行时进行数据类型检查,例如python、ruby,而静态类型语言需要严格定义数据类型,并在编译过程中检查数据类型,例如c。因此python等动态类型语言需要测试的不仅仅是静态语言。
5、项目研发周期
对开放源码项目来说,一般的开放源码项目都有大量的测试用例,在进行任何开发和迭代之前,建议您先构建 CI/CD,然后逐步迭代。
对于自行开发的项目,在项目开发初期,需要进行架构设计,选择一些重要的第三方模块。所以项目初期的不确定性会比较大。如果测试框架和用例设计得太早,很容易成为绊脚石,降低研发效率。当项目结构相对稳定时,核心模块已经选定,基本功能可用。需要给项目增加一个测试框架,补充测试用例,达到一定的覆盖率,为以后的迭代开发提供坚实的基础。
以上便是米么信息整理的测试对于软件的意义,如果有软件开发方面的需求,欢迎上米么信息咨询!