.NET 云原生架构师训练营(模块二 基础巩固 敏捷开发)--学习笔记
2.7.1 敏捷开发
敏捷介绍
- 敏捷的起源
- 敏捷软件开发宣言
- 敏捷开发十二原则
- 生命周期对比
- 敏捷开发的特点
- 敏捷的发展
- 敏捷的核心
敏捷的起源
2001年,17个老头子在一起一边滑雪,一边讨论工作,制定了《敏捷软件开发宣言》
从60年代中期开始到20世纪末,软件行业得到了非常迅猛的发展,软件系统的规模和复杂度也越来越高,行业普遍面临不满足需求,永远无法交付等一系列严重的问题,史称“软件危机”
从长期积累的经验看,早期阶段的时间投入会影响到后期的经济支出,就是需求变化发生的越晚,对软件交付的影响越大,这是瀑布模式存在产生的核心观点,所以瀑布模式主张非常完整的设计,拒绝需求变化
拒绝变化带来双向的负面效应,软件需求方得不到自己满意的产品,另一方面,由于过度强调计划,忽视领导者和管理者在团队中起的作用
针对以上两个负面效应,敏捷软件开发宣言中“拥抱变化”和“尊重个体”成为两个核心的观点
敏捷软件开发宣言
敏捷软件开发宣言:https://www.scrumcn.com/agile/scrum-knowledge-library/agilevalues.html
- 个体和互动 高于 流程和工具
- 工作的软件 高于 详尽的文档
- 客户合作 高于 合同谈判
- 响应变化 高于 遵循计划
敏捷开发十二原则
- 我们最重要的目标,是通过及早和持续不断地交付有价值的软件使客户满意。
- 欣然面对需求变化,即使在开发后期也一样。为了客户的竞争优势,敏捷过程掌控变化。
- 经常地交付可工作的软件,相隔几星期或一两个月,倾向于采取较短的周期。
- 业务人员和开发人员必须相互合作,项目中的每一天都不例外。
- 激发个体的斗志,以他们为核心搭建项目。提供所需的环境和支援,辅以信任,从而达成目标。
- 不论团队内外,传递信息效果最好效率也最高的方式是面对面的交谈。
- 可工作的软件是进度的首要度量标准。
- 敏捷过程倡导可持续开发。责任人、开发人员和用户要能够共同维持其步调稳定延续。
- 坚持不懈地追求技术卓越和良好设计,敏捷能力由此增强。
- 以简洁为本,它是极力减少不必要工作量的艺术。
- 最好的架构、需求和设计出自自组织团队。
- 团队定期地反思如何能提高成效,并依此调整自身的行为表现。
生命周期对比
| 生命周期 | 需求 | 活动 | 交付 | 流程 |
|---|---|---|---|---|
| 瀑布 | 固定的,需求明确 | 整个项目进行一次 | 一次交付 | 强调文档,用里程碑的方式,严格定义各阶段的输入和输出。不走回头路,如果出现返工,付出的代价巨大 |
| 敏捷 | 动态的,贴近客户需求 | 重复,直到正确为止 | 频繁小的交付 | 核心是小版本迭代。短、频、快的沟通与反馈机制,减少客户价值创造过程中的损耗 |
敏捷开发的特点
- 小步快跑
- 有项目计划,但也要“拥抱变化”
- 版本迭代周期内尽量不加任务
- 团队配置也要敏捷
- 敏捷也需要反思
敏捷的发展
敏捷发展的3个阶段:
- 在软件行业被定义
- 在商业活动中发扬光大
- 软件商业活动汇合
后面两个阶段的开启受到了以下两个概念的启发:
- 精益创业
- 持续交付2.0
精益创业
2021年美国作家埃里克·莱斯出版了《精益创业》一书中的精简式反馈,以小见大等概念与敏捷软件开发迭代模型有很多相似之处
在 SCRUM 中要求每个迭代都能交付给有用价值的功能(可以工作的软件)
埃里克在束中提到的最小可行性产品 MVP 强调用最快,最简明的方式建立一个可用的产品原型,通过这个最简单的产品原型来测试产品是否符合市场预期,并通过不断的快速迭代来修正产品,最终适应市场需求

定义 MVP 的关键在于,需要抓住用户的核心完整需求,在之后的迭代中不断地将核心完整需求变的好用。要求是那些必不可少的且最后是完整可用的
软件开发终究是为商业活动服务的,只有在商业活动也是敏捷的情况下,敏捷软件开发才能发挥最大的威力。可惜的是精益创业的思想产生比软件敏捷开发思维晚了整整11年
持续交付2.0
国内 DevOps 专家乔梁在2019年出版了《持续交付2.0:业务引领的DevOps精要》中提出双环模型强调“只有业务方能够以“精益”方式思考,持续交付才能更显威力”,由此软件开发活动与商业活动有了完整统一的方法论模型

- 提问:用户需要什么
- 锚定:背后的真正需求
- 共创:业务,销售,开发人员一起思考解决方案
- 精炼,决策
- 构建
- 运行
- 监测:埋点
监测环节为精益创业中产品的验证提供数据支持,通过数据来反馈产品是否符合用户预期
敏捷的核心
变化来自于哪里?
从2001年的敏捷宣言核心观点来看“拥抱变化”,多数的变化可以认为是需求
需求的变化有两种:
- 一种是需求没有变,是没有理解透(很多复杂的细分行业B端产品)
- 另外一种是提出需求的人自己没有想清楚(很多创新型产品,互联网行业居多)

