0

0

机器学习助力高质量软件工程

PHPz

PHPz

发布时间:2023-04-14 16:31:12

|

980人浏览过

|

来源于51CTO.COM

转载

译者 | 朱先忠

审校 | 孙淑娟

引言

一般来说,软件测试往往是比较简单的:每个输入=>已知输出。然而,纵观整个软件测试的历史,会发现很多测试往往都停留在猜测水平上。也就是说,测试时由开发者构想出用户的操作流程,估计可能出现的负载并分析需要耗费的时间,然后运行测试,并将当前结果与基准答案进行比较。如果我们发现不存在回归,那么就认为当前构建方案是正确的;然后,继续后面的测试。如果存在回归,就返回。大多数时候,我们已经知道了输出结果,尽管它需要更好的定义——回归的边界清晰,并不那么模糊。其实,这正是机器学习(ML)系统和预测分析的切入点——结束歧义。

测试完成后,性能工程师所做的工作不仅是查看结果的算术平均值和几何平均值,他们还会查看有关百分比数据。例如,系统运行过程中,往往10%的最慢请求都是由系统错误导致的——该错误会产生一个总是影响程序运行速度的条件。

虽然我们可以手动关联数据中可用的属性,但是ML可能会比您以更快的速度链接数据属性。在确定导致10%的错误请求的条件后,性能工程师便可以构建测试场景来重现该行为。在修复之前和之后运行测试能够帮助确定修复已经得到更正。

☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 免费无限量使用 DeepSeek R1 模型☜☜☜

机器学习助力高质量软件工程

图1:对绩效指标的总体信心

机器学习和数据科学的性能

机器学习有助于促进软件开发,使有关开发技术更坚固、更好地满足用户在不同领域和行业的需求。我们可以通过将管道和环境中的数据输入到深度学习算法来暴露因果模式。预测分析算法与性能工程方法相结合,可实现更高效、更快的吞吐量,深入了解终端用户如何在自然场景下使用软件,并帮助开发者降低带有缺陷的产品应用于生产环境的可能性。通过及早发现问题及其原因,您可以在开发生命周期的早期进行问题纠正,并防止对生产产生影响。总体来看,您可以通过以下方式利用预测分析来提高应用程序性能。

  • 确定根本原因。您可以使用机器学习技术来确定可用性或性能问题的根本原因,从而关注其他需要注意的领域。然后,预测分析可以分析每个集群的各种特征,提供我们需要进行更改的见解,以达到理想的性能并避免瓶颈。
  • 监视应用程序运行状况。使用机器学习技术执行实时应用程序监控,有助于企业能够及时发现系统性能降级并迅速作出响应。大多数应用程序依赖于多个服务来获得完整应用程序的状态;预测分析模型能够在应用程序运行正常时关联并分析数据,以识别传入数据是否为异常值。
  • 预测用户负载。我们依靠峰值用户流量来调整基础设施的规模,以适应未来访问应用程序的用户数量。这种方法有局限性,因为它不考虑变化或其他未知因素。预测分析有助于显示用户负载,并更好地做好应对准备,帮助团队规划其基础设施需求和容量利用率。
  • 在为时已晚之前预测停机。在应用程序停机或停电发生之前预测它们将有助于采取预防措施。预测分析模型将遵循先前的停电情形,并继续监测类似情况,以预测未来的故障。
  • 停止查看阈值,开始分析数据。可观测性和监测产生的大量数据每周最多需要几百兆字节。即使使用现代分析工具,您也必须事先知道自己在寻找什么。这导致团队不直接查看数据,而是设置阈值作为行动的触发因素。即使是成熟的团队也会寻找例外情况,而不是钻研他们的数据。为了缓解这种情况,我们将模型与可用数据源集成。然后,模型将筛选数据并计算随时间推移的阈值。使用这种技术,模型被馈送并汇总历史数据,提供基于季节性而不是由人类设定的阈值。基于算法来设置阈值有助于触发更少的警报;另一方面,这也带来更好的可操作性和更高价值。
  • 跨数据集分析和关联。您的数据大多是时间序列,因此可以更容易地查看随时间变化的单个变量。许多趋势来自多种措施的相互作用。例如,只有在同一目标同时进行各种事务时,响应时间才会下降。对于人类来说,这几乎是不可能的,但经过适当训练的算法却有助于发现这些相关性。

