1.软件测试行业的基本介绍
1.1.为什么需要软件测试
1.任何一款软件都不能保证100%没有问题,一款软件从无到有会经历很多开发阶段由不同的开发人员来参与开发,所以更有可能存在问题,因此为了保证软件功能是可用的,我们必须进行测试。
2.现在已经不是功能为王的时代了,现在除了基本功能的实现,用户更看重的是软件是否容易上手,效率是否ok,等这也需要测试人员对软件进行大量的测试。
1.2.为什么选择软件测试
1.国内软件行业正慢慢注重软件测试,软件测试人员需求慢慢变大。
2.有些人喜欢创造世界所以选择了开发,而我们就是希望世界更完美。
1.3.为什么不让开发自己做测试
1.专业度:软件开发和软件测试分别属于软件行业中不同的技术方向,所以让专人做专事对质量更加有保障。
2.思维方式:软件开发人员更多的是想着怎么完成需求,而不会以用户的角度去“奇葩”的使用这些功能。
3.测试力度:相对于开发来说产品就是他的“亲儿子”,下手力度不会太大,仅仅测几次得到想要的结果就完事了。
4.自己难以发现自己的错误,总觉得自己写的是完美的,“不识庐山真面目,只缘身在此山中。”
2.软件测试基本介绍
2.1软件测试的定义
通过手动或自动(自动化测试)对软件进行测试,从而验证实际结果与预想结果是否存在差异。
2.2软件测试的作用
1.测试可以发现并修复软件中存在的缺陷,避免用户使用到有缺陷的软件,使用户对软件更有信心。
2.测试可以记录软件运行过程中产生的一些数据,从而为决策提供数据支持。
2.3软件测试的七个原则
所谓的原则就是我们进行测试时要遵守的一些规则。
1.测试显示软件存在缺陷:意思就是测试的目的是为了证明软件有缺陷,而不是证明软件没缺陷。测试的目的是尽量降低存在缺陷的可能性,即使没有发现缺陷也不能证明软件是完美的。
2.穷尽测试是不可能的:现在软件规模越来越大,复杂度越来越高,想要做到完全性的测试是不可能的。测试人员可以根据风险和优先级来进行集中的高强度的测试,来保证软件的质量。
3.测试尽早介入:测试人员一般在需求阶段就开始介入,使缺陷在需求阶段或设计阶段就被发现,缺陷发现越早,修复成本就越小。
4.缺陷集群性(2/8原则):缺陷集群性表明小部分模块包含大部分缺陷。一般来说你在一个模块发现的缺陷越多,那么这个地方未发现的缺陷也越多,未发现的缺陷和发现的缺陷成正比。2/8原则就是%80的缺陷出现在20%的模块中。
5.杀虫剂悖论:反复使用相同的杀虫剂会导致虫子对杀虫剂产生免疫,从而无法杀死虫子,测试也是如果一直使用一套测试方法或手段,无法发现新的bug。测试用例应该定期修改和评审,增加新的测试用例和方法帮助发现更多的缺陷。
6.测试活动依赖测试内容:软件测试也分为不同的行业,比如游戏,电商,金融,不同的行业不同的业务,根据业务的不同测试的方法也不尽相同。
7.没有错误是好事谬论:有可能99%没有bug的软件也不能用,这种情况出现在需求有误时,软件测试不仅要找出软件的缺陷,也要确认软件是否满足需求,如果开发出的软件不满足用户的需求,即使找到了和修复了缺陷意义也不大。
3.测试对象
对于当前的测试行业来说,我们最经常测试的主体就是软件。但我们要知道软件不仅仅只有功能需要我们的测试。我们可以将软件分为三个部分组成:功能集合+使用说明(说明书)+配置数据(初始化数据)
功能集合:就是测试软件的主体功能是否有缺陷。
使用说明:就是按照说明书操作看有没有缺陷,测试说明书的正确性。
配置数据:就是测试使用配置数据有没有缺陷,有没有达到预期的效果。
1.需求分析阶段:各种需求说明书
2.软件架构设计:API接口文档(接口测试)
3.编码实现阶段:白盒测试,单元测试
4.系统功能使用:软件功能主体
4.测试级别
测试级别就相当于开发中的开发模型,下面要说的是最常见的一种测试级别
1.单元测试:在软件测试中单元是组成软件最小的底层代码,一般指类,函数,用于测试方法或类的功能是否实现。
2.集成测试:将多个模块组合在一起,然后测试它们之间沟通的“桥梁”能否正常工作(接口测试)。
3.系统测试:这是当前行业做的最多的一种测试,由测试人员充当用户对软件主体功能进行测试。下面单独说
4.验收测试:分为α(内测)测试和β(公测)测试以及UAT(USER ACCEPTANCE TEST)测试。
UAT测试就是客户派出一些专业人员使用该软件,来进行测试。
5.系统测试分类
1.功能测试:验证当前软件的主体功能是否可用。
2.兼容性测试:验证软件在不同环境下是否还可已使用。
3.安全测试:验证软件是否只能是授权用户提供功能使用。
4.性能测试:相对于软件消耗的资源,它的产出能力。
6.系统测试方法
1.按测试对象进行分类
*白盒测试:这种测试主体就是软件底层代码,不在意外在界面是否ok,只要求底层功能实现,同时逻辑正确。
*黑盒测试:这种测试主要就是看外在的主体功能是否可用。
*灰盒测试:介于两者之间(接口测试)。
2.按测试对象是否执行进行分类
*静态测试:测试对象不执行。(一般是说明书,API接口文档,静态展示性质的)。
*动态测试:将软件运行在真是的环境中进行测试。
3.按测试手段进行分类
*手动测试:由测试人员手动的对测试软件进行验证,优点是可以灵活地改变测试操作。
*自动化测试:自动化测试分为两种,一种是测试人员编写的测试脚本,另一种是通过第三方工具测试。优点是可以高效率的执行一些人工无法执行的操作。
7.软件质量特征
软件质量有6大特征
1.功能性:满足用户显示或隐示的功能
2.易用性:易用性,好上手
3.可靠性:必须实现需求中指明的功能
4.效率性:性能
5.可维护性:要求软件有将某个功能修复后在使用的能力
6.可移植性:可以讲软件从一个平台移植到另一个平台仍然能用的能力
8.软件测试流程
1.需求分析(不是分析需求,是分析需求的正确性。)
*当前阶段的核心目的就是要梳理清楚业务。
2.设计用例
*用例就是用户为了测试软件的某个功能而执行的操作过程。
*设计用例是有方法的(等价类、边界值、判定表……)
3.评审用例
对当前的用例进行评审修改或删除
4.配置环境
*环境指的是当前被测对象运行所需的执行环境,作为测试人员需要拒赔配环境的能力。【一般情况下都会使用一键安装的集成环境】
*环境分类:操作几桶+服务器软件+数据库+软件底层代码的执行环境。
5.执行用例
一般在执行用例前我们会做一个冒烟测试,意思就是先快速的对当前软件的核心功能或主题执行流程进行验证。如果冒烟阶段有问题则将此版本回退给开发,如果冒烟测试通过才会开展全面的测试。
6.回归测试及缺陷跟踪
*回归测试就是当我们发现缺陷给到开发人员并修复完成后,再次对其进行测试。
*缺陷跟踪就是指当我们发现某个缺陷后需要一直对其进行状态跟踪(是否修复,是否回测)。
7.输出测试报告
将测试过程中产生的数据进行可视化的输出。方便其他人查看。
8.测试结束
将整个测试过程中产生的一些文档进行整理归档,方便以后使用。
9.软件架构【科普】
B/S browser/server 浏览器到服务端 优点:标准,安全 缺点:效率不如C/S,因为C/S中的客户端会分担一些数据处理
C/S client/server 客户端到服务端 优点:效率 缺点:开发麻烦还得开发客户端