测试基础

 

软件测试基础

 

 

 

1.什么是软件测试?

 

  软件测试就是在规定的条件下对一个产品或程序进行操作,以发现程序错误,衡量软件质量,并对其是否能满足设计要求进行评估的过程。

 

 

 

2.发展现状

 

  目前国内软件测试和开发人员比例大约在1:4——1:5而国外的测试和开发人员的比例是1:1,可见国内缺乏大量测试人才。

 

         现有以下特征:

 

  就业竞争小,工作起点高

 

  薪资待遇好,职业寿命长

 

  无性别歧视。

 

 

 

3.职业发展

 

  初级测试工程师 

 

    通过网络或者是书籍学习或具有一些手工测试经验的个人,需要掌握独立编写功能测试用例,执行测试计划,编写测试报告,以及常用命令和常用工具的使用

 

   测试工程师/测试分析员

 

    具有1-2年经验的测试工程师或程序员。 能编写自动测试脚本和性能测试,进一步拓展编程语言、操作系统、网络与数据库方面的技能。

 

  高级测试工程师/测试分析师

 

    具有3-4年经验的测试工程师或程序员。帮助开发或维护测试或编程标准与过程,负责同级的评审,并为其它初级的测试工程师或程序员充当顾问。继续拓展编程语言、操作系统、网络与数据库方面的技能。

 

  测试组负责人

 

    具有4-6年经验的测试工程师或程序员。负责管理 1至 3名测试工程师或程序员,担负一些进度安排和工作规模/成本估算职责,更集中于技能方面。

 

  测试/编程负责人

 

    具有6-10年经验的测试工程师或程序员。负责管理8至 10名技术人员,负责进度安排、工作规模/成本估算、按进度表和预算目标交付产品,负责开发项目的技术方法,为一些用户提供支持与演示,开发一些特定领域的技术专长。

 

  测试/质量保证/开发(项目)、经理

 

    具有10多年的工作经验。 管理 8名或更多的人员参加的1个或多个项目, 负责这一领域 (测试/质量保证/开发)内的整个开发生存周期业务,为一些用户提供交互和大量演示,负责项目成本、进度安排、计划和人员分工。

 

  计划经理

 

    具有15年以上开发与支持(测试/质量保证)活动方面的经验。管理从事若干项目的人员以及整个开发生存周期,负责把握项目方向与盈亏责任。

 

 

 

4.职业发展空间

 

结合国内外软件测试行业现状,划分为三个方向,分别是:

 

自动化测试工程师、白盒测试工程师、性能测试工程师。

 

自动化测试工程师,为其定义在功能测试范畴,指通常所说的依靠自动化测试工具进行软件黑盒测试的工程师。 

白盒测试工程师,定位于在软件测试周期的单元测试阶段对软件进行的代码级测试的人,包括代码走读、代码功能与逻辑测试、代码内存泄漏检查、代码运行效率检查、代码测试覆盖率分析等。

 性能测试工程师, 即在系统测试阶段、功能测试后对软件系统性能指标进行采集分析和运行效率检测。

 

 

 

1.  软件缺陷与软件故障

 

一、      软件缺陷与软件故障案例

 

0

 

  
2. 软件缺陷产生的原因

 

软件缺陷从哪来?
第一大原因就是:软件产品规格说明书写的不够全面经常更改,导致对说明书的理解不一样。
第二大原因是:软件设计,没有做设计或设计不好,经常变动等和产品规格说明书一样的问题,
第三个原因才是编写代码和其它原因;
如图1-1所示

 

0

 

图1-1  软件缺陷产生的原因分布

 

通过大量的测试理论研究及测试实践经验的积累,典型的软件缺陷产生的原因被归纳为以下几种类型:

 

(1)  需求解释有错误;

 

(2)  用户需求定义错误;

 

(3)  需求记录错误;

 

(4)  设计说明有误;

 

(5)  编码说明有误;

 

(6)  程序代码有误;

 

(7)  测试错误;

 

(8)  问题修改不正确;

 

(9)  不正确的结果是由于其他的缺陷而产生。

 

 

 

3. 软件测试和缺陷修复的代价

 

0

 

缺陷发现的越早,则修复这个缺陷的代价就越小,在需求、设计、编码、测试、发布等不同的阶段,发现缺陷后修复的代价都会比在前一个阶段修复的代价提高10倍。

 

 
 

 

4. 新人如何融入一个项目团队

 

0

 

 

 

5. 优秀的测试人员的基本素质

 

 1、参与需求讨论,制订测试计划,确保测试能顺利执行并完成,

 

