敏捷测试文化的转变
敏捷文化是敏捷测试转型的基础,只有具备敏捷文化的氛围,对组织架构、流程和相关测试实践的调整才能起作用。在前面的敏捷测试定义中,敏捷测试是遵从敏捷软件开发原则的一种测试实践,这意味着敏捷的价值观。
此外,从传统测试到敏捷测试的文化转变还包括组织文化转变、管理文化转变,以及在转变过程中可能遇到的障碍等。
一、组织文化的转变
小心变成“质量警察
在传统测试中,测试部门或测试团队是产品发布到产品生产前的最后一道屏障,因此,测试人员在项目中充当了“质量警察”的角色。在项目测试过程中,项目管理办公室或项目经理会咨询测试经理的意见,判断产品是否达到了上线的条件和要求,测试经理的反馈将影响项目管理层的上线决策。
而在敏捷测试中,测试人员不再被赋予这样的权力和职责,项目的发布与否也不再依赖某个人或某个组织,而是整个敏捷团队的决策。因此,测试人员必须转变思想,不要抱有测试人员是决定项目上线的判官这一心理,而是要从实际出发,根据敏捷测试的实践要求进行测试。
保持可持续的速度,而不是在项目的最后阶段进行快速激烈的测试
在传统项目中,测试发生在产品上线前的最后阶段,所以经常看到测试人员在上线前的一段时间非常繁忙,压力很大,甚至经常加班完成测试任务,而组织也默认这种加班文化,认为牺牲项目成员的休息时间来“死守”上线时间也无可厚非。可想而知,测试人员在极度疲惫的情况下,测出来的质量是无法保证的。
而在敏捷测试中,长期加班的文化是不被认可的。在敏捷中,判断团队能否加班的原则之一就是团队能否保持可持续的速度。如果只是偶尔加班处理紧急的事情,不影响整体的交付速度,那无伤大雅;而如果是长期加班使测试人员处于一种疲劳、沮丧、情绪低落的状态,如何还能保证可持续的速度呢?因此,传统模式的最后阶段被切分为不同的迭代片段,并且融入每次的sprint中,这样才能使测试工作趋于平均,从而保证可持续的速度。
合作伙伴式的客户关系
在传统的测试中,客户与测试人员是甲方与乙方的关系,很多测试人员都不愿意主动和客户进行交流,遇到需要澄清的问题不是直接找客户咨询,而是找开发人员或业务分析师,然后再让开发人员或业务分析师与客户沟通,从而失去了掌握第一手资料的机会,也增加了沟通成本。
而敏捷测试中,客户与测试人员不再是甲方与己方的关系,而是合作伙伴关系,大家拥有共同的目标,那就是使项目获得成功,所以客户会更频繁地参与项目各方面,了解客户需要什么、关注什么、担心什么,从而更好地开展测试工作。
二、管理文化的转变
每个团队都有能力做出决策
在传统测试中,决策往往取决于项目中的少数人,如项目经理或项目管理办公室(PMO)等,但是在敏捷团队中,已经没有项目经理或项目管理办公室这类角色,那么谁来做决策呢?答案是团队。
每个团队都有能力做出决策,这个能力有两层含义:一是外部相关,是指组织或公司需要赋权给团队,让团队有权利自己做出相关的决策;二是内部相关,是指团队必须有能力判断并做出正确的决策。
提倡免责文化
在传统测试中,我们经常会看到版本上线后的回顾会变成了追责会,会议的重点是讨论上线后的缺陷应该谁来负责?需求部门把责任推给开发部门,开发部门把责任推给测试部门,测试部门把责任推给需求部门,大家不是在讨论下次如何避免再出现同样的问题而是想方设法把责任推给别人。出现这种情况的原因在于很多组织的绩效考核都与上线后的缺陷挂钩,大家为了各自的利益而拼命“甩锅”。
无论是敏捷还是 DevOps 领域都提倡免责文化,也就是不把犯错误和绩效考核挂钩,原因在于敏捷是基于经验的,在敏捷的环境中,我们需要保持不断创新、不断尝试的勇气,而创新尝试具有很高的风险。在这种情况下,如果还是把失败与绩效挂钩,就会打击尝试者的积极性,久而久之,大家宁愿墨守成规,也不愿意尝试创新,整个组织或项目最终将失去不断自我改进的活力。所以,在敏捷中不但应该不怕犯错,而且应该尽早犯错以便及时调整后续策略。
管理层需要具备敏捷知识
有些领导觉得敏捷是员工应该学习的内容,因为他们是具体工作的人,而管理层没必要学习,这其实是一个错误的想法。Richard Knaster和 Dean Leffngwell 在《SAFe4.0 精粹:运用规模化敏捷框架实现精益软件与系统工程》中提道:“企业的领导者必须拥抱'精益-敏捷’思维。如果领导者只是通过语言而不是自身的行动来支持'精益-敏捷’思维,人们很快就会认识到他们不是在全心全意地推动变革。他们必须知晓方法,强调终身学习,需要用新的行为践行这些价值观、原则和实践。所以在规模化敏捷 SAFe 的系列培训课程中,专门有一门课程叫作 LeadingSAFe,主要对管理层和主管级别以上的领导进行培训。”管理层必须知道与敏捷过程相关的度量标准,如Scrum 中使用Sprint和 Release 燃尽图跟踪用户故事的完成情况,同时还需要通过分享他们的业务观点来鼓励团队将投资回报率(ROI)最大化。
总之,管理层如果具备敏捷知识,并且积极支持和践行敏捷,那么对敏捷测试的转型将会带来非常大的帮助,也会大大提高敏捷测试转型的成功率。
三、文化转型的障碍及解决办法
任何转型都不是一帆风顺的,可以预料,在转型实施的过程中一定会碰到各种障碍以下是部分可能存在的障碍和解决方法。
组织变化带来的恐惧
在敏捷环境中,组织架构不再与传统的职能型部门架构一样,测试人员也不再属于测试部门,这迫使测试人员离开了熟悉的组织环境。新环境会让测试人员感到陌生,从而令他们感到恐惧,例如,以前测试人员碰到问题可以直接向测试部门经理反映,很多事情测试部门经理会帮忙协调和处理,而在新环境中,没有这样的角色可以为测试人员提供帮助,很多事情可能需要他们自己协调团队解决,这种改变会让测试人员无所适从,对未来感到害怕,从而迷失自我。
要移除这个障碍有以下两种解决方法。一是在Sprint 回顾会上正面讨论测试人员的恐惧,团队集思广益,共同解决。要让测试人员知道,如果遇到问题,团队一定不会袖手旁观,从而消除测试人员的恐惧感。二是组织需要规划和制订属于测试人员的职业发展路线,让测试人员能够清晰地知道未来的发展方向,减少其对未来的迷茫感。
缺乏对敏捷概念的基本认识
许多测试人员没有接触过敏捷,也没有参加过相应的敏捷知识培训。不少企业在安排敏捷培训时往往会重点安排开发人员参加,而忽略了测试人员。他们天真地认为敏捷开发,顾名思义,是开发人员的事,测试人员只需和以前一样编写测试用例、点击鼠标执行测试即可。所以,当突然被安排了某个敏捷项目时,一方面因为自身对敏捷流程不熟悉,另一方面项目也没有指南可以帮助克服角色之间的文化差异,测试人员最终无法跟上整个项目的开发节奏和进度。
要移除这些障碍可以参考以下两种解决方法:一为测试人员提供敏捷相关知识的培训,让测试人员至少知道什么是敏捷测试,以及敏捷开发和传统开发的差异等基础知识,一旦测试人员了解相关知识,就会消除恐惧,并且还会逐渐适应这样的环境;二是敏捷导师在辅导团队的时候,需要这些没有敏捷测试经验人员多加关注,耐心的引导和教导他们,让他们能够在相对宽松的实战项目中逐渐进步,提升敏捷知识。
无法满足更高的技能要求
在传统职能型部门,测试人员的任务相对单一,只需要做好相关的测试工作即可、而在敏捷跨职能团队中,测试人员的任务并不局限在测试范畴,还有可能要处理任何对团队有益、能帮助团队更快速交付的活动,如帮助开发人员与业务部门澄清需求、参加开发人员的代码评审等。
这些工作都需要测试人员拥有除测试技能外的更广泛的技能,如代码阅读能力、需求沟通能力等,对测试人员的综合能力要求变得更高了。而这些对于以前只有单一技能的测试人员来说,在短时间内想要提高的难度很大。
要移除这个障碍可以参考如下两种解决方法。一是可以成立测试实践社区,让测试员能找到组织,在组织中,大家互相学习,共同进步,从而提升测试人员的技能;二是对于部分技能要求较高的岗位,可以考虑从外部招聘合适的人员来补充团队力量。
总体来说,企业需要为团队的测试人员给予更多的培训和指导,帮助他们尽快学习敏捷相关知识,克服因为不懂敏捷而带来的恐惧,尽快完成角色转换,以适应项目需要。
阅读后若有收获,不吝关注,分享,在看等操作!!!
相关文章:
敏捷测试文化的转变
敏捷文化是敏捷测试转型的基础,只有具备敏捷文化的氛围,对组织架构、流程和相关测试实践的调整才能起作用。在前面的敏捷测试定义中,敏捷测试是遵从敏捷软件开发原则的一种测试实践,这意味着敏捷的价值观。 此外,从传…...
深度学习:从原理到搭建基础模型
引言: 深度学习为什么火? 深度学习在处理复杂的感知和模式识别任务方面展现出了前所未有的能力。以图像识别为例,深度学习模型(如卷积神经网络 CNN)能够识别图像中的各种物体、场景和特征,准确率远超传统的计算机视觉方法。 当然这之中也还因为 大数据时代的推动(随着…...
MySQL和HBase的对比
Mysql :关系型数据库,主要面向 OLTP ,支持事务,支持二级索引,支持 sql ,支持主从、 Group Replication 架构模型(此处以 Innodb 为例,不涉及别的存储引擎)。 HBase &am…...
Gateway Timeout504 网关超时的完美解决方法
引言 在Web开发中,遇到HTTP状态码504(Gateway Timeout)是相当常见的。这个状态码表示前端服务器(如负载均衡器或代理服务器)作为网关工作时,在尝试访问后端服务器处理请求时未能及时得到响应。本文将探讨导…...
【探花交友】day03—MongoDB基础
目录 课程介绍 1、通用设置 1.1 需求分析 1.2 查询通用设置 1.2 陌生人问题 1.3 通知设置 1.4 黑名单管理 2、MongoDB简介 1.1、MongoDB简介 1.2、MongoDB的特点 1.3 数据类型 3、MongoDB入门 2.1、数据库以及表的操作 2.2、新增数据 2.3、更新数据 2.4、删除数…...
总结-常见缓存替换算法
缓存替换算法 1. 总结 1. 总结 常见的缓存替换算法除了FIFO、LRU和LFU还有下面几种: 算法优点缺点适用场景FIFO简单实现可能移除重要数据嵌入式系统,简单场景LRU局部性原理良好维护成本高,占用更多存储空间内存管理,浏览器缓存L…...
宏集eX710物联网工控屏在石油开采机械中的应用与优势
案例概况 客户:天津某石油机械公司 应用产品:宏集eX710物联网工控屏 应用场景:钻井平台设备控制系统 一、应用背景 石油开采和生产过程复杂,涵盖钻井平台、采油设备、压缩机、分离器、管道输送系统等多种机械设备。这些设备通…...
【社区投稿】自动特征auto trait的扩散规则
自动特征auto trait的扩散规则 公式化地概括,auto trait marker trait derived trait。其中,等号右侧的marker与derived是在Rustonomicon书中的引入的概念,鲜见于Rust References。所以,若略感生僻,不奇怪。 marker …...
【MySQL】第一弹----库的操作及数据类型
笔上得来终觉浅,绝知此事要躬行 🔥 个人主页:星云爱编程 🔥 所属专栏:MySQL 🌷追光的人,终会万丈光芒 🎉欢迎大家点赞👍评论📝收藏⭐文章 一、SQL 语句分类 DDL:数据定…...
【服务器主板】定制化:基于Intel至强平台的全新解决方案
随着数据处理需求不断增长,服务器硬件的发展也在持续推进。在这一背景下,为用户定制了一款全新的基于Intel至强平台的服务器主板,旨在提供强大的计算能力、优异的内存支持以及高速存储扩展能力。适用于需要高性能计算、大规模数据处理和高可用…...
Flutter路由工具类RouteUtils,可二次开发,拿来即用
一、RouteUtils路由核心类 /*** 路由封装*/ class RouteUtils {RouteUtils._();static final navigatorKey GlobalKey<NavigatorState>();// App 根节点Contextstatic BuildContext get context > navigatorKey.currentContext!;static NavigatorState get navigato…...
报错:No module named ‘pygeohash‘
如果你遇到这个错误: platform... using builtin-java classes where applicableTraceback (most recent call last):File "/home/spark-shell/AppLogDWD02.py", line 4, in <module>from pygeohash import encodeModuleNotFoundError: No module …...
SQL中的TRIM用法
TRIM 是 SQL 中用于去除字符串两端(左侧和右侧)的空格或特定字符的函数。这个函数常用于清理数据中的无效空白字符,尤其是在从外部系统导入数据时,常常会遇到数据两端有不必要的空格,使用 TRIM 可以去除这些多余的字符…...
AIGC在电影与影视制作中的应用:提高创作效率与创意的无限可能
云边有个稻草人-CSDN博客 目录 引言 一、AIGC在剧本创作中的应用 1.1 剧本创作的传统模式与挑战 1.2 AIGC如何协助剧本创作 1.3 未来的剧本创作:AI辅助的协同创作 二、AIGC在角色设计中的应用 2.1 传统角色设计的挑战 2.2 AIGC如何协助角色设计 三、AIGC在…...
【蓝桥杯——物联网设计与开发】拓展模块5 - 光敏/热释电模块
目录 一、光敏/热释电模块 (1)资源介绍 🔅原理图 🔅AS312 🌙简介 🌙特性 🔅LDR (2)STM32CubeMX 软件配置 (3)代码编写 (4&#x…...
深入探索openEuler Kernel:操作系统的心脏
title: 深入探索openEuler Kernel:操作系统的心脏 date: ‘2024-12-28’ category: blog tags: openEulerLinux Kernel操作系统性能优化 sig: Kernel archives: ‘2024-12’ author:way_back summary: openEuler Kernel作为openEuler操作系统的核心,扮演…...
Unity3d UGUI如何优雅的实现Web框架(Vue/Rect)类似数据绑定功能(含源码)
前言 Unity3d的UGUI系统与Web前端开发中常见的数据绑定和属性绑定机制有所不同。UGUI是一个相对简单和基础的UI系统,并不内置像Web前端(例如 Vue.js或React中)那样的双向数据绑定或自动更新UI的机制。UGUI是一种比较传统的 UI 系统ÿ…...
【JavaEE进阶】@RequestMapping注解
目录 📕前言 🌴项目准备 🌲建立连接 🚩RequestMapping注解 🚩RequestMapping 注解介绍 🎄RequestMapping是GET还是POST请求? 🚩通过Fiddler查看 🚩Postman查看 …...
Vue.js组件开发-自定义文件上传
在Vue.js中开发自定义文件上传组件,创建一个独立的Vue组件来处理文件选择和上传的逻辑。这个组件可以包含文件选择器、上传进度条、上传状态提示等元素,并根据需要进行自定义。 示例: <template><div class"file-upload"…...
CES Asia 2025的低空经济展区有哪些亮点?
CES Asia 2025(赛逸展)的低空经济展区有以下亮点: • 前沿科技产品展示: 多款新型无人机将亮相,如固定翼无人机和系留无人机的最新型号,其在监测、救援和货物运输等方面功能强大。此外,还有可能…...
公路边坡安全监测中智能化+定制化+全面守护的应用方案
面对公路边坡的安全挑战,我们如何精准施策,有效应对风险?特别是在强降雨等极端天气下,如何防范滑坡、崩塌、路面塌陷等灾害,确保行车安全?国信华源公路边坡安全监测解决方案,以智能化、定制化为…...
Arduino 驱动GY-271(HMC5883L)三轴磁场模块
Arduino 驱动GY-271(HMC5883L)三轴磁场模块 简介特征参数原理图寄存器通信测量步骤接线主要代码结果 简介 HMC5883L 是一种表面贴装的高集成模块,并带有数字接口的弱磁传感器芯片,应用于低成本罗盘和磁场的检测领域。HMC5883L 包…...
ImportError: cannot import name ‘einsum‘ from ‘einops‘
报错: from einops import einsum ImportError: cannot import name einsum from einops 测试代码: python -c "from einops import einsum" 解决方法: pip uninstall einops pip install einops Successfully installed ein…...
GitLab安装及使用
目录 一、安装 1.创建一个目录用来放rpm包 2.检查防火墙状态 3.安装下载好的rpm包 4.修改配置文件 5.重新加载配置 6.查看版本 7.查看服务器状态 8.重启服务器 9.输网址 二、GitLab的使用 1.创建空白项目 2.配置ssh 首先生成公钥: 查看公钥 把上面的…...
攻防世界web第二题unseping
这是题目 <?php highlight_file(__FILE__);class ease{private $method;private $args;function __construct($method, $args) {$this->method $method;$this->args $args;}function __destruct(){if (in_array($this->method, array("ping"))) {cal…...
Bitmap(BMP)图像信息验证
Bitmap BMP图像信息验证 参考文章例程目的一、Bitmap图像结构二、获取文件大小三、获取应用程序路径四、获取目录中所有内容(包括子目录)五、Bitmap图像信息验证六、主函数测试七、测试结果 参考文章 在Windows下C语言获取当前应用程序运行路径并获取指定目录下所有文件Bitmap…...
Faster R-CNN
文章目录 摘要Abstract1. 引言2. 框架2.1 RPN2.1.1 网络结构2.1.2 损失函数2.1.3 训练细节 2.2 训练过程 3. 创新点和不足3.1 创新点3.2 不足 参考总结 摘要 Faster R-CNN是针对Fast R-CNN缺点改进的目标检测模型。为了解决候选区域生成耗时长的问题,Faster R-CNN提…...
MySQL数据库锁
MySQL中读写不互斥(前提是没有使用串行化隔离级别),但是写写操作要互斥才行,MySQL中使用锁机制来实现写写互斥。 按照锁的粒度可以分为:全局锁、表锁、行锁以及其他位于二者之间的间隙锁。 全局锁 锁定整个数据库&…...
树莓派A+安装lnmp-第一步,安装mariadb
20:26 2024/12/27 第一件事情,当然是超频!!! raspi-config 4 Performance Options,选择P1 Overclock,可配置超频 不要贪心,选择900就可以!!! rootpia4:~#…...
C++:单例模式
创建自己的对象,同时确保对象的唯一性。 单例类只能有一个实例☞静态成员static☞静态成员 必须类外初始化 单例类必须自己创建自己的唯一实例 单例类必须给所有其他对象提供这一实例 静态成员类内部可以访问 构造函数私有化☞构造函数私有外部不能创建&#x…...
【数据结构】数据结构整体大纲
数据结构用来干什么的?很简单,存数据用的。 (这篇文章仅介绍数据结构的大纲,详细讲解放在后面的每一个章节中,逐个击破) 那为什么不直接使用数组、集合来存储呢 ——> 如果有成千上亿条数据呢ÿ…...
网页数据的解析提取之Beautiful Soup
前面博客介绍了正则表达式的相关用法,只是一旦正则表达式写得有问题,得到的结果就可能不是我们想要的了。而且每一个网页都有一定的特殊结构和层级关系,很多节点都用id或 class 作区分所以借助它们的结构和属性来提取不也可以吗? 本篇博客我…...
Ai写作人工智能官网模板源码
Mortal是响应式的Tailwind CSS 模板,适用于AI写作和文案智能生成网站。 可用于撰写博客内容、数字广告文案、技术写作、SEO内容、登陆页面文案、社交媒体内容、电子邮件营销、网站文案等。使用世界上流行的响应式CSS框架Tailwind CSS、HTML5、CSS3 和 Javascript构…...
VSCode 插件开发实战(七):插件支持了哪些事件,以及如何利用和监听这些事件
前言 VSCode 作为现代开发者的首选编辑器之一,其核心优势在于其高度可扩展性。通过自定义插件,开发者可以根据自己的需求对编辑器进行功能扩展和优化。在这些插件开发过程中,事件处理和监听机制尤为重要,它们允许插件在特定事件发…...
现货量化合约跟单系统开发策略指南
随着加密货币市场的日益发展,量化交易和合约跟单已经成为了投资者在市场中获取稳定收益的重要手段。现货量化合约跟单系统作为一种自动化交易工具,可以帮助用户自动执行交易策略,同时也能跟随成功的交易者进行复制交易,从而降低投…...
Flink的Watermark水位线详解
一、Flink的时间语义 Flink有如下三种时间语义: Flink的三种时间语义-CSDN博客 在实际应用中,一般会采用事件时间语义。而正如前面所说的,事件时间语义需要等窗口的数据全部到齐了,才能进行窗口计算。那么,什么时候数…...
香港 GPU 服务器托管引领 AI 创新,助力 AI 发展
在当今科技飞速发展的时代,中国人工智能市场呈现出蓬勃发展的态势,对高性能计算资源的需求日益增长,而香港 GPU 服务器托管服务凭借其卓越的优势,成为众多企业的首选,同时其三地灾备方案更是为企业数据安全和业务连续性…...
FFmpeg来从HTTP拉取流并实时推流到RTMP服务器
当使用FFmpeg来从HTTP拉取流并实时推流到RTMP服务器时,你可以使用以下命令: ffmpeg -i http://输入流地址 -c:v copy -c:a copy -f flv rtmp://RTMP服务器地址/应用名称/流名称 这是一个基本的命令示例,其中: - -i http://输入流地…...
vue 集成 webrtc-streamer 播放视频流 - 解决阿里云内外网访问视频流问题
资料: 史上最详细的webrtc-streamer访问摄像机视频流教程-CSDN博客 webrtc目录 前端集成 html文件夹里的webrtcstreamer.js,集成到前端,可以访问webrtc,转换rtsp为webrtc视频流,在前端video中播放 <videoref&quo…...
Spring创建异步线程池方式
在Java 11中,可以通过多种方式创建异步线程池,包括使用原生的ExecutorService和Spring的异步支持(如Async注解结合线程池)。以下是具体实现方式。 方式 1:使用原生ExecutorService Java 11 的ExecutorService提供灵活…...
《PHP MySQL 插入数据》
《PHP MySQL 插入数据》 介绍 PHP是一种广泛使用的服务器端脚本语言,而MySQL是一种流行的关系型数据库管理系统。在Web开发中,经常需要将用户输入的数据存储到数据库中。本文将详细介绍如何使用PHP和MySQL实现数据的插入操作。 环境准备 在开始之前&…...
2022博客之星年度总评选开始了
作者简介:陶然同学 专注于Java领域开发 熟练掌握Java、js等语言的“Hello World” CSDN原力计划作者、CSDN内容合伙人、Java领域优质作者、Java领域新星作者、51CTO专家、华为云专家、阿里云专家等 🎬 陶然同学🎥 由 陶然同学 原创&#…...
0055. shell命令--useradd
目录 55. shell命令--useradd 功能说明 语法格式 选项说明 选项 退出值 相关文件 /etc/passwd /etc/shadow /etc/group /etc/gshadow /etc/skel/ /etc/login.defs /etc/default/useradd 实践操作 注意事项 55. shell命令--useradd 功能说明 useradd 命令是 Lin…...
HTML5适配手机
要使 HTML5 网站适配手机设备,您可以遵循以下几个步骤和最佳实践: 1. 使用视口(Viewport) 在 HTML 文档的 <head> 部分添加视口元标签,以确保页面在移动设备上正确缩放和显示: <meta name"…...
网络安全 | 5G网络安全:未来无线通信的风险与对策
网络安全 | 5G网络安全:未来无线通信的风险与对策 一、前言二、5G 网络的技术特点2.1 超高速率与低延迟2.2 大容量连接与网络切片 三、5G 网络面临的安全风险3.1 网络架构安全风险3.2 设备终端安全风险3.3 应用场景安全风险3.4 用户隐私安全风险 四、5G 网络安全对策…...
Markov test笔记
补充知识 来源于数学之美第五章: 到了 19 世纪,概率论的发展从相对静止的随机变量的研究发展到随机变量的时间序列 ( s 1 , s 2 , s 3 , … ) (s_1, s_2, s_3, \dots) (s1,s2,s3,…),即随机过程(动态的)。这在…...
docker 搭建集群
准备3台机器: #dockermaster 192.168.31.150 sudo hostnamectl set-hostname dockermaster #初始化主节点 docker swarm init --advertise-addr 192.168.31.150 #查看集群是否搭建成功 docker node ls #dockernode1 192.168.31.151 sudo hostnamectl set-hostname …...
C# WPF读写STM32/GD32单片机Flash数据
1.安装jlink 下载你需要的Jlink版本 JLink-Windows-V792k-x86-64 JLink-Windows-V810k-x86-64 https://download.csdn.net/download/hmxm6/90178195 2.Visual Studio创建WPF项目 如果没有这个选项请看 https://blog.csdn.net/hmxm6/article/details/132914337 创建完…...
[图形渲染]【Unity Shader】【游戏开发】 Shader数学基础17-法线变换基础与应用
在计算机图形学中,法线(normal) 是表示表面方向的向量。它在光照、阴影、碰撞检测等领域有着重要作用。本文将介绍如何在模型变换过程中正确变换法线,确保其在光照计算中的正确性,特别是法线与顶点的变换问题。 1. 法线与切线的基本概念 法线(Normal Vector) 法线(或…...
MySQL外键类型与应用场景总结:优缺点一目了然
前言: MySQL的外键简介:在 MySQL 中,外键 (Foreign Key) 用于建立和强制表之间的关联,确保数据的一致性和完整性。外键的作用主要是限制和维护引用完整性 (Referential Integrity)。 主要体现在引用操作发生变化时的处理方式&…...