wangwt123

软件测试基础(一)

一、软件测试定义

1、软件测试官方的定义为:描述⼀种用来促进鉴定软件的正确性、完整性、安全性和质量的过程。

换句话说,软件测试是⼀种实际输出与预期输出之间的审核或者比较的过程 。

2、定义解读:

正确性: 

a、一个软件的正常功能是否可以实现 

b、一个软件的异常功能,也就是说的容错性

完整性:

a、需要验证(测试/考虑)到一个软件使用的各个方面(维度),它的标准就是考虑需要周全  

b、既然是完整性那么也就需要考虑一个软件的正常的使用和异常情况下的容错的能力 

c、本地化也是需要考虑到的(国际化)

本地化测试:产品是国际化的,那么本地化指的是产品全部使用一种语言(韩文/日文/英语),这个时候你依然要具备测试的能力。

安全性:

a、产品在非功能使用情况下是否存在数据泄露,以及其他隐患的情况下

b、需要考虑的是通过渗透测试的技术来验证产品是否存在支付,数据,以及其他的安全审计等问题

二、软件测试的流程

1、评审需求文档

2、开发这边编写代码来实现需求,测试编写的测试计划和测试用例

3、测试编写完测试用例后,进行测试用例的评审(评审参与人:产品经理,开发,测试,项目经理等)

4、开发完成后,进行转测,测试这边进行冒烟测试,冒烟测试通过后,进入到测试阶段。

5、测试阶段测试完成后,准备产品的上线

注:冒烟测试:开发把编写好的程序转给测试的时候,程序首先需要做的是针对转测的程序进行正常流程的测试,这个过程叫冒烟测试。

针对被测程序的正常流程的测试,目的是验证程序正常流程可以执行通的情况下继续测试被测程序的其他功能。

如下图所示:

注:第一:PRD:(ProductRequirement Document:产品需求文档),主要用于完整描述产品需求,向研发部门明确产品的功能和性能以及作为产品文档归档。

       第二:传统的测试只参与到测试阶段,其他阶段很少关注,但是新型的测试,需要在整个流程中(需求从提出到产品上线)都全部的参与进去。

测试人员尽早参与进去的好处:

a、尽早的熟悉产品的需求以及产品PRD的设计文档以及产品逻辑

b、从敏捷角度而言,⽂档的准确性以及文档的可用性也是需要测试被验证的之⼀(⼀般测试很少这样做)

c、协助产品,站在用户的角度以及测试的角度来思考产品设计逻辑的合理性

d、尽早进入可以更多的理清程序的逻辑

e、在具体到产品PRD评审的时候,能够尽快的进⼊到具体的逻辑和思考中,而不致于说之前不理解,可能一直游离在思考的阶段

问题1:需求是非常的不合理的评审的时候大家都没意见,结果上线了,出了非常严重的问题,这个时候需要追究责任,责任由大到小排序,应该是?

答:测试→开发→产品经理

在评审阶段,作为测试,应当站在公司的角度来考虑产品,站在用户的角度来考虑产品,看需求文档是否合理。

三、软件测试的目的

软件测试的目的是发现问题,发现至今未发现的问题,检查系统是否满足需求。软件测试的目的具体为:

A、测试程序执行的过程,目的在于发现错误:

1、界面的提示信息的错误

2、界面交互的错误

3、在不同浏览器的兼容性的错误(Chrome,Firefox,edge)

4、底层服务的稳定性,和可用性

B、⼀个好的测试用例在于能发现至今未发现的问题

C、⼀个成功的测试是发现了至今未发现的错误的测试(这个一般情况下,会比较难)

注:B和C这两点一般需要:

a、探索性测试:根据自己的主观意愿来对产品进行随机的,无目的性的测试产品,目的是发现产品中可能存在的其他问题。探索性强调测试⼈员的主观能动性,抛弃繁杂的测试计划和测试用例设计过程,强调在碰到问题时及时改变测试策略。

b、工具:头脑风暴(由N个人一起开会,针对某一个特定的事提出不同的解决方案和意见,目的是达成比较中性的解决方案)

四、软件测试的原则

1、测试应基于用户的需求

用户是谁? 前提是你需要知道被测试的产品是给哪些人服务的,那么在实际测试的过程中,需要站在这些人的角度和立场上来思考产品的合理性,以及可用性。

2、做好软件测试计划是做好软件测试工作的关键