预测分析中数据的重要性

“大数据”通常指的是数据集。不错,是大数据集,速度提升很快,内容变化也很大。对于这样数据的分析需要专门的方法,以便我们能够从中提取模式和信息。近些年来,存储、处理器、进程并行化以及算法设计的改进都使得系统能够在合理的时间内处理大量数据,从而允许更广泛地使用这些方法。为了获得有意义的结果,您必须确保数据的一致性。

例如,每个项目必须使用相同的排名系统,因此,如果一个项目使用1作为关键值,而另一个项目使用5——就像人们使用“DEFCON 5”表示“DEFCON 1”时一样;那么,必须在处理之前对这些值进行规范化处理。预测算法由算法及其输入的数据组成,而软件开发产生了大量数据,直到最近,这些数据仍处于闲置状态,等待删除。然而,预测分析算法可以处理这些文件,针对我们无法检测到的模式,根据这些数据提出和回答问题,例如:

  • 我们是否在浪费时间测试未使用的场景吗?
  • 性能改进如何与用户幸福感相关联?
  • 修复特定缺陷需要多长时间?

这些问题及其答案就是预测分析的用途——更好地理解可能发生的事情。

算法

预测分析的另一个主要组成部分是算法;您需要仔细选择或实现它。从简单开始是至关重要的,因为模型往往会变得越来越复杂,对输入数据的变化越来越敏感,并有可能扭曲预测。它们可以解决两类问题:分类和回归(见图2)。

  • 分类:分类用于预测集合的结果,方法是从输入数据中推断标签(如“向下”或“向上”)开始,将集合划分为不同的类别。
  • 回归:当输出变量是一组实值时,回归用于预测集合的结果。它将处理输入数据来进行预测——例如,使用的内存量、开发人员编写的代码行等。最常用的预测模型是神经网络、决策树以及线性和逻辑回归。

机器学习助力高质量软件工程

图2:分类与回归

神经网络

神经网络通过实例学习,并使用历史数据和当前数据来预测未来价值。它们的架构允许它们识别隐藏在数据中的复杂关系,以复制我们大脑检测模式的方式。它们包含许多层,这些层接受数据、计算预测并作为单个预测提供输出。

决策树

决策树是一种分析方法,它将结果呈现在一系列“if/then”选项中,以预测特定选项的潜在风险和收益。它可以解决所有分类问题并回答复杂问题。

如图3所示,决策树类似于由算法生成的自顶向下的树,该算法能够识别将数据分割成分支状划分的各种方式,以说明未来的决策并帮助识别决策路径。

如果加载时间超过三秒,树中的一个分支可能是放弃购物车的用户。在这一条之下,另一条分支可能会指明她们是否属于女性。“yes”的回答会增加风险,因为分析表明,女性更容易冲动购买,而这种延迟会让人陷入沉思。

机器学习助力高质量软件工程

图3:决策树示例

线性和逻辑回归

回归是最流行的统计方法之一。在估算数字时,这一点至关重要,例如在“黑色星期五”大促活动期间,我们需要为每项服务增加多少资源。许多回归算法被设计来估计变量之间的关系,在庞大的和混合的数据集中找到关键模式,以及它们之间的关系。它的范围从简单的线性回归模型(计算拟合数据的直线函数)到逻辑回归(计算曲线)(图4)。

线性和逻辑回归总体对比

线性回归

逻辑回归

用于定义连续范围内的值,例如接下来几个月用户流量峰值的风险。

这是一种统计方法,其中参数是根据旧的集合预测的。它最适合二进制分类:y=0或1的数据集,其中1表示默认类。它的名字来源于它的转换函数是一个逻辑函数

它表示为y=a+bx,其中x是用于确定输出y的输入集。系数a和b用于量化x和y之间的关系,其中a是截距,b是直线的斜率。

它由逻辑函数表示:


其中β0是截距,β1是速率。它使用训练数据来计算系数,将预测结果与实际结果之间的误差最小化。

目标是拟合最接近大多数点的直线,减少y和直线之间的距离或误差。

它形成S形曲线,其中应用阈值将概率转换为二进制分类。

机器学习助力高质量软件工程

图4:线性回归与逻辑回归

这些是监督学习方法,因为算法解决了特定的属性。当你心中没有特定的结果,但想确定可能的模式或趋势时,可以使用无监督学习。在这种情况下,该模型将分析尽可能多的特征组合,以找到人类可以采取行动的相关性。

机器学习助力高质量软件工程

图5:有监督与无监督学习

性能工程中的“左移”

使用以前的算法来衡量消费者对产品和应用程序的看法,使得性能工程更加以消费者为中心。收集所有信息后,必须通过适当的工具和算法对其进行存储和分析。这些数据可以包括错误日志、测试用例、测试结果、生产事件、应用程序日志文件、项目文档、事件日志、跟踪,等等。然后,我们可以将其应用于数据中,以获得各种见解:

  • 分析环境中的缺陷
  • 评估对客户体验的影响
  • 确定问题模式
  • 创建更准确的测试场景,等等

该技术支持质量方面的左移(shift-left)方法,允许您预测执行性能测试所需的时间、可能识别的缺陷数量以及可能导致生产的缺陷数量,从而实现性能测试的更好覆盖,并创建真实的用户体验。可防止和纠正可用性、兼容性、性能和安全性等问题,而不会影响用户。

以下是一些有助于提高质量的信息类型的示例:

  • 缺陷类型
  • 在哪个阶段发现了缺陷
  • 缺陷的根本原因是什么
  • 缺陷是否可再现

一旦您了解了这一点,就可以进行更改并创建测试,以更快地防止类似问题。

结论

自编程诞生以来,软件工程师已经做出了成百上千的假设。但是,今天的数字用户们更加意识到这一点,而且对错误和失败的容忍度也进一步降低。另一方面,企业也在竞相通过量身定制的服务和越来越难测试的复杂软件,力图提供更具吸引力和完美的用户体验。

今天,一切都需要无缝工作,并支持所有流行的浏览器、移动设备和应用程序。即使是几分钟的撞车事故也可能造成数千或数百万美元的损失。为了防止出现问题,团队必须在整个软件生命周期中整合可观测性解决方案和用户体验。管理复杂系统的质量和性能需要的不仅仅是执行测试用例和运行负载测试。趋势可以帮助您判断情况是否得到控制、好转或恶化,以及改善或恶化的速度。机器学习技术可以帮助预测性能问题,使团队能够正确进行方案调整。最后,让我们来引用本杰明·富兰克林(Benjamin Franklin)的一句话作为结束语:“一盎司预防抵得上一磅治疗。”

译者介绍

朱先忠,51CTO社区编辑,51CTO专家博客、讲师,潍坊一所高校计算机教师,自由编程界老兵一枚。

原文标题:Performance Engineering Powered by Machine Learning,作者:

Fotor
Fotor

Fotor 在线照片编辑器

下载

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

WorkBuddy
WorkBuddy

腾讯云推出的AI原生桌面智能体工作台

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
TypeScript类型系统进阶与大型前端项目实践
TypeScript类型系统进阶与大型前端项目实践

本专题围绕 TypeScript 在大型前端项目中的应用展开,深入讲解类型系统设计与工程化开发方法。内容包括泛型与高级类型、类型推断机制、声明文件编写、模块化结构设计以及代码规范管理。通过真实项目案例分析,帮助开发者构建类型安全、结构清晰、易维护的前端工程体系,提高团队协作效率与代码质量。

76

2026.03.13

Python异步编程与Asyncio高并发应用实践
Python异步编程与Asyncio高并发应用实践

本专题围绕 Python 异步编程模型展开,深入讲解 Asyncio 框架的核心原理与应用实践。内容包括事件循环机制、协程任务调度、异步 IO 处理以及并发任务管理策略。通过构建高并发网络请求与异步数据处理案例,帮助开发者掌握 Python 在高并发场景中的高效开发方法,并提升系统资源利用率与整体运行性能。

