##【前言】
什么是做功能,功能就是客户要一碗蛋炒饭,然后做了给他。
什么是做性能,性能就是把客户要的蛋炒饭,做的很美味给他。
我想谁都明白,一家餐厅能活下去,是因为能把食材料理好,客户喜欢。
我们自然也会明白,一个应用能活下去,也是因为能把功能做到好用,客户喜欢。
更准确的说,一家餐厅能活得下去,要考虑用户需求、食材,然后就是料理水准了。撇开食材和用户需求这些偏市场和产品定位层面的问题,我们今天就聊聊这个料理水准。
评价一碗蛋炒饭有色香味意形养。评价一个 APP 的纬度也有 CPU、内存、耗电、响应、流量、包大小。
你的 APP 可以是上面这一碗,看着就好吃,也可以是下面这一碗,看着就不想吃。
如果说业界优秀的 APP 产品是米其林三星水准的话,平安我们的产品基本上属于大排档水准。是的,大排档。我们有市场有销量,但终归和定级相去甚远。对于大多数的技术人员来说,抱怨老板给食材(资源)不好,抱怨要做的东西(产品)不好,这都是没有卵用的,好好当好自己的厨子,做好了自己的技术活,做好自己的性能。
ok,摊开鸡蛋和大米,我们开始炒个蛋炒饭。
确实是给大家说下业内怎么理解的,我一字无讹抄了一些过来。
以下是摘自 Loadrunner 帮助文档的回答:
Automated Performance Testing is a discipline that leverages products,people, and processes to reduce the risks of application, upgrade, or patch deployment. At its core, automated performance testing is about applying production workloads to pre-deployment systems while simultaneously measuring system performance and end-user experience. A well-constructed performance test answers questions such as:
➤ Does the application respond quickly enough for the intended users?
你的应用程序的响应时间足够快吗?
➤ Will the application handle the expected user load and beyond?
你的应用程序能轻松应付那么多的用户负载吗?
➤ Will the application handle the number of transactions required by the business?
你的应用程序能处理那么多业务所需的事务吗?
➤ Is the application stable under expected and unexpected user loads?
在预期的用户压力下,你的应用程序足够稳定吗?在超出预期的用户压力下呢?
➤ Are you sure that users will have a positive experience on Go-live day?
你能确定用户在使用你的应用程序时会得到好的体验吗?
By answering these questions, automated performance testing quantifies the impact of a change in business terms. This in turn makes clear the risks of deployment. An effective automated performance testing process helps you to make more informed release decisions, and prevents system downtime and availability problems.
以下是百度百科的观点,
目的是验证软件系统是否能够达到用户提出的性能指标,同时发现软件系统中存在的性能瓶颈,优化软件,最后起到优化系统的目的。
包括以下几个方面:
1.评估系统的能力,测试中得到的负荷和响应时间数据可以被用于验证所计划的模型的能力,并帮助作出决策。
2.识别体系中的弱点:受控的负荷可以被增加到一个极端的水平,并突破它,从而修复体系的瓶颈或薄弱的地方。
3.系统调优:重复运行测试,验证调整系统的活动得到了预期的结果,从而改进性能。
检测软件中的问题:长时间的测试执行可导致程序发生由于内存泄露引起的失败,揭示程序中的隐含的问题或冲突。
4.验证稳定性(resilience)可靠性(reliability):在一个生产负荷下执行测试一定的时间是评估系统稳定性和可靠性是否满足要求的唯一方法。
在百度做个搜索,还真搜不到几条让你满意的答案,百度百科等相关的词条甚至对客户端相关的性能测试开展只字不提。受一些压测工具的影响,现在包括一些从业者也把性能测试和压力测试等同起来。
这也能比较正常的反应出业内对测试和性能测试的一个态度,会认为很重要,但是又缺乏关注。这就好比淘宝双十一活动,第二天在全国各大媒体产品先吹一波 -- 几分钟突破多少亿、累计交易多少亿;然后运营物流在部门媒体吹一波 -- 第一单送达时间 XX 分钟;然后研发在各个技术圈子里再吹一波 -- xxx 高可用架构、并发量 xxx;最后还是测试在内部总结一下。其实在双十一这种技术需求下,也表现得很抗造 -- 如何做容量评估,如何分层评估,如何做压测服务架构设计,怎么分析和设计全链路压测。有兴趣的可以搜一下相关的文章(是的测试技术总结你得搜,产品那一波吹你等推送就可以了)。
可以参考:http://www.sohu.com/a/122339596_354963
说到这个,还是插个嘴,选择了做测试就相当于做了球队的守门员,压力大不大只有你自己懂,没当过守门员的教练和你说拜托了的时候也不代表他就懂你的心态和处境。但是既然选择了做测试,就如同守门员一样选择了寂寞。老想和别的角色一样争出镜率完全没必要,真喜欢曝光自己的,可以考虑彻底放弃 IT,转行做产品研发也一样不适合你。
ok,我们还是要绕回来聊聊我们的看法。首先还是从概念出发,首先我们交付的是一款应用,目标是满足用户的某一个或者某一些需求。所以首先,我们看看质量是如何定义的:
上面的质量定义,我们可以看出几个很关键的词,需求的满足程度。这句话我们先放一下,我们再看下软件质量如何定义的:
软件质量就是 “软件与明确的和隐含的定义的需求相一致的程度” 三类要素(也是三个层次):
这里又抛了一个很关键的词 -- 隐含的。所以做测试之前首先要明白,我们是要对付用户的需求,这个需求可能还是隐含不明确的,然后我们评估这个需求满足的如何?
所以性能测试在接入工具之前,首先要弄明白的问题,我要怎么评估是否开展这个事情,或者用哲学名词说就是,你的明白度 - 量-关节点是什么?
对于任何情况,在决定进行某一种测试前,都应该问自己一些基本问题。这些问题的答案将会决定哪种测试方法是最好的。这些问题包括:
- 结果的可重复性需要有多高?
- 测试需要运行和重新运行几次?
- 您处于开发周期的哪个阶段?
- 您的业务需求是什么?
- 您的用户需求是什么?
- 您希望生产中的系统在维护停机时间中可以持续多久?
- 在一个正常的业务日,预期的用户负载是多少?
上面这几个问题是引用的,因为基本上都归纳到了,这里的最后一句很重要,预期的用户负载是多少,我们很多测试人员只会跳出来问,用户的预期负载是多少。
有些性能测试完全是可以裁剪的,比如常说的压测,如果你的机器性能相比较你的用户需求,高的一塌糊涂,按照经验你的用户也不会暴增,也没人给你做运营。那你确实保证了功能,以及性能层面 -- 响应速度之类的就够了。APP 也是如此,如果你的 APP 是常驻长耗时 APP,比如导航比如音乐比如管家,那你的耗电量是你非常致命的性能需求,如果你这是一个打开看一眼就会关闭的 APP,拜托你就别跟风测什么耗电量了,你只要保证关掉 APP 的时候你没后台搞小动作就好了。
做性能测试首先要做的第一步是受众分析。这个受众分析请注意,起点不是产品经理,不是研发,不是业务老大,而是你真真实实的用户先,然后 -- 用户看不到的中后台技术指标。而在实际测试执行的时候,我们往往会忽略这一点,先考虑产品怎么想的,会先考虑研发怎么想的,会考虑业务老大怎么想的。确实一些从业者,也会说,作为测试要综合用户 产品 研发 业务线的需求,然后做性能测试。我不能说这个是不对的,但是我个人不是很赞同,作为测试更多的还是用户的代言人,不是团队的意见收集者。
如果过于思考产品要什么,研发要什么,业务要什么,ok,那你注定是在团队里当保姆的,如果你做得好,那也是一个高级保姆而已。是听别人的意见去满足他,还是自己建立自己的体系去影响别人,作为测试人员你自己选,tester 和 QA 终归是有些区别的。
出发点是出发点,其他的意见还是要参考下的,项目组其他角色都会说啥:产品会说『这个地方要给我加载速度到 3 秒以内』『使用中不能发烫』;研发说『请你告诉我那里 CPU 使用异常了,我那里内存飙高了』;业务老大会说『要配合运营活动了,你要看一看』『新版本貌似用户反馈不稳定』。
你和这些角色或者主动,或者被动(最好你是主动去做的,因为测试本来就是一个主动防御体系)的获取了这些信息。这心信息你一定要学会加工。加工的能力,是能体现一个测试工程师的业务测试能力的。
上述例子,我们再拿来举一下:
这个地方加载速度要 3 秒以内
新版本貌似稳定性不好
总之:你的起点是先提用户想,用户报的问题一定是问题,只是他们通常报的不准;然后再去结合各方的反馈,一定留心对你瞎 J8 指挥的老大(如果你觉得我说得不对,你按你的理解来,不用和我争),你得弄清楚他说的对不对。然后才是如何提升效率,是否可以输出工具,输出的工具是否有普适性可以推广。
测试是一定要讲测试经济学的,一定要考量投入、产出、介入时间、投放时间、退出时间,不然你做到死也都是跟着老大混,也自然活该被老大坑。做性能测试自然也是一样,要不要做,为什么做,怎么做,做完能解决什么问题,是否有普及前景都是要思考的。
今天的先写到这里了,下周我们再继续