自己的工作计划是自己梳理的,别人不会参与的。那么这个过程中,特别需要注意的是,对被分配的任务,尽量要为自己争取较多的测试时间。

3、应尽早的开始软件测试并不断的进行软件测试

从需求开始测试人员都已经参与进来了,只是不同阶段测试承担着不同的任务:

a、需求阶段:需求是否合理?

b、开发阶段:架构是否合理?

c、测试阶段:验证各个模块

d、上线阶段:上线仅仅代表的是一个版本(迭代)的完成,但不是结束,因为上线后可能用户会发现我们未发现的问题,需要跟踪以及解决这些问题。

总之,尽早开展测试⼯作,有利于测试人员尽早发现软件中的缺陷,大大降低错误修复的成本。测试工作进行得越早,越有利于提高软件的质量,这是预防性测试的基本原则。

4、测试前必须明确定义好产品的质量标准

a、需求文档的定义;

b、站在用户的角度,针对产品使用的理解度和使用度来衡量产品的可用性,和易用性。

5、避免测试自己的软件

a、从人性的角度而言,一个人很难否定自己的;

b、测试与开发的关系,测试要相信开发,毕竟是一个团队,但是测试要具有自己的职业职责(开发说我的程序不需要测试,直接上线,作为测试,还是要去测试)。

6、应充分注意测试中的集群现象

⼀般来说,⼀段程序中已发现的错误数越多,其中存在的错误概率也就越大。错误集中发生的现象,可能跟开发人员的编程水平和习惯有很大的关系。因此,对发现错误较多的程序段,应进行更深入的测试。

7、必须检查每个实际输出结果

验证每一个点,都需要有实际的结果与预期的结果对比。

8、穷举测试是不可能的

a、多对重点的产品进行测试;

b、每一个测试任务:必须有开始时间和结束时间。

9、测试设计决定了测试的有效性和效率

a、测试设计可以简单的理解就是怎么干这件事,以及干这件事的策略和方法;

b、以京东搜索为案例,如果测试所有的商品搜索,根本不可能实现,但是商品是有类型的,那么可以针对性的对每个类型的商品搜索测试。

10、注意保留测试设计和说明⽂档,并注意测试设计的可重用性

测试文档有哪些? a、测试计划 b、测试设计方案 c、测试用例 d、测试报告

妥善保存测试计划,测试用例,出错统计和最终分析报告,为维护等提供方便,这些测试文档都是可以拿来复用的。

五、软件测试的分类

[1]、按阶段划分:软件测试按开发流程的阶段来划分,可以主要划分为如下几个阶段,具体为:单元测试、集成测试、系统测试、验收测试

1、单元测试(白盒测试):(UnitTest):指的是针对程序最小力度的测试,主要测试的对象是函数或者是方法。

测试人员:白盒测试工程师,开发工程师,测试开发工程师

测试依据:代码内部程序逻辑和开发注释。

测试方法:白盒测试,根据不同编程语⾔有对应的测试框架,如Java里面的Junit和TestNG框架,Python里面的UnitTest和Pytest测试框架。

测试内容:模块接口测试,程序内部逻辑,路径分支测试,局部数据结构测试,错误处理测试,边界测试。

国外一般会采取,TDD模式(了解即可):Test Driver Development :测试驱动开发模式

TDD模式的流程: a、先写测试用例 b、再根据测试用例实现产品的功能

2、集成测试:是把单个模块的程序集成到⼀起后的测试,集成测试主要来验证各个模块集成后模块与模块之间的功能性,以及各个模块集成后的功能流程性和逻辑兼容性的测试。 

测试对象:模块间的接口·测试

测试⼈员:测试开发工程师

测试依据:单元测试的模块和概要设计文档

测试方法:黑盒测试与白盒测试相结合,即灰盒测试

测试内容:模块之间的数据传属,模块之间功能冲突,模块组装功能正确性、全局数据结构、单模块缺陷对系统等的影响

 集成测试的核心是API测试,也就是接口测试。接口测试主流的测试工具是PostMan,JMeter。

集成维度具体为:

A、前端与后端的集成:a、前端:Vue,React等  b、后端:主流的编程语言  c、交互:前后端会根据HTTP的协议来进行交互

B、后端与后端的集成:a、后端:淘宝服务   b、后端:支付宝的服务 c、交互:服务根据HTTP等协议来进行通信

测试的大部分精力主要聚焦于接口测试,因为接口测试的执行速度是比较快的,而且也是由现在的企业软件开发模式来决定的。

