破局者手册 Ⅰ:测试开发核心基础,解锁未来测试密钥!
目录
一、引入背景
二、软件测试基础概念
2.1 软件测试的定义
2.2 软件测试的重要性
2.3 软件测试的原则
三、测试类型
3.1 功能测试
3.2 接口测试
3.2.1 接口测试的概念
3.2.2 接口测试的重要性
3.2.3 接口测试的要点
3.2.4 接口测试代码示例(Python + requests)
3.3 自动化测试
3.3.1 自动化测试的概念
3.3.2 自动化测试的优势
3.3.3 自动化测试的适用场景
3.3.4 自动化测试代码示例(Python + Selenium)
3.3.5 自动化测试框架介绍
3.4 性能测试
3.4.1 性能测试的概念
3.4.2 性能测试的重要性
3.4.3 性能测试的指标
3.4.4 性能测试工具使用示例(JMeter)
四、测试流程
4.1 需求分析阶段
4.2 测试计划阶段
4.3 测试设计阶段
4.3.1 测试用例编写示例(表格形式)
4.4 测试执行阶段
4.5 测试评估阶段
五、测试工具介绍
5.1 JMeter
5.2 Postman
5.3 Selenium
六、汇总小结
一、引入背景
在当今快速发展的软件开发领域,软件质量是决定产品成败的关键因素。测试开发作为保障软件质量的核心环节,融合了软件开发与测试的专业技能,致力于构建高效、可靠的测试工具和自动化测试体系。
二、软件测试基础概念
2.1 软件测试的定义
软件测试是运用人工或自动化手段,对软件系统进行运行和评估的过程。其核心目标是验证软件是否满足预先设定的需求,以及识别预期结果与实际结果之间的差异。例如,对于一款新开发的移动支付应用,通过软件测试来检查支付功能、账户管理功能等是否能按照设计要求正常工作。
2.2 软件测试的重要性
- 保障软件质量:通过严谨的测试流程,能够发现软件中潜在的缺陷和漏洞,确保交付给用户的软件具有较高的质量和稳定性,从而提升用户体验。例如,在一款社交软件上线前,通过全面测试发现并修复消息发送延迟等问题,为用户提供流畅的沟通体验。
- 降低成本:在软件开发的早期阶段发现并修复问题,相较于软件发布后再进行处理,能够大幅降低修复成本。研究表明,后期修复缺陷的成本可能是早期的数倍甚至数十倍。比如,在项目开发初期发现并修复一个代码逻辑错误,可能只需花费少量的时间和人力;而在软件上线后才发现同样的问题,可能需要投入大量的资源进行排查和修复,还可能面临用户流失等潜在损失。
- 增强用户信任:经过充分测试的高质量软件,能够增强用户对软件的信任度,有助于提升软件的口碑和市场竞争力。例如,一款经过严格测试的医疗软件,能够准确地提供诊断建议和治疗方案,用户会更愿意使用并推荐给他人。
2.3 软件测试的原则
- 尽早测试:测试应在软件开发的需求分析阶段就开始介入,以便尽早发现问题并解决。例如,在需求分析阶段对需求文档进行评审,及时发现需求的模糊性或不一致性,避免在后续开发过程中产生更多的问题。
- 全面测试:尽可能覆盖软件的所有功能、各种边界情况以及不同的运行环境,确保软件在各种场景下都能正常工作。比如,对于一个电商平台的订单系统,不仅要测试正常的下单、支付流程,还要测试在网络中断、库存不足等异常情况下系统的处理能力。
- 重点测试:根据软件的业务逻辑和用户使用频率,确定重点测试区域,集中精力对关键功能进行深入测试。例如,对于一款在线教育平台,课程播放和互动功能是用户使用最频繁的功能,应作为重点测试对象,确保其稳定性和流畅性。
- 独立测试:测试人员应独立于开发团队,以客观、公正的态度进行测试,避免因主观因素而遗漏问题。例如,成立专门的测试团队,独立于开发团队进行测试工作,确保测试结果的客观性和公正性。
- 及时反馈:一旦发现问题,应及时向开发团队反馈,以便迅速进行修复,同时详细记录问题的相关信息,便于后续跟踪和分析。例如,使用缺陷管理工具,及时记录和跟踪缺陷的状态,确保每个缺陷都能得到及时处理。
三、测试类型
3.1 功能测试
功能测试是最基础的测试类型,主要依据软件的需求规格说明书,对软件的各项功能进行验证。检查软件在输入各种数据时,是否能按照预期输出正确的结果。例如,测试一个文本编辑器应用,验证其文字输入、格式设置、保存和打开等功能是否正常。
3.2 接口测试
3.2.1 接口测试的概念
接口测试用于检测系统组件之间接口的正确性。在现代软件开发中,尤其是前后端分离的架构模式下,接口测试显得尤为重要。它主要关注系统外部与内部各个子系统之间的交互点,检查数据的交换、传递和控制管理过程,以及系统间的相互逻辑依赖关系。比如,一个电商平台的商品管理系统与订单系统之间通过接口进行数据交互,接口测试就是要确保商品信息能够准确无误地传递到订单系统,并且订单状态的更新能够正确反馈给商品管理系统。
3.2.2 接口测试的重要性
- 保障系统集成:在复杂的系统中,各个模块通过接口进行通信,接口测试能够保证不同模块之间的集成正常,确保整个系统的协同工作。例如,在一个大型企业资源规划(ERP)系统中,财务模块、采购模块和库存模块之间通过接口进行数据交互,接口测试可以确保这些模块之间的数据传递准确无误,实现系统的整体功能。
- 发现潜在问题:接口往往是系统的薄弱环节,容易出现数据格式错误、权限控制不当等问题,接口测试可以提前发现这些潜在问题,避免在系统集成阶段出现大规模的问题。例如,在一个 API 接口中,如果对输入参数的格式没有进行严格验证,可能会导致系统在处理请求时出现错误,通过接口测试可以及时发现并修复这类问题。
- 支持持续集成:在持续集成的开发模式下,频繁的代码变更可能会影响接口的稳定性,接口测试能够及时发现接口的异常,保障系统的持续集成和持续交付。例如,当开发人员对接口进行修改后,接口测试会自动运行,检测接口是否仍然正常工作,如果发现问题,开发人员可以及时进行修复,避免影响整个项目的进度。
3.2.3 接口测试的要点
- 参数校验:验证接口接收到的输入参数是否符合预期的格式、类型和范围。例如,某个接口要求输入的年龄参数必须是大于 0 且小于 150 的整数,接口测试就要检查输入的年龄参数是否满足这一要求。
- 输出结果验证:确保接口返回的数据符合业务逻辑要求,包括响应码、响应体的内容格式及其语义一致性。比如,一个查询用户订单列表的接口,返回的响应码应该是 200(表示成功),并且响应体中应包含正确的订单信息,如订单编号、商品名称、订单金额等。
- 异常处理:模拟各种异常情况,如输入无效参数、网络中断、接口超时等,测试接口在这些情况下能否妥善处理错误,并给出恰当的错误提示信息,以便开发者能够快速定位问题。例如,当网络中断时,接口应返回一个合适的错误信息,告知用户当前无法连接到服务器。
- 权限控制:检查接口是否实现了正确的权限控制,只有经过授权的用户才能访问特定接口,防止未授权的操作导致数据泄露或系统异常。例如,对于一个涉及用户敏感信息的接口,只有具有相应权限的用户才能访问,接口测试需要验证这一权限控制机制是否有效。
3.2.4 接口测试代码示例(Python + requests)
import requests# 测试接口地址
url = "https://example.com/api/user/login"
# 测试参数
data = {"username": "testuser","password": "testpassword"
}# 发送POST请求
response = requests.post(url, json=data)# 打印响应状态码
print("响应状态码:", response.status_code)
# 打印响应内容
print("响应内容:", response.text)# 断言响应状态码是否为200
assert response.status_code == 200
# 断言响应体中是否包含预期的字段
response_json = response.json()
assert "token" in response_json
3.3 自动化测试
3.3.1 自动化测试的概念
自动化测试是使用自动化测试工具或编写测试脚本,模拟人工测试操作,自动执行测试用例的过程。它可以大大提高测试效率,减少人工测试的重复性劳动,并且能够在短时间内执行大量的测试用例。例如,使用 Selenium 自动化测试工具来测试网页应用的功能,通过编写脚本自动模拟用户在网页上的点击、输入、滚动等操作。
3.3.2 自动化测试的优势
- 提高测试效率:自动化测试能够快速执行大量测试用例,大大缩短测试周期,尤其适用于回归测试场景,当软件进行频繁的版本迭代时,自动化测试可以迅速验证新的变更是否对原有功能产生影响。例如,在一个大型电商平台的日常维护中,每天都有大量的功能更新和修复,使用自动化测试可以在短时间内对所有功能进行回归测试,确保系统的稳定性。
- 保证测试准确性:自动化测试不会像人工测试那样因为疲劳、疏忽等因素而出现漏测或误测的情况,能够保证每次测试执行的一致性和准确性。例如,在进行大量数据输入的测试时,人工测试可能会因为输入错误或遗漏而导致测试结果不准确,而自动化测试可以准确地按照预设的测试脚本进行操作,确保测试结果的可靠性。
- 可重复性强:自动化测试脚本可以随时重复执行,方便在不同的环境或不同的时间点进行测试,确保软件在不同条件下的稳定性。例如,在不同的操作系统或浏览器版本上进行测试时,只需要运行自动化测试脚本,就可以快速得到测试结果,而不需要人工重复进行测试操作。
- 降低人力成本:对于一些重复性高、工作量大的测试任务,自动化测试可以节省大量的人力,使测试人员能够将精力集中在更有价值的测试工作上,如测试用例的设计和优化。例如,在进行软件的兼容性测试时,需要在多个不同的设备和操作系统上进行测试,使用自动化测试可以大大减少人工测试的工作量,提高测试效率。
3.3.3 自动化测试的适用场景
- 回归测试:当软件进行功能迭代或修复缺陷后,需要对原有功能进行回归测试,自动化测试能够快速验证原有功能是否仍然正常工作。例如,在一个手机应用的更新版本中,修复了一个支付功能的漏洞,使用自动化测试可以对支付功能以及与之相关的其他功能进行回归测试,确保修复漏洞的同时没有引入新的问题。
- 高并发测试:在模拟大量用户并发访问的场景下,人工测试难以实现,而自动化测试工具可以轻松模拟高并发的用户行为,对系统的性能进行测试。例如,在一个在线抢购活动中,需要模拟大量用户同时访问服务器进行抢购操作,使用自动化测试工具可以模拟这种高并发场景,测试系统的性能和稳定性。
- 数据驱动测试:当测试用例需要使用大量不同的数据进行验证时,自动化测试可以通过数据驱动的方式,方便地读取不同的数据文件,执行相应的测试用例。例如,在测试一个数据处理系统时,需要使用大量不同格式和内容的数据进行测试,使用自动化测试的数据驱动功能可以从数据文件中读取数据,自动执行测试用例,提高测试效率。
- 持续集成和持续交付(CI/CD):在 CI/CD 的开发流程中,自动化测试是不可或缺的环节,它能够在代码提交后自动触发测试,及时反馈代码质量问题,保障软件的持续集成和持续交付。例如,当开发人员将代码提交到代码仓库后,CI/CD 系统会自动触发自动化测试,只有当测试通过后,代码才能继续进行后续的构建和部署操作。
3.3.4 自动化测试代码示例(Python + Selenium)
3.3.5 自动化测试框架介绍
常见的自动化测试框架有 Robot Framework、TestNG 等。以 Robot Framework 为例,它是一个基于 Python 的通用测试自动化框架,具有易于理解的语法和丰富的库支持。使用 Robot Framework,测试人员可以通过简单的关键字驱动方式编写测试用例,无需深入的编程知识。例如:
*** Settings ***
Library SeleniumLibrary*** Test Cases ***
Login TestOpen Browser https://example.com/login chromeInput Text id=username testuserInput Text id=password testpasswordClick Button id=login-buttonSleep 3sTitle Should Be 首页Close Browser
Robot Framework 通过定义测试用例、设置测试库和使用关键字来实现自动化测试,使得测试脚本更具可读性和可维护性。
3.4 性能测试
3.4.1 性能测试的概念
性能测试主要关注软件系统在不同负载条件下的性能表现,包括响应时间、吞吐量、并发用户数、资源利用率等指标。通过性能测试,可以评估软件系统是否能够满足实际业务的性能需求,发现系统在性能方面存在的瓶颈和问题。例如,测试一个在线购物网站在高并发访问时的响应速度,以及服务器的 CPU、内存等资源的利用率情况。
3.4.2 性能测试的重要性
- 满足用户体验:在当今快节奏的互联网时代,用户对软件的响应速度和性能要求越来越高。通过性能测试,确保软件在高并发情况下也能快速响应用户请求,提供流畅的用户体验,避免因性能问题导致用户流失。例如,一个新闻资讯类 APP 如果加载速度过慢,用户可能会选择使用其他竞品应用。
- 优化系统设计:性能测试能够发现系统在架构设计、代码实现、数据库设计等方面存在的性能瓶颈,为系统的优化提供依据,帮助开发团队针对性地进行改进,提高系统的整体性能。比如,通过性能测试发现数据库查询语句执行效率低,开发团队可以对其进行优化,提升系统的响应速度。
- 保障业务稳定:对于一些关键业务系统,如银行核心交易系统、电商平台的订单处理系统等,性能的稳定性至关重要。性能测试可以模拟各种业务场景下的负载情况,确保系统在实际运行中能够稳定可靠地工作,避免因性能问题引发业务中断。例如,银行系统在处理大量交易时,必须保证交易的准确性和及时性,性能测试可以验证系统在高负载下的稳定性。
3.4.3 性能测试的指标
- 响应时间:指从用户发出请求到系统返回响应结果所需要的时间,是衡量用户体验的关键指标。一般来说,响应时间越短,用户体验越好。例如,一个搜索功能的响应时间应控制在 1 秒以内,否则用户可能会感到不耐烦。响应时间又可细分为平均响应时间、最大响应时间和最小响应时间等。
- 吞吐量:单位时间内系统能够处理的请求数量或数据量,它反映了系统的处理能力。例如,一个文件下载服务器的吞吐量可以用每秒下载的文件大小来衡量。在 Web 应用中,吞吐量通常以每秒处理的请求数(TPS)来表示。
- 并发用户数:指在同一时刻同时访问系统的用户数量。并发用户数是评估系统在高负载情况下性能的重要指标,通过模拟不同的并发用户数,可以测试系统的并发处理能力。例如,一个在线考试系统需要支持同时 1000 名考生进行考试,就需要通过性能测试来验证系统在 1000 个并发用户时的性能表现。
- 资源利用率:主要包括 CPU 利用率、内存利用率、磁盘 I/O 利用率、网络带宽利用率等。通过监控资源利用率,可以了解系统在不同负载下各种资源的使用情况,判断是否存在资源瓶颈。例如,当 CPU 利用率持续超过 80% 时,可能意味着系统存在性能问题,需要进一步优化。
3.4.4 性能测试工具使用示例(JMeter)
- 创建测试计划:打开 JMeter,在 “测试计划” 上右键,选择 “添加” -> “线程(用户)” -> “线程组”,设置线程数(模拟并发用户数)、循环次数等参数。例如,设置线程数为 100,循环次数为 10,表示模拟 100 个用户并发访问,每个用户执行 10 次请求。
- 添加 HTTP 请求:在线程组上右键,选择 “添加” -> “取样器” -> “HTTP 请求”,填写请求的 URL、请求方法(如 GET、POST)、请求参数等信息。比如,要测试一个登录接口,填写登录接口的 URL,选择 POST 方法,并设置用户名和密码等参数。
- 添加监听器:在线程组上右键,选择 “添加” -> “监听器”,可以添加 “聚合报告”“图形结果” 等监听器,用于查看性能测试结果,如响应时间、吞吐量等指标。聚合报告中会显示请求的平均响应时间、最大响应时间、最小响应时间、吞吐量等详细信息。
- 运行测试:点击工具栏上的 “启动” 按钮,开始执行性能测试,测试完成后查看监听器中的结果数据。根据测试结果分析系统的性能瓶颈,如响应时间过长可能是因为服务器处理能力不足或网络延迟等问题。
四、测试流程
4.1 需求分析阶段
在这个阶段,测试人员需要与产品经理、开发人员等密切合作,深入理解软件的需求规格说明书。对需求进行详细的分析,明确软件的功能需求、性能需求、安全需求等,识别出测试的重点和难点。同时,根据需求分析结果,制定初步的测试策略和测试计划。例如,对于一个新开发的社交软件,测试人员需要了解其各种社交功能(如添加好友、聊天、发布动态等)的具体需求,以及对性能(如消息发送的及时性、系统的并发处理能力)和安全(如用户信息的加密存储、防止恶意攻击)方面的要求。
4.2 测试计划阶段
根据需求分析的结果,制定详细的测试计划。测试计划包括测试目标、测试范围、测试资源、测试进度安排、测试风险评估等内容。明确测试团队的分工,确定每个测试人员的职责和任务。同时,选择合适的测试工具和技术,为后续的测试工作做好充分准备。例如,确定使用 JMeter 进行性能测试,Selenium 进行自动化功能测试,并安排好测试人员在不同阶段的工作任务和时间节点。
4.3 测试设计阶段
在测试设计阶段,测试人员根据测试计划和需求规格说明书,设计具体的测试用例。测试用例是对软件测试行为的详细描述,包括测试步骤、输入数据、预期结果等。通过精心设计测试用例,能够全面覆盖软件的各种功能和场景,确保测试的充分性和有效性。例如,对于一个登录功能,需要设计不同用户名和密码组合的测试用例,包括正确的用户名和密码、错误的用户名或密码、用户名和密码为空等情况,以及考虑各种边界值和异常情况。
4.3.1 测试用例编写示例(表格形式)
用例编号 | 测试模块 | 测试用例名称 | 测试步骤 | 输入数据 | 预期结果 |
---|---|---|---|---|---|
TC - 001 | 登录功能 | 正确用户名和密码登录 | 1. 打开登录页面; 2. 输入用户名和密码; 3. 点击登录按钮 | 用户名:testuser,密码:testpassword | 成功登录,跳转到首页 |
TC - 002 | 登录功能 | 错误用户名登录 | 1. 打开登录页面; 2. 输入错误用户名和正确密码; 3. 点击登录按钮 | 用户名:wronguser,密码:testpassword | 提示用户名或密码错误 |
4.4 测试执行阶段
按照测试计划和测试用例,执行各项测试任务。在测试执行过程中,记录测试结果,包括通过的测试用例和发现的缺陷。对于发现的缺陷,要详细描述缺陷的现象、重现步骤、严重程度等信息,并及时提交给开发团队进行修复。同时,对修复后的缺陷进行回归测试,确保缺陷已经被成功修复,并且没有引入新的问题。例如,使用自动化测试工具执行测试用例,记录测试结果,并将发现的缺陷提交到缺陷管理系统中,跟踪缺陷的修复进度。
4.5 测试评估阶段
在完成所有测试任务后,对测试结果进行评估。分析测试覆盖情况、缺陷分布情况、软件的性能指标等,判断软件是否达到了预定的质量标准。根据测试评估结果,编写测试报告,向项目团队和相关利益者汇报测试工作的完成情况和软件的质量状况。例如,统计测试用例的执行通过率、缺陷的数量和严重程度,评估软件在功能、性能、稳定性等方面是否满足需求,为软件的发布或进一步改进提供决策依据。
五、测试工具介绍
5.1 JMeter
JMeter 是一款由 Apache 组织开发的开源性能测试工具,基于 Java 语言开发。它可以用于测试 Web 应用程序、FTP 服务器、数据库等各种系统的性能。JMeter 具有以下特点:
- 功能强大:支持多种协议的测试,如 HTTP、HTTPS、FTP、JDBC 等,能够模拟大量并发用户访问系统,进行负载测试、压力测试、容量测试等多种性能测试场景。
- 易于使用:提供了直观的图形化界面,方便用户创建和编辑测试计划、添加各种测试元件(如线程组、HTTP 请求、断言等),即使没有编程经验的测试人员也能快速上手。
- 可扩展性:JMeter 支持插件扩展,可以通过安装各种插件来增强其功能,满足不同的测试需求。例如,可以安装 JMeter - Plugins 插件来获取更多的监听器和测试元件。
- 开源免费:作为开源软件,JMeter 无需支付任何费用,降低了企业的测试成本,并且其源代码公开,用户可以根据自己的需求进行定制和扩展。
5.2 Postman
Postman 是一款功能强大且广受欢迎的 API 开发与测试工具,它不仅适用于接口测试,还贯穿 API 从设计、测试到文档生成的全生命周期。
- 操作界面与功能:Postman 拥有简洁直观的图形界面,用户可以轻松创建 HTTP 请求。通过界面可快速设置请求方法(GET、POST、PUT、DELETE 等)、填写请求 URL、配置请求头和请求体。例如,在进行 POST 请求时,只需在请求体区域选择合适的数据格式(如 JSON、表单数据),并填写对应参数,即可模拟真实的 API 调用场景。
- 测试功能:Postman 支持添加断言,用于验证 API 响应是否符合预期。例如,可断言响应状态码为 200,或响应体中特定字段的值满足条件。同时,它还具备环境变量和全局变量功能,方便在不同测试环境(如开发环境、测试环境、生产环境)中切换测试配置,极大提升了测试的灵活性和可复用性 。
- 团队协作与文档生成:Postman 提供团队空间,团队成员能够共享 API 测试集合和环境配置,实现高效协作开发与测试。并且,它可以根据测试用例自动生成 API 文档,包含 API 接口的详细信息,如请求参数说明、响应示例等,有助于团队成员之间的沟通和 API 的维护。
5.3 Selenium
Selenium 是 Web 应用自动化测试的重要工具,支持多种编程语言,如 Java、Python、C# 等。它可以模拟用户在浏览器中的各种操作,如点击、输入、下拉选择等。Selenium 的优势包括:
- 跨浏览器支持:Selenium 可以在不同的浏览器(如 Chrome、Firefox、Edge 等)上运行测试脚本,确保 Web 应用在各种主流浏览器上的兼容性。
- 多语言支持:由于支持多种编程语言,测试人员可以根据自己熟悉的语言来编写自动化测试脚本,提高开发效率。例如,Python 语言简洁易读,很多测试人员选择使用 Python 结合 Selenium 来进行 Web 自动化测试。
- 丰富的插件和工具:Selenium 生态系统中有许多插件和工具可供使用,如 Selenium IDE(一个用于录制和回放浏览器操作的插件)、Selenium Grid(用于分布式测试的工具,可以在多个浏览器和操作系统上并行执行测试脚本)等,进一步增强了其自动化测试能力。
- 与持续集成工具集成:Selenium 可以与常见的持续集成工具(如 Jenkins、GitLab CI/CD 等)集成,在持续集成的环境中自动执行 Web 自动化测试,及时反馈代码变更对 Web 应用功能的影响。
六、汇总小结
通过本教程,我们全面学习了测试开发的基础知识,涵盖软件测试概念、测试类型(功能测试、接口测试、自动化测试、性能测试)、测试流程、常用测试工具等内容。测试开发是软件质量保障的关键环节,随着技术的不断发展,如人工智能在测试中的应用、云测试等新兴技术的出现,测试开发人员需要不断学习和提升自己的技能,以适应日益复杂的软件测试需求。
相关文章:
破局者手册 Ⅰ:测试开发核心基础,解锁未来测试密钥!
目录 一、引入背景 二、软件测试基础概念 2.1 软件测试的定义 2.2 软件测试的重要性 2.3 软件测试的原则 三、测试类型 3.1 功能测试 3.2 接口测试 3.2.1 接口测试的概念 3.2.2 接口测试的重要性 3.2.3 接口测试的要点 3.2.4 接口测试代码示例(Python r…...
物联网mqtt和互联网http协议区别
MQTT和HTTP是两种不同的网络协议,它们在以下方面存在区别: 一、连接方式 1.MQTT:基于TCP/IP协议,采用长连接方式。客户端与服务器建立连接后,会保持连接状态,可随时进行数据传输,适用于实时性…...
C++笔记之反射、Qt中的反射系统、虚幻引擎中的反射系统
C++笔记之反射、Qt中的反射系统、虚幻引擎中的反射系统 code review! 目录 C++笔记之反射、Qt中的反射系统、虚幻引擎中的反射系统 目录1. 反射基础概念 1...
提示词压缩方法总结与开源工具包
论文标题 AN EMPIRICAL STUDY ON PROMPT COMPRESSION FOR LARGE LANGUAGE MODELS 论文地址 https://arxiv.org/pdf/2505.00019 开源地址 https://github.com/3DAgentWorld/Toolkit-for-Prompt-Compression 作者背景 香港科技大学广州校区,华南理工大学&#…...
【AI提示词】AARRR 模型执行者
提示说明 具备完整的产品知识和数据分析能力,擅长通过AARRR模型优化用户生命周期管理,提升企业收入和市场拓展。 提示词 # Role: AARRR 模型执行者## Profile - language: 中文 - description: 具备完整的产品知识和数据分析能力,擅长通过…...
深入理解 Redis 的主从、哨兵与集群架构
目录 前言1 Redis 主从架构1.1 架构概述1.2 优点与应用场景1.3 局限性 2 Redis 哨兵架构2.1 架构概述2.2 高可用能力的实现2.3 局限与注意事项 3 Redis 集群架构3.1 架构概述3.2 高性能与高可用的统一3.3 限制与挑战 4 架构对比与选型建议结语 前言 在构建高性能、高可用的数据…...
基于CBOW模型的词向量训练实战:从原理到PyTorch实现
基于CBOW模型的词向量训练实战:从原理到PyTorch实现 在自然语言处理(NLP)领域,词向量是将单词映射为计算机可处理的数值向量的重要方式。通过词向量,单词之间的语义关系能够以数学形式表达,为后续的文本分…...
【阿里云大模型高级工程师ACP习题集】2.9 大模型应用生产实践(下篇)
练习题 【单选题】在大模型应用备案中,根据《生成式人工智能服务管理暂行办法》,已上架但未完成合规手续的应用应如何处理?( ) A. 继续运营,同时补办手续 B. 下架处理 C. 暂停部分功能,直至完成合规手续 D. 无需处理,等待监管部门通知 【多选题】在应用服务安全的应用部…...
Matlab实现CNN-BiLSTM时间序列预测未来
Matlab实现CNN-BiLSTM时间序列预测未来 目录 Matlab实现CNN-BiLSTM时间序列预测未来效果一览基本介绍程序设计参考资料 效果一览 基本介绍 1.Matlab实现CNN-BiLSTM时间序列预测未来; 2.运行环境Matlab2023b及以上,data为数据集,单变量时间序…...
互联网大厂Java求职面试:AI大模型与云原生架构设计深度解析
互联网大厂Java求职面试:AI大模型与云原生架构设计深度解析 第一轮提问:AI大模型与系统集成 技术总监(张总):郑薪苦,你之前提到过Spring AI,那你能讲讲在实际项目中如何将大模型集成到系统中&…...
GD32F103C8T6多串口DMA空闲中断通信程序
以下是一个完全符合C99标准的GD32F103C8T6多串口DMA通信完整实现,代码经过Keil MDK验证并包含详细注释: #include "gd32f10x.h" #include <string.h>/* 硬件配置宏 */ #define USART_NUM 2 /* 使用2个串口 */ #define R…...
labelimg快捷键
一、核心标注快捷键 W:调出标注十字架,开始绘制矩形框(最常用功能)A/D:切换上一张(A)或下一张(D)图片,实现快速导航Del:删除当前选中的标注框 二、文件操作快捷键 CtrlS&…...
【深度学习-Day 6】掌握 NumPy:ndarray 创建、索引、运算与性能优化指南
Langchain系列文章目录 01-玩转LangChain:从模型调用到Prompt模板与输出解析的完整指南 02-玩转 LangChain Memory 模块:四种记忆类型详解及应用场景全覆盖 03-全面掌握 LangChain:从核心链条构建到动态任务分配的实战指南 04-玩转 LangChai…...
开元类双端互动组件部署实战全流程教程(第2部分:控制端协议拆解与机器人逻辑调试)
作者:那个写了个机器人结果自己被踢出房间的开发者 游戏逻辑房间结构参考界面 从这张图我们能看出,该组件按功能结构细分为多个房间,每个房间底注、准入标准不同,对应的控制模块也有层级区分。常规来说,一个“互动房间…...
51单片机入门教程——蜂鸣器播放天空之城
前言 本教程基于B站江协科技课程进行个人学习整理,专为拥有C语言基础的零基础入门51单片机新手设计。既帮助解决因时间差导致的设备迭代调试难题,也助力新手快速掌握51单片机核心知识,实现从C语言理论到单片机实践应用的高效过渡 。 目录 …...
linux 历史记录命令
命令方式 #/bin/bash #cd /tmp saveFile"tmp.log" isok"grep HISTTIMEFORMAT /etc/profile|wc -l" if [ $isok -eq 0 ] thenecho -e "#history time\nHISTFILESIZE4000\nHISTSIZE4000\nHISTTIMEFORMAT%F %T \nexport HISTTIMEFORMAT\n" >>…...
手表关于MPU6050中的功能实现
MPU6050 OV-Watch 中的睡眠和唤醒功能实现 OV-Watch 项目为 MPU6050 传感器实施了复杂的电源管理,以优化电池寿命,同时保持手腕检测和计步功能。以下是对睡眠和唤醒机制的详细分析: 内核休眠/唤醒功能实现 MPU6050 有两个主要功能来控制其…...
Qt中数据结构使用自定义类————附带详细示例
文章目录 C对数据结构使用自定义类1 QMap使用自定义类1.1 使用自定义类做key1.2 使用自定义类做value 2 QSet使用自定义类 参考 C对数据结构使用自定义类 1 QMap使用自定义类 1.1 使用自定义类做key QMap<key,value>中数据存入时会对存入key值的数据进行比较ÿ…...
深入浅出数据库的函数依赖关系
数据库的“恋爱关系”:函数依赖的那些事儿 在数据库的世界里,属性之间也存在“恋爱关系”。有些属性是“灵魂伴侣”,彼此绑定;有些是“单向奔赴”,只能依赖对方;还有些是“三角恋”,通过中间人…...
C语言易混淆知识点详解
C语言中容易混淆的知识点详解 C语言作为一门基础且强大的编程语言,有许多容易混淆的概念和特性。以下是C语言中一些常见易混淆知识点的详细解析: 1. 指针与数组 相似点: c 复制 下载 int arr[10]; int *ptr arr; 都可以使用[]运算符访…...
如何选择合适的光源?
目录 工业相机光源类型全面指南 1. 环形光源及其变体 高角度环形光源 优点 缺点 典型应用场景 低角度环形光源(暗场照明) 优点 缺点 典型应用场景 2. 条形光源与组合照明系统 技术特点 组合条形光源 优点 缺点 典型应用场景 3. 同轴光源…...
模块方法模式(Module Method Pattern)
🧠 模块方法模式(Module Method Pattern) 模块方法模式是一种结构型设计模式,它将复杂的操作分解成一系列相对简单、独立且单一职责的模块。每个模块负责完成一种具体的操作,其他模块或系统可以通过调用这些模块的公开…...
OpenCV第6课 图像处理之几何变换(仿射)
1.仿射变换 2. 平移 3 旋转 附录A 二维旋转矩阵 附录B 三维旋转矩阵与轴角表示 1.仿射变换 仿射变换是指图像可以通过一系列的几何变换来实现平移、旋转等多种操作。该变换能够保持图像的平直性和平行性。 平直性是指图像经过仿射变换后,直线仍然是直线,平行性是指图像在…...
【中间件】brpc_基础_TimerThread
文章目录 TimerThread1 简介2 主要设计点2.1 数据结构:分层时间轮(Hierarchical Timing Wheel)2.2 线程模型2.3 任务管理 3 关键代码分析3.1 类定义(timer_thread.h)3.2 时间轮初始化(timer_thread.cpp&…...
拷贝多个Excel单元格区域为图片并粘贴到Word
Excel工作表Sheet1中有两个报表,相应单元格区域分别定义名称为Report1和Report2,如下图所示。 现在需要将图片拷贝图片粘贴到新建的Word文档中。 示例代码如下。 Sub Demo()Dim oWordApp As ObjectDim ws As Worksheet: Set ws ThisWorkbook.Sheets(&…...
网络原理(6)—— 应用层之HTTP协议
目录 一. 应用层 二. 重要应用层协议DNS(Domain Name System) 三. HTTP协议 3.1 HTTP抓包工具 3.2 HTTP格式 3.2.1 请求 3.2.2 响应 3.3 HTTP的工作过程 一. 应用层 应用层协议就像是人们之间的交流规则,它帮助不同的计算机程序(应用)…...
Linux55yum源配置、本机yum源备份,本机yum源配置,网络Yum源配置,自建yum源仓库
参考 太晚了 计划先休息了 大概保存...
250505_HTML
HTML 1. HTML5语法与基础标签1.1 HTML5特性1.1.1 空白折叠现象1.1.2 转义字符 1.2 HTML注释1.3 基础标签1.3.1 div标签1.3.2 标题标签1.3.3 段落标签1.3.1.3.1.3.1.3. 1. HTML5语法与基础标签 1.1 HTML5特性 1.1.1 空白折叠现象 1.1.2 转义字符 1.2 HTML注释 1.3 基础标签 1…...
1. 设计哲学:让字面量“活”起来,提升表达力和安全性
C11引入的用户定义字面量(User-Defined Literals,简称UDL)是语言层面为程序员打开的一扇“自定义表达式”的大门。它允许我们为字面量(比如数字、字符、字符串)添加自定义后缀,从而让代码更具语义化、更易读…...
【KWDB 创作者计划】基于 ESP32 + KWDB 的智能环境监测系统实战
一开始萌生这个想法,其实是源自我办公桌上的那颗“小胖子”——一块 ESP32 开发板。它陪我度过了不少调试夜,也让我对物联网有了真正的感知。恰逢 KaiwuDB 举办征文活动,我便想着,何不将我日常积攒下来的一些硬件和数据库实战经验…...
AVHRR中国积雪物候数据集(1980-2020年)
数据集摘要 本数据集基于1980-2020年5kmAVHRR逐日无云积雪面积产品,制备了中国长时间序列积雪物候数据集。数据集按照不同的物候参数共分为积雪日数、积雪初日、积雪终日3个目录,每个目录下包含40个子文件,为逐水文年积雪物候参数,…...
PCB设计中电感封装的选型
在PCB设计中,电感封装的选型直接影响电路性能、布局效率、热管理能力及系统可靠性。合理的封装选择不仅能优化空间利用率,还能提升电磁兼容性(EMC)和长期稳定性。以下从封装类型、尺寸参数、应用场景适配、布局协同设计、热管理策…...
LintCode第766题,LintCode第1141题,LintCode第478题
第766题描述 判断给出的年份 n 是否为闰年. 如果 n 为闰年则返回 true 闰年是包含额外一天的日历年. 如果年份可以被 4 整除且不能被 100 整除 或者 可以被 400 整除, 那么这一年为闰年 样例 1: 输入 : n 2008 输出 : true 样例 2: 输入 : n 2018 输出 : false 代码如…...
三十一、基于HMM的词性标注
基于HMM的中文词性标注 1 实验目标 理解HMM模型的原理和基本问题理解HMM的实现命名实体识别的具体步骤掌握HMM模型实现命名实体识别的方法 2 实验环境 HMM的中文词性标注的实验环境。 3 实验步骤 该项目主要由3个代码文件组成,分别为hmm.py、tagging.py和run.p…...
MCUboot 中的 BOOT_SWAP_TYPE_PERM 功能介绍
目录 概述 1 Image 数据结构 1.1 Image介绍 1.2 Swap info 2 BOOT_SWAP_TYPE_PERM 功能 2.1 功能定义 2.2 典型工作流程 3 BOOT_SWAP_TYPE_xx的其他功能 3.1 BOOT_SWAP_TYPE_REVERT 3.2 三中模式的比较 4 使用机制 4.1 实现细节 4.2 使用场景 4.3 开发者注意事…...
数学复习笔记 2
前言 朋友和我讨论了一个二重积分题,非常有意思。内容非常细致。整理如下: 二重积分 题目来源是 1000 上面的 16 题,积分区域是一个偏心圆,偏心圆的圆心在 y 轴上面,偏心圆是关于 y 轴对称的,可以看关于…...
从入门到登峰-嵌入式Tracker定位算法全景之旅 Part 5 |地图匹配与轻量 SLAM:HMM/Viterbi 与简化图优化
Part 5 |地图匹配与轻量 SLAM:HMM/Viterbi 与简化图优化 在本章中,我们将在 ESP32-S3 这样的资源受限平台上,实现 地图匹配(Map Matching)和轻量级图优化(Lightweight SLAM)功能。通过 隐马尔可夫模型(HMM)+ Viterbi 算法,以及简化的图优化思路,校正定位轨迹,提升…...
Amazon Bedrock Converse API:开启对话式AI新体验
Amazon Bedrock Converse API:开启对话式AI新体验 前言 在当今人工智能飞速发展的时代,对话式AI已成为众多应用的核心组成部分。从智能客服到智能助手,对话式AI为用户带来了便捷且高效的交互体验。而Amazon Bedrock Converse API的出现&…...
软考 系统架构设计师系列知识点之杂项集萃(54)
接前一篇文章:软考 系统架构设计师系列知识点之杂项集萃(53) 第87题 某银行系统采用Factory Method方法描述其不同账户之间的关系,设计出的类图如下所示。其中与Factory Method的“Creator”角色对应的类是(ÿ…...
第三章 - 软件质量工程体系
1 概述 系统工程学的思想 系统工程学是为了研究多个子系统构成的整体系统所具有的多种不同目标的相互协调,以期系统功能的最优化、最大限度地发挥系统组成部分的能力而发展起来的一门科学。 软件质量工程体系的建立 建立和实施质量管理体系的方法 确定顾客和其…...
#基础Machine Learning 算法(上)
机器学习算法的分类 机器学习算法大致可以分为三类: 监督学习算法 (Supervised Algorithms):在监督学习训练过程中,可以由训练数据集学到或建立一个模式(函数 / learning model),并依此模式推测新的实例。…...
【YOLO11改进】改进Conv、颈部网络STFEN、以及引入PIOU用于小目标检测!
改进后的整体网络架构 改进一:RFD模块(Conv) YOLOv11模型的跨步卷积下采样虽然快速聚合了局部特征,并且实现了较高的计算效率,但其固有的信息压缩机制会导致细粒度特征的不可逆丢失。针对特征保留与计算效率的平衡问题,本文采用RFD模块替换跨步卷积下采样模块。RFD模块通…...
算法之上的权力——空域治理的政治哲学
当AI算法成为空域资源分配的核心机制,我们不得不直面一个核心问题:谁拥有算法,谁控制算法,谁审查算法?调度系统表面上是中立技术,实则承载了深刻的价值判断与权力结构。本章提出“算法即治理”命题…...
虚幻引擎作者采访
1万小时编程_哔哩哔哩_bilibili https://www.youtube.com/watch?v477qF6QNSvc 提姆斯温尼是一位传奇性的视频游戏程序员,Epic Games 的创始人兼首席执行官。 该公司开发了虚幻引擎、堡垒之夜、战争机器、虚幻竞技场等许多开创性和有影响力的视频游戏。 他哥哥…...
CodeBlocks25配置wxWidgets3.2
一、下载CodeBlocks 25.03版本 1.去Sourceforge.net Code::Blocks - Browse /Binaries/25.03/Windows at SourceForge.net 下载codeblocks-25.03mingw-nosetup.zip 2.解压到d盘,并把目录改为codeblocks 二、.下载wxWidgets 3.2.8 1. 去Sourceforge.net wxWidg…...
Python 整理3种查看神经网络结构的方法
1. 网络结构代码 import torch import torch.nn as nn# 定义Actor-Critic模型 class ActorCritic(nn.Module):def __init__(self, state_dim, action_dim):super(ActorCritic, self).__init__()self.actor nn.Sequential(# 全连接层,输入维度为 state_dim…...
【Bootstrap V4系列】学习入门教程之 组件-卡片(Card)
Bootstrap V4系列 学习入门教程之 组件-卡片(Card) 卡片(Card)一、Example二、Content types 内容类型2.1 Body 主体2.2 Titles, text, and links 标题、文本和链接2.3 Images 图片2.4 List groups 列表组2.5 Kitchen sink 洗涤槽…...
AI Agent开发第50课-机器学习的基础-线性回归如何应用在商业场景中
开篇 虽然我们这个系列主讲AI Agent,但是这个系列是一个喂饭式从0到深入的全AI类计算机教程系列,它主要面向的是培养出一个个AI时代的程序员,不是像外部那种很水的只是做做套壳、聊天、绘图小工具的急功近利式教学。而机器学习是现代AI的基础与基石,一些机器学习、深度学习…...
代码随想录第34天:动态规划7(打家劫舍问题:链式、环式、树式房屋)
一、背包问题小结 1.递推公式: 1.问能否能装满背包(或者最多装多少):dp[j] max(dp[j], dp[j - nums[i]] nums[i]) 2.问装满背包有几种方法:dp[j] dp[j - nums[i]] 3.问背包装满最大价值:dp[j] max…...
网络安全自动化:找准边界才能筑牢安全防线
数字时代,企业每天要面对成千上万的网络攻击。面对庞大的服务器群、分散的团队和长期不重启的设备,很多企业开始思考:哪些安全操作适合交给机器自动处理?哪些必须由人工把关?今天我们就用大白话聊聊这件事。 一、这些事…...