【前言】

什么是做功能,功能就是客户要一碗蛋炒饭,然后做了给他。

我想谁都明白,一家餐厅能活下去,是因为能把食材料理好,客户喜欢。

更准确的说,一家餐厅能活得下去,要考虑用户需求、食材,然后就是料理水准了。撇开食材和用户需求这些偏市场和产品定位层面的问题,我们今天就聊聊这个料理水准。

评价一碗蛋炒饭有色香味意形养。评价一个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.评估系统的能力,测试中得到的负荷和响应时间数据可以被用于验证所计划的模型的能力,并帮助作出决策。

在百度做个搜索,还真搜不到几条让你满意的答案,百度百科等相关的词条甚至对客户端相关的性能测试开展只字不提。受一些压测工具的影响,现在包括一些从业者也把性能测试和压力测试等同起来。

这也能比较正常的反应出业内对测试和性能测试的一个态度,会认为很重要,但是又缺乏关注。这就好比淘宝双十一活动,第二天在全国各大媒体产品先吹一波 -- 几分钟突破多少亿、累计交易多少亿;然后运营物流在部门媒体吹一波 -- 第一单送达时间XX分钟;然后研发在各个技术圈子里再吹一波 -- xxx高可用架构、并发量xxx;最后还是测试在内部总结一下。其实在双十一这种技术需求下,也表现得很抗造 -- 如何做容量评估,如何分层评估,如何做压测服务架构设计,怎么分析和设计全链路压测。有兴趣的可以搜一下相关的文章(是的测试技术总结你得搜,产品那一波吹你等推送就可以了)。

说到这个,还是插个嘴,选择了做测试就相当于做了球队的守门员,压力大不大只有你自己懂,没当过守门员的教练和你说拜托了的时候也不代表他就懂你的心态和处境。但是既然选择了做测试,就如同守门员一样选择了寂寞。老想和别的角色一样争出镜率完全没必要,真喜欢曝光自己的,可以考虑彻底放弃IT,转行做产品研发也一样不适合你。

ok,我们还是要绕回来聊聊我们的看法。首先还是从概念出发,首先我们交付的是一款应用,目标是满足用户的某一个或者某一些需求。所以首先,我们看看质量是如何定义的:

上面的质量定义,我们可以看出几个很关键的词,需求的满足程度。这句话我们先放一下,我们再看下软件质量如何定义的:

软件质量就是“软件与明确的和隐含的定义的需求相一致的程度”三类要素(也是三个层次):

这里又抛了一个很关键的词 -- 隐含的。所以做测试之前首先要明白,我们是要对付用户的需求,这个需求可能还是隐含不明确的,然后我们评估这个需求满足的如何?

所以性能测试在接入工具之前,首先要弄明白的问题,我要怎么评估是否开展这个事情,或者用哲学名词说就是,你的明白度-量-关节点是什么?

对于任何情况,在决定进行某一种测试前,都应该问自己一些基本问题。这些问题的答案将会决定哪种测试方法是最好的。这些问题包括:

  • 结果的可重复性需要有多高?

  • 测试需要运行和重新运行几次?

  • 您处于开发周期的哪个阶段?

  • 您的业务需求是什么?

  • 您的用户需求是什么?

  • 您希望生产中的系统在维护停机时间中可以持续多久?

  • 在一个正常的业务日,预期的用户负载是多少?

上面这几个问题是引用的,因为基本上都归纳到了,这里的最后一句很重要,预期的用户负载是多少,我们很多测试人员只会跳出来问,用户的预期负载是多少。

有些性能测试完全是可以裁剪的,比如常说的压测,如果你的机器性能相比较你的用户需求,高的一塌糊涂,按照经验你的用户也不会暴增,也没人给你做运营。那你确实保证了功能,以及性能层面 -- 响应速度之类的就够了。APP也是如此,如果你的APP是常驻长耗时APP,比如导航比如音乐比如管家,那你的耗电量是你非常致命的性能需求,如果你这是一个打开看一眼就会关闭的APP,拜托你就别跟风测什么耗电量了,你只要保证关掉APP的时候你没后台搞小动作就好了。

【先把思维方式拧一下】

做性能测试首先要做的第一步是受众分析。这个受众分析请注意,起点不是产品经理,不是研发,不是业务老大,而是你真真实实的用户先,然后--用户看不到的中后台技术指标。而在实际测试执行的时候,我们往往会忽略这一点,先考虑产品怎么想的,会先考虑研发怎么想的,会考虑业务老大怎么想的。确实一些从业者,也会说,作为测试要综合用户 产品 研发 业务线的需求,然后做性能测试。我不能说这个是不对的,但是我个人不是很赞同,作为测试更多的还是用户的代言人,不是团队的意见收集者。

如果过于思考产品要什么,研发要什么,业务要什么,ok,那你注定是在团队里当保姆的,如果你做得好,那也是一个高级保姆而已。是听别人的意见去满足他,还是自己建立自己的体系去影响别人,作为测试人员你自己选,tester和QA终归是有些区别的。

