聊聊极限编程与测试启发

news2024/11/24 1:00:48

这是鼎叔的第六十五篇原创文章。行业大牛和刚毕业的小白,都可以进来聊聊。

欢迎关注本公众号《敏捷测试转型》,星标收藏,大量原创思考文章陆续推出。

继续聊聊著名的敏捷研发框架:极限编程。

极限编程(Extreme Programming,XP)是由Kent Beck在1996年提出的一种软工工程方法学。XP作为最富有成效的方法学之一,相对于传统工程方法,更强调可适应性而不是可预测性。软件需求的不断变化是难以避免的,主动适应变化才是更加现实,更加具有竞争力的态度。

对极限编程理论的理解

XP是一种软件开发风格,专注于编程技术,清晰沟通还有团队协作的实践。XP是始终让客户驱动系统的内容,由团队驱动开发的过程,其工作范式是保持清醒,适应变化

XP致力于解决敏捷软件开发中的所有风险,包括延迟、取消、系统恶化,高缺陷率,业务误解,需求变更,人员流动等。

XP要求你抛弃旧的低效技术和习惯,按照你对团队共同目标做出的贡献来评价自己。

极限编程的价值观和核心实践

XP的基础价值观是加强交流、从简单做起、寻求反馈和勇于实事求是。它采用近似螺旋式的轻量级开发方法,把复杂开发过程分解为一个个相对比较简单的小周期,帮助客户清楚地了解开发进度和待解决的问题,并及时调整。

XP要求遵循的13条核心实践是:团队协作(Whole Team)、规划游戏(the Planning Game)、结对编程(Pair Programming)、测试驱动开发(Testing-Driven Development),重构(Refactoring)、简单设计(Simple Design)、代码集体所有权(Collective Code Ownership)、持续集成(Continuous Integration)、客户测试(Customer Test)、小型发布(Small Release)、40小时工作制(40-hour Week)、编码规范(Code Standard)和系统隐喻(System Metaphor)。如图2-2所示。

XP推崇开放式的工作环境,把客户卷入开发队伍之中,强调频繁测试不断整合的价值,希望尽早交付简单产品给用户以获得反馈。XP方法比较适合小团队的开发实践。

价值观是普适的,实践是基于场景的,那连接两者的桥梁则是原则

XP的原则

一 人性化,在开发中应满足一些人性的需求。软件是由人来开发的,非人性化的管理过程会付出高昂的代价,比如导致人员更替的成本,失去创新的机会。优秀的开发者需要基本的安全感,成就感,归属感,亲切感和成长。

XP中的限制工作时间就是为了给非工作场合的人性化需求挪出时间,从而提高工作时间内的个人贡献。总是牺牲个人需求来满足团队需求也是不可取的,伟大的团队在建立互相信任的关系时,让每个成员可以更加自我。

二 经济学。经济学上影响开发的两个方面是金钱的时间价值(今天的一块钱比明天的一块钱更加值钱),团队和系统的可选择价值(能适应未来变化的系统更有价值),必须有人为所以这些买单,不在没有把握的地方投资。

XP实践应让所有成员和客户都获益,才算是成功的,比如代码重构,优化命名和自动化测试。

三 改进工作,而不是等待完美。“最好”是“足够好”的敌人,软件开发的卓越是通过改进达到的。

四 多样性。想法越多,机会越多。关键的困难问题能用几种不同的方法解决。

五 反省。不要试图掩盖错误,反省后紧跟行动。

六 流。通过参与软件开发的所有活动来交付有价值软件的稳定流,这个流是连续的,通过频繁部署较小的增量来实现。

七 机遇。有意识地学会把问题变成机遇。

八 失败。当你不知道怎么做的时候,冒一点风险失败可能是通向成功的最短道路。

九 质量。项目不会因为接受低质量而加快速度,要求高质量通常导致更快的交付,并且让工程师感到自豪。

十 责任。责任不能被指派,只能被心甘情愿的接受,同时还要接受相应的实践,责任和权力需要同时承担。

读者可以参阅Kent Beck和Cynthia Andres的《解析极限编程——拥抱变化》

下面我们从测试角度谈谈有哪些主要的启发。

测试启发