2、负责项目的功能性测试、用户体验测试、兼容性测试以及性能测试,

 

3、负责测试用例的编写;编写测试报告和对测试结果分析,

 

4、与开发人员、产品经理沟通和协作,推动整个项目的顺利进行,

 

5、负责软件开发团队项目进度管理工作,

 

6.熟悉Linux常用命令,熟悉常用数据库,熟练使用基本的SQL语句,

 

7.熟练使用Loadrunner,Jmeter等至少一种性能测试工具。

 

 

 

0

 

 

 

 

 

6. 软件工程的目的

 

成本:项目的开销,人工成本,工具成本,设备成本,错误成本(BUG)

 

进度:时间,计划

 

质量:软件对顾客需求的满意程度。

 

0

 

 

 

 

 

7. 程序测试包含哪些内容

 

程序测试包括程序逻辑功能,界面,性能,易用性,兼容性,安装等测试。

 

8. 测试环境

 

测试环境=硬件+软件+网络

 

硬件环境:笔记本,台式机,服务器

 

软件环境:不同的操作系统 windows10   windows8   windows7   Linux   Mac,

 

不同浏览器:IE firefox  chrom

 

网络:局域网还是互联网

 

0

 

 

 

 

 

9.测试流程

 

 

 

 

 

 

需求评审
测试计划制定
测试计划执行
发布与测试报告总结
 
1从用户体验角度提供设计建议
2从开发经验角度,分析设计是否存在风险,是否能够实现
3 联合其他模块分析,设计是否存在漏洞,逻辑功能存在缺陷
 
1测试用例设计
2测试用例评审,和测试时间估计
3测试资源申请
4测试人员分配
 
1用例执行
2 Bug修复验证和推动版本进度
3性能监控,压力测试,兼容测试
 
1版本发布和线上质量监控,用户反馈实时响应
2测试用例更新整合,测试计划评估
3提供版本最终测试报告,包括用例覆盖率,bug数据分析等
 
全程跟进需求变更,与产品无缝沟通,在测试阶段有需求变更要第一时间了解改动范围,如果影响版本的质量要说明风险,评估需求是否必须更改以及是否影响版本发布上线的时间线
 
规划测试项目需要的功能开发和测试人员比例,规划整个测试流程需要的时间,要预留处理紧急事件的缓冲
 
执行
协调测试资源,部署测试环境,督促开发和产品提供一切需要的测试工具,测试数据等,推动版本进度,每日进行bug review(bug复盘),标识出bug解决的优先级和提交测试的时间点,每日提供当日产品质量报告
 
报告
项目发布上线后,对整个版本的bug进行数据分析,总结出用例的覆盖率,对于没有覆盖到用例的bug,转化成用例,同时测试人员之间进行分享,针对新接触的测试方法测试工具和有价值的bug进行经验总结
 

 

0
 
 
 
10.    软件测试分类
0
 
 
10.1. 黑盒测试和白盒测试
 
黑盒测试(Black Box -Test)
指的是把被测试的软件看做一个黑盒子,通过使用整个软件功能来验证程序是否满足需求的测试方法
 
白盒测试(White Box Testing)
是一种按照程序内部逻辑结构和编码结构设计测试数据并完成测试的测试方法
 
0
 
10.2. 静态测试和动态测试
静态测试,是指不实际运行被测试软件,而只是静态的检查程序代码、界面或者文档中可能存在的错误的过程。
 
动态测试:是指实际运行被测程序,输入相应的测试数据,检查实际输出结果和预期结果是否相符的过程。
 
10.3. 功能测试和性能测试
 
1.1.1.   功能测试
 
是黑盒测试的一部分,它检查实际软件的功能是否符合用户的需求。
 
功能测试可以细分逻辑功能测试,界面测试,易用性测试,安装测试和兼容性测试。
 
逻辑功能测试:测试应用是否符合逻辑,比如应该先注册账号之后,才能进行登录,登录之后才能看我的购物车
 
界面测试:窗口大小,按钮大小,点击按钮弹出什么样的提示框,是否有滚动条,下拉菜单是否有展示内容...
 
易用性测试:从软件使用的合理性和方便性等角度对软件系统进行检查,比如,软件窗口长宽比例是否合适,颜色色彩是否赏心悦目,字体大小是否合适
 
 
1.1.2.   性能测试
 
时间性能:软件的一个具体事务的响应时间。
比如点击一个登陆按钮,到登录成功(失败)的反应时间,浏览器非常常见,ANR(Application not responding 应用程序无响应)2/5/8
 
