白盒测试方法_python自动化测试-常用软件测试方法及类型解析

阅读: 评论:0

⽩盒测试⽅法_python⾃动化测试-常⽤软件测试⽅法及类型解
常⽤软件测试⽅法及类型解析
⼀、软件测试概述
软件测试是软件开发过程的重要组成部分,是⽤来确认⼀个程序的品质或性能是否符合开发之前所提出的⼀些要求。软件测试的⽬的,第⼀是确认软件的质量,其⼀⽅⾯是确认软件做了你所期望的事情(Do the right thing),另⼀⽅⾯是确认软件以正确的⽅式来做了这个事件(Do it right)。第⼆是提供信息,⽐如
提供给开发⼈员或程序经理的反馈信息,为风险评估所准备的信息。第三软件测试不仅是在测试软件产品的本⾝,⽽且还包括软件开发的过程。如果⼀个软件产品开发完成之后发现了很多问题,这说明此软件开发过程很可能是有缺陷的。因此软件测试的第三个⽬的是保证整个软件开发过程是⾼质量的。
软件质量是由⼏个⽅⾯来衡量的:⼀、在正确的时间⽤正确的的⽅法把⼀个⼯作做正确(Doing the right things right at the right time.)。⼆、符合⼀些应⽤标准的要求,⽐如不同国家的⽤户不同的操作习惯和要求,项⽬⼯程中的可维护性、可测试性等要求。三、质量本⾝就是软件达到了最开始所设定的要求,⽽代码的优美或精巧的技巧并不代表软件的⾼质量(Quality is defined as conformance to requirements, not as “goodness”
or “elegance”.)。四、质量也代表着它符合客户的需要(Quality also means “meet customer needs”.)。作为软件测试这个⾏业,最重要的⼀件事就是从客户的需求出发,从客户的⾓度去看产品,客户会怎么去使⽤这个产品,使⽤过程中会遇到什么样的问题。只有这些问题都解决了,软件产品的质量才可以说是上去了。
测试⼈员在软件开发过程中的任务:
1、寻Bug;
2、避免软件开发过程中的缺陷;
3、衡量软件的品质;
4、关注⽤户的需求。
总的⽬标是:确保软件的质量。
⼆、常⽤的软件测试⽅法
1.⿊盒测试
⿊盒测试顾名思义就是将被测系统看成⼀个⿊盒,从外界取得输⼊,然后再输出。整个测试基于需求⽂档,看是否能满⾜需求⽂档中的所有要求。⿊盒测试要求测试者在测试时不能使⽤与被测系统内部结构相关的知识或经验,它适⽤于对系统的功能进⾏测试。
⿊盒测试的优点有:
1)⽐较简单,不需要了解程序内部的代码及实现;
2)与软件的内部实现⽆关;
3)从⽤户⾓度出发,能很容易的知道⽤户会⽤到哪些功能,会遇到哪些问题;
4)基于软件开发⽂档,所以也能知道软件实现了⽂档中的哪些功能;
5)在做软件⾃动化测试时较为⽅便。
⿊盒测试的缺点有:
1)不可能覆盖所有的代码,覆盖率较低,⼤概只能达到总代码量的30%;
2)⾃动化测试的复⽤性较低。
2.⽩盒测试
⽩盒测试是指在测试时能够了解被测对象的结构,可以查阅被测代码内容的测试⼯作。它需要知道程序内部的设计结构及具体的代码实现,并以此为基础来设计测试⽤例。如下例程序代码:
HRESULT
Play( char* pszFileName )
{
ccdpif ( NULL ==
pszFileName )
return;
return;
if (
STATE_OPENED == currentState )
{
gvg668PlayTheFile();
}
return;
}
读了代码之后可以知道,先要检查⼀个字符串是否为空,然后再根据播放器当前的状态来执⾏相应的动作。可以这样设计⼀些测试⽤例:⽐如字符串(⽂件)为空的话会出现什么情况;如果此时播放器的状态是⽂件刚打开,会是什么情况;如果⽂件已经在播放,再调⽤这个函数会是什么情况。也就是说,根据播放器内部状态的不同,可以设计很多不同的测试⽤例。这些是在纯粹做⿊盒测试时不⼀定能做到的事情。⽩盒测试的直接好处就是知道所设计的测试⽤例在代码级上哪些地⽅被忽略掉,它的优点是帮助软件测试⼈员增⼤代码的覆盖率,提⾼代码的质量,发现代码中隐藏的问题。
⽩盒测试的缺点有:
1)程序运⾏会有很多不同的路径,不可能测试所有的运⾏路径;
2)测试基于代码,只能测试开发⼈员做的对不对,⽽不能知道设计的正确与否,可能会漏掉⼀些功能需求;
3)系统庞⼤时,测试开销会⾮常⼤。
3.基于风险的测试
基于风险的测试是指评估测试的优先级,先做⾼优先级的测试,如果时间或精⼒不够,低优先级的测试可以暂时先不做。有如下⼀个图,横轴代表影响,竖轴代表概率,根据⼀个软件的特点来确定:如
果⼀个功能出了问题,它对整个产品的影响有多⼤,这个功能出问题的概率有多⼤?如果出问题的概率很⼤,出了问题对整个产品的影响也很⼤,那么在测试时就⼀定要覆盖到。对于⼀个⽤户很少⽤到的功能,出问题的概率很⼩,就算出了问题的影响也不是很⼤,那么如果时间⽐较紧的话,就可以考虑不测试。
基于风险测试的两个决定因素就是:该功能出问题对⽤户的影响有多⼤,出问题的概率有多⼤。其它⼀些影响因素还有复杂性、可⽤性、依赖性、可修改性等。测试⼈员主要根据事情的轻重缓急来决定测试⼯作的重点。
4.基于模型的测试
模型实际上就是⽤语⾔把⼀个系统的⾏为描述出来,定义出它可能的各种状态,以及它们之间的转换关系,即状态转换图。模型是系统的抽象。基于模型的测试是利⽤模型来⽣成相应的测试⽤例,然后根据实际结果和原先预想的结果的差异来测试系统,过程如下图所⽰。[NextPage]
三、软件测试的类型
常见的软件测试类型有:
BVT (BuildVerification Test)
BVT是在所有开发⼯程师都已经检⼊⾃⼰的代码,项⽬组编译⽣成当天的版本之后进⾏,主要⽬的是验证最新⽣成的软件版本在功能上是否完整,主要的软件特性是否正确。如⽆⼤的问题,就可以进⾏相应的功能测试。BVT优点是时间短,验证了软件的基本功能。缺点是该种测试的覆盖率很低。因为运⾏时间短,不可能把所有的情况都测试到。
Scenario
Tests(基于⽤户实际应⽤场景的测试)
在做BVT、功能测试的时候,可能测试主要集中在某个模块,或⽐较分离的功能上。当⽤户来使⽤这个应⽤程序的时候,各个模块是作为⼀个整体来使⽤的,那么在做测试的时候,就需要模仿⽤户这样⼀个真实的使⽤环境,即⽤户会有哪些⽤法,会⽤这个应⽤程序做哪些事情,操作会是⼀个怎样的流程。加了这些测试⽤例后,再与BVT、功能测试配合,就能使软件整体都能符合⽤户使⽤的要求。Scenario Tests 优点是关注了⽤户的需求,缺点是有时候难以真正模仿⽤户真实的使⽤情况。
SmokeTest
在测试中发现问题,到了⼀个Bug,然后开发⼈员会来修复这个Bug。这时想知道这次修复是否真的解决了程序的Bug,或者是否会对其它模块造成影响,就需要针对此问题进⾏专门测试,这个过程
就被称为Smoke Test。在很多情况下,做Smoke Test是开发⼈员在试图解决⼀个问题的时候,造成了其它功能模块⼀系列的连锁反应,原因可能是只集中考虑了⼀开始的那个问题,⽽忽略其它的问题,这就可能引起了新的Bug。Smoke Test优点是节省测试时间,防⽌build失败。缺点是覆盖率还是⽐较低。
此外,Application
Compatibility Test(兼容性测试),主要⽬的是为了兼容第三⽅软件,确保第三⽅软件能正常运⾏,⽤户不受影响。Accessibility Test(软件适⽤性测试),是确保软件对于某些有残疾的⼈⼠也能正常的使⽤,但优先级⽐较低。其它的测试还有Functional Test(功能测试)、Security Test(安全性测试)、Stress Test(压⼒测试)、Performance Test(性能测试)、Regression Test(回归测试)、Setup/Upgrade Test(安装升级测试)等。
四、微软的软件测试⼯作
1.基本情况
测试在微软公司是⼀项⾮常重要的⼯作,微软公司在此⽅⾯的投⼊是⾮常巨⼤的。微软对测试的重视表现在⼯程开发队伍的⼈员构成上,微软的项⽬经理、软件开发⼈员和测试⼈员的⽐例基本是1:3:
3或1:4:4,可以看出开发⼈员与测试⼈员的⽐例是1:1。对于测试的重视还表现在最后产品要发布的时候,此产品的所有相关部门都必须签字,⽽测试⼈员则具有绝对的否决权。
测试⼈员中分成两种职位,Software
测试⼈员中分成两种职位,Software
Development Engineer in Test(测试组的软件开发⼯程师)实际上还是属于开发⼈员,他们具备编写代码的能⼒和开发⼯具软件的经验,侧重于开发⾃动化测试⼯具和测试脚本,实现测试的⾃动化。Software Test Engineer(软件测试⼯程师)具体负责测试软件产品,主要完成⼀些⼿⼯测试以及安装配置测试。
车流量统计2.测试计划
测试计划是测试⼈员管理测试项⽬,在软件中寻Bug的⼀种有效的⼯具。测试计划主要有两个作⽤,⼀是评判团队的测试覆盖率以及效率,让测试⼯作很有条理的逐步展开。⼆是有利于与项⽬经理、开发⼈员进⾏沟通。有了测试计划之后,他们就能够知道你是如何开展测试⼯作的,他们也会从中提出很多有益的意见,确保测试⼯作顺利进⾏。总之,有了测试计划可以更好的完成测试⼯作,确保⽤户的满意度。测试⼈员在编写测试计划之前,应获得以下⽂档:
1)程序经理编写的产品功能说明书或产品开发计划;
蓝牙门禁2)程序经理或开发⼈员提供的开发进度表。
微波功率放大器根据产品的特性及开发进度安排,测试⼈员制定具体的测试计划。测试计划通常包括以下内容:
1)测试⽬标和发布条件:
a.给出清晰的测试⽬标描述;
b.定义产品的发布条件,即在达到何种测试⽬标的前提下才可以发布产品的某个特定版本。
2)待测产品范围:
a.软件主要特性/功能说明,即待测软件主要特性的列表;
b.特性/功能测试⼀览,应涵盖所有特性、对话框、菜单和错误信息等待测内容,并列举每个测试范围内要重点考虑的关键功能。
3)测试⽅法描述:
a.定义测试软件产品时使⽤的测试⽅法;
b.描述每⼀种特定的测试⽅法可以覆盖哪些测试范围。
4)测试进度表:
a.定义测试⾥程碑;
b.定义当前⾥程碑的详细测试进度。
5)测试资源和相关的程序经理/开发⼯程师:
a.定义参与测试的⼈员;
b.描述每位测试⼈员的职责范围;
c.给出与测试有关的程序经理/开发⼯程师的相关信息。
6)配置范围和测试⼯具:
a.给出测试时使⽤的所有计算机平台列表;
b.描述测试覆盖了哪些硬件设备;
c.测试时使⽤的主要测试⼯具。
此外,还应列出测试中可能会⾯临的风险及测试的依赖性,即测试是否依赖于某个产品或某个团队。⽐如此项测试依赖性WindowsCE这个操作系统,⽽这个系统要明年2⽉份才能做好,那么此项测试就可能只有在明年5⽉份才能完成,这样就存在着依赖关系。如果那个团队的开发计划往后推,则此项测试也会被推迟。
3.测试⽤例开发
⼀个好的测试⽤例就是有⼀个合理的概率来到Bug,不要冗余,要有针对性,⼀个测试只针对⼀件事情。特别是功能测试的时候,如果⼀个测试是测了两项功能,那么如果测试结果失败的话,就不知道到底是哪项功能出了问题。
测试⽤例开发中主要使⽤的技术有等价类划分,边界值的分析,Error Guessing Testing。
等价类划分是根据输⼊输出条件,以及⾃⾝的⼀些特性分成两个或更多个⼦集,来减少所需要测试的⽤例个数,并且能⽤很少的测试⽤例来覆盖很多的情况,减少测试⽤例的冗余度。在等价类划分中,最基本的划分是⼀个为合法的类,⼀个为不合法的类。
边界值的分析是利⽤了⼀个规律,即程序最容易发⽣错误的地⽅就是在边界值的附近,它取决于变量
的类型,以及变量的取值范围。⼀般对于有n个变量时,会有6n+1个测试⽤例,取值分别是min-1, min, min+1,
normal, max-1, max,max+1的组合。边界值的分析的缺点,是对逻辑变量和布尔型变量不起作⽤,还有可能会忽略掉某些输⼊的组合。Error
Guessing Testing完全靠的是经验,所设计的测试⽤例就是常说的猜测。感觉到软件在某个地⽅可能出错,就去设计相应的测试⽤例,这主要是靠实际⼯作中所积累的经验和知识。其优点是速度快,只要想得到,就能很快设计出测试⽤例。缺点就是没有系统性,⽆法知道覆盖率会有多少,很可能会遗漏⼀些测试领域。
实际上在微软是采⽤⼀些专门的软件或⼯具负责测试⽤例的管理,有⼀些测试信息可以被记录下来,⽐如测试⽤例的简单描述,在哪些平台执⾏,是⼿⼯测试还是⾃动测试,运⾏的频率是每天运⾏⼀次,还是每周运⾏⼀次。此外还有清晰的测试通过或失败的标准,以及详细记录测试的每个步骤。
4. Bug跟踪过程
在软件开发项⽬中,测试⼈员的⼀项最重要使命就是对所有已知Bug进⾏有效的跟踪和管理,保证产品中出现的所有问题都可以得到有效的解决。⼀般地,项⽬组发现、定位、处理和最终解决⼀个Bug
的过程包括Bug报告、Bug评估和分配、Bug处理、Bug关闭等四个阶段:1)测试⼯程师在测试过程中发现新的Bug后,应向项⽬组报告该Bug的位置、表现、当前状态等信息。项⽬组在Bug数据库中添加该Bug的记录。
记录。
2)开发经理对已发现的Bug进⾏集中讨论,根据Bug对软件产品的影响来评估Bug的优先级,制定Bug的修正策略。按照Bug的优先级顺序和开发⼈员的⼯作安排,开发经理将所有需要⽴即处理的Bug分配给相应的开发⼯程师。
3)开发⼯程师根据安排对特定的Bug进⾏处理,出代码中的错误原因,修改代码,重新⽣成产品版本
4)开发⼯程师处理了Bug之后,测试⼈员需要对处理后的结果进⾏验证,经过验证确认已正确处理的Bug被标记为关闭(Close)状态。测试⼯程师既需要验证Bug是否已经被修正,也需要确定开发⼈员有没有在修改代码的同时引⼊新的Bug。
5. Bug的不同处理⽅式
在某些情况下,Bug已处理并不意味着Bug已经被修正。开发⼯程师可以推迟Bug的修正时间,也可以
在分析之后告知测试⼯程师这实际上不是⼀个真正的Bug。也就是说,某特定的Bug经开发⼯程师处理之后,该Bug可能包括以下⼏种状态。
已修正:开发⼯程师已经修正了相应的程序代码,该Bug不会出现了。
可推迟:该Bug的重要程度较低,不会影响当前应提交版本的主要功能,可安排在下⼀版本中再⾏处理。
设计问题:该Bug与程序实现⽆关,其所表现出来的⾏为完全符合设计要求,对此应提交给程序经理处理。
wan 107⽆需修正:该Bug的重要程度⾮常低,根本不会影响程序的功能,项⽬组没有必要在这些Bug上浪费时间。
五、成为优秀测试⼯程师的要求
要成为⼀名优秀的测试⼯程师,⾸先对计算机的基本知识要有很好的了解,精通⼀门或多门的编程语⾔,具备⼀定的程序调试技能,掌握测试⼯具的开发和使⽤技术。同时要⽐较细⼼,会按照任务的轻重缓急来安排⾃⼰的⼯作,要有很好的沟通能⼒。此外,还要善于⽤⾮常规的⽅式思考问题,尽可能多的参加软件测试项⽬,在实践中学习技能,积累经验,不断分析和总结软件开发过程中可能出错的
环节。这样,⼀名优秀的测试⼯程师就从软件测试的实践中脱颖⽽出了。
想要更多关于软件测试学习资料的可以关注我的头条号,并且私信我哦!

本文发布于:2023-06-28 01:15:40,感谢您对本站的认可!

本文链接:https://patent.en369.cn/patent/2/155090.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:测试   开发   软件
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2022 Comsenz Inc.Powered by © 369专利查询检索平台 豫ICP备2021025688号-20 网站地图