出发点是出发点,其他的意见还是要参考下的,项目组其他角色都会说啥:产品会说『这个地方要给我加载速度到3秒以内』『使用中不能发烫』;研发说『请你告诉我那里CPU使用异常了,我那里内存飙高了』;业务老大会说『要配合运营活动了,你要看一看』『新版本貌似用户反馈不稳定』。

你和这些角色或者主动,或者被动(最好你是主动去做的,因为测试本来就是一个主动防御体系)的获取了这些信息。这心信息你一定要学会加工。加工的能力,是能体现一个测试工程师的业务测试能力的。

上述例子,我们再拿来举一下:

这个地方加载速度要3秒以内

  • 混吃等死的假测试理解:听听老大怎么说,他说要测的话我就测一下。怎么测他说了算。如果不会的话,找个做过的人教一下,没人做过的话我也没辙。

  • 多数人的理解方式:记录下来,写一条性能测试用例,在点击加载后到内容呈现出来3秒钟。

  • 技术范儿的理解方式:可以用xx自动化测试框架,写一个自动化测试用例,记录点击事件时间,到内容加载的时间。

  • 资深技术范儿的理解方式:xx自动化测试框架解决了测试驱动的问题,内容是否加载完成的普安短存在误差,通过xxx,yyy,zzz等技术解决页面识别,提升准确性。

  • 业务和技术混合范儿的理解方式:不管自动化还是手工驱动,数据获取不是大问题,要深入看下耗时在什么地方,是前端还是后端问题,前端是否能看下有并行提升速率的,或者渲染时提升效率的,后端看下那些个接口比较慢,响应慢是耗在什么地方,看看后端是否专门再做一些性能专项定位一下如何做优化。

  • 我个人希望的理解方式:1. 这个地方要加载到3秒,为什么是3秒,产品的这个建议从哪里来的?是否合理。如果他没有依据,我是否要有系统的方法评估一下(评估方法 回头我们聊)。评估的结论也许不是3秒,是别的一个建议阀值。这个地方要加载到3秒,其他是否有类似的用户场景被忽略了。2. 是否有自动化的解决方案,有的话,是否要做这个自动化方案,收益比如何?成本大收益小是否考虑放弃。3. 问题定位一定是要有的,当前的工具有那些可以复用,有那些是没有解决的问题,这些是否值得投入做一次提升?

新版本貌似稳定性不好

  • 混吃等死的假测试理解:我发这个app听老大的做了monkey测试啊,monkey指标和以前差不多,我也不知道上线为啥crash率变高了。

  • 多数人的理解方式:monkey测试的随机性太强了,有些页面还依赖于登录,跳不进去。

  • 技术范儿的理解方式:monkey是需要做一些改造的,通过instrument 可以运行一些自动化case做登录,解决部分页面无法被遍历的状况,增加一些深度遍历的工具和算法,提升遍历能力。

  • 资深技术范儿的理解方式:这次问题的暴露是个很好的场景,可以挖掘一下monkey智能化和遍历工具的产出,可以推广别的产品线,是个扬名立万的机会。

  • 业务和技术混合范儿的理解方式:需要分析一下crash类型和机型分布,看下是什么类型的原因引入的,是否能通过monkey的改造解决,稳定性的问题不能等到上线被用户反馈回来,小流量灰度测试是否能帮忙,需要评估一下;要结合业务场景优先一些核心场景的覆盖,如果工具一时半会无法产出,要有其他临时手段解决。

  • 我个人希望的理解方式:1. 用户反馈的稳定性,是否只是crash的问题,是否有其他原因 2. 问题分析要先聚类看下,是否当前稳定性测试手段可以改善的,是否和前后端结合的部分有影响;3.即便是monkey这种问题的发现效率是不是比较低,当前产品线对发布周期又有强烈要求,是否能满足

总之:你的起点是先提用户想,用户报的问题一定是问题,只是他们通常报的不准;然后再去结合各方的反馈,一定留心对你瞎J8指挥的老大(如果你觉得我说得不对,你按你的理解来,不用和我争),你得弄清楚他说的对不对。然后才是如何提升效率,是否可以输出工具,输出的工具是否有普适性可以推广。

【如何做产品性能测试需求分析】

测试是一定要讲测试经济学的,一定要考量投入、产出、介入时间、投放时间、退出时间,不然你做到死也都是跟着老大混,也自然活该被老大坑。做性能测试自然也是一样,要不要做,为什么做,怎么做,做完能解决什么问题,是否有普及前景都是要思考的。

  • 产品分析

  • 受众分析

  • 技术分析

  1. 先明白你的产品要解决的问题是什么,这个对应的问题大概有那些个工具可以借鉴,亦或者从0开始做一个。

  2. 然后弄清楚各个工具或者方案的优缺点是什么,那些个工具和你需求最吻合。

  3. 选型的工具可二次开发的空间有多大,应对当前的需求需要做那些开发,对将来的潜在需>求是否能做好技术上的储备。或者说方案将来被推翻的概率要小。

  • 收益分析