一、将业务代表或用户代表卷入到各类测试活动中,越早越好。

充分利用有代表性的客户,帮助我们明确需求的质量要求及优先级,参与早期版本验收测试(尤其是MVP版本,即最小可行产品的版本),尽快反馈能代表用户声音的质量问题。

通过积极的交流,让客户代表非常清楚开发的进度、风险、待解决的质量问题以及背后的困难;同时开发团队也能及时响应商业变化,避免投资浪费。

二、共享代码所有权。

有些团队是比较抵触测试人员获得代码权限,甚至以安全为理由拒绝权限申请。我倾向于支持专职测试人员获得和开发同等的代码权限,至少是阅读和本地编译权限,便于测试人员进行代码理解,精准测试,尝试定位问题等技能。测试人员有机会和开发在同等的信息源上进行技术对话,甚至直接针对代码质量进行规范检查。

测试人员可以推动团队使用单一代码库,对临时分支生命周期进行度量,推动尽快关闭。

三、可持续的工作投入。

即不要长时间加班(工作时间超过40小时/周)。据我观察,一些加班严重的团队效率并不高,加班必要性不强,而每天真正高效的工作时间远远低于8小时,很多时间都被浪费或者拖延掉了。管理者也常陷入只看工时不看效率的低水平管理模式。

可持续的稳定工作时间,才能形成稳定的迭代会议节奏,和准确的工作量估算。团队处于比较松弛的迭代状态是持久健康的,这远比高承诺低交付要好。

在国家明令打击996的今天,企业管理者只能寄希望于法定工作时间内的稳定效率。

因此,如果出现大量加班现象,管理者和客户可以一起确定加班的原因,及时采取缓解措施,进行项目进度和资源的调整。

四、开放的工作空间。

最好15秒内能识别团队的信息工作空间。所有人在一个开放的空间办公(可以有一些小隔间做私人沟通用途),墙上有大白板贴有各种重要的提醒卡片,列出团队共同的目标和愿景,随时可以在白板上进行涂写讨论,甚至可以一起在休息间吃茶点交流。

成员需要团队感,而不是碎片人的感觉。

五、测试驱动开发TDD。

详细解读文章参考本公众号上一篇:聊聊测试驱动开发

XP将单元测试结合到它独特的螺旋式增量型开发过程中,鼓励开发人员先写验收测试通过的代码,再不断补充和重构代码内容,降低冗余代码,并努力保证测试代码的通过。这些测试代码就形成保障质量内建的安全网,同时确保了开发设计从简单开始演进,尽可能避免冗余设计。

对于测试人员,学习TDD的代码可以更好的理解开发人员的设计过程,以及单元测试的完成质量,同时可以把相关测试代码高频率地用于回归测试。多用单元测试替代目前的系统测试,在降低冗余的同时,还能提升根源分析的能力。

对于架构师,应习惯利用测试代替规格说明和解释,并对系统治而分之。

六、结对编程对质量有什么好处。

结对编程是XP实践中争议最大的一点,实施效果参差不齐。由于个人隐私空间被打破,第一次尝试结对编程的开发者通常不太适应,需要管理者加以推动。而且长时间结对很难保障,每天的结对时间通常建议控制在4小时以内。

从个人产出效率来说,结对编程并没有明显的优势,开始时甚至是下降的(因为同时要占用两个开发人员),随着配合越来越默契,结对编程的效率会提升。

但是从设计质量和代码质量角度来评估,结对编程效益明显,因为一个人员在主导编码时,另一个人会对他的设计思路、代码规范、测试质量做评估,及时指出了大部分的初级问题。同理,我们也鼓励测试人员和开发人员一起实践结对编程。

七、泰勒科学管理主义和TPS(丰田产品生产方法)

泰勒主义,把质量从工程中分离出来使得质量部门更像惩罚而不是建设性的。而TPS是把质量融入到工程每个角色和每个环节,强调控制在制品的最大数量,中间零件承载了上游是否稳定工作的信息。

为什么项目中本应该亲密合作的两个角色团队会产生对立?

我认为是,部分团队采用了敏捷原则中对自己有利的部分,而忽视了敏捷的其他重要价值观,沟通,one team,角色互补

