软件测试岗位:IT行业中的质量守护者
在当今数字化飞速发展的IT行业,软件如同空气般无处不在,从日常的手机应用到复杂的企业级管理系统,软件的稳定性和可靠性至关重要。而软件测试岗位的从业者,就像是软件世界的质检员,精心守护着软件的质量。
一、软件测试的重要性
软件在各个领域的广泛应用使其质量的重要性不言而喻。在金融领域,交易软件的一个小漏洞可能导致资金错账、交易失败,甚至影响整个金融市场的稳定;医疗领域的信息系统若出现错误,可能会使医生做出错误的诊断,危及患者生命。软件测试能够在开发过程中尽早发现缺陷,根据权威统计,早期发现的缺陷修复成本仅为发布后的几分之一,大大降低了软件开发成本。
二、软件测试岗位的主要职责
1. 测试计划与策略制定
(1) 测试范围界定
明确软件测试的范围,如功能测试(包括各项功能模块的正常操作、异常情况处理等)、性能测试(响应时间、吞吐量等)、兼容性测试(不同操作系统、浏览器、设备等)等。
(2) 测试方法选择
黑盒测试:重点关注输入输出,不考虑内部结构,如针对电商网站的登录功能,输入正确的用户名和密码看是否能成功登录,输入错误信息时的提示是否正确等。
白盒测试:需要了解软件内部逻辑结构,常用于检查程序代码的逻辑、分支覆盖等,比如对于一个有复杂计算算法的软件模块。
灰盒测试:介于黑盒和白盒之间,测试人员对内部结构有一定了解,又主要关注输入输出,例如在测试网络服务接口时,测试人员知道接口的大致内部处理逻辑,但主要关注接口输入参数对应的正确输出。
测试资源分配:确定测试所需的人力(如不同技术水平的测试人员数量)、物力(测试设备、测试环境搭建所需的硬件等)和时间资源。
进度安排:制定详细的测试时间表,包括单元测试、集成测试、系统测试、验收测试等各个阶段的时间节点。
2. 缺陷发现与跟踪
(1) 缺陷发现手段
① 手动测试:
精心设计测试用例,按照用例步骤操作软件,如测试一款图像编辑软件的各种滤镜效果、图像调整工具等,手动进行各种操作来发现可能存在的漏洞。
② 自动化测试:
工具使用(Selenium):主要用于Web应用的自动化测试,它可以模拟浏览器操作,如在不同浏览器(Chrome、Firefox等)中打开网页,进行点击、输入文本、提交表单等操作,快速发现界面交互和功能逻辑方面的问题。
Appium:针对移动应用自动化测试的利器,能够对iOS和Android系统下的手机应用进行自动化测试,例如测试移动支付软件的扫一扫、支付、退款等功能。
UFT(QTP):一种通用的自动化测试工具,支持多种平台和应用程序类型,可用于测试桌面应用、Web应用和移动应用。
性能测试工具(LoadRunner):可模拟大量用户并发访问软件系统,测量系统的响应时间、吞吐量、资源利用率等性能指标,如测试电商平台在大促期间,众多用户同时登录、浏览商品、下单支付时系统的性能表现。
J - meter:可用于性能和功能测试,通过创建测试计划、线程组、采样器等,对服务器、网络等进行压力和性能测试,比如测试Web服务器的并发处理能力。
缺陷记录要求:详细记录缺陷信息,包括缺陷编号、名称、发现时间、发现人、缺陷所在的软件版本、重现步骤(如在某个电商APP中,进入“我的订单”页面,点击某订单的“查看物流”按钮,然后网络中断后再恢复,页面显示为空白,这就是一个重现步骤)、预期结果(应正常显示物流信息)和实际结果(页面空白)等。
缺陷跟踪流程:在发现缺陷后,将缺陷提交到缺陷管理工具(如Jira)中,对缺陷进行分类(严重、较严重、一般、轻微)。开发人员根据缺陷的优先级进行修复,修复后将缺陷状态更新为已修复,测试人员进行回归测试,验证缺陷是否真正解决。如果回归测试失败,则将缺陷重新打开,继续跟进。
3. 测试报告撰写
(1)报告内容构成
测试概述:阐述测试的目的(例如验证软件是否满足用户需求、是否符合相关标准等)、范围(列举测试的功能模块、业务流程等)、方法(用到的测试类型,如黑盒测试、性能测试等)、测试环境(硬件、软件、网络等环境设置)
(2)测试结果汇总
发现缺陷总数:统计整个测试过程中发现的所有缺陷数量。
不同严重程度缺陷的分布:明确严重、较严重、一般、轻微缺陷各自的占比,如在某软件测试中,发现100个缺陷,其中严重缺陷10个,较严重缺陷20个,一般缺陷30个,轻微缺陷40个。
缺陷分析:分析缺陷产生的原因,如需求理解偏差、代码编写错误、开发环境配置问题等。
对软件质量的整体评价:根据缺陷情况给出软件质量是高、中、低或者不可用的结论。
报告作用:为项目管理团队(包括项目经理、开发经理、产品经理等)提供决策依据,决定是否继续改进软件、是否达到发布标准、是否需要重新调整资源分配等。
三、软件测试岗位的技能要求
1. 技术技能
(1) 操作系统知识:
熟悉Windows、Linux、Mac等操作系统的基本操作、文件系统、进程管理、网络配置等。在测试服务器软件时,对Linux操作系统的深入理解,如掌握文件权限设置、服务启动与停止等操作是必不可少的。
(2) 数据库操作技能:
能够熟练运用SQL语句进行数据库的基本操作(创建表、插入数据、查询数据、更新数据和删除数据等),并且在测试数据库相关的软件时,能够深入理解数据库事务、锁机制等概念。例如在测试电商平台订单管理系统时,验证订单数据在不同数据库表中的存储和关联关系。
(3) 编程语言与脚本:
Python:由于其语法简洁、库丰富,常用于编写自动化测试脚本。通过unittest或pytest等框架,可以方便地组织测试用例,进行单元测试、集成测试等。
Java:在测试Java开发的企业级软件时,掌握Java编程语言有助于编写更高效、更稳定的测试脚本,如利用Java的反射机制对软件中的类和方法进行动态测试。
测试工具熟练使用:
LoadRunner:熟练掌握脚本录制、场景设计、性能指标监控和结果分析。
Jmeter:能够创建和配置各种测试元件,如线程组、采样器、逻辑控制器等,以实现复杂的性能测试场景。
Postman:用于API(应用程序接口)测试,能够方便地发送各种类型的HTTP请求(GET、POST、PUT、DELETE等),并对接口的响应进行断言验证,如检查接口返回的状态码、数据格式和内容等。
2. 业务理解能力
深入业务领域:不同行业的软件测试需要掌握不同的业务知识。例如金融软件测试需要了解金融交易规则(如股票、基金、债券等交易流程)、风险管理(信用风险、市场风险等);游戏软件测试要熟悉游戏类型(角色扮演、射击、策略等)、游戏玩法(角色升级、道具使用、关卡攻略等)。
法规政策遵循:在特定行业,如医疗、金融等,软件必须符合相关的法规政策要求。测试人员要确保在测试过程中充分考虑到这些要求,例如医疗软件需要符合医疗设备软件的相关标准、数据隐私保护法规等,金融软件要遵守金融监管规定。
3. 沟通协作能力
与开发人员沟通:在发现缺陷后,测试人员要及时与开发人员沟通。清晰、准确地阐述缺陷的现象、重现步骤、发现环境等信息,以便开发人员能够快速定位问题。同时,测试人员也要理解开发人员的解决方案和技术限制,避免产生不必要的矛盾。
与项目经理协作:测试人员要定期向项目经理汇报测试进度、测试中发现的问题以及潜在的风险。根据项目经理的安排,合理调整测试策略和资源分配,确保测试工作与项目管理目标保持一致。
与客户沟通:在用户验收测试或者需求调研阶段,测试人员可能需要与客户直接沟通,了解客户的真实需求和期望,把客户反馈融入到测试工作中,以提供更贴合用户需求的软件产品。
四、软件测试工作流程
1. 测试需求分析
收集需求文档,包括软件需求规格说明书、用户故事地图等。例如对于一款在线教育软件,需求文档会详细描述课程创建、学生学习进度跟踪、在线考试等功能需求。
深入理解需求,与项目相关人员(如开发人员、产品经理等)进行讨论,明确软件的功能、性能、安全等方面的要求。例如确定在线教育软件在高并发学习场景下的性能要求,如同时容纳多少学生在线学习而不出现卡顿。
2. 测试计划制定
根据需求分析结果,确定测试范围(如对在线教育软件来说,是测试所有课程模块还是部分核心课程模块)、测试方法(采用手动和自动化测试相结合的方式)、测试资源(安排多少测试人员、需要多少测试设备等)和测试进度(制定详细的时间表,如何时进行单元测试、集成测试等)。
输出测试计划文档,这份文档是整个测试工作的蓝图,会经过项目组内部评审,根据评审意见进行修改完善。
3. 测试用例设计
(1) 功能测试用例设计
等价类划分:将输入数据划分为有效等价类和无效等价类。如在测试在线教育软件的课程搜索功能时,有效等价类可以是合法的课程名称、编码等,无效等价类可以是不存在的字符组合、超长的搜索词等。
边界值分析:重点测试边界值情况。例如在线教育软件中,课程学习进度是0% - 100%,边界值测试就要测试0%、1%、99%、100%等特殊情况。
决策表法:适用于有多个输入条件,每个条件有不同的取值组合,并且不同组合有不同的输出结果的情况。比如在线教育软件中,根据用户是否注册、是否付费、课程是否为免费课程等多个条件来决定用户是否可以访问课程内容。
性能测试用例设计:确定性能测试的场景,如并发用户数、持续时间、操作类型等。对于在线教育软件,要设计不同并发用户数(如100、500、1000用户等)同时观看直播课程、下载课程视频等操作的场景。
4. 测试环境搭建与准备
硬件环境搭建:根据软件的运行需求,准备相应的服务器、客户端设备等。如搭建模拟生产环境的服务器集群,配置合适的CPU、内存、硬盘等硬件资源,对于移动端软件,准备测试用的不同型号手机、平板电脑等设备。
软件环境搭建:安装操作系统、数据库管理系统、中间件等软件。在测试在线教育软件时,安装Windows或Linux操作系统、MySQL数据库、Web服务器(如Tomcat)等软件,并进行相关的配置,如数据库连接配置、服务器端口配置等。
测试数据准备:生成或获取测试所需的数据。对于在线教育软件,可以创建一些测试课程、学生账号、教师账号等数据,还可以利用数据生成工具来创建大量符合要求的测试数据。
5. 测试执行阶段
(1) 手工测试执行
测试人员按照测试用例的步骤,在测试环境中对软件进行操作,记录测试结果。如在测试在线教育软件的课程购买功能时,按照正常流程(选择课程、加入购物车、选择支付方式、下单支付)进行操作,同时记录每一个步骤的操作结果和软件的反馈信息。在测试过程中,发现缺陷及时报告并提交到缺陷管理工具中。
(2) 自动化测试执行
如果有自动化测试脚本,利用自动化测试工具(如Selenium、Appium等)运行脚本,自动化执行测试用例,自动记录测试结果。例如在测试在线教育软件的登录功能时,自动化测试脚本可以快速多次执行登录操作,检查不同类型的输入(正确用户名和密码、错误用户名和密码等)下的软件响应。
6. 缺陷管理
在发现缺陷后,测试人员在缺陷管理工具(如Jira)中登录缺陷相关信息,包括缺陷标题、详细描述、重现步骤等。
开发人员从缺陷管理工具中获取待修复的缺陷任务,对缺陷进行修复。修复过程中可能会与测试人员沟通缺陷入手的问题,如某些重现步骤是否存在误解等。
修复完成后,测试人员进行回归测试,验证缺陷是否真正解决。如果回归测试发现缺陷仍然存在或者产生了新的缺陷,则将缺陷重新打开并反馈给开发人员继续处理。
7. 测试报告撰写与评审
按照前面提到的报告内容构成,撰写详细的测试报告,总结测试工作的成果,分析软件质量状况。
组织项目相关人员进行测试报告评审,评审人员包括开发人员、项目经理、产品经理等。根据评审意见对报告进行修改完善,最终报告将作为软件是否可以上线的关键依据。
五、软件测试工程师的常用测试工具
1. Selenium
(1) 优势:
开源免费,拥有庞大的社区支持,用户可以在社区中获取丰富的教程、插件和解决方案。
支持多种浏览器(如Chrome、Firefox、IE等),能够满足在不同浏览器环境下对Web应用的测试需求。
(2) 使用场景:
对于电商网站、社交网络平台等Web应用的前端功能测试非常有效。例如测试电商网站的搜索框、商品列表排序、用户登录注册等功能。
(3) 局限性:
对于一些复杂的JavaScript交互或者动态加载页面的测试,可能需要额外的配置和处理。
维护自动化测试脚本的成本相对较高,当Web应用的前端界面发生较大变化时,脚本可能需要大量修改。
2. Appium
(1) 优势:
可以跨平台测试,能够同时满足iOS和Android系统下移动应用的自动化测试需求,减少了开发不同平台测试脚本的成本。
支持多种编程语言,如Java、Python等,方便测试人员根据自己的技术栈进行脚本编写。
(2) 使用场景:
在移动应用开发领域,用于测试手机应用的各种功能,如地图导航类应用的路程规划、语音导航功能;金融类APP的转账、理财功能等。
(3) 局限性:
依赖移动设备的连接,在测试过程中如果设备出现连接中断等问题,可能会影响测试的连续性。
对于一些采用特殊技术或加密技术的移动应用,可能需要进行特殊的处理才能进行有效的测试。
3. LoadRunner
(1) 优势:
功能强大,能够模拟大规模用户并发访问的场景,对系统性能进行全面的测试。
提供详细的性能指标分析,如响应时间、吞吐量、资源利用率等,帮助开发人员和测试人员深入了解系统的性能瓶颈。
(2) 使用场景:
在测试大型企业级软件、电商平台促销期间服务器性能、在线游戏服务器承载能力等方面是首选工具。
(3) 局限性:
脚本录制可能受到应用类型和网络环境的限制,有些情况下录制的脚本需要进行大量的修改才能正常使用。
学习曲线较陡,掌握LoadRunner的高级功能需要花费较多的时间和精力。
4. Jmeter
(1) 优势:
开源免费,易于学习和上手,对于小型团队的性能测试工作来说,成本较低。
插件丰富,可以通过添加插件来扩展其功能,如进行数据库性能测试、SOAP Web服务测试等。
(2) 使用场景:
适合测试中小型Web应用、Web服务(如RESTful API)的性能,也可用于接口测试。
(3) 局限性:
在处理大规模并发性能测试时,与LoadRunner相比,可能在稳定性方面稍差一些。
对于复杂的企业级应用的性能测试,可能需要与其他工具配合使用才能进行全面有效的测试。
六、软件测试岗位的发展现状与前景
1. 发展现状
在大多数企业中,软件测试已经不再是简单的发现问题,而是贯穿于软件开发的整个生命周期,从需求分析阶段就开始介入,进行需求评审,确保需求的可测性。
随着自动化测试技术的发展,越来越多的企业开始重视自动化测试,测试人员在自动化测试脚本编写、维护以及持续集成/持续交付(CI/CD)流程中的角色越来越重要。
缺陷管理工具和测试管理工具的广泛应用,提高了测试工作的效率和可管理性。测试人员可以通过这些工具更好地跟踪测试进度、管理测试用例和缺陷。
2. 发展前景
随着软件行业的持续增长:软件应用的范围将不断扩大,无论是新兴的人工智能、大数据、区块链等领域,还是传统的制造业、服务业等行业的数字化转型,都离不开软件的支持。这使得软件测试的需求不断攀升,软件测试岗位也将持续存在且重要性日益凸显。
七、技术发展方向带来的机遇
1. 人工智能与机器学习在软件测试中的应用
智能测试用例生成:人工智能技术可以通过分析软件需求文档、历史测试数据等,自动生成测试用例。这不仅能够节省测试人员的时间和精力,还能提高测试用例的覆盖率和准确性。例如,一些基于机器学习算法的工具可以根据软件的功能描述自动生成边界值测试用例、等价类测试用例等。
缺陷预测:利用机器学习算法对历史缺陷数据进行分析,可以预测软件中可能出现缺陷的模块或功能区域。测试人员可以有针对性地对这些区域进行重点测试,提高缺陷发现的效率。例如,通过分析软件开发过程中的代码变更、测试结果、开发人员的工作效率等因素,构建一个预测模型,提前预警可能存在的缺陷。
测试结果分析:人工智能可以对大量的测试结果进行分析,挖掘出潜在的问题和规律。例如,通过对自动化测试脚本的运行结果进行分析,发现软件中某些特定的操作序列容易导致系统故障,从而帮助开发人员更好地优化软件。
2. DevOps与CI/CD环境下的软件测试
在DevOps和持续集成/持续交付(CI/CD)的环境下,软件测试与开发、运维等环节紧密结合。测试人员需要更加及时地介入到整个软件开发流程中,确保每次代码的变更都能得到有效的测试。
持续测试:随着软件的不断更新和迭代,持续测试成为了保证软件质量的关键。测试人员需要利用自动化测试工具,在代码提交、构建、部署等各个环节自动执行测试用例,快速反馈测试结果。例如,在一个基于Docker容器化技术的CI/CD流水线中,测试人员可以编写自动化测试脚本,当新的代码被部署到测试环境的容器中时,自动执行功能测试和性能测试。
测试左移和测试右移:“测试左移”意味着测试人员在软件开发的更早期阶段就开始参与,如需求分析和设计阶段的评审,提前发现需求和设计中的缺陷。“测试右移”则是将测试延伸到软件发布后的运维阶段,监控软件在生产环境中的运行状况,及时发现和解决可能出现的问题。这就要求测试人员与运维人员密切配合,掌握更多的监控和分析工具。
3. 物联网测试的兴起
随着物联网技术的发展,越来越多的设备接入互联网,如智能家居设备、智能交通设备、工业物联网设备等。这些设备的功能和安全性测试成为了新的挑战和机遇。
设备兼容性测试:物联网设备种类繁多,涉及不同的硬件平台、操作系统和通信协议。测试人员需要确保软件在各种物联网设备上都能正常运行,例如智能家居系统中的控制软件需要在不同品牌和型号的智能音箱、智能插座等设备上稳定工作。
安全测试:物联网设备通常涉及到大量的个人信息和关键业务数据,如用户的生活习惯、家庭安全信息等。因此,软件测试人员需要对物联网软件进行严格的安全测试,检查是否存在数据泄露、设备被恶意控制等安全隐患。例如,对智能汽车的车载软件进行安全测试,防止黑客攻击导致行车安全问题。
性能和可靠性测试:许多物联网应用对软件的性能和可靠性要求极高。例如,工业物联网中的监控系统需要实时准确地采集和分析设备数据,任何延迟或错误都可能导致生产事故。测试人员需要使用专业的工具和方法,对物联网软件进行性能和可靠性测试,确保其满足实际应用的需求。
八、行业需求推动的职业发展多元化
1. 从测试到测试管理的转型
随着经验的积累,软件测试工程师有机会晋升为测试经理或测试主管。在管理岗位上,他们不仅需要具备深厚的技术能力,还需要掌握团队管理、项目管理等技能。
团队管理:负责组建和管理测试团队,合理分配资源,激励团队成员,提高团队的整体工作效率。例如,根据项目的需求和团队成员的技能特点,安排合适的人员负责不同的测试任务,确保项目按时完成。
项目管理:制定测试计划和项目计划,协调测试团队与其他部门(如开发团队、产品团队等)之间的工作,确保项目的顺利进行。例如,在跨部门的项目中,测试经理需要与开发经理和产品经理密切合作,共同解决项目中出现的问题。
2. 测试架构师的专业发展
对于一些技术能力特别突出的软件测试工程师,他们可以选择成为测试架构师。测试架构师主要负责设计和构建测试系统的架构,制定测试策略和技术规范。
架构设计:根据项目的技术特点和业务需求,设计合理的测试架构,选择合适的测试工具和技术。例如,在一个大型分布式系统的测试中,测试架构师需要设计一个高效的数据采集和分析系统,以确保能够准确地监测和分析系统在各种情况下的性能。
技术创新:关注行业的最新技术动态,不断探索和引入新的测试技术和方法,提高测试的效率和质量。例如,研究和应用新兴的人工智能测试框架,优化自动化测试的流程和策略。
九、对软件测试人员的挑战与要求
1. 应对快速变化的技术环境
软件技术和工具不断更新换代,软件测试人员需要不断学习和掌握新的技术和工具,以适应行业的发展。例如,随着云计算、容器化等技术的广泛应用,测试人员需要学习如何在云环境中进行有效的软件测试,以及如何使用容器化技术构建和管理测试环境。
关注行业的前沿研究和最佳实践,参加技术研讨会、培训课程等,与同行交流经验,不断提升自己的技术水平。
2. 解决复杂业务场景下的测试问题
现代软件应用的复杂度越来越高,涉及的业务场景也越来越多样化。软件测试人员需要深入理解业务需求,能够设计出全面、有效的测试用例,覆盖各种复杂的业务场景。例如,在测试金融科技应用时,测试人员需要了解金融交易规则、风险控制等业务知识,以确保测试的准确性和全面性。
与大业务专家紧密合作,深入了解业务流程和规则,从业务的角度出发设计测试策略和用例,从而更好地发现业务逻辑方面的缺陷。
十、保证跨团队协作的高效性
在软件项目的开发过程中,测试人员需要与开发人员、产品经理、设计师等多个团队紧密合作。有效的沟通和协作能力对于确保项目的顺利进行至关重要。
与开发团队协作:测试人员需要及时向开发人员反馈缺陷,协助开发人员定位和解决问题。同时,与开发人员共同探讨技术实现方案对测试的影响,提前做好测试准备工作。例如,在开发新功能时,测试人员可以提前与开发人员沟通了解技术实现的难点和关键点,以便在测试过程中有针对性地进行测试。
与产品经理协作:测试人员要理解产品经理对产品功能和用户体验的期望,从测试的角度为产品经理提供专业的建议。例如,在产品设计阶段,测试人员可以对产品原型提出关于可测试性的意见,避免出现难以测试的设计。
与设计师协作:对于涉及到用户界面的软件项目,测试人员需要与设计师密切合作,确保界面的设计和交互符合用户体验的要求。例如,测试人员可以对界面的布局、颜色搭配、操作流程等进行评估,与设计师共同优化设计方案。
十一、 新兴领域带来的新挑战和机遇
1. 自动驾驶与智能交通软件测试
随着自动驾驶技术的发展,汽车软件的测试面临着前所未有的挑战。测试人员需要模拟各种复杂的驾驶场景,对自动驾驶算法、传感器数据处理、通信协议等进行全面测试。
场景模拟:创建逼真的驾驶场景,包括不同天气条件、路况和交通流量等,以验证自动驾驶软件的性能和安全性。例如,在模拟雨天驾驶场景时,需要考虑雨水对摄像头和传感器的影响,以及软件在这种条件下的决策准确性。
安全验证:自动驾驶软件关系到生命安全,因此安全测试是重中之重。测试人员需要采用各种技术手段,确保软件在面对各种复杂情况时不会发生故障或做出错误的决策。
2. 区块链软件测试
区块链技术的应用越来越广泛,如数字货币、供应链金融、数字版权等。区块链软件的测试需要关注其独特的安全性、去中心化特性和智能合约的正确性。
安全测试:区块链系统的安全性至关重要,测试人员需要检查区块链节点的安全性、加密算法的有效性、防止恶意攻击的能力等。例如,测试区块链系统是否能够抵御51%攻击。
智能合约测试:智能合约是区块链应用的核心,其正确性和可靠性直接影响整个系统的运行。测试人员需要使用专门的工具和方法,对智能合约的功能、性能和安全性进行全面测试。
3. 虚拟现实(VR)与增强现实(AR)软件测试
VR和AR技术在游戏、教育、医疗等领域有着广阔的应用前景。对VR和AR软件的测试要求测试人员具备新的技术和技能。
硬件兼容性测试:VR和AR应用需要特定的硬件设备支持,如VR头盔、手柄等。测试人员需要测试软件在不同品牌和型号的硬件设备上的兼容性和性能表现。
用户体验测试:VR和AR应用注重用户的沉浸式体验,测试人员需要从用户的角度出发,评估软件的视觉效果、交互设计、空间感知等方面是否符合用户的期望。
结语
软件测试岗位在IT行业中扮演着至关重要的角色。它不仅需要测试人员具备扎实的技术技能、深入的业务理解能力和良好的沟通协作能力,还需要不断应对新的技术和业务挑战。随着软件行业的持续发展,软件测试岗位的发展前景将更加广阔,软件测试人员也将在保障软件质量、推动软件创新方面发挥更加重要的作用。
相关文章:
软件测试岗位:IT行业中的质量守护者
在当今数字化飞速发展的IT行业,软件如同空气般无处不在,从日常的手机应用到复杂的企业级管理系统,软件的稳定性和可靠性至关重要。而软件测试岗位的从业者,就像是软件世界的质检员,精心守护着软件的质量。 一、软件测…...
单片机方案开发 代写程序/烧录芯片 九齐/应广等 电动玩具 小家电 语音开发
在电子产品设计中,单片机(MCU)无疑是最重要的组成部分之一。无论是消费电子、智能家居、工业控制,还是可穿戴设备,小家电等,单片机的应用无处不在。 单片机,简而言之,就是将计算机…...
恐龙专利及商标维权行动,已获批TRO并冻结资金
2025年3月30日,原告Shenzhen xingyin technology co.,Ltd.,现化名为Shenzhen Z Tech Co., Ltd.委托kemet律所发起维权。目前该案件已获批TRO临时禁令,涉案账户资金已被冻结,案件详情如下: 案件基本情况:起…...
【北京市小客车调控网站-注册/登录安全分析报告】
前言 由于网站注册入口容易被黑客攻击,存在如下安全问题: 暴力破解密码,造成用户信息泄露短信盗刷的安全问题,影响业务及导致用户投诉带来经济损失,尤其是后付费客户,风险巨大,造成亏损无底洞…...
Vue 3中的 setup
Vue 3引入了Composition API,其中setup函数是这一新API的核心部分。setup函数为开发者提供了一种更灵活、更模块化的方式来组织组件逻辑。以下是关于Vue 3中setup函数的详细解释: 1. 基本概念 setup函数是组件内使用Composition API的入口点。它是一个…...
2025年实用新型专利审查周期要多久?
申请实用新型专利时,审查周期是申请人最关心的问题之一。尤其是近几年国家知识产权局不断优化流程,审查速度是否有变化?2025年申请需要等多久?本文结合最新政策和实际案例,为你全面解析! 一、实用新型专利…...
使用Python建立双缝干涉模型
引言 双缝干涉实验是物理学中经典的实验之一,它展示了光的波动性以及量子力学的奇异性。实验结果表明,当光或粒子通过两条狭缝时,它们会产生干涉现象,形成明暗相间的条纹图案。这种现象不仅说明了光的波动性,还揭示了量子力学的核心思想——粒子具有波动性。今天,我们将…...
路由交换网络专题 | 第二章 | RIP | OSPF | 路由聚合 | 路由过滤 | 静默接口
拓扑图 (1)作为企业网络边界设备,AR1 上配置什么命令,可以使 OSPF 域内所有路由都会有指向自己的默认路由。默认路由的优先级是多少。如果 OSPF 域内其他路由器同样有到达外网的路径,且优于通过 AR1 到达外网ÿ…...
python 语言 设计模式
python 语言 设计模式 设计模式是指在软件开发过程中,针对反复出现的问题所总结归纳出的通用解决方案。以下是一些常见的Python语言设计模式: 目录 python 语言 设计模式创建型模式结构型模式行为型模式创建型模式 单例模式 定义:保证一个类只有一个实例,并提供一个全局访…...
银行业务发展历史
银行业务发展历史 银行业务的发展可以追溯到古代,但其现代形式的发展可以追溯到中世纪。以下是银行业务发展的主要历史阶段: 1. 古代和中世纪时期 特点:商人提供贷款和存款服务,充当中间人转移资金,发行纸币作为支付…...
JAVA中多线程的基本用法
文章目录 一、基本概念(一)进程控制块PCB(二)并行和并发(三)进程调度1.进程的状态2.优先级3.记账信息4.上下文 (四)进程和线程1.概述2.线程为什么比进程更轻量3.进程和线程的区别和联…...
健康与好身体笔记
文章目录 保证睡眠饭后百步走,活到九十九补充钙质一副好肠胃肚子咕咕叫 健康和工作的取舍 以前对健康没概念,但是随着年龄增长,健康问题凸显出来。 持续维护该文档,健康是个永恒的话题。 保证睡眠 一是心态要好,沾枕…...
如何下载谷歌浏览器增强版(扩展支持版)
在日常浏览和工作中,Chrome 浏览器因其强大的性能和丰富的扩展插件,成为全球范围内使用最广泛的浏览器之一。然而,对于需要进行深度扩展管理或需要稳定扩展环境的用户来说,标准版的 Google Chrome 可能在某些方面仍显不足。这时候…...
TDDMS分布式存储管理系列文章--分片/分区/分桶详解
友情链接: 星环分布式存储TDDMS大揭秘(一)分布式存储技术推出背景以及当前存在的挑战TDDMS是什么 前情提要 通过上个系列的文章我们了解到了各节点数据副本间通过一致性算法确保每次写入在响应客户端请求之前至少被多数节点(N/2…...
Spring Boot(九十):集成SSE (Server-Sent Events) 服务器实时推送
1 SSE简介 Server-sent Events(SSE) 是一种基于 HTTP 协议的服务器推送技术,它允许服务器主动向客户端发送数据。与 WebSocket 不同,SSE 是单向通信,即服务器可以主动向客户端推送数据,而客户端只能接收数据。 2 SSE特点 单向通信:SSE 是服务器向客户端的单向推送,客户…...
ubuntu22.04安装ROS2 humble
参考: https://zhuanlan.zhihu.com/p/702727186 前言: 笔记本安装了ubuntu20.04安装ros一直失败,于是将系统升级为ununut22.04,然后安装ros,根据上面的教程,目前看来是有可能成功的。 系统升级为ununut…...
力扣第206场周赛
周赛链接:竞赛 - 力扣(LeetCode)全球极客挚爱的技术成长平台 1. 二进制矩阵中的特殊位置 给定一个 m x n 的二进制矩阵 mat,返回矩阵 mat 中特殊位置的数量。 如果位置 (i, j) 满足 mat[i][j] 1 并且行 i 与列 j 中…...
C++17 主要更新
C17 主要更新 C17 是继 C14 之后的重要标准更新,引入了许多提升开发效率、简化代码和增强性能的特性。以下是 C17 的主要更新,按类别分类: 1. 语言核心特性 结构化绑定(Structured Bindings) 解构元组、结构体或数组…...
k8s master节点部署
一、环境准备 1.主机准备 192.168.10.100 master.com master 192.168.10.101 node1.com node1 192.168.10.102 node2.com node2 互信 时间同步 关闭防火墙 关闭selinux 2.创建/etc/sysctl.d/k8s.conf,添加如下内容 cat > /etc/sysctl.d/k8s.conf <<EOF net.br…...
YOLO学习笔记 | YOLOv8 全流程训练步骤详解(2025年4月更新)
===================================================== github:https://github.com/MichaelBeechan CSDN:https://blog.csdn.net/u011344545 ===================================================== 这里写自定义目录标题 一、数据准备1. 数据标注与格式转换2. 配置文件生…...
centos7.9 升级 gcc
本片文章介绍如何升级gcc,centos7.9 仓库默认的gcc版本为:4.8.5 4.8.5-44) Copyright (C) 2015 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY…...
Linux基本指令
Linux目录结构 Linux的目录结构是一个树形结构。Windows系统可以拥有多个盘符,如C盘、D盘、E盘。而Linux没有盘符这个概念,只有一个根目录/,所有文件都在它下面。如下图所示: Linux路径的描述方式 在Linux系统中,路径之间的层级…...
Google A2A协议,是为了战略性占领标准?
一、导读 2025 年 4 月 9 日,Google 正式发布了 Agent2Agent(A2A)协议。 A2A 协议致力于打破智能体之间的隔阂,让它们能够跨越框架和供应商的限制,以一种标准化、开放的方式进行沟通与协作 截止到现在,代…...
每日一题(小白)暴力娱乐篇29
题目比较简单,主要是判断条件这块,一定要注意在奇数的位置和偶数的位置标记,若奇数位为奇数偶数位为偶数才能计数加一,否则都是跳过。 ①接收数据n ②循环n次,拆解n,每次拆解记录ans ③拆解n为若干次x&a…...
瀚天天成闯港交所上市:业绩波动明显,十分依赖少数客户和供应商
撰稿|张君 来源|贝多财经 近日,瀚天天成电子科技(厦门)股份有限公司(下称“瀚天天成”)递交招股书,报考港交所主板上市。据贝多财经了解,瀚天天成曾计划在上海证券交易所科创板上市࿰…...
全国产压力传感器常见的故障有哪些?
全国产压力传感器常见的故障如哪些呢?来和武汉利又德的小编一起了解一下,主要包括以下几类: 零点漂移 表现:在没有施加压力或处于初始状态时,传感器的输出值偏离了设定的零点。例如,压力为零时,…...
计算机视觉卷积神经网络(CNN)基础:从LeNet到ResNet
计算机视觉卷积神经网络(CNN)基础:从LeNet到ResNet 一、前言二、卷积神经网络基础概念2.1 卷积层2.1.1 卷积运算原理2.1.2 卷积核的作用与参数 2.2 池化层2.2.1 最大池化与平均池化2.2.2 池化层的优势与应用 2.3 全连接层2.3…...
在封装DLL时,避免第三方命名空间的依赖方法[PIMPL模式技术指南]
1. 概述 PIMPL(Pointer to IMPLementation)模式是C++中实现信息隐藏和二进制兼容性的重要设计范式,通过创建实现细节的私有封装层,有效隔离接口与实现。本文档详细阐述其核心原理、现代实现方式和典型应用场景。 2. 核心架构 2.1 经典结构 // 头文件(widget.h) class Wid…...
镜舟科技亮相 2025 中国移动云智算大会,展示数据湖仓一体创新方案
4月10-11日,2025 中国移动云智算大会在苏州金鸡湖国际会议中心成功举办。大会以“由云向智,共绘算网新生态”为主题,汇聚了众多行业领袖与技术专家,共同探讨了算力网络与人工智能的深度融合与未来发展趋势。 作为中国领先的企业级…...
通过Python实现定时重启H3C AP设备
一、背景 因为H3C的AP设备老化,网络出现高延迟、高丢包率,需要隔一段时间去重启AP后恢复。但是由于白天在使用无法进行重启,并且容易遗忘等用户反馈又太晚了,但是AC版本太老没有定时重启功能,于是通过Python做了自动重…...
火山RTC 4 音视频引擎 IRTCVideo,及 音视频引擎事件回调接口 IRTCVideoEventHandler
一、IRTCVideo、IRTCVideoEventHandler 音视频引擎 IRTCVideo,及 音视频引擎事件回调接口 IRTCVideoEventHandler 负责音视频管理、创建房间/获得房间实例 1、创建引擎、及事件回调示例 如: void VideoConfigWidget::initRTCVideo() {m_handler.res…...
Matlab 考虑电机激励力的整车垂向七自由度模型参数研究
1、内容简介 Matlab 201-考虑电机激励力的整车垂向七自由度模型参数研究 可以交流、咨询、答疑 2、内容说明 略 3、仿真分析 略 4、参考论文 略...
Matlab 三容水箱系统故障诊断算法研究
1、内容简介 Matlab 190-三容水箱系统故障诊断算法研究 可以交流、咨询、答疑 2、内容说明 略 其次,对 DTS200 三容水箱系统进行机理建模,可分为对象建模和故障 建模,搭建了水箱系统的 SIMULINK 模型并建立了基于 Taylor 展开及 T-…...
Mac学习使用全借鉴模式
Reference https://zhuanlan.zhihu.com/p/923417581.快捷键 macOS 的快捷键组合很多,相应的修饰键就多达 6 个(Windows 系统级就 4 个): Command ⌘ Shift ⇧ Option ⌥ Control ⌃ Caps Lock ⇪ Fn 全屏/退出全屏 command con…...
Arrays.asList() 隐藏的陷阱
在Java中,我们经常需要将数组转换为List来方便地进行操作。Arrays.asList()方法是一种常见的方式,但是它存在一个不太常见但需要注意的坑。 本文将深入探讨Arrays.asList()的使用,揭示其中的陷阱,并提供解决方案。 1、Arrays.as…...
Cables 现已正式启动积分计划 Alpha 阶段,开放早期白名单申请
Cables 现已正式启动积分计划,并开放白名单抢先体验通道,这标志着 Cables 平台进入第一阶段的部署,旨在为外汇及现实世界资产(RWAs)构建首个集成的流动性质押与永续期货 DEX。 Cables 平台的设计目标是通过单一系统实…...
Spring Cloud 远程调用
4.OpenFeign的实现原理是什么? 在使用OpenFeign的时候,主要关心两个注解,EnableFeignClients和FeignClient。整体的流程分为以下几个部分: 启用Feign代理,通过在启动类上添加EnableFeignClients注解,开启F…...
STM32单片机中EXTI的工作原理
目录 1. EXTI概述 2. EXTI的组成部分 3. 工作原理 3.1 引脚配置 3.2 中断触发条件 3.3 中断使能 3.4 中断处理 4. 使用示例 5. 注意事项 结论 在STM32单片机中,EXTI(外部中断)是一种用于处理外部事件的机制,能够提高对硬…...
排序算法详细介绍对比及备考建议
文章目录 排序算法对比算法逐一介绍1. 冒泡排序(Bubble Sort)2. 选择排序(Selection Sort)3. 插入排序(Insertion Sort)4. 希尔排序(Shell Sort)5. 归并排序(Merge Sort&…...
网页布局思路
一、布局思路 1,确定页面的版心(可视区) 2、分析页面中的行模块,以及每个行模块中的列模块。(页面布局第一准则) 3、一行中的列模块经常用浮动布局,先确定每个列的大小,之后确定列的位置(页面…...
CloudFlare Page 如何和 GitHub 创建连接
CloudFlare Page 能够对前端项目进行构建。 他们能支持从 GitHub 上直接拉取代码。 如果 GitHub 上的代码仓库不存在的话,首先需要创建一个连接才可以。 随后会要求登录 GitHub,然后可以在希望访问的组织中进行选择。 随后同意访问赋予权限即可。 Clou…...
Python爬虫第13节-解析库pyquery 的使用
目录 前言 一、pyquery 初始化 1.1 字符串初始化 1.2 URL 初始化 1.3 文件初始化 二、基本 CSS 选择器 三、pyquery 查找节点 3.1 子节点 3.2 父节点 3.3 兄弟节点 四、遍历 五、获取信息 5.1 获取属性 5.2 获取文本 六、节点操作 6.1 addClass 和 removeClass…...
【学习笔记】头文件中定义函数出现重复定义报错
目录 错误复现原因解决方案inlinestatic 扩展参考 错误复现 现在有一个头文件 duplicate_define.h 和两个源文件 duplicate_define_1.cpp 和 duplicate_define_2.cpp。 两个源文件都引入了头文件 duplicate_define.h,且在各自的函数中调用了定义在头文件中的全局函…...
Java 中的零拷贝技术:提升性能的利器
Java 中的零拷贝技术:提升性能的利器 在现代高性能应用中,数据传输的效率至关重要。传统的 I/O 操作通常涉及多次数据拷贝,这会导致性能瓶颈。而零拷贝(Zero-Copy)技术通过减少数据拷贝次数,显著提升了 I/…...
JavaScript:基本语法
今天我要介绍的新知识点内容为:JavaScript的基本语法以及使用说明。 首先我们先了解一下JS(JavaScript简称)是什么以及怎么使用JS: 介绍:JavaScript(JS)是一门弱类型的语言,用于给HTML页面上添加动态效果…...
Matlab 三维时频图
1、内容简介 Matlab 202-三维时频图 可以交流、咨询、答疑 2、内容说明 略 3、仿真分析 略 4、参考论文 略...
MySQL中动态生成SQL语句去掉所有字段的空格
在MySQL中动态生成SQL语句去掉所有字段的空格 在数据库管理过程中,我们常常会遇到需要对表中字段进行清洗和整理的情况。其中,去掉字段中的空格是一项常见的操作。当表中的字段数量较少时,我们可以手动编写 UPDATE 语句来处理。但如果表中包…...
NO.91十六届蓝桥杯备战|图论基础-图的存储和遍历|邻接矩阵|vector|链式前向星(C++)
图的基本概念 图的定义 图G是由顶点集V和边集E组成,记为G (V, E),其中V(G)表⽰图G中顶点的有限⾮空集;E(G)表⽰图G中顶点之间的关系(边)集合。若 V { v 1 , v 2 , … , v n } V \left\{ v_{1},v_{2},\dots,v_{n} …...
树、二叉树、二叉查找树、AVL 树及红黑树的深入解析
树、二叉树、二叉查找树、AVL 树及红黑树的深入解析 1 .树的基本知识1.1 树的定义1.2 基本术语和概念1.3 常见树的结构1.4 树的遍历(取决于什么时候访问根节点) 2 二叉树2.1 二叉树的定义2.2二叉树与度为2的树的区别2.3二叉树的性质2.4 二叉树分类 3 红黑…...
BUUCTF-web刷题篇(21)
30.hark world 判断注入类型: 输入1报错提示bool(false)可知是字符型的布尔注入(盲注) 尝试万能密码 1 or 11 已检测SQL注入,猜测某些关键词或者字符被过滤。 使用FUZZ字典爆破...