117

2026.03.12

C# ASP.NET Core微服务架构与API网关实践
C# ASP.NET Core微服务架构与API网关实践

本专题围绕 C# 在现代后端架构中的微服务实践展开,系统讲解基于 ASP.NET Core 构建可扩展服务体系的核心方法。内容涵盖服务拆分策略、RESTful API 设计、服务间通信、API 网关统一入口管理以及服务治理机制。通过真实项目案例,帮助开发者掌握构建高可用微服务系统的关键技术,提高系统的可扩展性与维护效率。

350

2026.03.11

Go高并发任务调度与Goroutine池化实践
Go高并发任务调度与Goroutine池化实践

本专题围绕 Go 语言在高并发任务处理场景中的实践展开,系统讲解 Goroutine 调度模型、Channel 通信机制以及并发控制策略。内容包括任务队列设计、Goroutine 池化管理、资源限制控制以及并发任务的性能优化方法。通过实际案例演示,帮助开发者构建稳定高效的 Go 并发任务处理系统,提高系统在高负载环境下的处理能力与稳定性。

63

2026.03.10

Kotlin Android模块化架构与组件化开发实践
Kotlin Android模块化架构与组件化开发实践

本专题围绕 Kotlin 在 Android 应用开发中的架构实践展开,重点讲解模块化设计与组件化开发的实现思路。内容包括项目模块拆分策略、公共组件封装、依赖管理优化、路由通信机制以及大型项目的工程化管理方法。通过真实项目案例分析,帮助开发者构建结构清晰、易扩展且维护成本低的 Android 应用架构体系,提升团队协作效率与项目迭代速度。

109

2026.03.09

JavaScript浏览器渲染机制与前端性能优化实践
JavaScript浏览器渲染机制与前端性能优化实践

本专题围绕 JavaScript 在浏览器中的执行与渲染机制展开,系统讲解 DOM 构建、CSSOM 解析、重排与重绘原理,以及关键渲染路径优化方法。内容涵盖事件循环机制、异步任务调度、资源加载优化、代码拆分与懒加载等性能优化策略。通过真实前端项目案例,帮助开发者理解浏览器底层工作原理,并掌握提升网页加载速度与交互体验的实用技巧。

108

2026.03.06

Rust内存安全机制与所有权模型深度实践
Rust内存安全机制与所有权模型深度实践

本专题围绕 Rust 语言核心特性展开,深入讲解所有权机制、借用规则、生命周期管理以及智能指针等关键概念。通过系统级开发案例,分析内存安全保障原理与零成本抽象优势,并结合并发场景讲解 Send 与 Sync 特性实现机制。帮助开发者真正理解 Rust 的设计哲学,掌握在高性能与安全性并重场景中的工程实践能力。

243

2026.03.05

PHP高性能API设计与Laravel服务架构实践
PHP高性能API设计与Laravel服务架构实践

本专题围绕 PHP 在现代 Web 后端开发中的高性能实践展开,重点讲解基于 Laravel 框架构建可扩展 API 服务的核心方法。内容涵盖路由与中间件机制、服务容器与依赖注入、接口版本管理、缓存策略设计以及队列异步处理方案。同时结合高并发场景,深入分析性能瓶颈定位与优化思路,帮助开发者构建稳定、高效、易维护的 PHP 后端服务体系。

684

2026.03.04

AI安装教程大全
AI安装教程大全

2026最全AI工具安装教程专题:包含各版本AI绘图、AI视频、智能办公软件的本地化部署手册。全篇零基础友好,附带最新模型下载地址、一键安装脚本及常见报错修复方案。每日更新,收藏这一篇就够了,让AI安装不再报错!

179

2026.03.04

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
尚学堂Mahout视频教程
尚学堂Mahout视频教程

共18课时 | 3.3万人学习

Node.js 教程
Node.js 教程

共57课时 | 13.4万人学习

Rust 教程
Rust 教程

共28课时 | 6.9万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号