3、系统测试(功能测试):端到端的测试(End To End Test)

针对一个系统的业务流程的测试,也就是说从一个流程开始一直到一个流程的结束。针对系统中各个不同模块(集成测试里面的模块)集成到一起后的测试,目的是验证各个独立的模块集成到一起后,是否能够完整的调用通系统的各个链路。

测试对象:整个系统(软件以及涉及到的硬件)

测试人员:黑盒测试⼯程师,功能测试⼯程师

测试依据:需求规格说明⽂档,以及产品的PRD⽂档

测试方法:黑盒测试,功能自动化测试

测试内容:功能、界面、可靠性、易用性、性能、兼容性、安全性等

4、验收测试: 测试完成后,发送邮件给产品经理,产品经理这边会进行验收测试,产品经理这边验收测试完成后,会回复邮件说明验收测试已经完成,下来测试团队编写测试报告,准备产品的上线。

[2]、按查看代码分类:黑盒测试、白盒测试、灰盒测试

1、黑盒测试: 把测试的对象看成是一个黑色的盒子的,看不到里面内部的结构,是对软件的一种功能性的测试。

2、白盒测试: 就是把测试的对象看成是一个透明的盒子,能够看见被测软件的内部结构,是单元测试的一种形式,是针对程序的内部代码的一种测试形式。

3、灰盒测试: 它是介于黑盒测试与白盒测试中间,具体的来说就是测试开发工程师(测试工程师)能够看懂开发的代码,进行代码的走查和参与开发代码的评审,作为测试,不一定会写代码,但是要会看代码之间的逻辑。

[3]、按测试编写代码分类:手工测试 、自动化测试

1、手工测试(功能测试/业务测试):就是由人去⼀个⼀个的输⼊测试用例,然后观察结果,和机器测试相对应,属于比较原始但是必须的⼀个步骤。

它的特点主要为:

优点:自动化测试是无法替代人的测试的行为模式的,也无法替代探索性的测试。

缺点:执行效率慢,影响测试交付的效率。

2、自动化测试(UI自动化测试,接口自动化测试):通过工具或者是代码的形式来模拟人的操作,来对被测试的产品进行自动化测试的操作。

 六、软件质量
软件质量:描述当前软件是否好用,在当前的软件行业里我们所采用的是基于ISO组织制定的⼀套标准。
六大特性:功能性、易用性、可靠性、效率性:boss、拉钩、可维护性、可移植性
1、功能性:软件需要满足用户的显式或者稳式的功能。
2、易用性:软件易于学习和上手使用。
3、可靠性:指的就是软件必须实现需求当中指明的具体功能。
4、效率性:类似于软件的性能。
比如测试一下boss招聘首页的效率性:
 
5、可维护性:要求软件具有将某个功能修复之后继续使用的能力
6、可移植性:当前软件可以从⼀个平台移植到另⼀个平台上去使用的能力。

七、软件测试的人工检查

(1)、检查算法的逻辑正确性:确定所编写的代码算法、数据结构定义(如:队列:先进先出、堆栈:栈:先进后出等)是否实现了模块或方法所要求的功能。算法在程序里面,指的是做一件事需要的步骤。而程序=数据结构+算法。

(2)、模块接口的正确性检查:确定形式参数个数、数据类型、顺序是否正确;确定返回值类型及返回值的正确性。

(3)、输⼊参数有没有作正确性检查:如果没有作正确性检查,确定该参数是否的确无需做参数正确性检查,否则请添加上参数的正确性检查。

(4)、调用其他方法接口的正确性:检查实参类型正确与否、传入的参数值正确与否、个数正确与否,特别是具有多态的方法。返回值正确与否,有没有误解返回值所表示的意思。最好对每个被调用的方法的返回值用显示代码的方法作正确性检查,如果被调用的方法出现异常或错误程序应该给予反馈,并添加适当的出错处理代码。

(5)、出错处理:模块代码要求能预见出错的条件,并设置适当的出错处理,以便⼀旦程序出错时,能对出错程序做安排,保证其逻辑的正确性,这种出错处理应当是模块功能的⼀部分。若出现下列情况之⼀,则表明模块的错误处理功能包含有错误或缺陷:出错的描述难以理解;出错的描述不足以对错误定位,不足以确定出错的原因;显示的错误信息与实际的错误原因不符;对错误条件的处理不正确;在对错误进行处理之前,错误条件已经引起系统的干预等。

