`
flynewton
  • 浏览: 62568 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

《软件开发沉思录》之实用主义性能测试

阅读更多

关键字: 性能测试 , 流程 , 需求 , 沟通

 

学习了《软件开发沉思录》中的实用主义性能测试,对重点内容做下记录:

性能测试应该囊括确保产品性能符合要求所需的一切行动。这里有四个关键点:需求、产品性能数据、沟通和流程。

1.需求采集

需求采集中的几个重要问题:要度量什么?如何知道我们需要什么?以及如何得到确实有用(而非帮倒忙)的数据?

@要度量什么

最重要的性能度量点有两个,最大吞吐量以及给定吞吐量下的响应时间。一个好的做法是:分别度量几种不同吞吐量下的响应时间,从中分析负载对响应时间的影响。

需要通过度量找出两项数据:当响应时间恰好可以接受时的吞吐量,以及达到预期吞吐量时的响应时间。伸缩性度量的关键则在于:随着数据规模、用户数量或者运行系统的硬件变化,起初得到的性能度量数据会发生怎样的变化。

可靠性的关键度量点是:当负载量高得超乎寻常,或者连续运行了很长时间以后,系统是否仍然正常工作。

@如何设定目标

要想知道系统需要达到怎样的吞吐量,你首先需要知道有多少用户会使用这个系统,以及他们的使用模式。用户会多频繁地使用某个功能?这个功能需要多快完成?

需要有一个可靠的沟通流程与机制来获得所需的信息,及时获知支撑业务需求所需的性能指标。

总之:需求采集是为了让所有人都清楚最终交付的产品需要有怎样的性能才能支撑业务目标。之所以要让客户参与,是因为他们最了解自己的业务,这样才能确保采集到的需求足够准确。而且通过讨论也能帮助客户清晰自己对性能的需求,从而有效管理他们对系统的期望。

2.运行测试

@运行哪些测试

单场景和混合场景:所有频繁进行的用户操作都应该有对应的测试。这些测试应该记录吞吐量、错误率和响应时间的统计数据。然后你还应该复用这些测试,从而构建更复杂的测试。所有这些测试应该一起执行,尽可能地模拟真实情况,这样你就能从中获悉产品的性能状况。

考虑伸缩性:在不同的用户量、不同的数据规模下运行它们,观察性能数据的伸缩情况。如果可能的话,还应该在不同的机器数量下进行测试,从而了解增加硬件能给性能带来多大提升。从这几方面,你就能获知产品的伸缩能力。

超负荷以及稳定性测试

@何处运行测试

如果可能的话,应该尽量让性能测试环境模拟真实的生产环境。如果生产环境太过庞大而无法整体模拟,那么就应该让性能测试环境模拟生产环境的一个部分,然后将真实的性能需求等比压缩到性能测试环境的水平。(包括软硬件环境)

@应该用多大规模的数据库来做性能测试

应该先与关注性能的客户交流,争取拿到一份生产数据库的副本,这样就可以针对它来进行测试。尽量模拟线上环境(包括数据量,索引等等)。另外,还应该与客户探讨数据规模发生变化的可能性。

@如何处理第三方接口

如果系统用到很多第三方接口,性能测试最好不要直接去使用这些第三方系统。原因有两点:首先,第三方系统可能并不适合成为性能测试的一部分;其次,即便第三方系统提供了测试环境,依赖你无法控制的第三方系统会降低测试的可靠性。最好的办法是用一个单独的测试来获知第三方系统的平均响应时间,然后为它写一个 mock或者 stub,直接等待那么长的一段时间然后返回一个固定的响应。

@多次度量响应时间和吞吐量

需要得到系统最大吞吐量,最佳响应时间、当响应时间正好符合要求时的负载量以及负载达到事先测量的最大吞吐量的 80%和 90%时的响应时间等信息

@有必要测试所有功能吗

对系统的所有功能进行测试基本上是不现实的。重点在于要覆盖最常用的功能。 所以你需要识别出系统的主要使用场景,并针对这些场景创建不同的测试。 

比如说,在线购物网站最主要的使用模式应该是“浏览”和“购买”。来购物的人不全会浏览很多页面,浏览的时间通常也不都会太长。所以 你需要创建一个“浏览”的测试脚本和一个“购买”的测试脚本。为了让测试脚本更贴近真实 ,你需要知道用户浏览商品的平均数量、每次购买的平均商品数以及正常情况下一天时间内被浏览过的商品数占商品总数的百分比。

3.沟通

需要做的就测试结果进行沟通。

根据讨论出的性能需求和目前的性能水平来解读测试结果。

@指出系统性能与目标的接近程度(与目标的差距有多少,或是超出目标多少)

@说明产品的性能是否发生了重大变化。

@各个关键点时各种系统资源的使用情况

不同的人会对不同的信息感兴趣(客户,项目经理,开发者)。建议用一个网站向所有人展示最新的性能测试结果。

4.流程

性能测试经常被放在项目结束前进行,这种安排严重影响了性能测试的效果。性能测试中最重要的事就是要定期地进行测试。如果直到项目最后几周才做性能测试,那么你将有很多事要干,而时间却非常紧迫。大部分时间会被用于编写测试脚本,并得到一些和产品有关的数据。这时你就会处于一种尴尬的境地,你大概知道系统运行得多快,但基本无从知道它是否足够快,而且也没有时间做任何改进。

当第一段代码被编写出来,性能测试就应该开始了。虽然这时可能还没有任何可供测试的东西,但还是有很多事可以去做。你可以向开发者了解他们将要使用的技术,评估合适的工具,找出功能足以测试当前产品的工具。此外还需要识别出关注性能的客户,并且与他们一起启动需求采集的流程。

@如何把各种工作连接起来

每周循环工作:1.每周开始时开会,讨论正在开发的功能的性能需求,介绍测试计划;2.编写新功能对应的脚本,维护已有脚本,执行测试;3.每周结束时开会,展示本周成果:脚本,测试结果等并进行讨论

@如何确保不拖后腿

1.确定任务列表;2.确定优先级;3.时间确实紧张时按照前面2点来减少任务量(高难度,低优先级)或者增加人手

5.总结

这个流程最大的好处在于它能确保你知道自己手上有什么、需要什么,而且你能肯定系统的每个部分都有测试覆盖,从而大大增加了发现问题解决问题的机会。让性能测试与开发同步,对每个功能都有测试覆盖,这样如果性能出了问题你就有时间应对。有一份性能需求在手上,你就能判断当前的系统是否需要改变。这份需求是客户根据业务流程和规模制订的,所以整个团队都对它有信心,大家也会乐于花时间来解决性能问题,因为他们知道这是一件有价值的工作。

分享到:
评论

相关推荐

    软件开发沉思录 ThoughtWorks文集

    包括公司创始人 roy singham在内的许多 thoughtworks员工参与到了这本文集的编写工作中,他们针对如何在软件开发生命周期中提高效率提出了多种可行性建议,内容涉及设计、架构、测试、领域特定语言的使用、构建和...

    软件开发沉思录:ThoughtWorks文集

    包括公司创始人 Roy Singham在内的许多 ThoughtWorks员工参与到了这本文集的编写工作中,他们针对如何在软件开发生命周期中提高效率提出了多种可行性建议,内容涉及设计、架构、测试、领域特定语言的使用、构建和...

    软件沉思启示录

    《软件沉思启示录》是ThoughtWorks公司员工智慧的结晶,它揭示了软件开发领域中的深邃思考与实践经验。这份资料不仅涵盖了软件工程的核心理念,还包含个人简历和面试准备的相关内容,对于软件开发者和求职者来说,都...

    SQL沉思录PDF版

    《SQL沉思录》可以看作是数据库工作者在学习和工作中的一本实用手册,涵盖了数据库查询和操作的各个方面。 在数据库管理和操作方面,DBA(Database Administrator,数据库管理员)是负责维护数据库正常运行的关键...

    《软件管理沉思录》读书笔记1

    《软件管理沉思录》作为软件工程领域内的一部权威之作,为广大软件工程管理者和开发人员提供了一套全面的管理和实践框架。这本书不仅仅适用于经验丰富的专家,同样也适合新入行的工程师,因为它深入浅出地介绍了软件...

    软件管理沉思录:SEI的项目管理、人际沟通和团队协作要诀,完整扫描版

    本书为软件工程领域权威人士之作,书中首先深入讲解了计划类型和计划过程,接着分析了项目团队建设和激励,然后描写了如何与经理共事,如何说服他们采用最佳实践,最后探讨了个人职责、承诺和过程。本书适合软件项目...

    MF1832132任贵杰软件管理沉思录读后感1

    在阅读《软件管理沉思录》之后,我深感书籍对于提升软件项目管理水平具有极大的帮助,尤其是对于当前软件行业中的质量控制和团队建设的实际问题提供了深刻的见解和实用的指导方法。本书通过详尽的分析,不仅阐述了...

    软件管理沉思录——读后感

    传统的软件测试方法已经无法完全满足现代软件开发的需求。 - **面对的挑战:** - 当前的软件质量面临着诸多挑战,尤其是在缺陷管理方面。缺陷不仅限于那些能够引发系统崩溃的严重错误,还包括任何不符合预期功能的...

    PHP沉思录之三.pdf

    【标题】:“PHP沉思录之三.pdf”可能是一本探讨PHP编程深入理解与实践的书籍或文档,属于IT技术领域,特别是Web开发方向。PHP(Hypertext Preprocessor)是一种广泛使用的开源脚本语言,尤其在服务器端编程中占有...

    《软件管理沉思录》读书笔记_MF1632020_管登荣1

    《软件管理沉思录》这本书,便是一盏明灯,为那些在软件项目管理大海中探索前行的人们指引方向。 本书深入探讨了计划类型和计划过程,让读者了解到计划不仅仅是一个简单的时间表,它更是一种管理工具,一种确保软件...

    交互设计沉思录

    《交互设计沉思录》是交互设计领域的经典之作,由顶尖设计专家Jon Kolko倾力撰写,旨在深入探讨如何通过创新思维来提升产品的交互体验。这本书的第二版更是结合了最新的实践经验和行业动态,为读者提供了丰富的洞见...

    设计模式沉思录---高清版.pdf

    设计模式沉思录---高清版.pdf

    数学沉思录- (mario Livio)非扫描版

    ### 数学沉思录——古今数学思想的发展与演变 #### 重要知识点概览 本作品由Mario Livio撰写,深入探讨了数学的本质及其历史发展,从古希腊时期至今的数学家的思想与贡献,以及数学与哲学、逻辑学的关系。下面将...

    设计模式沉思录

    设计模式 设计模式沉思录

    PHP沉思录之四 Zend Framework.pdf

    《PHP沉思录之四:Zend Framework》是深入探讨PHP开发框架的一份资料,主要聚焦在 Zend Framework 这个强大的开源框架上。Zend Framework 是PHP社区中的一个重量级框架,以其组件化、企业级的特性著称,为开发者提供...

Global site tag (gtag.js) - Google Analytics