干了这碗蛋炒饭 继续APP性能提升的更多相关文章

  1. 四、蛋炒饭(Egg fried rice)

    蛋炒饭,是一种常见菜肴.最早的记载见于1972年湖南长沙马王堆汉墓出土的竹简上有关"卵火高"的资料.经专家考证,"卵熇"是一种用黏米饭加鸡蛋制成的食品.有人推断 ...

  2. 干了这碗鸡汤:从理发店小弟到阿里P10技术大牛

    1.引言 MIT TR 35(MIT Technology Review 35 Innovators Under 35)——“全球 35 位 35 岁以下科技创新青年”榜单,是全球最权威的青年科技创新 ...

  3. YTU 2875: 倒霉蛋买饭去

    2875: 倒霉蛋买饭去 时间限制: 1 Sec  内存限制: 128 MB 提交: 22  解决: 17 题目描述 早春星期天的某个早晨,大风呼呼地刮.一个宿舍n个人,谁也不想起床买饭去.他们定了一 ...

  4. 转载------35岁开始转变的观念(干了这碗鸡汤再写代码保证没有bug)

    作为一个标准的IT男,从一开始的一线开发,做到管理层,又因为喜爱开发,跳槽继续专注coding,一干就是10多年.有时候就想,这样一直学习,coding,如果能干到老也挺不错的! 不过生活的压力是不会 ...

  5. Spring总结

    此君也是使用过多时了,却从来没有系统的总结过 以下,弥补,盼不晚: Spring为什么是框架&容器 1.框架的原因: 其提供多个组件的搭建,和支持其他事务事件,符合框架定义 ps:什么是框架呢 ...

  6. day39 作业

    实现生产消费原理 from multiprocessing import Process,JoinableQueue import time import random def cooker(q): ...

  7. 我的这10年——从机械绘图 到 炼油 到 微软MVP 的华丽转身

    年底了,各种总结计划满天飞,有空的时候我也一直在思考这么多年,是怎么过来的.也曾经很迷茫,希望经验和经历能给大家一点带来一点正能量的东西.10年很长,10年前说实话我没有思考过现在的样子,但10年前的 ...

  8. Java与C语言的区别——含面向对象介绍

    很多初学编程的小伙伴或者想要学习编程的小白弄不清C语言和Java的区别.本文就针对萌新们尽量用通俗的语言来介绍一下我所理解的编程语言界的两大巨头. 为什么说是两巨头,介绍之前我们先看一下某度搜索出来的 ...

  9. So many many foods here!

    水果类(fruits):西红柿 tomato 菠萝 pineapple 西瓜watermelon 香蕉banana 柚子 shaddock (pomelo) 橙子orange 苹果apple 柠檬le ...

随机推荐

  1. js 选中div中的文本

    function selectText(element) { var text = document.getElementById(element); if (document.body.create ...

  2. WOW.js 和 animate.css 使用

    animate.css 动画样式,用户也可以非常容易修改设置喜欢的动画库. Wow.js 允许用户滚动页面的时候展示 CSS 动画.配合animate.css ,做出很棒的效果,它支持 animate ...

  3. 35)类和结构体类比---this

    那么,为啥  Test a(10)  , Test  b(20)   然后  我a.getI()  取到的是10,而不是20     就能将那个  10  给  a  对象的  m1    是因为有 ...

  4. VS2015提示资源视图加载失败

    关闭VS打开的resource,h这个文件,然后重启VS就行了.网上有很多其他的说法,我本地尝试始终不行,暴力解决. 今天发现,其实是不用重启的,直接对rc文件右键保存,就可以正常打开了......

  5. itext实现横向pdf打印内容

    Document doc = new Document(PageSize.A4); 这个是用PageSize.A4设置的是纵向A4大小 进入 com.itextpdf.text.PageSize的源码 ...

  6. php 连接oracle插入多张图片的方法

    php连接oracle数据库的时候,其查询.更新.删除数据和MySQL类似,但是增加数据.特别是图片的时候就很不一样,这里面涉及到要创建一个blob对象,用blod对象去保存php图片,下面是当插入多 ...

  7. 37)PHP,获取数据库值并在html中显示(晋级2)

    下面的是上一个的改进版,我知道为啥我的那个有问题了,因为我的__construct()这个函数的里面的那个变量名字搞错了,哎,这是经常犯得毛病,傻了吧唧,气死我了. 之前的那个变量的代码样子: cla ...

  8. 传统的Servlet在spring boot中怎么实现的?

    传统的Servlet在spring boot中怎么实现的? 本文主要内容: 1:springboot一些介绍 2:传统的servlete项目在spring boot项目中怎么实现的?web.xml.u ...

  9. if necessary

  10. 895A. Pizza Separation#分披萨问题(前缀和)

    题目出处:http://codeforces.com/problemset/problem/895/A 题目大意:对于给出的一些角度的披萨分成两份,取最小角度差 #include<stdio.h ...