译者|朱宪忠审稿人|孙淑娟介绍一般来说,软件测试往往比较简单:每次输入=>已知输出。然而,如果纵观软件测试的整个历史,就会发现很多测试往往停留在猜测层面。也就是说,在测试时,开发者设想用户的操作流程,预估可能的负载并分析所需时间,然后运行测试并将当前结果与基准答案进行比较。如果我们发现没有回归,则认为当前构建方案是正确的;然后,继续后面的测试。如果有回归则返回。大多数时候,我们已经知道输出,尽管它需要更好地定义——回归的边界很清楚,而不是那么模糊。事实上,这就是机器学习(ML)系统和预测分析的用武之地——消除歧义。测试完成后,性能工程师做的不仅仅是看结果的算术平均数和几何平均数,他们还要看百分比数据。例如,系统运行中最慢的请求中通常有10%是由系统错误引起的——该错误会产生始终影响程序速度的条件。虽然我们可以手动关联数据中可用的属性,但ML可能会比您更快地关联数据属性。在确定导致10%的错误请求的条件后,性能工程师可以构建测试场景来重现该行为。在修复之前和之后运行测试有助于确保修复已得到更正。图1:对性能指标机器学习和数据科学性能的总体信心机器学习有助于促进软件开发,使开发技术更加稳健,更适合不同领域和行业用户的需求。我们可以通过将管道和环境中的数据输入深度学习算法来揭示因果模式。预测分析算法与性能工程方法相结合,可实现更高效、更快的吞吐量,深入了解最终用户如何在自然场景中使用软件,并帮助开发人员降低在生产环境中使用缺陷产品的可能性。通过及早发现问题及其原因,您可以在开发生命周期的早期实施问题纠正并防止对生产造成影响。总的来说,您可以通过以下一些方式利用预测分析来提高应用程序性能。确定根本原因。您可以使用机器学习技术来确定可用性或性能问题的根本原因,从而让您专注于其他需要注意的领域。然后,预测分析可以分析每个集群的各种特征,深入了解我们需要做出哪些改变才能实现预期的性能并避免瓶颈。监控应用程序运行状况。利用机器学习技术进行实时应用监控,帮助企业及时发现系统性能下降并快速响应。大多数应用程序依赖多个服务来获取完整应用程序的状态;当应用程序健康时,预测分析模型会关联和分析数据,以确定传入数据是否异常。预测用户负载。我们依靠峰值用户流量来调整我们的基础设施规模,以适应未来访问该应用程序的用户数量。这种方法是有限的,因为它不考虑变化或其他未知数。预测分析有助于可视化用户负载并更好地为其做好准备,从而帮助团队规划其基础架构需求和容量利用率。在为时已晚之前预测停机时间。在应用程序停机或中断发生之前预测它们将有助于采取预防措施。预测分析模型将遵循以前的中断场景并继续监视类似情况以预测未来的中断。停止查看阈值并开始分析数据。可观察性和监控生成的大量数据每周可能需要多达几百兆字节。即使使用现代分析工具,您也必须提前知道您在寻找什么。这导致团队不直接查看数据,而是设置阈值作为行动的触发器。即使是成熟的团队也会寻找例外情况,而不是挖掘他们的数据。为了缓解这种情况,我们将模型与可用数据源集成在一起。然后,该模型会筛选数据并计算随时间变化的阈值。使用这种技术,模型被馈送和汇总历史数据,提供基于季节性而不是人为设置的阈值。基于算法设置阈值有助于触发更少的警报;另一方面,它也带来了更好的可操作性和更高的价值。跨数据集分析和关联。您的数据主要是时间序列,因此随着时间的推移查看各个变量会更容易。许多趋势源于多种措施的相互作用。例如,只有在同一目标同时进行各种事务时,响应时间才会下降。这对人类来说几乎是不可能的,但经过适当训练的算法可以帮助揭示这些相关性。数据在预测分析中的重要性“大数据”通常是指数据集。是的,是一个大数据集,速度提升很快,内容变化很大。对此类数据的分析需要专门的方法,以便我们可以从中提取模式和信息。近年来在存储、处理器、进程并行化和算法设计方面的改进都使系统能够在合理的时间内处理大量数据,从而使这些方法得到更广泛的应用。为了获得有意义的结果,您必须确保数据的一致性。例如,每个项目必须使用相同的排名系统,因此如果一个项目使用1作为键值而另一个项目使用5——就像人们使用“DEFCON5”作为“DEFCON1”一样;那么,必须在处理之前对这些值进行归一化处理。预测算法由算法和它们输入的数据组成,而软件开发会生成大量数据,直到最近,这些数据一直处于闲置状态,等待删除。然而,预测分析算法可以处理这些文件,根据这些数据针对我们无法检测到的模式提出和回答问题,例如:我们是否在浪费时间测试未使用的场景?性能改进如何与用户幸福感相关联?修复特定错误需要多长时间?这些问题及其答案正是预测分析的目的——更好地了解可能发生的情况。算法预测分析的另一个主要组成部分是算法。您需要仔细选择或实施它。从简单开始是至关重要的,因为模型往往会变得更加复杂,对输入数据的变化更加敏感,并且可能会扭曲预测。它们可以解决两类问题:分类和回归(见图2)。分类:分类用于通过将整体划分为不同的类别来预测整体的结果,首先从输入数据推断标签,例如“向下”或“向上”。回归:当输出变量是一组真实值时,回归用于预测集合的结果。它将处理输入数据以进行预测——例如,使用的内存量、开发人员编写的代码行等。最常用的预测模型是神经网络、决策树以及线性和逻辑回归。图2:分类与回归神经网络神经网络通过示例学习并使用历史和当前数据来预测未来价值。他们的架构使他们能够识别隐藏在数据中的复杂关系,复制我们大脑检测模式的方式。它们包含许多层,这些层接受数据、计算预测并将输出作为单个预测提供。决策树决策树是一种分析方法,它以一系列“如果/那么”选项的形式呈现结果,以预测特定选项的潜在风险和收益。它可以解决所有的分类问题并回答复杂的问题。如图3所示,决策树类似于由算法生成的自上而下的树,该算法识别将数据划分为分支状分区的各种方式,以说明未来的决策并帮助识别决策路径。如果加载时间超过三秒,树中的一个分支可能是放弃购物车的用户。在这个下,另一个分支可能会表明它们是否是女性。回答“是”会增加风险,因为分析表明女性更容易冲动购物,而这种延迟会导致反复思考。图3:决策树示例线性和逻辑回归回归是最流行的统计方法之一。这在估算数字时至关重要,例如在黑色星期五促销期间我们需要为每项服务增加多少资源。许多回归算法旨在估计变量之间的关系,在大型和混合数据集中找到关键模式,以及它们之间的关系。它的范围从简单的线性回归模型(计算拟合数据的直线函数)到逻辑回归(计算曲线)(图4)。线性和逻辑回归总体与线性回归逻辑回归用于定义连续范围内的值,例如未来几个月用户流量激增的风险。这是一种统计方法,其中参数是从旧集合中预测出来的。它最适合二元分类:y=0或1的数据集,其中1代表默认类别。它的名字来源于它的转换函数(这是一个逻辑函数)。它表示为y=a+bx,其中x是用于确定输出y的输入集。系数a和b用于量化x和y之间的关系,其中a是截距,b是直线的斜率。它由逻辑函数表示:其中β0是截距,β1是速率。它使用训练数据来计算系数,以最小化预测结果和实际结果之间的误差。目标是拟合最接近大多数点的线,减少y和线之间的距离或误差。它形成一条S形曲线,其中应用阈值将概率转换为二元分类。图4:线性回归与逻辑回归这些是监督学习方法,因为该算法针对特定属性。当您没有特定的结果但想要确定可能的模式或趋势时,可以使用无监督学习。在这种情况下,该模型会分析尽可能多的特征组合,以找到人类可以采取行动的相关性。图5:性能工程中有监督学习与无监督学习的“左移”使用以前的算法来衡量消费者对产品和应用程序的看法,使性能工程更加以消费者为中心。收集完所有信息后,必须通过适当的工具和算法对其进行存储和分析。此数据可以包括错误日志、测试用例、测试结果、生产事件、应用程序日志文件、项目文档、事件日志、跟踪等。然后我们可以将其应用于数据以获得各种见解:分析缺陷评估在上下文中对客户体验的影响识别问题模式创建更准确的测试场景等。这种技术可以在质量方面实现左移-left)该方法允许您预测执行性能测试需要多长时间、可能识别的缺陷数量以及可能导致生产的缺陷数量,从而更好地覆盖性能测试并创建逼真的用户体验。可以在不影响用户的情况下预防和纠正可用性、兼容性、性能和安全问题。以下是有助于提高质量的信息类型的一些示例:缺陷类型缺陷是在哪个阶段发现的走得更快,以防止类似的问题。结论自编程诞生以来,软件工程师已经做出了数百种假设。但是今天的数字用户对错误和故障的意识要强得多,容忍度也低得多。另一方面,企业也在竞相通过定制服务和越来越难以测试的复杂软件来提供更具吸引力和完美的用户体验。今天,一切都需要无缝运行并支持所有流行的浏览器、移动设备和应用程序。即使是几分钟的车祸也可能造成数千或数百万美元的损失。为了防止出现问题,团队必须在整个软件生命周期中集成可观察性解决方案和用户体验。管理复杂系统的质量和性能需要的不仅仅是执行测试用例和运行负载测试。趋势可以帮助您确定情况是否处于可控状态、改善或恶化,以及改善或恶化的速度。机器学习技术可以帮助预测性能问题,使团队能够做出正确的场景调整。最后,让我们以本杰明·富兰克林的名言作为结尾:“一分预防胜于一磅治疗。”译者介绍朱宪忠,社区编辑,专家博主,潍坊某大学讲师,计算机教师,自由编程的老手。原标题:PerformanceEngineeringPoweredbyMachineLearning,作者:
