从外包公司,到现在进入著名大厂,牛鹭对往届学子做了一个回访,邀请他谈谈这些年在工作中的测试心得。这篇文章送给还在学习或者刚刚进入软件测试行业的你们,希望对大家能有所帮助。
为什么要在一个团队中开展软件测试工作?
因为没有经过测试的软件很难在发布之前知道该软件的质量,就好比ISO质量认证一样,测试同样也需要质量的保证,这个时候就需要在团队中开展软件测试的工作。在测试的过程发现软件中存在的问题,及时让开发人员得知并修改问题,在即将发布时,从测试报告中得出软件的质量情况。
测试能给你带来什么样的快乐?
测试可以给我带来很多快乐,如果测试出一个项目缺少东西,我会很高兴,因为我对自己的工作有了新的认识,也为公司做了效益;当我没有测试出产品缺陷的时候,我会很快乐,因为团队的编码能力很棒。
软件测试的目的?
测试的目的是以最少人力、物力和时间找出软件中潜在各种错误和缺陷,通过修正各种错误和缺陷提高软件质量,回避软件发布后由于潜在的软件缺陷和错误造成的隐患带来的商业风险。
Alpha测试与beta测试的区别
大型通用软件在发布之前,都会进行Alpha和Beta测试,目的是从实际终端用户的角度去发现可能在真实用户使用过程中会出现的缺陷。
Alpha测试一般指一个用户在开发环境模拟真实用户操作,或内部员工在模拟真实环境下的操作,开发人员在现场,可实时将问题同步给开发人员,一般不由程序员和测试人员操作。α测试可以从产品编码结束之时开始,或模块测试完成之后开始,或在确认测试过程中产品达到一定的稳定性和可靠性开始,Alpha测试为非正式验收测试。
Beta测试一般存在于α测试之后,β测试一般由真实用户在真实环境下进行的测试,开发者一般不在现场,由用户总结缺陷,并定期向开发者汇报。
α代表软件测试的第一个版本(软件开发初期的版本,初具规模),beta代表软件测试的第二个版本。(网上所提供的一些软件测试版本)
简述集成测试的过程
完成单元测试/完成模块化测试----->组装模块------->集成测试
集成测试通常都有哪些策略?
在把各个模块连接起来的时候,穿越模块接口的数据是否会丢失;
各个子功能组合起来,能否达到预期要求的父功能;
一个模块的功能是否会对另一个模块的功能产生不利的影响;
全局数据结构是否有问题;
单个模块的误差积累起来,是否会放大,从而达到不可接受的程度。
质量的八大特性是什么?各种特性的定义?
功能性:软件所实现的功能达到它的设计规范和满足用户需求的程度
性能:在规定条件下,实现软件功能所需的响应时间和计算机资源(CPU、内存、磁盘空间和数据吞吐量)的使用程度
可靠性:在满足一定条件的应用环境中,软件能够正常维持其工作的能力,在出现一些错误操作时,软件可以具有容错性,如果软件意外退出,重新启动后可以恢复最近的软件数据
安全性:为了防止意外或人为的破坏,软件应具备的自身保护能力
使用性:用户在理解、学习和操作软件的过程中的付出的努力的难易程度
维护性:软件在运行维护过程中,如果出现了运行故障或者扩展新功能和性能,软件系统是否具有可析性和良好的扩展性,重新设计后的软件的稳定性和可测试性
移植性:软件从现有运行平台向另一个运行平台过度的适应程度和平台可替换性
重用性:整个软件或其中一部分能作为软件包而被再利用的程度
系统测试计划是否需要同行审批,为什么
需要,系统测试计划属于项目阶段性关键文档,因此需要评审。
软件质量应该从哪些方面来评价?
可靠性、安全性、性能、易用性、外观、稳定性
系统测试包含哪些方面?
恢复测试、安全测试、强度测试、性能测试
测试结束的标准是什么?
用例全部执行、覆盖率达到标准、.缺陷率达到标准、、其他指标达到质量标准
制定测试计划之前需要了解什么问题?
测试的资源安排
测试的是什么产品?是新程序还是维护升级的?是独立程序还是由多个小程序组成的?
产品的质量目标是什么?产品的功能需求和性能指标必须得到所有人的一致认可
请详述设计测试用例的方法? (只是列出一个测试用例思考的方向,具体设计靠经验)
黑盒测试一般根据需求文档进行测试用例的编写,一般使用到:等价类划分、边界值分析、因果图、错误推测法等
白盒测试关注内部代码结构分为静态测试和动态测试: 静态测试:通过静态的检查代码程序/界面/文档存在的问题(代码编写的规范性、测试界面、文档是否编辑正确和完整) 动态测试:通过路径和分支测试(语句覆盖、条件覆盖、分支覆盖、路径覆盖等)
比较负载测试,压力测试,容量测试和强度测试的区别
负载测试:在一定的工作负荷下,系统的负荷及响应时间。通过逐步增加系统负载,最终确定在满足性能指标的情况下,系统能承受的最大负载量的测试。
强度测试:又称疲劳强度测试,在系统稳定运行的情况下能够支持的最大并发用户数,持续执行一段时间业务,通过综合分析,确定系统处理最大工作量强度性能的过程。一定负荷条件下,在较长时间跨度内的系统连续运行给系统性能所造成的影响。
容量测试:容量测试目的是通过测试预先分析出反映软件系统应用特征的某项指标的极限值(如最大并发用户数、数据库记录数等),系统在其极限值状态下没有出现任何软件故障或还能保持主要功能正常运行。容量测试还将确定测试对象在给定时间内能够持续处理的最大负载或工作量。容量测试的目的是使系统承受超额的数据容量来发现它是否能够正确处理。容量测试是面向数据的,并且目的是显示系统可以处理目标内确定的数据容量。
压力测试:通过逐步增加系统负载,最终确定在什么负载条件下系统性能将处于崩溃状态,以此获得系统能提供的最大服务级别的测试。
C/S与B/S结构的软件,应该采取什么样的方法分别测试?他们存在什么样的区别与联系?
C/S:客户端/服务器,C负责呈现界面,响应交互,与S通讯,客户端由开发者针对系统特性开发,因为客户端本身就与服务器通讯,所以可以修改通讯方式。如我们手机上的app就属于C/S架构。
B/S:浏览器/服务器,浏览器充当跟服务器通讯的一个容器,这个容器里面包含html/css/jquery等,就是俗称的网页,B/S模式的软件开发一般被称为WEB开发。
测试点:C/S主要测试点在C(客户端),安装测试、升级测试、功能测试、稳定性测试、服务器端数据测试B/S多为网页,常见的有界面外观测试、功能测试、数据校验等。
区别与联系:区别有C/S变动需要客户端的升级操作,即升级权限在用户手中,B/S模式的软件服务器端可直接进行升级, 用户不需要做任何操作,基于C/S架构的软件,可以调用系统级的api,而B/S架构的软件只能调用浏览器开放的api。联系是都需要与S(服务端)通讯。测试方面也存在很多相同的测试点。
原生APP与H5的区别?
开发方面:原生APP针对不同的系统(安卓、iOS)采用不同的开发语言(Android-java、iOS-Object-c)引用不同的开发 包,需要形成独立的项目,H5采用统一开发语言,一个项目即可。
能力方面:原生app可以调用硬件设备的底层功能,如个人信息、摄像头、重力感应等,H5只能调用硬件设备的少量功能。
版本控制:原生app只能将新版本的app放到应用市场上去,是否升级版本的控制权在用户手中,H5可以直接在服务器端 做升级,用户不需要做任何操作,这样就导致原生app存在多个版本,而H5则统一版本。
使用方式:原生app需要下载安装包安装之后才可使用,H5依赖手机浏览器。
软件的缺陷等级应如何划分?
致命:由于程序引起的死机、非正常退出;死循环;数据库数据丢失;数据库连接错误;由于错误操作引起的程序中断;主要功能错误;数据通讯错误等。
严重:程序错误;接口错误;系统主要功能部分缺失;功能实现与需求严重不符;模块无法启动或调用;安全、稳定性等。
一般:功能没有完全实现但不影响正常使用。
建议:界面展示;描述用语;用户体验等。
你在测试中发现了一个bug,但是开发经理并不认为,如何解决?
如果不是错误则应该主动承认不是缺陷。
如果是需求不明确的则应和开发加强沟通补充需求。
如果和开发争论不休应该邀请上级判断。
您认为做好测试计划工作的关键是什么?
熟悉测试的产品和需求
明确测试的目标,需要达到什么样的测试效果,增强测试计划的实用性
采用评审和更新机制,保证测试计划满足实际需求
分别创建测试计划、测试用例、测试报告等相关测试文档
你认为软件测试过程中较常见的困难是什么?如何有效克服这些困难?
bug复现:某些bug属于偶然复现,如果是属于轻微级别的bug,还好,如果是属于严重级别的bug,还不容易复现的情况,会带来很大的影响。一个是截屏记录,清楚描述出现步骤,第二个是根据偶现bug的级别来判断是否需要多次测试,一定要解决该bug,如实在无法复现,需要进行记录。
bug的修复引发其他bug:开发者在修复bug的时候可能会不小心引起其他模块的bug,所以在验证bug的时候需要将相关联的模块也进行测试。
需求不明确引起的理解误差:由于需求文档描述不明确,会导致开发者和测试者的理解不同,需要积极和相关人员进行沟通
怎样保证你所负责的模块通过了测试
首先是了解用户的需求,设计好的测试用例,严格的进行用例的评审,认真的执行测试用例,对自己提交的Bug进行详细的描述。
反复测试,增强测试的准确性,通过冒烟回归随机测试挖掘缺陷提高测试工作质量,把各个模块整体运行发现未曾出现的错误,完善测试用例
您认为性能测试工作的目的是什么?做好性能测试工作的关键是什么?
性能测试工作的目的是检查系统是否满足在需求说明书中规定的性能,性能测试常常需要和强度测试结合起来,并常常要求同时进行软件和硬件的检测。性能测试主要的关注对象是响应时间、吞吐量、占用内存大小(辅助存储区)、处理精度等。
领取专属 10元无门槛券
私享最新 技术干货