系统架构师---开发方法---敏捷开发
目录
前言
极限编程
四大价值观
沟通
简单
反馈
勇气
尊重:
十二个最佳实践
计划游戏
小型发布
隐喻
简单设计
测试先行
重构
结对编程
集体代码所所有制
持续集成
每周工作40小时
现场客户
编码标准
前言
2001年2月,在美国的犹他州,17位“无政府主义者”共同发表了《敏捷软件开发宣言》,在宣言中指出:
- 尽早地、持续地向客户交付有价值的软件对软件开发人员来说是最重要的。
- 拥抱变化,即使在开发的后期。敏捷过程能够驾驭变化,保持客户的竞争力。
- 经常交付可工作的软件,从几周到几个月,时间范围越小越好
- 在整个项目中,业务人员和开发者紧密合作
- 围绕士气高昂的团队进行开发,为团队成员提供适宜的环境,满足他们的需要,并给予足够的信任
- 在团队中,最有效率的、也是效果最好的沟通方式是面对面地交流
- 可以工作的软件是进度首要的度量方式
- 可持续地开发,投资人、开发团队和用户应该保持固定的节奏
- 不追求优秀的技术和良好的设计有助于提高敏捷性
- 要简单,尽可能减少工作量。减少工作量的艺术是非常重要的
- 最好的架构、需求和设计都来自于一个自我组织的团队
- 团队要定期地总结如何能够更有效率,然后相应的自我 调整
极限编程
XP方法可以说是敏捷联盟中最鲜艳的一面旗帜,也是相对来说最成熟的一种。XP方法的雏形最初形成于1996-1999年。
XP是一种轻量、敏捷、高效、低风险、柔性、可预测、可行而且充满乐趣的软件开发方式。与其他方法论相比,其最大的不同在于:
- 在更短的周期内,更早地提供具体、持续的反馈信息
- 迭代地进行计划编制,首先在最开始迅速生成一个总体计划,然后在整个项目开发过程中不断地发展它。
- 依赖于自动测试程序来监控开发进度,并及早地捕获缺陷
- 依赖于口头交流,测试和源程序进行沟通
- 倡导持续的,演化式的设计
- 依赖于开发团队内部的紧密协作
- 尽可能达到程序员短期利益和项目长期利益的平衡
XP由价值观、原则、实践和行为四个部分组成,他们彼此相互依赖,关联,并通过行为贯穿整个生命周期
四大价值观
XP的核心是其总结的沟通、简单、反馈、勇气四大价值观,它们是XP的基础,也是XP的灵魂。
沟通
通常,程序员给人留下的印象就是内向、不善言辞,项目中的许多问题就出在这些缺乏沟通的开发人员身上。由于某个程序员做出了一个设计决定,但是却不能够及时沟通团队中的其他成员,结果使得团队在协作与配合上出现很多麻烦。而在传统的开发方法中,并不在意这种口头沟通不畅的问题,而是希望借助于完善的流程和面面俱到的文档、报表、计划来替代,但是,这又引入了效率不高的新问题。
XP方法认为,如果小组成员之间无法做到持续的,无间断的交流,那么协作就无从谈起。从这个角度来看,通过文档、报表等人工 制品进行交流,具有很大的局限性。因此,XP组合了诸如结对编程这样的最佳实践,鼓励大家进行口头交流,通过交流解决问题,提供效率。
简单
XP方法在工作中秉承“够用即好”的思路,也就是尽量的简单化,只要今天够用就行,不考虑明天会出现的新问题。这一点看上去十分容易,但是要真正做到保持简单的工作其实是很难的,因为在传统的开发方法中,都要求开发人员对未来做一些预先规划,以便对今后可能发生的变化预留一些扩展空间。
沟通和简单之后还有一种相当微秒的互相支持的关系。一方面,团队成员之间的沟通得越多,就越容易明白那些工作需要做,那些工作不需要做;另一方面,系统越简单,需要沟通的内容也就越少,沟通也将更加全面。
反馈
是什么原因使得客户、管理层这么不理解开发团队?究其原因,就是开发的过程中缺乏必要的反馈。在很多项目中,当开发团队经历过需求分析之后,在一个相当长的时间段中,是没有任何反馈信息的。整个开发过程对于客户和管理层而言就像一个黑盒子,进度完全看不到。而且,在项目开发过程中,这样的现象不仅出现在开发团队与客户、管理层之间,还包括在开发团队内部。因此,开发团队需要更加注重反馈。反馈对应任何软件项目的成功都是至关重要的,而在XP方法论中则更进一步,通过持续、明确的反馈来暴露软件状态的问题。
反馈与沟通有着良好的配合,及时和良好的反馈有助于沟通。而简单的系统,更有利于测试和反馈。
勇气
在应用XP方法时,每时每刻都在应对变化;由于沟通良好,会有更多需求变更的机会;由于时刻保持系统的简单,新的变化会带来一些重新开发的需要;由于反馈及时,会有更多中间打断思路的新需求。总之,这一切使得开发团队处于变化之中,因此,这时就需要有勇气来面对快速开发,面对可能的重新开发。勇气可以来源与沟通,因为它使得高风险,高回报的试验称为可能;勇气可以来源于简单,因为面对简单的系统,更容易鼓起勇气;勇气可以来源与反馈,因为可以及时获得每一步前进的状态(自动测试),会让人更勇于重构代码。
尊重:
在XP的四大价值之下,隐藏着一种更加深刻的东西,就是尊重。因为这一切的准则都建立在团队成员之间相互关心,相互理解的基础之上。
十二个最佳实践
在XP中,集成了12个最佳实践,大多数概念和编程一样老。主要的创新点在于提供一种良好的思路将这些最佳实践结合在一起,并且确保尽可能彻底地执行,使得他们能够在最大程度上相互支持。
计划游戏
计划游戏的主要思想就是先快速地制定一份概要计划,然后,随着项目细节的不断清晰,再逐步完善这份计划。计划游戏产生的结果是一套用户故事及后续的一两次迭代的概要计划。
小型发布
XP方法秉承的是“持续集成,小步快走”的哲学思维,也就是说每一次发布的版本应该尽可能地小,当然前提条件是每个版本有足够的商业价值,值得发布。由于小型发布可以使的集成更频繁,客户获得的中间结果越频繁,反馈也就越频繁,客户就能够实时地了解项目的进展情况,从而提出更多的意见,以便在下一次迭代中计划进去,以实现更高的客户满意度。
隐喻
相对而言,隐喻比较令人费解。根据词典中的解释是,“一种语言的表达手段,它用来暗示字面意义不相似的事物之间的相似之处”。隐喻常用的四个方面,寻求共识,发明共享词汇、创新的武器、描述架构。
简单设计
强调简单的价值观,引出了简单性的假设原则,落实实处就是“简单设计”实践。这个实践看上哪去似乎很容易理解,但是却又经常被误解,许多批评者就指责XP忽略设计是不正确的。其实,XP的简单设计实践并不是要忽略设计,而是认为设计不应该在编码之前一次性完成,因为那样只能建立在“情况不会发生变化”或者,“我们可以预见所有的变化”之类的谎言的基础上。
测试先行
对于有些团队而言,有时候程序员会以“开发工作太紧张”为理由,继而忽略测试工作。这样,就导致了一个恶性循环,越是没空编写测试程序,代码的效率与质量越差,花在找缺陷,解决缺陷的时间也就越来越多,实际产能大大 降低。由于产能降低,因此时间更紧张,压力就更大。
重构
重构是一种对代码进行改进而不影响功能实现的技术,XP需要开发人员在“闻到代码的坏味道”时,就有重构代码的勇气。重构的目的是降低变化引发的风险、使得代码优化更加容易。
结对编程
从20世纪60年代开始,就有类似的 实践在进行,长年以来的研究结果给出的结论是,结对编程的效率反而比单独编程更高。一开始虽然会牺牲一些速度,但是慢慢的,开发的速度会逐渐加快。究其原因,主要是结对编程大大降低了沟通的成本,提供了工作的质量。结对编程技术被誉为XP保证工作质量、强调人文主义的一个最典型的 实践,应用得当还能够使开发团队协作更加顺畅、知识交流与共享更加频繁、团队稳定性也会更加牢固。
集体代码所所有制
由于XP方法鼓励团队进行结对编程,而且认为结对编程的组合应该动态地搭配,根据任务的不同、专业技能的不同进行更优组合。因此,每一个人都会遇到不同的代码,代码的所有制就不再适合于私有,因为那样会给修改工作带来巨大的不便。所谓集体代码所有制,就是团队中每个成员都拥有对代码进行改进的权利,每个人都拥有全部代码,也都需要对全部代码负责。同时,XP强调代码是谁破坏的(修改后出现问题),就应该谁来进行修复处理。
集体代码所所有制是XP与其他敏捷方法的一个较大的不同,也是从另一个侧面体现了XP中蕴含的很深厚的编码情节。
持续集成
在前面谈到小型发布、重构、结对编程、集体代码所所有制等最佳的实践,多次提到持续集成,可以说持续集成是这些最佳实践的基本支撑的条件。
每周工作40小时
这是最让开发人员开心,管理者反对的一个最佳实践了,加班,再加班早已经成为开发人员的家常便饭,也是管理者最常使用的一种策略。而XP方法认为,加班最终会扼杀团队的积极性,最终导致项目的失败,这也充分体现了XP方法关注人的因素比关注过程的因素多一些。
现场客户
为了保证开发出来的结果与客户的预想接近,XP方法认为最重要的是需要将客户请到开发现场。就像计划游戏中提到一样,在XP项目中,应该时刻保证客户负责业务决策,开发团队负责技术决策。因此,在项目中有客户在现场明确用户故事,并作出相应的业务决策,对于XP项目而言有着十分重要的意义。
编码标准
拥有编码标准可以避免团队在一些与开发进度无关的细枝末节的问题上发生争论,而且会给重构,结对编程带来很大的麻烦。不过,XP方法的编码标准的目的不是创建一个事无巨细的规则列表,而是要能够提供一个明确代码清晰,便于交流的指导方针。
最后,有句话,1+1>2最适合表达XP的观点,XP方法的最大价值在于,在项目中融会贯通地运用这12个最佳实践,而非单独的使用。当然,可以使用其中的一些实践,但是这并不意味着就应用了XP方法。XP方法真正能够发挥其效能,就必须完整地运用12个实践。
相关文章:
系统架构师---开发方法---敏捷开发
目录 前言 极限编程 四大价值观 沟通 简单 反馈 勇气 尊重: 十二个最佳实践 计划游戏 小型发布 隐喻 简单设计 测试先行 重构 结对编程 集体代码所所有制 持续集成 每周工作40小时 现场客户 编码标准 前言 2001年2月,在美国的犹他州…...
数据中心液冷技术:规模扩张的新里程碑
数据中心液冷技术:规模扩张的新里程碑 数据中心的液冷技术正处在规模扩张的关键阶段。这篇文章将深入探讨液冷技术的发展历程,当前的应用状况,以及未来的发展趋势。 目录 液冷技术的发展历程液冷技术的当前应用状况液冷技术的优势与挑战数据…...
页面静态化(模板引擎Freemarker)
1、浏览器请求web服务器 2、服务器渲染页面,渲染的过程就是向jsp页面(模板)内填充数据(模型)。 3、服务器将渲染生成的页面返回给浏览器。 所以模板引擎就是:模板数据输出,Jsp页面就是模板,页面中嵌入的jsp标签就是数据&#x…...
详细记录Pycharm配置已安装好的Conda虚拟环境
当安装好conda环境之后,想要在Pycharm中使用,那么就要在Pycharm中导入,我这里使用的pycharm-professional-2023.2这个版本,下面是详细步骤: 1.打开File->Settings: 2.找到Project——>Python Inter…...
photoshop生成器引入到electron项目(electron与photoshop建立通信)
Photoshop引入了nodejs,在启动的时候,通过pipe调起nodejs运行时核心generator-builtin,通过KLVR机制与ps进行通信和交互,同时会加载用户编写的扩展。 这里记录一下引入时的踩坑过程 generator-core就是它的源码,elect…...
Stable Diffuion webui Mac版本安装过程
系统环境 操作系统:MacOS Ventura13.5 芯片:Apple M2 Max Python: 3.10 安装前置准备 git clone https://github.com/AUTOMATIC1111/stable-diffusion-webui.git注意事项:修改源码内全部 git clone 链接,设置代理 https://ghpr…...
ARM64 指令用法学习整理
1. CBZ 当我们谈论ARM64指令集时,CBZ(Compare and Branch on Zero)是一种条件分支指令。它用于在寄存器上进行比较,并且如果该寄存器的值为零,则跳转到指定的标签或地址。 CBZ指令的基本语法如下: CBZ &…...
stable-diffusion 模型效果+prompt
摘自个人印象笔记,图不完整可查看原笔记:https://app.yinxiang.com/fx/55cda0c6-2af5-4d66-bd86-85da79c5574ePrompt运用规则及技巧 : 1. https://publicprompts.art/(最适用于OpenArt 线上模型 https://openart.ai/)…...
uniapp 小兔鲜儿 - 首页模块(1)
目录 自定义导航栏 静态结构 安全区域 通用轮播组件 静态结构 自动导入全局组件 全局组件类型声明 .d.ts文件 注册组件 vue/runtime-core 首页 – 轮播图指示点 首页 – 获取轮播图数据 首页 – 轮播图数据类型并渲染 首页 – 轮播图总结 首页分类 首页 – 前…...
selenium.webdriver Python爬虫教程
文章目录 selenium安装和使用 selenium安装和使用 pip install selenium 下载对应的浏览器驱动 实例化浏览器 from selenium import webdriverbrowser webdriver.Chrome()元素定位 控制浏览器...
USB-SC-09编程电缆驱动程序安装说明
USB-SC-09编程电缆驱动程序安装说明 概述 USB编程电缆是通过将电脑的USB口模拟成传统的串行口(通常为COM3),从而使编程软件SWOPC-FXGP/WIN和GPP通过USB-SC-09编程电缆与FX系列PLC进行通信。 功能 ● 支持的操作系统Windows XP/ Windows2000 …...
ONVIF对讲功能漫谈
ONVIF对讲功能漫谈 前言一、onvif对讲功能和onvif协议关系大吗?二、如何上报设备支持onvif对讲功能呢?三、onvif协议中哪个接口上报音频解码配置?四、献上抓包报文:前言 本篇文章尝试使用提问的方式来分享onvif对讲功能那点事。 一、onvif对讲功能和onvif协议关系大吗? on…...
计算文本相似度
目录 Python中的difflib模块模块用法报告涉及的符号实现文本对比普通文本对比文本对比生成HTML报告 余弦相似度sklearn安装使用sklearn的余弦相似度词袋模型 Jaccard相似度编辑距离(Levenshtein距离)TF-IDFWord2VecDoc2VecBERT结论 Python中的difflib模块…...
oracle 增加控制文件
oracle 增加控制文件 1、看control_file路径 SQL> show parameter controlNAME TYPE VALUE ------------------------------------ ----------- ------------------------------ control_file_record_keep_time integer …...
OpenFeign超时时间设置不生效问题排查
最近升级springboot 3,突然发现配置文件中的openFeign的超时时间设置不生效了 之前配置如下: feign: client: config: default: connectTimeout: 3000 readTimeout: 5000 查资料都是说ribbon或者hystrix的超时时间设置问…...
Go和Java实现原型模式
Go和Java实现原型模式 下面将通过一个克隆的示例来说明原型模式的使用。 1、原型模式 原型模式是用于创建重复的对象,同时又能保证性能。这种类型的设计模式属于创建型模式,它提供了一种创建对 象的最佳方式之一。 这种模式是实现了一个原型接口&am…...
linux I/O性能优化
Linux 文件系统 磁盘和文件系统的关系: 磁盘为系统提供了最基本的持久化存储。 文件系统则在磁盘的基础上,提供了一个用来管理文件的树状结构。 文件系统工作原理 索引节点和目录项 文件系统,本身是对存储设备上的文件,进行组织…...
PHP最简单自定义自己的框架model使用(七)
1、实现model使用效果 2、自动加载model,KJ.php //自动加载文件public static function _autoload($className){switch ($className){//自动model类case substr($className,-5)Model:$path MODEL./.$className..php;if(is_file($path)) include $path;break;//自动加载控制器…...
程序猿成长之路之密码学篇-分组密码加密模式及IV(偏移量)的详解
Cipher.getInstance("AES/ECB/PKCS5Padding"); Cipher cipher Cipher.getInstance("AES/CBC/PKCS5Padding"); 在进行加解密编程的时候应该有很多小伙伴接触过以上的语句,但是大伙儿在编码过程中是否了解过ECB/CBC的含义、区别以及PKCS5Padding…...
Windows下批处理删除文件
最近我使用Maven的时候会出现下载jar包不成功的现象,然后需要把它删除然后重新下载,但是有时候文件过多,一个个删除太花费时间,所以用bat的批处理会很舒服。 bat的语法我之前没遇到过,然后我是边学习边试验࿰…...
基于算法竞赛的c++编程(28)结构体的进阶应用
结构体的嵌套与复杂数据组织 在C中,结构体可以嵌套使用,形成更复杂的数据结构。例如,可以通过嵌套结构体描述多层级数据关系: struct Address {string city;string street;int zipCode; };struct Employee {string name;int id;…...
前端开发面试题总结-JavaScript篇(一)
文章目录 JavaScript高频问答一、作用域与闭包1.什么是闭包(Closure)?闭包有什么应用场景和潜在问题?2.解释 JavaScript 的作用域链(Scope Chain) 二、原型与继承3.原型链是什么?如何实现继承&a…...
数据库分批入库
今天在工作中,遇到一个问题,就是分批查询的时候,由于批次过大导致出现了一些问题,一下是问题描述和解决方案: 示例: // 假设已有数据列表 dataList 和 PreparedStatement pstmt int batchSize 1000; // …...
springboot整合VUE之在线教育管理系统简介
可以学习到的技能 学会常用技术栈的使用 独立开发项目 学会前端的开发流程 学会后端的开发流程 学会数据库的设计 学会前后端接口调用方式 学会多模块之间的关联 学会数据的处理 适用人群 在校学生,小白用户,想学习知识的 有点基础,想要通过项…...
【C++进阶篇】智能指针
C内存管理终极指南:智能指针从入门到源码剖析 一. 智能指针1.1 auto_ptr1.2 unique_ptr1.3 shared_ptr1.4 make_shared 二. 原理三. shared_ptr循环引用问题三. 线程安全问题四. 内存泄漏4.1 什么是内存泄漏4.2 危害4.3 避免内存泄漏 五. 最后 一. 智能指针 智能指…...
群晖NAS如何在虚拟机创建飞牛NAS
套件中心下载安装Virtual Machine Manager 创建虚拟机 配置虚拟机 飞牛官网下载 https://iso.liveupdate.fnnas.com/x86_64/trim/fnos-0.9.2-863.iso 群晖NAS如何在虚拟机创建飞牛NAS - 个人信息分享...
【若依】框架项目部署笔记
参考【SpringBoot】【Vue】项目部署_no main manifest attribute, in springboot-0.0.1-sn-CSDN博客 多一个redis安装 准备工作: 压缩包下载:http://download.redis.io/releases 1. 上传压缩包,并进入压缩包所在目录,解压到目标…...
二维数组 行列混淆区分 js
二维数组定义 行 row:是“横着的一整行” 列 column:是“竖着的一整列” 在 JavaScript 里访问二维数组 grid[i][j] 表示 第i行第j列的元素 let grid [[1, 2, 3], // 第0行[4, 5, 6], // 第1行[7, 8, 9] // 第2行 ];// grid[i][j] 表示 第i行第j列的…...
解决MybatisPlus使用Druid1.2.11连接池查询PG数据库报Merge sql error的一种办法
目录 前言 一、问题重现 1、环境说明 2、重现步骤 3、错误信息 二、关于LATERAL 1、Lateral作用场景 2、在四至场景中使用 三、问题解决之道 1、源码追踪 2、关闭sql合并 3、改写处理SQL 四、总结 前言 在博客:【写在创作纪念日】基于SpringBoot和PostG…...
[10-1]I2C通信协议 江协科技学习笔记(17个知识点)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17...
