# 如何提升测试水平




有同学在公众号留言问如何提升测试技能，这里抛砖引玉给一下个人不成熟的建议，大家见仁见智，欢迎讨论。

![](http://ww1.sinaimg.cn/large/726a2979gy1fz1d2pfad2j20zk0nw49a.jpg)

### 熟悉业务

让人称赞和放心的测试同学往往对业务是非常熟悉的，知道自己的业务在干啥，知道业务的商业逻辑和非商业逻辑，其实对于测试同学来说是蛮重要的。

熟悉业务的方式有很多，一般来说刚接触到新项目/新产品的同学往往会先体验一下产品，把这个产品的功能先点一遍，就当作是熟悉业务了。这样做没什么不对，不过有点不够深入，不理解产品的设计逻辑。理解了产品的设计逻辑才能更好的贯通整个产品的各个模块，真正做到精通。

在熟悉业务的时候，我们可以问自己下面的一些问题。

* 用户想要什么？用户的原始需求是什么？有些产品可能用户是没有直接需求的，完全是通过产品去创造需求的，这样的产品原始需求可能会比较模糊，理解起来会有点难度。还有些产品是直接照搬或者高仿友商的，理解这些产品的原始需求可能就要深入理解竞品了。
* 我们提供了什么功能？为什么？这是我们自己产品的逻辑了，用户的需求我们可以一步一步慢慢去满足，先实现哪些后实现哪些，这些逻辑我们也要搞明白。另外有时候实现用户的需求成本很高，因为成本的原因我们可能提供一些有损或者折中的方案，这种逻辑也是测试同学所需要了解的。
* 赢利点在哪里？这个比较难，我们靠什么赚钱？这个老板会比较关心，但是测试同学最好也关心一下，毕竟赚钱的地方往往是最最严重的缺陷发生的地方。电商平台的支付如果出了问题，那么这个事故的严重程度大部分情况下是最高的。福兮祸之所倚，祸兮福之所伏。
* 有没有运营数据？运营数据怎么样？运营数据反应了线上的真实情况，能帮助我们更好的理解用户的行为，从而改进用例的优先级以及设计更加直击痛点的用例。


### 了解实现

我们的系统是怎么样实现的？代码的逻辑是什么？代码出错以后的异常处理是怎么样的？这些问题我们最好能多少了解一点。

如果大家对上面的问题感到棘手，那么可以思考另外几个问题，其实也是殊途同归。

* 数据库每个库每张表是做什么的？每个表的每个字段是做什么用的？关联关系是什么？(如果是关系型数据库的话)
* 系统有没有用到缓存？缓存里存些什么数据？这些数据会不会过期？过期策略是什么？
* 有哪些定时任务在跑？为什么要跑定时/延时任务?

把上面一些问题弄明白了的话，在面试的时候也是有一定好处的。


### 了解架构

一般来说我们需要了解逻辑架构和运维架构。比如逻辑架构里的一些微服务模块，每个微服务的功能是什么，怎么跟其他微服务交互的，完全从逻辑的角度去看。

运维架构可能涉及的点会多一点，比如用户微服务部署了2个实例，负载均衡用的是xxx，如何动态扩容之类的。

这些在面试的时候是很好的谈资，很容易加分。

### 掌握专项

功能测试的话开发也会测，产品也能测，看上去并不是什么特别专业的技能。

专项的话呢，开发可能要学一下才能会，产品可能一时半会学不会，嗯，终于有了点领域独占的优势，是大家提升技能时可以重点考虑的部分。

* 性能专项。服务器性能比较有技术含量的。
* 移动端专项。移动端的性能稳定性等。
* 自动化专项。ui自动化和接口自动化了。
* 安全专项。我也不会，白话不出来。
* 监控专项。各种监控也是很有意思的。


好了，以上就是我的一些非常不成熟的见解，有些应该是臆断，求同存异，希望对你能有所帮助。




原始封面

![课程图片](https://images.unsplash.com/photo-1470770841072-f978cf4d019e?w=300)


