目录

  • 一、什么是软件测试
  • 二、测试对象
  • 三、测试原则
  • 四、测试流程(功能)
    • 1. 了解产品功能需求
    • 2. 制定测试计划
    • 3. 编写测试用例
      • 3.1 需求文档分析
      • 3.2 功能模块划分
      • 3.3 编写测试用例(功能测试)
        • 3.3.1 测试用例内容
        • 3.3.2 测试用例编写方法
      • 3.4 测试用例整理与维护
    • 4. 评审测试用例以及搭建测试环境
    • 5. 开始测试(冒烟测试、详细测试)
    • 6. 回归测试
    • 7. 编写测试报告
  • 五、测试类型
    • 1. 功能测试
    • 2. 性能测试、压力测试(Jmeter)
    • 3. 接口测试
    • 3. 兼容性测试
    • 4. 移动端app专项测试
      • 4.1 弱网测试
      • 4.2 中断测试
      • 4.3 性能测试
      • 4.4 其他测试
    • 5. 安全测试
    • 6. 自动化测试
    • 7. 日志测试
    • 8. gm工具测试(游戏测试)
  • 六、面试准备

一、什么是软件测试

IEEE定义:使用人工或自动的手段运行或测量软件系统的过程,以检验软件系统是否满足规定的要求,并找出与预期结果之间的差异

测试是为发现错误而执行程序的过程。
作为测试工程师,你的目标是要保证系统在各种应用场景下的功能是符合设计要求的,要考虑的测试用例就应该更多、更全面。

二、测试对象

从前期的软件需求,到软件概要设计、软件详细设计、软件源代码、可运行软件程序、软件运行环境都是软件测试的测试对象。

三、测试原则

  1. 测试显示故障缺陷的存在,但不能证明系统不存在的缺陷。
  2. 发现bug仅仅是测试工作的开始。提交bug后还需要继续跟踪,回归测试。
  3. 穷尽测试是不可能的,应设定及时终止的条件。
  4. 测试应该尽早进行。不间断测试,只要具备测试条件(如某模块功能编写完了),就可以开始测试。越早发现缺陷,软件开发成本就越低。
  5. 缺陷具备群集特性。模块中发现的缺陷越多,那么未发现的缺陷也越多。
  6. 测试的杀虫剂悖论。测试用例和测试方法应该不定期评审和修改。
  7. 测试的二八原则。测试的时间和资源是有限的。将80%的测试时间用在系统20%的重要模块上。
  8. 测试活动依赖于测试背景。不同的测试背景有不同的测试活动。比如电信软件对性能、大并发量的访问要求更高;金融软件、银行相关的软件对安全性的要求更高。
  9. 不会代码的测试,不是一个好测试。要把自己的影响力扩展到别人,帮助整个团队。

四、测试流程(功能)

1. 了解产品功能需求

开会议,需求分析和评审

2. 制定测试计划

一般由测试负责人/测试组长编写
计划内容包括:测试范围?人员、任务分配、时间规划、进度安排等。即每轮测试所需时间?需要多少人测?做什么类型的测试?测试方法?测试机型?测试工具?测试环境等

测试的目的和范围;(功能需求范围)
测试的人员和任务分配、进度安排;(分配测试模块任务和项目进度任务)
测试策略;(根据需求制定,包括测试方法、工具、环境)
测试风险分析和预防;

3. 编写测试用例

根据产品需求的逻辑,考虑用户或系统的所有可能发生的操作以及系统中可能会出现故障的各个点,还有边界情况,如输入边界值、字段长度限制、断网、断电、事件中断、进程中断等。
如用户发送文件大小的限制;无网发送等。
用例设计不仅需要考虑明确的显式功能性需求,还可考虑安全性、性能以及兼容性(不同浏览器下,页面显示以及功能的正确性)等一系列非功能性的测试

步骤:需求文档及原型分析 --> 功能模块划分 --> 测试用例编写 --> 测试用例整理与维护

3.1 需求文档分析

文档阅读:

仔细阅读原型文件,理解需求设计的意图和思路,避免粗略理解带来的用例遗漏。

沟通探讨功能细节:

尽早确认细节,关注需求变更。

逻辑梳理:

梳理出框架后,逐步细分。
如:简单逻辑:建筑点击后可领取奖励。细化逻辑:建筑是否可点击 ,点击后有无特效,领取后能再次领取等。

功能拓展思考:

设计缺陷思考;测试难点思考;关联度思考;特殊情况思考。
如:建筑时候是否可升级拆解?道具领取有没有限制?领取的数量?道具的种类?领取后怎么提示?领取奖励的刷新时间?领取后道具的存储问题?重复的道具如何放置?叠加放置还是排列放置?领取奖励过程中断电断网或服务器维护中,会导致什么问题?

兼容拓展思考:

版本兼容;功能兼容;操作系统版本兼容;分辨率兼容
如:同一时刻不同版本运行时交互的版本兼容?老功能中添加不同类型的新功能时的兼容问题?不同操作系统中的功能是否有被影响?不同分辨率下系统界面的兼容问题?

3.2 功能模块划分

1. 功能流程法

将功能流程画出来,根据流程的每个大环节进行模块划分,然后细化和查漏补缺。
如:银行ATM的取款功能的模块划分:
插卡环节;密码登录环节;输入金额环节;取走钱币环节;取卡环节。

2. 层次划分法

按照逻辑层次逐层细化出模块的过程,比较适用于UI划分和打得系统模块划分等。
如:dota游戏的模块划分:

3. 类型划分法

按照功能内容的不同类型划分。
如:游戏测试中可进行兵种测试,道具测试等。再细化兵种测试分为可/不可训练兵种,道具测试分为可/不可消耗道具。

3.3 编写测试用例(功能测试)

输入条件单一明确;测试步骤可执行;保持高覆盖度,不遗漏测试点;
无论是什么方法,总之是模拟用户所有的可能性,无论是否非法或合理的操作。

3.3.1 测试用例内容

首页内容

用例的纲要,关键信息包括项目及迭代版本名称、编写者和编写日期、对应的需求清单、修改人和修改日期、备注内容等。

正文页内容

包含思维导图(如果有)、用例id、模块名称、测试点、测试前置条件、测试步骤、测试预期结果、实际测试结果(通过/不通过/不适用)、备注信息、执行人、执行日期、用例设计人、设计时间。

3.3.2 测试用例编写方法

等价类划分、边界值分析法、错误猜测法、因果图法、场景法

等价类划分法:将所有输入数据划分成若干个具有同等效果的子集,构成一个等价类(有效、无效等价类;输入数值有效及无效的范围、条件、前提),再从每个等价类中任意选取一个值进行测试,用少量并具有代表性的测试数据来代表整体数据。避免穷举测试。

  • 有效、无效等价类:输入数据有效及无效的范围(字符长度范围、数值范围)、条件(类型、要求)、前提(什么情况下才能/需要输入,或不能不需要输入)

边界值分析法:对输入或输出的边界值进行分析,一般选取正好等于、刚大于、刚小于边界值的三种情况作为测试数据,通常适用于数值测试、字符串测试等。
边界值分析是对等价类划分的补充。

场景法

错误猜测法/反推法
根据经验、知识、直觉推测程序中可能存在的各种错误
功能界面操作顺序/次数测试:除了功能在正确的情况外,当用户操作不正当时的系统的处理方式;当多次、反复点击某一按钮,系统的处理。

附件压力测试:对于有发送、上传、下载、邮件等功能的系统,对附件类型、大小进行测试,来检查系统的界面效果和稳定性,看是否会死机或长时间无任何反应,是否能上传脚本文件到。

多用户并发测试:当对数据增删改或执行一些业务功能,进行多客户端同时操作测试,系统的处理。

因果图与判定表法:根据输入与输出之间的因果关系画出因果图,生成判定表,再通过判定表书写测试用例。

3.4 测试用例整理与维护

测试用例自己也备份,避免误删。

4. 评审测试用例以及搭建测试环境

5. 开始测试(冒烟测试、详细测试)

根据测试用例测试,查看整个项目,发现bug,然后将bug提交给开发人员,能否符合产品需求的标准,功能是否跟产品人员要求的一致。

冒烟测试:快速验证软件的主体功能。
详细测试:细致的测试每个逻辑分支、资源、配置;尽量模拟用户的每一种操作;测试各种异常情况;测试数据读取、存储、网络等内容;新功能对旧功能的影响。