空间性能:软件运行时所消耗的系统资源,比如对内存和cpu的消耗 80%
 
 
一般性能测试:软件正常运行,不向其施加任何压力的测试。
稳定性测试:也叫可靠性测试,是指连续运行被测系统,检查系统运行时的稳定程度。
负载测试:让被测系统在其能够忍受的压力范围之内连续运行,来测试系统的稳定性。(测试载重)
压力测试:持续不断的给被测试的系统增加压力,直到被测试的系统压垮为止,用来测试系统所承受的最大压力。(测试强度)
 
0
 
 
0
 
 
10.4. 回归测试、冒烟测试、随机测试
1.1.3.   回归测试
是指对软件的新版本进行测试时,重复执行上一个版本测试时的用例,比如在1.0版本中,有一个bug,到了2.0版本中,再重新测试1.0中这个bug
(回归测试是指修改了旧代码后,重新进行测试以确认修改没有引入新的错误或导致其他代码产生错误。)
 
1.1.4.   冒烟测试
指对一个软件进行系统大规模的测试之前,先验证一下软件的基本功能是否实现,是否具备可测性。
如果没有实现,则打回开发组重新开发,这样做可以节省大量的时间成本和人力成本。
 
1.1.5.   随机测试 
是指测试中所有的输入数据都是随机生成的,其目的是模拟用户的真实操作,并发现一些边缘性的错误。
 
10.5. 单元测试、集成测试、系统测试和验收测试
 
0
 
1.1.6.   单元测试
单元测试(unit testing),是指对软件中的最小可测试单元进行检查和验证。
对于单元测试中单元的含义,一般来说,要根据实际情况去判定其具体含义,如C语言中单元指一个函数,Java里单元指一个类,图形化的软件中可以指一个窗口或一个菜单等。
单元就是人为规定的最小的被测功能模块。
 
单元测试当一段代码完成之后,是由白盒测试工程师或者开发人员自行测试,比如java中执行单元测试叫做junit测试。
 
单元测试方式:先静态地观察代码是否符合规范,然后动态地运行一下代码,检查运行的结果。
 
1.1.7.   集成测试
集成测试是单元测试的下一个阶段,是指将通过测试单元模块组装成系统或者子系统,再进行测试,重点测试不同模块的接口部分。
 
l  在把各个模块连接起来的时候,穿越各个模块的接口的数据时候会丢失
l  一个模块的功能是否会对另一个模块的功能产生不利的影响
l  各个子功能组装完成后,能否达到预期的父功能
l  全局数据结构是否有问题
l  单个模块产生的误差累计起来是否会放大
例如:模块接口测试
l  应对通过所测模块的数据流进行测试
l  调用所测模块时的输入参数与模块的形式参数的个数、属性和顺序是否匹配
l  所测模块调用子模块时,输入子模块的参数与子模块的形式参数在个数、属性和顺序上是否匹配。
l  输出给标准函数的参数的个数、属性和顺序是否正确
 
1.1.8.   系统测试和验收测试
 
集成测试完成之后,就是系统测试和验收测试。
 
系统测试:指的是将整个软件系统看做一个整体进行测试,包括对功能、性能,以及软件所运行的软硬件环境进行测试。
 
系统测试由黑盒测试人员在整个系统集成完毕后进行测试,前期主要测试系统的功能是否满足需求,后期主要测试系统运行的性能是否满足需求,以及系统在不同的软硬件环境的兼容性等。
 
0
 
验收测试:以用户为主的测试,软件开发人员和质量保证人员参加,
 
 
12.    测试分类占比
0
 
13.    软件测试的原则
1.应当把“尽早和不断地测试”作为开发者的座右铭。
2.设计测试用例时,应该考虑到合法的输入和不合法的输入,以及各种边界条件,特殊情况下要制造极端状态和意外状态,比如网络异常中断、电源断电等情况。
3.一定要注意测试中的错误集中发生现象,这和程序员的编程水平和习惯有很大的关系。
4.对测试错误结果一定要有一个确认的过程。一般有A测试出来的错误,一定要有一个B来确认,严重的错误可以召开评审会进行讨论和分析。
5.制定严格的测试计划,并把测试时间安排得尽量宽松,不要希望在极短的时间内完成一个高水平的测试。
6.回归测试的关联性一定要引起充分的注意,修改一个错误而引起更多错误出现的现象并不少见。
7.妥善保存一切测试过程文档,意义是不言而喻的,测试的重现性往往要靠测试文档。 

 

 

 

 

posted @ 2020-12-15 19:00  兜兜里有糖-  阅读(95)  评论(0编辑  收藏  举报