测试流程?项目管理流程?
背景
工作五年了,一直是做测试。认识了很多人大牛,也接触到很多新人,从他们身上看到了很多,自己的过去,自己的未来(当然很多是自己达不到的高度)。
做这测试这一行的,很多人都追求技术:自动化+性能,往往忽略测试流程,或者说是项目管理流程。
想法
流程是要结合团队来看的,换句话来说就是case by case,没有标准,适合团队/业务的流程就是好流程;
Part1
待过做中国移动项目的传统行业,测试流程一套一套的,需求评审 -- 开发详细设计评审 -- 用例评审 -- 提测评审 -- 测试执行 -- 报告输出 -- 安排上线 -- 线上验收,很多会议是需要产研测全部参加的,时间投入很大,这原因是因为项目/业务迭代周期是一个月上一次版本,有足够的时间去做这些,当测试全流程介入的时候确认能发现很多问题,这里就引入一个词:质量前移 ,比较好理解,不是在测试执行才发现问题,而是将问题前移,移到需求评审,设计评审,用例评审中去,这一步做的好的就是测试的一个方向:业务专家 ,看项目/产品的高度达到了产品高度,从全局去考虑测试用例场景,对业务非常熟悉,提升影响力,开发/产品会来咨询你业务知识;
Part2
回想起唯品会的流程,有很多值得借鉴的地方。
唯品会的流程,核心是火车发布制,项目安排是每个星期发布一个版本,也就是每个星期只有一趟车,项目想上线的话,就需要在指定时间上车,意思就是在规定时间开发测试打包完毕。整个项目的流程就是按照这个火车开车时间来排期规划。(当然你要问到很多线上问题怎么办?紧急项目怎么办? 春运不是也有临时车次这个说法吗?)
在互联网行业的话,迭代速度明显加快,都是你追我赶的节奏,但很多流程也是必须有的。
需求评审会根据需求大小来看是否开展的,小需求的话,就直接是一份文档查阅就完事了的。
在唯品会的时候,所在团队有点做的比较好,就是提测环节,我们要求开发提测有输出,要求他们整理功能点:新增/修改了哪些功能,改动了哪些文件,自测点,自测结果,静态代码检查,单元测试是否全部通过,这些也是测试的一种职责,项目的保证不单单只是测试的事情,测试有义务/责任从整个项目流程中去提升质量。
提测过后,测试要经过冒烟测试,这个冒烟首先要检查开发的输出是不是包含了上面提的那些,测试有权利直接打回这次提测,阻塞主流程的问题也要打回,冒烟不通过。冒烟不通过的项目代码质量堪忧;
功能测试,测试人手一台测试机器,将项目部署在自己的环境进行功能测试,(这里讲一句,唯品会这方面确实壕,而开发是整个团队公用一套开发环境,哈哈哈)
回归测试,功能测试完毕后,需要开发合并代码到master(最终上线的分支),由于多个项目并行,可能存在代码合并问题,需要重新再回归一轮,这个环境可以验证主干用例,也可以用自动化去验证 ,这里还有一个code review环节;
这里需要单独提一点,代码权限控制,开发合并代码后,是没有push代码的权限了的,代码权限控制在测试手中,这个时候需要修改代码,原因为功能测试遗漏,或者是合并代码错误,可以做一个统计;
预发布测试,回归OK后,打包部署到预发布环境,这个环境都是生产的数据库了的,重点校验配置(配置文件,DB...)是否OK,到了这里也有很多测试不通过的情况,可以做统计数据;
上线验收,提供给运维最终的包,做上线验收
唯品会一些细节的流程做的比较好,上线前会有小组的上线评审,这个环节的话,需要说明这个项目有什么功能;会不会对线上旧功能造成什么影响;存在什么风险;是否可以线上验收,若有怎么验收,如果没有什么做监控;回滚方案是什么,集思广益
需求评审 -- 用例评审 -- 提测 -- 冒烟测试 -- 功能测试 -- 回归测试 -- 预发布测试 -- 线上验收 -- 数据监控
Part3
现在的UC,没有火车发布制度,项目并发更多,很多都是今天提测明天上线的节奏,更加敏捷。一些关键流程的缺失会带来一些风险,但核心点不变,质量前移和监控,这就是看到过一篇文章提到的左移和右移。
团队也在慢慢加强流程这块东西了的,质量的保证是整个团队的事情,测试有业务和责任去提升质量,这里的质量部分是从项目流程去提升的
小结
测试,不是找bug,应该称为质量保障,其中的手段就是你职业规划的路线。
管理,也估计是很多人想走的路线吧,很多人觉得在一家公司混久点就能走上管理层,但我发现在管理层混的好的,都是业务专家,都是会为人处世的,有项目整体风险意识的,当然也需要一定的机遇;
技术,这条路是很多测试同学在走的或者想走的,想搞自动化,想搞性能,因为技术的提升意味着工资的提升,学好一门语言是非常重要的;
不管是做什么的,自身掌握了稀有资源,待遇自然上去了的。
回到这次的主题:流程,工作经验的优势就要凸显出来,以过往经验结合现有团队情况,制定流程,或者对现有流程提出建议;
1. 质量迁移,测试提前介入,从需求端发现问题,带着问题去开需求评审,怼产品/需求;
2. 合并代码回归测试,跟开发沟通后,不要直接上线,需要重新过一遍;
3. 上线评审,思考上线依赖,风险,旧数据/功能影响,回滚方案;
- 用实例说明如何用JavaScript生成XML
- 51nod 1244 莫比乌斯函数之和(杜教筛)
- 几个比较有意思的JS脚本
- Java多线程高并发学习笔记——阻塞队列
- 使用javascript+xml实现分页
- 使用OAuth打造webapi认证服务供自己的客户端使用
- 洛谷P3381 【模板】最小费用最大流(dijstra费用流)
- 使用OAuth打造webapi认证服务供自己的客户端使用(二)
- JavaScript基础1
- JavaScript实例-----反选
- 1303: [CQOI2009]中位数图
- 1050: [HAOI2006]旅行comf
- 某厂2016实习招聘安全技术试题答案及解析
- 3732: Network
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- kubernetes-配置管理(十一)
- ceph-mimic版
- kubernetes-ingress(十)
- kubernetes-控制器Deployment和DaemonSet(八)
- kubernetes集群网络
- kubernetes-深入理解pod对象(七)
- kubernetes-核心概念及创建应用(六)
- k8s1.13.0二进制部署-Dashboard和coredns(五)
- kubernetes监控-prometheus(十六)
- kubernetes监控-Heapster+InfluxDB+Grafana(十五)
- centos7 安装mysql5.7
- ceph-简介及安装(luminous)版
- Activiti7 查询用户任务列表
- ansible自动化部署工具
- IDEA Activiti 画图中文乱码