bug提交
标题:模块名称、简短描述。
测试环境:版本、操作系统、服务器、账号等。
详细描述。
重现步骤:重现bug的详细流程步骤。
期望结果:bug修复后的结果。
备注:log、截图等。
bug提交后需跟踪其修复状态。

bug管理工具:禅道、tapd、Jira、BugFree等
bug追踪管理使用bugfree,项目管理计划使用禅道,配置管理使用svn。
禅道官网下载 启动禅道服务后的地址

6. 回归测试

开发人员修复完一个bug后,回归测试,对该bug进行跟踪处理,及时验证所提交的bug是否被修复,同时是否对其他相关的功能模块有影响。
测试需求调整后的内容;再次详细测试各逻辑分支。
验证bug不能只看前端展现,更应关注后端数据。

7. 编写测试报告

测试日志,多少人测,测了多久,测试内容,bug提交内容。
后续还可进行bug的数据分析,如项目bug优先级数据分析、项目人员bug数据分析、功能模块bug数据分析。

五、测试类型

1. 功能测试

  1. 主要为黑盒测试,测试系统功能是否符合需求设计;
  2. 主要考虑功能的正确性,不考虑底层结构和代码;
  3. 尽量模拟用户可能出现的错误。

2. 性能测试、压力测试(Jmeter)

压力测试是为了发现系统能支持的最大负载;性能测试是为了得到压力数确定下的性能指数。
压力测试:在性能可接受的前提下(如请求需3秒钟内响应),测试系统支持的最大负载
性能测试:在不同负载下(负载一定)时,通过一些系统参数(如平均响应时间等)测试系统的运行情况。

测试指标
:并发数
:响应时间,延时
请求/响应数据网络传输时间、应用服务器处理时间、数据库系统处理时间、客户端呈现时间
响应时间2s好、5s能接受、8s上限
:稳定性
:资源占用率
cpu、内存使用率 < 80%
错误率 = 0 或 < 0.5%

性能测试流程

  1. 分析性能需求(选择用户使用最频繁的场景来测试、定义性能指标、确定并发数)
  2. 编写测试用例
  3. 搭建性能测试环境(尽量与生产环境配置相同、测试工具、组件、热机)
  4. 编写性能测试脚本(jmeter手动编写或录制)
  5. 准备测试数据(100个用户并发,即准备100个用户的测试数据)
  6. 运行脚本,执行并采集数据
  7. 性能问题分析(看哪些数据未达标、找出性能的瓶颈,硬件:CPU,内存,磁盘、网络;软件:源码,查询语句)
  8. 性能调优(开发做的)
  9. 输出性能测试报告
  1. 不同并发数下各接口或事务平均相应时间
  2. 服务器cpu使用率;
  3. 服务器内存占用率;
  4. 系统吞吐量(每秒处理事务的数量);
  5. 事务响应时间;
  6. 事务成功率

Jmeter官网下载

3. 接口测试

针对软件对外提供服务的接口的输入输出进行测试,以及接口间相互逻辑的测试,验证接口功能与接口描述文档的一致性。根据接口文档设计用例,调用接口,验证结果。

  1. 客户端与服务器的网络接口数据测试(工具Jmeter)
  2. 接口安全测试:重复发送请求,查看接口处理情况

工具:postman
学习笔记之接口测试

3. 兼容性测试

web端

  1. 不同浏览器、相同浏览器不同版本兼容;
  2. 不同分辨率兼容;
  3. 不同移动设备终端的不同浏览器兼容;

app端

  1. 不同机型兼容;
    根据线上用户机型排名兼容;
    安卓:华为、三星、小米、oppo; 苹果ios
  2. 不同操作系统版本兼容;
    安卓:9.0、8.0
    ios:15.0、16.0
  3. 不同屏幕尺寸、分辨率兼容;
    5.5寸,1080*1920
  4. 不同显示屏兼容
    刘海屏、水滴屏、折叠屏、曲面屏
  5. 应用兼容
    手机硬件:电源键、音量调节、home键
    外部硬件:耳机、蓝牙
    与其他app兼容

可使用第三方云测平台