本作品采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可。
欢迎转载、使用、重新发布,但务必保留文章署名 郑子铭 (包含链接: http://www.cnblogs.com/MingsonZheng/ ),不得用于商业目的,基于本文修改后的作品务必以相同的许可发布。
如有任何疑问,请与我联系 (MingsonZheng@outlook.com) 。
.NET 云原生架构师训练营(模块二 基础巩固 敏捷开发)--学习笔记的更多相关文章
- .NET 云原生架构师训练营(设计原则与模式)--学习笔记
在复杂系统的架构设计中引入设计原则与模式,能够极大降低复杂系统开发.和维护的成本 目录 几个问题 为什么要学习设计模式 优良架构设计的具体指标 理解复杂系统 面向对象思想(指导复杂系统的分析.设计.实 ...
- .NET 云原生架构师训练营(权限系统 代码重构)--学习笔记
目录 模块拆分 代码重构 模块拆分 代码重构 AuthenticationController PermissionController IAuthorizationMiddlewareResultH ...
- .NET 云原生架构师训练营(KestrelServer源码分析)--学习笔记
目录 目标 源码 目标 理解 KestrelServer 如何接收网络请求,网络请求如何转换成 http request context(C# 可识别) 源码 https://github.com/d ...
- .NET 云原生架构师训练营(模块一 架构师与云原生)--学习笔记
目录 什么是软件架构 软件架构的基本思路 单体向分布式演进.云原生.技术中台 1.1 什么是软件架构 1.1.1 什么是架构? Software architecture = {Elements, F ...
- .NET 云原生架构师训练营(模块二 基础巩固 Scrum 团队)--学习笔记
2.7.3 Scrum 团队 理想的环境 团队章程 如何组建 Scrum 团队 产品待办事项列表 用户故事 敏捷开发流程 理想的环境 5-9人 100% 跨职能 在一起 自组织 自组织 目标 授权 沟 ...
- .NET 云原生架构师训练营(建立系统观)--学习笔记
目录 目标 ASP .NET Core 什么是系统 什么是系统思维 系统分解 什么是复杂系统 作业 目标 通过整体定义去认识系统 通过分解去简化对系统的认识 ASP .NET Core ASP .NE ...
- .NET 云原生架构师训练营(权限系统 RGCA 架构设计)--学习笔记
目录 项目核心内容 实战目标 RGCA 四步架构法 项目核心内容 无代码埋点实现对所有 API Action 访问控制管理 对 EF Core 实体新增.删除.字段级读写控制管理 与 Identity ...
- .NET 云原生架构师训练营(模块二 基础巩固 MongoDB 介绍和基础)--学习笔记
2.5.1 MongoDB -- 介绍 mysql vs mongo 快速开始 mysql vs mongo 对比 mysql mongo 数据存储 table 二维表结构,需要预先定义结构 json ...
- .NET 云原生架构师训练营(模块二 基础巩固 MongoDB 问答系统)--学习笔记
2.5.6 MongoDB -- 问答系统 MongoDB 数据库设计 API 实现概述 MongoDB 数据库设计 设计优化 内嵌(mongo)还是引用(mysql) 数据一致性 范式:将数据分散到 ...
随机推荐
- 【笔记】「pj复习」深搜——简单剪枝
深搜--简单剪枝 说在最前面: 因为马上要 NOIP2020 了,所以菜鸡开始了复习qwq. pj 组 T1 ,T2 肯定要拿到满分的,然后 T3 , T4 拿部分分, T3 拿部分分最常见的做法就是 ...
- 刚开始学习Javascript的一些基础小知识,从入门到崩溃,希望对大家有帮助(只适合初学者)
一.简介 1.JavaScript一种直译式脚本语言,是一种动态类型.弱类型.基于原型的语言,内置支持类型,js不能操作文件. 重要的开始啦!!!!! 引入javascript: 行间js <d ...
- Java集合源码分析(四)——Vector
简介 Vector 是矢量队列,它是JDK1.0版本添加的类.继承于AbstractList,实现了List, RandomAccess, Cloneable这些接口. 和ArrayList不同,Ve ...
- MySQL技术内幕InnoDB存储引擎(五)——索引及其相关算法
索引概述 索引太多可能会降低运行性能,太少就会影响查询性能. 最开始就要在需要的地方添加索引. 常见的索引: B+树索引 全文索引 哈希索引 B+树索引 B+树 所有的叶子节点存放完整的数据,非叶子节 ...
- 看我如何用微信上线CobaltStrike
前言 DLL劫持漏洞是老生常谈的一个漏洞,已经被前辈们各种奇技淫巧玩烂.但DLL劫持技术在后渗透和域渗透中的权限提升和权限维持都起到了至关重要的作用.本文简单剖析DLL劫持技术并通过实例应用来查看如何 ...
- 细品 Spring Boot+Thymeleaf,还有这么多好玩的细节!
@ 目录 1. Thymeleaf 简介 2. 整合 Spring Boot 2.1 基本用法 2.2 手动渲染 3. Thymeleaf 细节 3.1 标准表达式语法 3.1.1 简单表达式 3.1 ...
- js上 八.语句
1.什么是语句 概念:在JavaScript中表达式是短语,语句就是整句或命令. 作用:用来执行以使某件事发生 特征:用 ; 结尾 Js中语句的常见形式: ü 表达式语句 ü 复合语句 ü 声明语句 ...
- vue element ui 上传 请求接口
在页面上 http-request: 覆盖默认的上传行为,可以自定义上传的实现 <el-upload class="avatar-uploader" action=&qu ...
- Swift3.0学习之基础部分
1.常量和变量 常量和变量把一个名字(比如 maximumNumberOfLoginAttempts 或者 welcomeMessage )和一个指定类型的值(比如数字 10 或者字符串 " ...
- (五)vimscript打印信息
1.打印信息 使用vimscript时,打印信息的命令是echo和echom,可以通过help echo及help echom命令查看帮助文档,而echo与echom有些许的区别, :echom &q ...