基础知识:
- 计算机系统的五大基本组成:运算器、控制器、存储器、输入设备、输出设备。
- 运算器+控制器=CPU(中央处理器、计算机的核心)。
网站的访问过程预备知识:
- URL:统一资源定位符,互联网上资源的地址。常说的网页的地址。 URL格式: 协议://主机地址/路径
- HTTP协议:超文本传输协议,规定了浏览器和服务器之间通信的规则。
协议:网络协议的简称,网络协议时通信计算机双方必须共同遵从的一组约定。 - 域名:又称网域,是由一串用点分隔的名字组成的Internet上某一台计算机或计算机组的名称,用于在数据传输时对计算机的定位标示。
www.baidu.com 就是域名 - IP地址:每台电脑上互联网都会被分配到一个不重复的IP地址数字串。
所有的域名都有一个相应的IP地址,并且可以把URL中域名替换成IP地址。 - DNS:域名系统,用于把域名转换为对应的IP地址。 域名解析就是由域名到IP地址的转换过程,域名的解析工作由DNS服务器完成。
- hosts:将一些常用的网站域名与其对应的IP地址建立一个关联。当用户在浏览器输入一个网址时,系统会首先自动从hosts文件中寻找对应的IP地址,一旦找到,系统会立即打开对应网页。如果没有找到,系统会将网址提交给DNS域名解析服务器进行IP地址解析。
- 客户端和服务器端:
客户端:又称用户端,是指与服务器相对应,为客户提供服务的程序。用于发送请求,比如:用户使用的浏览器、桌面应用程序、app等等…
服务器端:是指网络中能对其他机器提供某些服务的计算机系统。处理客户端请求并返回数据。
请求:客户端向服务器索要数据。
响应:服务器处理完成之后,返回给客户端的数据与信息。
网站的访问过程:
- DNS解析:浏览器查询DNS,获取域名对应的IP地址。
- TCP连接:浏览器获得域名对应的IP地址后,浏览器向服务器发起建立连接,发起三次握手。
- 发送HTTP请求:TCP连接建立起来后,浏览器向服务器发送HTTP请求。
- 服务器处理请求并返回HTTP报文:服务器接收到这个请求,并根据路径参数映射到特点的请求处理器进行处理,并将处理结果以及相应的视图返回给浏览器。
- 浏览器解析渲染页面:浏览器解析并渲染视图,若遇到js文件,css文件及图片等静态资源的引用,则重复上述步骤向服务器请求这些资源;浏览器根据其请求道的资源、数据渲染页面,最终向用户呈现一个完整的页面。
- 连接结束。
如何理解软件测试
进行软件测试就是因为开发过程中存在导致软件出现缺陷的因素。只有通过软件测试,才能发现软件缺陷。只有发现了缺陷,才能将软件缺陷从软件产品或软件系统中清理出去。软件测试对软件进行测试、验证,确保软件中存在的问题得到修正,最终保证发布后的软件能够满足质量要求,得到用户的认可。
软件测试的目的
软件测试的目的,就是以最少的人力、物力和时间找出软件中潜在的各种错误和缺陷,通过修正各种错误和缺陷提高软件质量,避免软件发布后由于潜在的软件缺陷和错误造成隐患以及可能带来的商业风险。
软件测试的原则
- 所有的软件测试都应追溯到用户的需求。
- 尽早的开展测试。
由于软件的复杂性和抽象性,在软件生命周期的各个阶段都可能存在错误,所以不应该把软件测试作为软件开发的一个独立阶段的工作,应该贯穿到软件开发的各个阶段中,越早发现错误,付出的代价越小。 - 完全测试是不可能的,测试需要终止准则。
- 充分注意测试中的群集现象。
测试后程序中残存的错误数目与程序中已经发现的错误数目成正比。应当对错误群集的程序段进行重点测试。 - 程序员应避免检查自己的程序。
软件测试类型
功能测试
功能测试一般是在整个软件产品开发完成后,通过直接运行软件的方式,对前端的输入与输出功能进行测试,检验软件能否正常使用各项功能,业务逻辑是否清楚,是否满足用户需求。
接口测试
用于检测外部系统与系统之间以及系统内部各个子系统之间的交互点,测试的重点是检查数据的交换,传递和控制管理过程,以及系统间的相互逻辑依赖关系。简单来说,接口测试就是通过测试不同情况下的输入参数与相对应的返回结果,来判断软件系统前后端之间的接口是否符合或满足相应的功能性、安全性要求。
性能测试
通过模拟生产运行的业务压力或用户使用场景,测试系统的性能是否满足生产性能的要求。目的是为软件产品的使用者提供高质量、高效率的软件产品。
软件测试级别
针对不同开发阶段的测试目的,测试活动分为以下几种。
单元测试
对已实现的软件的最小单元进行测试,以保证构成软件的各个单元的质量。
在单元测试中,强调被测试对象的独立性,软件的单独单元与程序的其他部分被分隔开来,避免测试时其他单元对该单元的影响。通过单元测试可以更早的发现缺陷,缩短开发周期,降低软件成本。
单元测试主要采用白盒测试,辅以黑盒测试方法。
集成测试
将通过单元测试模块组合在一起,进行测试。
确认测试
经过集成测试之后,已经按照设计要求把所有的模块组装成一个完整的软件系统,接下来就是验证软件的有效性就是确认测试。
确认测试是在模拟的环境下,运用黑盒测试的方法,验证被测软件是否满足需求规格说明书中列出的需求,即验证软件的功能是否与用户的要求一致。
系统测试
对软件整体进行测试,以保证业务、功能和非功能(安全性、兼容性、可靠性等)的要求。
系统测试包括:性能测试、易用性测试、安全性测试、兼容性测试等。
验收测试
在软件产品完成了功能测试和系统测试之后,产品发布前进行的软件测试活动。
测试方法
黑盒测试
通过软件的外部表现发现缺陷和错误,不考虑程序的内部结果和处理过程,仅针对程序是否可以接收正确的输入产生正确的输入进行测试。
黑盒测试方法应用于模块、组件等大单元的功能测试。
黑盒测试方法
- 等价类划分
有效等价类:完全满足产品规则说明的输入数据,即有效的、有意义的输入数据所构成的集合。
无效等价类:不满足程序输入要求或无效的输入数据构成的集合。
适用场景: 针对数据量大,有测试数据输入的地方。eg:输入框测试 - 边界值分析法
使用场景: 在等价类基础上针对有边界范围的测试数据输入的地方;最好是任何情况;有词语:大小、尺寸、重量、最大、最小等描述; - 正交表法
- 因果图法:输出依赖于输入的条件
适用场景: 有多个输入条件、多个输出结果,输入条件之间有组合关系,输入和输出之间有依赖关系。 - 场景法:模拟用户操作软件时的场景
适用场景: 对多个功能之间的组合逻辑测试
基本流:按照正确的业务流程实现的一条操作路径。
备选流:导致程序出现错误的操作流程。
测试用例设计方法总结:
- 具有输入功能,但输入之间没有组合关系:等价类
- 输入有边界,如长度、类型:边界值
- 多输入,多输出,输入和输入之间存在组合关系,输入和输出之间存在依赖关系:判定表、因果图
- 用最少的测试用例获得最大的测试用例:正交法
- 多个功能的组合测试:场景法、流程图
- 最后推荐使用错误推测法来进一步补充测试用例
白盒测试
对程序内部结构的分析与检测寻找软件的问题。要了解程序的内部结构和处理过程,通过检查程序的内部结构和逻辑路径是否正常,检查软件内部动作是否符合软件设计说明书中规定发现程序的缺陷。
白盒测试方法应用于代码评审,单元程序代码测试。
白盒测试方法有:逻辑覆盖法,基本路径测试法。
逻辑覆盖法:
(强度由弱至强)
- 语句覆盖:设计若干个测试用例,运行被测程序,使程序中的每条可执行语句至少应该执行一次。
- 判定覆盖(分支覆盖):设计若干个测hi使用里,运行被测程序,使程序中的每个判定都至少获得一次真值或假值。
- 条件覆盖:构造一组测试用例,使每一个判定语句中的每个逻辑条件的可能值至少满足一次。
- 条件判定组合覆盖:设计足够多的测试用例,使判定中每个条件的所有可能至少出现一次,并且每个判定本身的判定结果也至少出现一次。
- 多条件覆盖(组合覆盖):设计足够多的测试用例,使每个判定中条件的各种可能组合都至少出现一次。
- 修正条件判定覆盖:进行数据的挑选。
路径覆盖法:
可以对程序进行更加彻底的测试,比语句覆盖、判定覆盖、条件覆盖、条件判定覆盖、条件组合覆盖的覆盖面都广。
路径覆盖率 = 至少被执行过一次的路径 / 总的路径数量
优点: 路径覆盖面非常广
缺点: 由于路径覆盖需要对所有可能的路径进行测试,那么需要设计大量、复杂的测试用例,使得工作了呈指数级增长,而在有些情况下,一些执行路径是不可能被执行的。
灰盒测试
都关注啦
测试手段
手工测试
是不可替代的。
优点:
- 测试用例的设计:测试人员的经验和对错误的判断力不可替代
- 界面和用户体验测试:人类的审美和心理体验不可替代
- 正确性检查:人对于是非的判断和逻辑推理能力不可替代
缺点:
- 重复的手工回归测试,代价昂贵,易出错
- 依赖于测试人员的能力
自动化测试
通过编写测试代码代替手工测试的重复性测试工作,提高效率,解放人力。
优点:
- 对程序的回归测试更方便
- 可以运行更繁琐的测试
- 可以执行手工测试困难或不可能进行的测试
- 更好的利用资源
- 增加软件信任度
- 测试的复用性
缺点:
- 不能代替手工测试
- 手工测试发现的bug大于自动测试
- 对测试质量依赖性大
软件测试流程
-
需求分析与评审
-
制定测试计划并评审
测试计划中包括以下内容:- 测试目标
- 测试需求和范围
- 测试风险
- 项目估算
- 测试策略
- 测试阶段划分
- 测试资源
- 日程
- 跟踪和控制机制
-
设计测试用例并编写 : 测试用例的设计主要依据需求文档、概要文档、详细文档等
-
搭建测试环境
-
执行测试 :执行冒烟测试 之后进入正式测试、bug管理直到测试结束
-
跟踪缺陷并提交缺陷报告
-
测试总结: 对整个测试进行评估与总结,编写测试报告,确认系统是否可以上线
- 缺陷分析
- 缺陷密集度
- 缺陷清除率
- 编写测试报告
- 项目背景
- 系统简介
- 引用文档
- 测试概述
- 测试目的
- 测试组织
- 测试环境
- 测试范围
- 测试过程
- 测试内容
- 测试时间
- 测试方法
- 测试结果和缺陷分析
- 覆盖分析:需求覆盖、测试覆盖
- 缺陷的统计和分析:缺陷统计、缺陷分析
- 测试总结与建议
- 缺陷分析