性能工程101:让你开始的关键


在一个完美的世界里,软件开发人员编写无缺陷的代码,客户对用户体验很满意,每个人都相处得很好。实际上,应用程序性能总是一个挑战——开发人员和测试人员努力使应用程序尽可能完美地运行,但是这种努力大多是基于假设的。通常,这些假设显然没有达到预期的服务和性能水平。性能问题在测试阶段或客户投诉时得到解决。随后,实现客户满意变成了一个旷日持久的过程,甚至可能将项目推回到画板上。

性能工程之路

Applications变得复杂,因为现在它们在本质上是分布式的,跨越多个模块和功能。例如,谷歌最初被认为是一个搜索引擎。如今,它的生态系统包括浏览器、电子邮件服务、文字处理器、视频会议应用等等。

由于这种日益增长的复杂性,软件开发人员必须确保应用程序尽可能的可伸缩、安全和响应。在开发阶段识别基本的性能问题是很重要的;不仅仅是在质量保证阶段。设计人员和开发人员可以测试和使用不同的解决方案。

性能工程的基础都是关于理解系统的所有部分是如何一起工作的,并且从设计和开发软件的初始阶段就包括性能方面。在这样的早期阶段采用性能工程可以大大减少返工和重构应用程序的需要,并改善应用程序的结果。

性能工程不仅从软件开发的角度来看很重要,而且从业务成本的角度来看也很重要。根据惠普的性能工程报告,由于信息技术中断,一般规模的公司每小时将损失10万到50万美元的收入。大型企业每小时可能损失高达500万美元。不是一个企业可以承受损失的微不足道的钱。

非功能需求——性能工程的关键

一个成功的软件项目的第一个标志是项目需求的清晰定义。功能需求定义什么软件应用程序应该做的和非功能性需求定义怎么软件应用程序应该执行特定的功能。

例如,一个典型的功能需求是当新用户注册时发送一封确认电子邮件。就非功能性需求(NFR)而言,用户应该能够在60秒内完成注册过程。

标准做法对于软件开发人员来说,重点是只获得正确的功能需求,因为满足业务和流程需求被赋予最高优先级。非功能性需求处于次要地位,或者仅仅基于性能测试。这种方法破坏了项目的长期成功和应用程序的良好运行。不要测试系统NFR性能,重要的是要了解它们在系统中是如何配合的。性能工程基本上是应用某些方法来确保满足非功能性需求。

非功能性需求是推动性能工程的主要构件。NFRs帮助软件开发人员了解应用程序的使用、负载和预期响应时间。非功能需求报告还有助于定义应用程序的服务级别协议。以下是您在定义国家森林资源时需要的一些重要信息:

  • 应用架构
  • 域和用户信息、基础架构详细信息、使用情况(事务和点击次数等)和应用程序负载(高峰时段、季节性负载信息、用户增长等)
  • 部署基础设施
  • 用户增长模式(特定时期应用程序的预期使用)
  • 应用程序维护窗口中的计划应用程序停机时间
  • 生产时间内长时间运行的作业的持续时间及其对性能的影响(中央处理器、内存、网络和输入/输出)

应用程序性能

应用程序性能是应用程序响应用户发起的事务所花费的时间。这是决定应用程序运行成功的关键因素之一。不遵守绩效服务水平协议会导致业务损失、最终用户冷漠、拥有成本增加、信誉损失等。

性能类别

应用程序性能不仅仅局限于软件或硬件的角度。随着应用程序变得越来越复杂,越来越不依赖于平台,从应用程序开发过程开始,就需要考虑许多性能因素:

  • 速度(响应时间):系统响应用户请求或内部使用自己的模块所需的时间。
  • 可伸缩性:应用程序通过相应地添加资源来快速适应不断增加的工作负载的能力。两种类型的应用程序扩展是水平和垂直的。
  • 稳定性和弹性:从用户的角度来看,应用程序能够从某些错误类型中恢复,同时保持正常运行。
  • 应用程序性能下降:应用程序性能会在一段时间内下降。(内存泄漏)。

性能工程流程包括以下阶段:

  • 性能建模–新系统的性能评估、变更对现有系统的影响或工作负载变更对现有系统的影响。
  • 性能原型——组件的自动生成和部署,将设计中的实际组件的预定行为反映到实际的信息技术基础设施和环境中。
  • 性能测试——软件测试技术,用于确定不同工作负载下系统的非功能参数,如响应性、稳定性、可靠性和资源使用情况。
  • 性能分析–分析性能测试结果、分离相关数据点、趋势识别等,以识别性能问题的根本原因。
  • 性能调优–对应用程序进行更改,以确保通过代码优化、配置优化、分布式计算等提高性能。

性能工程永远不会停止

性能是每个人的责任,不管你在软件开发生命周期中扮演什么角色。它必须成为一个组织的企业基因的一部分,这样开发人员、设计人员、数据库管理员和其他利益相关者才能无缝协作,实现性能目标。即使在编写一行代码之前,性能工程也应该成为惯例。