在工作中也有了解测试相关的知识,今天简单的做一个总结,包括测试的基本知识、对各个技术岗位的认识~
1、测开同学的工作内容? =》质量、保证、自研
(1)首先针对测试这边的工作有:
需求分析阶段:需求分析与评审、学习业务流程、提取功能点、编写需求分析说明书
测试设计阶段:编写测试计划说明书(5W1H)、编写测试用例(涉及自动化测试的话需要编写测试用例脚本)
测试执行阶段:提交BUG、跟踪BUG修改状态(这里可能会有回归测试,并且在测试执行之前会搭建测试环境)
测试总结阶段:提交BUG表单、编写测试总结报告
(2)针对开发这边的工作:
自动化测试:编写测试脚本,执行测试,分析,提交BUG,跟踪BUG状态、总结
对测试工具的开发
软件开发(就是开发的工作)
二次开发(在开发人员开发好的软件上进行二次开发)
2、测试、测试开发、开发的区别?
测试:在规定的条件下,对一个产品或者程序进行操作,检查软件有没有bug,并且写出相应的测试计划、测试规范、测试用例、测试数据、测试报告。
测试开发:本质上的核心职能依然是测试,只是还具备开发技能,熟练使用测试工具并能自主开发平台,或对开源工具进行二次开发,最终提高产品效率。
开发:根据用户需求,完成代码编写,达到实现功能目的。
总体来看就是:开发和测试都属于研发,并且是相辅相成的,开发也要做测试的工作,开发任务过程中联调自测都需要达到很高的质量水准,所以开发所做的测试任务并不会比测试简单。只是开发者自测试更多的是从某个特性的角度出发,然后发现bug,找出问题,解决bug。测试测的更全面,覆盖场景更多,测试发现问题是根据现象来做初步排查,以及对异常现象进行初步的定位分析,然后再抛出问题,得到解决之后,再次验证。
3、自动化测试?
就是用程序代替人工来进行测试。
优点:
- 有效的利用人力物力资源:频繁地机器化的动作可以用自动化测试执行,减少错误的发生,更好的利用人力资源。
- 测试的重复利用:由于自动测试通常使用的是自动化脚本技术,这样就可以只需要做较少的甚至是不修改就可以实现在不同的测试过程中使用相同的用例。
- 减少人为的错误:自动化测试是机器完成,不存在执行过程中人为的疏忽和错误,测试设计完全决定了测试的质量,可以降低减少人为造成的错误。
缺点:
- 自动化测试是工具执行,没有思维,无法进行主观判断,对界面色彩、布局和系统的奔溃现象无法发现,这些错误通过人眼很容易发现。
- 自动化测试工具本身是一个产品,在不同的系统平台或硬件平台可能会受影响,在运行时可能影响被测程序的测试结果。
- 对于需求更改频繁的软件,测试脚本的维护和设计比较空难。
- 自动化测试是机器执行,发现的问题比手工测试要少很多,通过测试工具没有发现缺陷,并不能说明系统不存在缺陷,只能通过工具评判测试结果和预期效果之间的差距。
- 自动化测试要编写测试脚本,设计场景,这些对测试人员的要求比较高,测试的设计直接影响测试的结果。
4、测试的方法?
(1)是否关心内部结构:
白盒测试:按照程序内部编码逻辑,编写测试用例,实现测试的方法。
黑盒测试:不需要关心程序内部的实现,根据软件的需求规格说明进行测试用例设计,站在用户的角度,从输入数据和输出数据的对应关系确认测试。
灰盒测试:结合黑盒和白盒,基于程序内部结构实现,又基于程序外部表现,设计测试用例,测试时采集外部接口的结果和数据路径的执行信息。
(2)是否执行代码来看
静态测试:不运行程序,通过分析和源程序的语法、结构、接口来检查程序的正确性。
动态测试:通过运行被测程序,检查运行结果与预期结果的差异,分析正确性
(3)从开发过程级别看
单元测试:就是模块测试,针对软件设计的最小单位,对程序模块或者功能模块,进行正确性的检验,目的是验证各模块是否存在各种差错,是否正确的实现了其功能。
集成测试:就是组装测试,是对单元测试的多级扩展,目的是检验软件单元之间的接口关系。
系统测试:就是把集成好的软件系统,作为基于计算机系统的一个元素,在实际运行环境下,对计算机系统进行一些列的组装测试。
(4)从执行过程是否需要人来干预来看
手工测试:测试人员根据事先为覆盖所有场景所设计的测试用例,手工的一个一个输入执行,验证程序的正确性。
自动化测试:将大量重复性的工作交给计算机去完成。
(5)从测试实施组织来看
开发测试:开发人员进行测试
用户测试:用户进行测试
第三方测试:由专业的第三方承担的测试,保证工作的客观性
(6)从测试所处的环境来看
阿尔法测试:由用户在开发环境中进行测试
贝塔测试:用户公司组织个方面典型终端用用,在日常工作中使用贝塔版本
5、工作中开发为什么要进行单元测试?
重用测试,应对将来的实现的变化
提高士气,明确知道我写的代码没有问题
6、如何判断一个问题是bug?
根据需求文档里面的描述进行判断是否符合。
7、写测试用例用到的设计方法?
等价类划分法:就是将测试范围划分为几个互不相交的子集,它们的并集是全集,从每个子集中选出若干个具有代表性的值作为测试用例。
我们要测试一个用户名是否合法,用户名的定义为:8位数字组成的字符。
我们可以先划分子集:空用户名,1-7位数字,8位数字,9位或以上数字,非数字。
然后从每个子集选出若干个有代表性的值:
空用户名:“” (无效等价类实例,指对于软件规格说明而言,没有意义的、不合理的输入)
1-7位数字:"234" (无效等价类实例)
8位数字:"00000000" (有效等价类实例,能检验程序是否实现了规格说明中所规定的功能和性能)
9位或以上数字:"1234567890" (无效等价类实例)
非数字:"abc&!!!" (无效等价类实例)
他们5个,就是用等价类划分选出的测试用例。实际上,对于1-7位数字的子集来说,选“234”和“11111”没有本质的区别。
边界值分析法:取边界值进行测试。假定 X 为整数,10≤X≤100,那么 X 在测试中应该取的边界值为:10,11,99,100。
错误推断法:根据经验或者直觉推测程序会出现的错误,从而针对性的编写测试用例。
判定表法:又称策略表,通过穷举条件或得结果,对结果进行优化合并。
正交实验法:就是在各个因素互相独立的情况下,设计出一个表,找出以少数代替全面的测试用例。
因果图法
场景分析法
判定表达
8、黑盒测试和白盒测试的优点和缺点?
黑盒测试:
优点:简单,不需要了解程序内部的实现,通过软件开发文档就能知道软件实现了哪些功能。
缺点:不可能覆盖到所有的代码
白盒测试:
优点:提高代码覆盖率,提高代码质量
缺点:只能测试出开发做的对不对,不能知道设计是否正确,可能会漏掉一些功能。系统庞大时,测试开销比较大。
9、Alpha测试和Beta区别?
1、测试时间不同。A在开发完之后对系统测试。B在开发和测试完成时
2、测试人不同。A是由一个用户在开发环境下测试,或者公司内部人员模拟实际环境测试。B是由外部软件的多个终端用户测试
3、测试环境不同。A测试开发人员在场,B测试时开发不在场
10、软件测试中80-20原则
80%的bug出现在20%的模块-》意思就是bug有集群效应,大部分bug出现在少部分的模块里(y业务复杂了,使用的频率高)。
80%的时间用在安排和设计上,20%的时间用在执行上。-》大部分时间用在设计用例设计、环境准备、计划部署上。
11、bug的生命周期
测试提交bug->开发确认bug(开发确认是不是他负责的)->修改bug并修改状态为已修复。指派给测试进行验证-》QA验证已修复的bug-》
验证通过。-》bug关闭
验证不通过。QA重新激活-》开发确认并修改
12、缺陷报告的严重级别
致命的
严重的
一般的
微小的
13、白盒测试有几种方法
静态分析
动态分析
14、开发中使用的Junit
JUnit 是一个 Java 编程语言的单元测试框架。JUnit 在测试驱动的开发方面有很重要的发展,是起源于 JUnit 的一个统称为 xUnit 的单元测试框架之一。
JUnit 促进了“先测试后编码”的理念,强调建立测试数据的一段代码,可以先测试,然后再应用。这个方法就好比“测试一点,编码一点,测试一点,编码一点……”,增加了程序员的产量和程序的稳定性,可以减少程序员的压力和花费在排错上的时间。
- beforeClass() 方法首先执行,并且只执行一次。
- afterClass() 方法最后执行,并且只执行一次。
- before() 方法针对每一个测试用例执行,但是是在执行测试用例之前。
- after() 方法针对每一个测试用例执行,但是是在执行测试用例之后。
- 在 before() 方法和 after() 方法之间,执行每一个测试用例。