软件测试基础(一)
一、软件测试定义
1、软件测试官方的定义为:描述⼀种用来促进鉴定软件的正确性、完整性、安全性和质量的过程。
换句话说,软件测试是⼀种实际输出与预期输出之间的审核或者比较的过程 。
2、定义解读:
正确性:
a、一个软件的正常功能是否可以实现
b、一个软件的异常功能,也就是说的容错性
完整性:
a、需要验证(测试/考虑)到一个软件使用的各个方面(维度),它的标准就是考虑需要周全
b、既然是完整性那么也就需要考虑一个软件的正常的使用和异常情况下的容错的能力
c、本地化也是需要考虑到的(国际化)
本地化测试:产品是国际化的,那么本地化指的是产品全部使用一种语言(韩文/日文/英语),这个时候你依然要具备测试的能力。
安全性:
a、产品在非功能使用情况下是否存在数据泄露,以及其他隐患的情况下
b、需要考虑的是通过渗透测试的技术来验证产品是否存在支付,数据,以及其他的安全审计等问题
二、软件测试的流程
冒烟测试:开发把编写好的程序转给测试的时候,程序首先需要做的是针对转测的程序进行正常流程的测试,这个过程叫冒烟测试。
针对被测程序的正常流程的测试,目的是验证程序正常流程可以执行通的情况下继续测试被测程序的其他功能。
注:第一:PRD:(ProductRequirement Document:产品需求文档),主要用于完整描述产品需求,向研发部门明确产品的功能和性能以及作为产品文档归档。
第二:传统的测试只参与到测试阶段,其他阶段很少关注,但是新型的测试,需要在整个流程中(需求从提出到产品上线)都全部的参与进去。
测试人员尽早参与进去的好处:
a、尽早的熟悉产品的需求以及产品PRD的设计文档以及产品逻辑
b、从敏捷角度而言,⽂档的准确性以及文档的可用性也是需要测试被验证的之⼀(⼀般测试很少这样做)
c、协助产品,站在用户的角度以及测试的角度来思考产品设计逻辑的合理性
d、尽早进入可以更多的理清程序的逻辑
e、在具体到产品PRD评审的时候,能够尽快的进⼊到具体的逻辑和思考中,而不致于说之前不理解,可能一直游离在思考的阶段
a、探索性测试:根据自己的主观意愿来对产品进行随机的,无目的性的测试产品,目的是发现产品中可能存在的其他问题。探索性强调测试⼈员的主观能动性,抛弃繁杂的测试计划和测试用例设计过程,强调在碰到问题时及时改变测试策略。
b、工具:头脑风暴(由N个人一起开会,针对某一个特定的事提出不同的解决方案和意见,目的是达成比较中性的解决方案)
四、软件测试的原则
1、测试应基于用户的需求
注意保留测试设计和说明⽂档,并注意测试设计的可重用性
测试文档有哪些? a、测试计划 b、测试设计方案 c、测试用例 d
妥善保存测试计划,测试用例,出错统计和最终分析报告,为维护等提供方便,这些测试文档都是可以拿来复用的。
五、软件测试的分类
[1]、按阶段划分:软件测试按开发流程的阶段来划分,可以主要划分为如下几个阶段,具体为:单元测试、集成测试、系统测试、验收测试
1、单元测试(白盒测试):(
测试人员:白盒测试工程师,开发工程师,测试开发工程师
测试依据:代码内部程序逻辑和开发注释。
测试方法:白盒测试,根据不同编程语⾔有对应的测试框架,如Java里面的Junit和TestNG框架,Python里面的UnitTest和Pytest测试框架。
测试内容:模块接口测试,程序内部逻辑,路径分支测试,局部数据结构测试,错误处理测试,边界测试。
集成测试的核心是API测试,也就是接口测试。接口测试主流的测试工具是PostMan,JMeter。
集成维度具体为:
A、前端与后端的集成:a、前端:Vue,React等 b、后端:主流的编程语言 c、交互:前后端会根据HTTP的协议来进行交互
B、后端与后端的集成:a
测试的大部分精力主要聚焦于接口测试,因为接口测试的执行速度是比较快的,而且也是由现在的企业软件开发模式来决定的。
3、系统测试(功能测试):端到端的测试(End To End Test)
针对一个系统的业务流程的测试,也就是说从一个流程开始一直到一个流程的结束。针对系统中各个不同模块(集成测试里面的模块)集成到一起后的测试,目的是验证各个独立的模块集成到一起后,是否能够完整的调用通系统的各个链路。
测试对象:整个系统(软件以及涉及到的硬件)
测试人员:黑盒测试⼯程师,功能测试⼯程师
测试依据:需求规格说明⽂档,以及产品的PRD⽂档
测试方法:黑盒测试,功能自动化测试
测试内容:功能、界面、可靠性、易用性、性能、兼容性、安全性等
4、验收测试: 测试完成后,发送邮件给产品经理,产品经理这边会进行验收测试,产品经理这边验收测试完成后,会回复邮件说明验收测试已经完成,下来测试团队编写测试报告,准备产品的上线。
[2]、按查看代码分类:黑盒测试、白盒测试、灰盒测试
1、黑盒测试: 把测试的对象看成是一个黑色的盒子的,看不到里面内部的结构,是对软件的一种功能性的测试。
2、白盒测试: 就是把测试的对象看成是一个透明的盒子,能够看见被测软件的内部结构,是单元测试的一种形式,是针对程序的内部代码的一种测试形式。
3、灰盒测试: 它是介于黑盒测试与白盒测试中间,具体的来说就是测试开发工程师(测试工程师)能够看懂开发的代码,进行代码的走查和参与开发代码的评审,作为测试,不一定会写代码,但是要会看代码之间的逻辑。
[3]、按测试编写代码分类:

七、软件测试的人工检查
(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、
测试环境:线上环境: 1、系统已有功能的测试 2、对本次上线新功能的回归测试
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· .NET10 - 预览版1新功能体验(一)