(6)、保证表达式、SQL语句的正确性:检查所编写的SQL语句的语法、逻辑的正确性。对表达式应该保证不含⼆义性,对于容易产生歧义的表达式或运算符优先级(如:<:小于、==:等于、 >:大于、 &&:并且(至少两个条件的关系)、||:或者(至少两个条件满足一个就可以了)、++、 --等)可以采⽤括号运算符''()''避免⼆义性,这样一方面能够保证代码的正确可靠,同时也能够提高代码的可读性。

(7)、检查常量或全局变量使用的正确性:确定所使用的常量或全局变量的取值和数值、数据类型;保证常量每次引用同它的取值、数值和类型的⼀致性。

(8)、表示符定义的规范⼀致性:保证变量命名能够见名知意,并且简洁但不宜过长或过短、规范、容易记忆、最好能够拼读。并尽量保证用相同的表示符代表相同功能,不要将不同的功能用相同的表示符表示;更不要用相同的表示符代表不同的功能意义。

(9)、程序风格的⼀致性、规范性:代码必须能保证符合企业规范,保证所有成员的代码风格⼀致、规范、工整。例如对数组做循环,不要一会儿采用下标变量从下到上的方式(如:for(i=0;i++;i10)),一会儿又采用从上到下的方式( 如:for(i=10;i--;i0));应该尽量采用统⼀的方式,或则统⼀从下到上,或则统⼀从上到下。建议采用for循环和While 循环,不要采用do和while循环等。

(10)、检查程序中使用到的神秘数字是否采用了表示符定义:神秘的数字包括各种常数、数组的大小、字符位置、 变换因子以及程序中出现的其他以文字形式写出的数值。在程序源代码里,⼀个具有原本形式的数对其本身的重要性或没提供任何指示性信息,它们也会导致程序难以理解和修改。对于这类神秘数字必须采用相应的标量来表示;如果该数字在整个系统中都可能使用到务必将它定义为全局常量;如果该神秘数字在⼀个类中使用可将其定义为类的属性(Attribute),如果该神秘数字只在⼀个⽅法中出现务必将其定义为局部变量或常量。

(11)、检查代码是否可以优化、算法效率是否最高:如:SQL语句是否可以优化,是否可以⽤1条SQL语句代替程序中的多条SQL语句的功能,循环是否必要,循环中的语句是否可以抽出到循环之外等。

(12)、检查程序是否清晰简洁容易理解:注意:冗长的程序并不⼀定不是清晰的。

(13)、检查方法内部注释是否完整:是否清晰简洁;是否正确的反映了代码的功能,错误的注释比没有注释更糟; 是否做了多余的注释;对于简单的⼀看就懂的代码没有必要注释。

(14)、检查注释⽂档是否完整:对包、类、属性、方法功能、参数、返回值的注释是否正确且容易理解;是否会落下了或多了某个参数的注释,参数类型是否正确,参数的限定值是否正确。特别是对于形式参数与返回值中关于神秘数值的注释,如:类型参数应该指出 1代表什么。对于返回结果集(Result Set)的注释,应该注释结果集中包含那些字段及字段类型、字段顺序等。

八、软件的分类

大体上可以分为三⼤类: 系统软件,应用软件,中间件(介于系统软件和应用软件之间的)

1、系统软件:即操作系统。

PC端: 以图形化界面为主,命令行为辅的操作系统;例如:windows,苹果以命令行为主,图形化为辅的操作系统。例如:linux ,unix,solaris等是以图形化为主,命令行为辅。

图形化:在图形,图标上操作来使用设备;使用方便简单。

命令行:通过⼀个⼀个的命令,来操作使用设备。例如:ipconfig 查看当前设备(电脑)的ip地址Ping 对方设备的ip地址来判断自己的设备跟对方的设备之间是否可以通信。

2、应用软件:WEB/APP/小程序

3、中间件:tomcat等

九、测试术语

1、安全测试:主要是针对被测软件进行安全的考虑,目前主要使用的技术是渗透测试。

2、回归测试:产品都已经测试完成了,在准备上线的情况下,针对产品进行第N次的测试。回归测试目前主要是大量的自动测试来承担这部分的任务。

测试环境:线上环境: 1、系统已有功能的测试 2、对本次上线新功能的回归测试

 

 

 

 

 

 

 

posted on   DOUBLE快乐  阅读(74)  评论(0编辑  收藏  举报

相关博文:
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· .NET10 - 预览版1新功能体验(一)
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

导航

统计

点击右上角即可分享
微信分享提示