4. 移动端app专项测试

4.1 弱网测试

对客户端与服务器之间的请求发送及结果返回过程中,网络不稳定的测试。

  1. 不同地区不同的网络信号,即无信号、edge、2g、3g、4g、5g、WiFi时的运行情况。如地铁隧道、火车高铁、边远地区、高层建筑、行驶中的汽车等各种出现弱网的情况。
  2. 不同网络丢包率时的运行情况;
  3. 不同网络信号之间切换时,对程序运行的影响
  4. 断网重连对程序运行的影响;
  5. 弱网情况下,前后端数据是否一致;

使用工具设置网络代理,如:windows环境下使用fiddler、Mac下使用network link conditioner或Charles。通过测试设备连接到网络代理的共享网络上,模拟相应的网络信号。
Fiddler 官网下载

4.2 中断测试

意外中断:来电、短信、闹铃、断网、断电、视频聊天、语音聊天、无响应、系统更新提醒、内存不足提醒、其他app的消息通知、低电量告警、插拔充电器
任务切换:锁屏、切换到其他应用

4.3 性能测试

CPU使用率、内存消耗、流量消耗、耗电量、启动时间、使用流畅度

4.4 其他测试

ui测试(横竖屏切换等)、安装测试、升级测试、卸载测试

安装测试:

卸载、升级测试:

5. 安全测试

软件开发基本完成时,验证产品是否符合安全需求定义和产品质量标准。(操作系统层面、网络层面、应用本身)

  1. 越权问题,不登录或登录无权限账号的情况下,在浏览器中直接输入登录后的 URL
  2. 输入典型的“SQL 注入攻击”字符串
    (通过非法输入改变数据库的访问逻辑,达到跳过验证、盗取或修改数据等非法目的的一种攻击方式)
  3. 输入典型的“XSS 跨站脚本攻击”字符串
    (通过在资源嵌入非法前端脚本达到攻击目的)
  4. 文件上传和下载
    (上传文件的类型,不止后缀名,还有内容;上传文件大小和数量;下载文件权限限制)
  5. 内存修改测试;
  6. 客户端加密测试;
  7. 客户端反编译测试;
  8. 网络安全测试(工具:Wireshark)

Wireshark下载网址:https://www.wireshark.org/download.html
wireshark是非常流行的网络封包分析软件,可以获取各种网络封包,显示网络封包的详细信息。

6. 自动化测试

版本基本稳定后执行
提高测试效率,降低维护成本

接口自动化:python + requests + unittest(pytest)单元测试框架

  • pytest结合allure生成测试报告
  • pytest结合Jenkins实现持续集成
  • pytest插件(pytest-html生成html格式自动化测试报告;pytest-xdist测试用例分布式执行以及多cpu分发;pytest-ordering改变测试用例执行顺序;pytest-rerunfailures用例失败后重跑)

web自动化:python + selenium
app自动化:python + appium
pom设计模式、数据驱动、关键字驱动

7. 日志测试

服务端日志:记录用户行为

8. gm工具测试(游戏测试)

gm工具一般是运营人员和客服人员使用,用来规划游戏内的活动、查询数据。

  1. gm工具的功能实现,工具的设置是否在游戏中起作用;
  2. gm工具的数据读取、存储;

六、面试准备

面试题