部分团队没有学习敏捷,而是泰勒主义的中间人,没有定期停下来审视和集体改进,建设上下游的尊重融合。

八、迭代计划和估算

​用户故事的计划就像购买货物,价格就是估值,预算就是时间,尽量晚做出基于最佳信息的决定,降低质量并不会减少工作量。

大团队要缩小,就要学会把大问题转化为小问题,从而可维护,可追溯。为了提高团队的瓶颈吞吐率,尝试把约束转移到团队以外(这需要主管的认可),把推模式变为拉模式。

软件设计质量则依赖核心人员的本能,思考,经验。

九 合同。和客户签订可协商范围的合同,甚至尝试按次付费(有利于与客户的快速反馈),关注初次产生收益的周期,尽快对外呈现出产品优点。客户只为系统现在或将来功能制品付费,其他都是浪费。

有价值的项目文档应在开发完成后尽快完成,不能为了文档增加基本的开发周期。

十 最佳的面试方法:先让候选人和团队工作一天吧。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/717838.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

从腾讯、阿里、联想的ESG报告,看数字企业发展的「碳门槛」

从“互联网”到“数字化”,再到“ESG”。数字化不仅帮助企业打开了从传统到现代化的通路,也帮助企业打开了从无序到环保、通往低碳的大门。 作者|斗斗 编辑|皮爷 出品|产业家 一年一度的ESG报告披露正在来临。 腾讯发布2022年ESG(即“…

一天掌握latex论文编辑,从标题作者,段落,数学公式,图片,图表,到参考文献全流程

目录 以下是一个基于SCI模板的完整LaTeX论文示例,包含注释说明 1. 创建文档: 2. 标题和作者信息: 3. 段落和文本格式: 4. 列表: 5.图片和表格: 5.1插入图片 5.2 插入表格 5.2.1 示例1 :…

计算机组成原理基础复习题(无答案版)

本套题无答案,整理出来适合大家完成课堂学习后,边翻书边对照题目检索答案,加深印象。 目录 一、选择题 二、填空题 三、简答题 四、设计题 一、选择题 1、完整的计算机系统应包括( )。 A. 运算器、存储器和控制器…

【C#】医学检验系统(LIS)源码

一、医学检验系统(Laboratory Information Management System 简称:LIS)LIS是HIS系统的一个重要的组成部分,其主要功能是将检验的实验仪器传出的检验数据经分析后,生成检验报告,通过网络存储在数据库中&…

《操作系统》- 线程与进程

目录 一、进程的概念二、进程的结构和特征2.1 进程的结构2.2 进程的特征 三、线程的概念四、进程和线程比较五、线程的实现方式 一、进程的概念 程序放在磁盘上不叫做进程,只有运行起来之后才叫做进程,进程进程就是进行中的程序!一次运行就会…

spring boot security使用jwt认证

前言 在前面的几篇文章中: spring boot security快速使用示例 spring boot security之前后端分离配置 spring boot security自定义认证 spring boot security验证码登录示例 基本对常用的基于cookie和session的认证使用场景都已覆盖。但是session属于有状态认证&am…

GAMES101笔记 Lecture10 Geometry1 (Introduction)

目录 Application for Texture(纹理的应用)Environment Map(环境光贴图)Spherical Environment Map(球形环境光贴图)Cube Map(立方体贴图) Texture can affect shading!(纹理可以作用于着色)How to perturb the normal (in flatland)(如何计算法线如何变化呢?)Displ…

《AutoSar实战》读写DID之三:代码实现

文章目录 前言一、检查生成的接口以及数据类型1. 读DID函数接口生成2. 写DID函数接口生成3. 写NvM接口生成4. RAM数组生成 二、代码编写1. 读DID2. 写DID 总结 前言 本系列主要基于DaVinCi工具链来展开具体DID读写的配置以及最终实现。 DID读写功能实现流程包括如下几点&#…

行走江湖,一最多的行

本篇博客会讲解力扣“2643. 一最多的行”的解题思路,这是题目链接。 本题的思路是:从上到下遍历二维数组,统计每一行1的个数。使用ret数组的第一个元素维护1最多的行的下标,第二个元素维护最多的1的个数。若发现某一行的1的个数比…

kettle取昨天时间设置任意时间变量

文章目录 kettle取昨天时间&设置任意时间变量设置系统信息增加常量计算器设置变量 总结 kettle取昨天时间&设置任意时间变量 kettle 版本7.1,如下图所示: 所需要组件:1 获取系统信息; 2 增加常量; 3 计算器; 4设置变量 结果可以用于…

yolov8源码解读(part2: 检测,分割)

本文解读下图框中的detection部分 和 没有画出来的分割部分。 注意每个模块右上角的数字,它代表第几个模块, 现在检测和分割的输入都是15, 18, 21个模块的输出(图中圆圈处)。 在代码解读的时候会用[15,18,21]提示需要用到15, 18, 21个模块的输出。 yolov8的实例分割用了y…

Pandas包构建DataFrame的几种方式

1. Pandas Pandas是python的一个第三方包,是一个结构化数据工具集,能够更加灵活、快速的对数据进行清洗和处理,适用于单击大数据量的数据分析和数据开发 使用pandas包之前,首先安装 pip install -i https://pypi.tuna.tsinghua.…

【STM32】STM32G系列使用CORDIC模块加速计算

1.前言 STM32G431系列产品内置了CORDIC运算单元,可以用来加速数学计算,如三角函数、取模、开方等。适合大量数据进行相同的运算操作。配合DMA可以大大节省CPU计算开销。 2.CubeMX配置 使用CORDIC模块无需配置参数,若采用DMA方式则只需配置…

JavaWed第三章:JavaScript的全面知识

目录 前言 一.JavaScript的简介 💖概念 💖学习内容 二.JavaScript的引入方式 💖内部脚本 💖外部脚本 三.JavaScript的基础语法 💖语法的书写 💖变量 ✨ 全局变量 ✨局部变量 ✨常量 &a…

Vue3使用$refs获取节点生产环境undefined-使用getCurrentInstance-ctx应改用proxy

vue3项目,在使用refs获取节点,开发环境正常,生产环境报错 console.log(getCurrentInstance()) internalInstance.ctx, internalInstance.proxy 开发环境正常-生产环境报错 internalInstance.ctx 生产环境获取不到值 ctx打包后在生产环境下是获…

激光SLAM(一):点云基础知识

点云基础知识 一、激光雷达介绍1. 机械旋转式雷达2. 固态雷达 二、测量模型与点云1. Range-Azimuth-Elevation(RAE)- XYZ2. 点云的Packets表示3. 点云的鸟瞰图表示4.Range Image5.TSDF 三、点云的近邻关系Brute-force KNN栅格、体素KD-tree寻找近邻四叉树…

Visual Studio Code系列--CMake Tools使用说明

一、目的 在linux系统上开发程序,一般都是使用vimgccgdb进行的;但是为了开发效率我们也会使用Visual Studio Code进行开发,毕竟有界面的开发调试还是更加友好一些。 老牌程序员肯定都知道make构建工具,但是其晦涩的语法还是难住不…

二十一、数值操作(二)

目录 七、数值查找 1、Excel实现 2、Python实现 八、区间切分 1、Excel实现 2、Python实现 九、插入新的行或列 1、Excel实现 2、Python实现 十、行列互换 1、Excel实现 2、Python实现 十一、索引重塑 十二、长宽表转换 1、宽表转换为长表 (1&#x…

如何提升软件质量及开发效率

如何提升软件质量及开发效率 文章目录 如何提升软件质量及开发效率1、简介2、软件质量模型3、需求分析4、软件设计5、项目管理1.1 版本管理1.2 项目结构规范 6、编码规范7、代码评审8、软件调试9、软件测试 1、简介 保证软件质量,是一个贯穿整个软件生存周期的重要…

Java利用朴素贝叶斯分类算法实现信息分类

目录 贝叶斯分类算法 代码实例 数据集data.txt代码实现输出结果使用场景 贝叶斯分类算法 贝叶斯分类算法是统计学的一种分类方法,它是一类利用概率统计知识进行分类的算法。在许多场合,朴素贝叶斯(Nave Bayes,NB)分类算法可以与决策树和神…