🍉CSDN小墨&晓末:https://blog.csdn.net/jd1813346972
个人介绍: 研一|统计学|干货分享
擅长Python、Matlab、R等主流编程软件
累计十余项国家级比赛奖项,参与研究经费10w、40w级横向
文章目录
- 1 软件测试概述
- 2 软件测试对象
- 3 软件测试的目的
- 4 软件测试原则
- 4 软件测试误区
- 6 软件测试分类
- 6.1 按开发阶段
- 6.2 是否运行
- 6.3 是否查看源代码
- 6.4 其它
- 7 软件测试基本流程
1 软件测试概述
软件测试是在规定的条件下对程序进行操作,以发现程序错误,衡量软件质量,并对其是否能满足设计要求进行评估的过程。其目的是以最少的人力、物力和时间找出软件中潜在的各种错误和缺陷,通过修正这些错误和缺陷来提高软件质量,从而避免软件发布后由于潜在的软件缺陷和错误造成的隐患所带来的商业风险。
软件测试的IEEE定义:使用人工或自动的手段来运行或测量软件系统的过程,目的是检验软件系统是否满足规定的需求,并找出与预期结果之间的差异。
2 软件测试对象
① 源程序/目标代码
② 各开发阶段的文档(需求规格说明、概要设计说明、详细设计说明及其它相关文档)
3 软件测试的目的
从用户角度看的目的:通过软件测试发现隐藏的错误和缺陷,考虑是否可以接受该产品。
从开发者角度看的目的:表明软件产品不存在错误,验证软件实现了所有用户的要求。
从测试人员角度看的目的:发现错误,预测错误,提供软件可靠性错误,对软件做出评价。
① 帮助开发人员、测试工程师发现问题、分析问题。
② 减少软件的缺陷数目或者降低软件缺陷的密度。
③ 提高软件的可靠性
④ 评估软件的性能指标。
⑤ 增加用户对软件的信心。
⑥ 测试的最终目的是尽快尽早地发现在软件中的缺陷,通过修正各种错误和缺陷提高软件质量,回避软件发布后由于潜在的软件缺陷和错误造成的隐患所带来的商业风险。
4 软件测试原则
① 所有测试的都应追溯到用户需求。
② 应当把“尽早地和不断地进行软件测试”作为软件测试者的座右铭。
③ 由于软件的复杂性和抽象性,在软件生命周期各个阶段都可能产生错误,所以不应把软件测试仅仅看作是软件开发的一个独立阶段的工作,而应当把它贯穿到软件开发的各个阶段中。在软件开发的需求和设计阶段就应开始测试工作,编写相应的测试文档。
④ 完全测试是不可能的,测试需要终止。
⑤ 想要进行完全的测试,在有限的时间和资源条件下,找出所有的软件缺陷和错误 使软件趋于完美是不可能的主要有三个原因: ①输入量太大; ③输出结果太多;③路径组合太多。
⑥ 测试无法显示软件潜在的缺陷:进行测试是可以查找并报告发现的软件缺陷和错误,但不能保证软件缺陷和错误全部找到。
⑦ 充分注意集试中群集现象(二八定理):经验表明,在所测试程序段中,若发现的错误数目多,则残存的错误数目也较多。缺陷的二八定理指的是,一般情况下,80%软件缺陷出现在20%的功能区域,在测试过程中,投入主要的人力和精力重点测试这20%的功能区域。
⑧ 开发人员应避免检查自己的程序:基于心理因素,揭露自己程序中的问题总不是一件愉快的事,不愿否认自己的工作;由于思维定势,人们难于发现自己的错误。因此为达到测试的目的,应由客观、公正、严格的独立的测试部门或独立的第三方测试机构进行测试。
⑨ 尽量避免测试的随意性:应从工程的角度理解测试,它是有组织、有计划、有步骤的活动。
4 软件测试误区
误区一:如果发布出去的软件有质量问题,都是软件测试人员的错。
误区二:软件测试技术要求不高,至少比编程容易多了。
误区三:有时间就多测试一些,来不及就少测试一些。
误区四:软件测试是测试人员的事,与开发人员无关。
误区五:根据软件开发瀑布模型,软件测试是开发后期的一个阶段。
6 软件测试分类
6.1 按开发阶段
•单元测试
单元测试主要用白盒测试,先静态地检查代码是否符合规范,然后动态运行代码,检查其实际运行结果,检查程序的运行结果是否正确是一个最基本的要求,还要关注容错处理,程序的边界值处理等。
单元测试又称模块测试,针对软件设计中的最小单位——程序模块,进行正确性检查的测试工作。单元测试需要从程序的内部结构出发设计测试用例。多个模块可以平行地独立进行单元测试。
C中指一个函数,Java中指一个类,在图形化的软件中,单元一般指1个窗口,1个菜单。
•集成测试
集成测试又叫组装测试,通常在单元测试的基础上,将所有程序模块进行有序的、递增的测试。重点测试不同模块的接口部分。
•系统测试
指将整个软件系统看为一个整体进行测试,包括对功能、性能、以及软件所运行的软硬件环境进行测试。
•验收测试
验收测试指按照项目任务书或合同、供需双方约定的验收依据文档进行的对整个系统的测试与评审,决定是否接收或拒收系统。在系统测试的后期,以用户测试为主或有测试人员等质量保证人员共同参与的测试。
α测试:指的是指的是由用户,测试人员、开发人员等共同参与的内部测试。
β测试:指的是内测后的公测,即完全交给最终用户测试
验收测试的重要性:验收签字,收钱。
6.2 是否运行
•静态测试
指不实际运行被测软件,而只是静态地检查程序代码、界面和文档中可能存在的错误的过程。
•动态测试
指实际运行被测程序,输入相应的测试数据,检查实际输出结果与预期结果是否相符。(动态测试方法为结构和正确性测试;动态测试工具Robot(Robot Framework是用于验收测试和验收测试驱动开发(ATDD)的通用开源测试自动化框架。它具有易于使用的表格测试数据语法,并使用关键字驱动的测试方法。它的测试功能可以通过用Python或Java实现的测试库进行扩展,用户可以使用与创建测试用例相同的语法从现有的关键字创建新的更高级别的关键字;Robot Framework框架是跨平台的,独立于操作系统和应用程序。核心框架使用Python实现,支持Python 2和Python 3,并且还可以在Jython(JVM), IronPython(.NET)和PyPy上运行。该框架有丰富的测试库生态,由各种通用测试库(包括内置库、扩展库和自定义库)和工具组成,这些库被作为单独的项目开发;Robot Framework 是一个跨平台的通用的,与应用程序和技术无关的测试框架。它有一个高度模块化的架构)、QTP(一种自动化软件测试工具,侧重于软件的功能测试和回归测试,属功能测试工具在软件的测试过程中,QTP主要来用来通过已有的测试脚本执行重复的手动测试,用于功能测试和回归测试。使用QTP要求测试人员在测试前考虑好应用程序测试的内容,步骤,输入数据和期望的输出数据等)等)。
6.3 是否查看源代码
•黑盒测试
指的是把被测的软件看做一个黑盒子,我们不关心盒子里面的结构是什么样子的,只关心软件的输入数据和输出。
•白盒测试
指的是把盒子打来,去研究里面的源代码和程序结构。
软件公司中,往往采用黑盒测试&白盒测试相结合的方式。(静态黑盒测试:看文档,看页面等;静态白盒测试:看源代码等;动态黑盒测试:使用软件等;动态白盒测试:运行源代码等)。
•灰盒测试
是介于白盒测试与黑盒测试之间的一种测试,灰盒测试多用于集成测试阶段,不仅关注输出、输入的正确性,同时也关注程序内部的情况。
6.4 其它
•功能测试
是黑盒测试的一方面,它检查实际软件的功能是否符合用户的需求。
逻辑功能测试(function testing)。
界面测试(UI testing)。
易用性测试(usability testing)。
安装测试(installation testing)。
兼容性测试(compatibility testing)。
•性能测试
是软件测试的高端领域,通常我们所说的高级软件测试工程师一般就是指性能测试或是白盒测试工程师。
1.常用性能指标:
响应时间(时间性能):是指系统对用户请求作出响应所需要的时间。
吞吐量:单位时间内系统能够完成的工作量,衡量服务器的处理能力。
并发用户数:指同一时间请求和访问的用户数量。
TPS:指系统每秒钟能够处理的事务和交易数量。
点击率:指用户每秒向web服务器提交的http请求数。
资源利用率(空间性能):指软件对系统资源的使用情况,包括CPU利用率、内存利用率、磁盘利用率等。
2.性能测试内容:
并发测试:模拟用户并发访问,测试多用户并发访问同一应用、同一模块或者数据记录是否存在死锁或者其他问题。
配置测试:调整软件系统的软硬件环境,测试各种环境对系统性能的影响,从而找到各项资源的最优分配原则。
容量测试:在一定的软硬件及网络环境条件下,软件系统所能支持的最大用户量,最大储存量等。
可靠性测试:给系统加载一定的业务压力,使其运行一段时间,测试在这种条件下,能够稳定运行。
负载测试:考察软件系统在既定负载下的性能表现。(1)负载测试是站在用户的角度去观察在一定条件下软件系统的性能表现;(2)负载测试的预期结果是用户的性能需求得到满足。此指标一般体现为响应时间、交易容量、并发容量、资源使用率等。
压力测试:考察系统在极端条件下的表现,极端条件可以是超负荷的交易量和并发用户数。注意,这个极端条件并不一定是用户的性能需求,可能要远远高于用户的性能需求。可以这样理解,压力测试和负载测试不同的是,压力测试的预期结果就是系统出现问题,而我们要考察的是系统处理问题的方式。比如说,我们期待一个系统在面临压力的情况下能够保持稳定,处理速度可以变慢,但不能系统崩溃。因此,压力测试是能让我们识别系统的弱点和在极限负载下程序将如何运行。
•回归测试
指对软件的新版本测试时,重复执行上一个版本测试时的用例。
•冒烟测试
是指在对一个新版本进行系统大规模的测试之前,先验证一下软件的基本功能是否实现,是否具备可测试性。
•随机测试
是指测试中所有的输入数据都是随机生成的,其目的是模拟用户的真实操作,并发现一些边缘性的错误。
7 软件测试基本流程
1.需求分析阶段:阅读需求,理解需求,分析需求点,参与需求评审会议。
2.测试计划阶段:主要任务就是编写测试计划,参考软件需求规格说明书,项目总体计划,内容包括测试范围,进度安排,人力物力分配,整体测试策略的制定。
3.编写测试用例:适当的了解设计,搭建测试用例框架,根据需求和设计编写测试用例。
4.测试执行阶段:搭建环境准备数据,执行冒烟测试(预测试),然后进入正式测试(系统测试、回归测试、交叉测试、自由测试),bug管理直到测试结束。
5.输出测试报告:输出测试报告,确认是否可以上线。