学习笔记之 软件测试基础理论知识相关推荐

  1. 《Java并发编程实践》学习笔记之一:基础知识

    <Java并发编程实践>学习笔记之一:基础知识 1.程序与进程 1.1 程序与进程的概念 (1)程序:一组有序的静态指令,是一种静态概念:  (2)进程:是一种活动,它是由一个动作序列组成 ...

  2. IP地址和子网划分学习笔记之《预备知识:进制计数》

    一.序:IP地址和子网划分学习笔记开篇 只要记住你的名字,不管你在世界的哪个地方,我一定会去见你. --新海诚 电影<你的名字> 在我们的日常生活中,每个人的名字对应一个唯一的身(敏)份( ...

  3. 前端学习笔记(js基础知识)

    前端学习笔记(js基础知识) JavaScript 输出 JavaScript 数据类型 常见的HTML事件 DOM 冒泡与捕获 流程控制语句 for..in 计时器 let,var,const的区别 ...

  4. 软件测试——基础理论知识你都不一定看得懂

    目录 前言 软件测试(Software Testing)的定义 软件测试的分类 软件测试的常用种类 测试用例八大设计方法 结语 前言 入软件测试这一行至今已经10年多,承蒙领导们的照顾与重用,同事的支 ...

  5. JAVA学习笔记(1)【基础知识】

    JAVA学习笔记DAY_1 提示:关于java系列的内容只是本人在老师的指导下和自学过程中的一些学习笔记,如果存在错误敬请批评指正! 文章目录 JAVA学习笔记DAY_1 前言 一.Java语言未来的 ...

  6. JS学习笔记二——JavaScript 基础知识

    JavaScript 基础知识 一.JavaScript 变量 二.JavaScript 的输出 三.JavaScript 运算符 四.结语 一.JavaScript 变量 变量是指在程序运行过程中, ...

  7. 知识图谱学习笔记02-经典的知识图谱项目介绍

    CYC Cyc是一个知识库系统,由Douglas Lenat于1984年开始创建.其最初目标是建立人类最大的常识知识库,其中包含了典型的常识知识,例如"每棵树都是一种植物"和&qu ...

  8. MIKE水动力笔记2_水动力基础理论知识

    本文目录 前言 [第2章 水动力学]重点知识 2.1 水动力过程 2.1.1 水的密度 2.1.2 守恒律 2.1.3 对流和扩散 2.1.4 质量守恒方程 2.1.5 大气驱动力 2.1.6 科氏力 ...

  9. #学习笔记4#软件测试基础——测试阶段划分、黑盒测试的一些知识

    今天主要看了以下几个方面的知识点,基本都是纯理论,本文只做知识点总结,具体内容要看转载 1.软件测试阶段划分,分为4个阶段:单元测试.集成测试.系统测试.验收测试 单元测试是方法类的覆盖,主要是由开发 ...

最新文章

  1. 你有什么技能是公司离不开你
  2. css考核点整理(十一)-响应式开发经验,响应式页面的三种核心技术是什么
  3. SQL With As 用法Sql 四大排名函数(ROW_NUMBER、RANK、DENSE_RANK、NTILE)简介
  4. php 登陆 才能查看,WordPress登录后才能查看网站内容,未登录跳转登录页面教程...
  5. 产品经理需要去客服部门轮岗吗?
  6. 生成器函数,推导式,生成器表达式
  7. 微信到底做没做精准广告投放? | 技术头条
  8. python中pycharm倒计时_pycharm中的快捷键和简单设置
  9. html同时用多个css,多类选择器的运用_html/css_WEB-ITnose
  10. 空间复杂度和时间复杂度
  11. 学校计算机的使用作文,电脑课上作文(3篇)
  12. spring mvc组件以及架构流程详解
  13. 在北理珠,如何快速被动了解(社工)一个学生
  14. springboot2集成sharding-jdbc分库分表
  15. 公司app上架正规要求需要办理icp许可证
  16. 树莓派教程——树莓派连接并打开摄像头
  17. 用python在excel中做批量计算(包括单元格为空值时的处理情况)
  18. 一周AI看点 | 北航设立全国首个人工智能专业,前IBM沃森首席科学家任京东副总裁
  19. 实验3 STP简单配置及介绍
  20. 【url传参】之 获取url?后面的参数,对应参数名获取值 和 全量获取转换为对象结构两种方式

热门文章

  1. 中外合作办学计算机科学与技术有哪些大学,校友会2017中外合作办学大学计算机科学与技术专业排行榜...
  2. 输入两个正整数a,b,求a对b的余数。
  3. ArcGIS制图技巧:制图入门与点、线、面状符号制作
  4. 学计算机买笔记本是i5 i7,i7一定比i5强?买电脑陷阱你一定要注意了
  5. NLP实践——基于SIFRank的英文关键短语抽取
  6. 私有云与公有云区别,公有云不可能统一天下
  7. 科目二很难考吗?经验全在这里!
  8. 【观察】大型企业的数字化转型之旅 浪潮云ERP是真正的“引路人”
  9. uni-app 中微信小程序使用高德地图等第三方 SDK的方法
  10. Lattice Diamond关于原语的使用