作者:[美国] Kent Beck Cynthia Andres
——这本书传授了很多让工作更加有效的经验,适合于任何人,里面干货满满,受到过广泛的赞誉。
关于极限
名词:是一种即刻失效
的实际行动
,它是是无法测量的。
动词:是尽力而为然后处理其结果
。
极限地编程:每个成员都为了使团队达到极限
而施展自己的极限。
极限编程定义
- 极限编程是一种
方法论
、战略
,适用于各领域。 - 它在各领域的
过程
和目标
是一致的,就是通过不断学习进步达到卓越,进而创造更多价值。 - 由于不同团队的
需求
是不同的,所以团队极限是不同的,所以极限编程的具体方法是不同的。 - 极限编程的
价值观
是:沟通、简单、反馈、勇气、尊重。 - 极限编程是用来做的,不是用来表现的。
极限编程原则
变化:经常性地尝试更新你的习惯和模式以适应新的现状
,即使它在之前非常适用。
极限:让每个人认识自己在不同的团队中的能力
,并做好力所能及的事情。
合作:开展任何可以促进团队合作关系的人力活动
。
极限编程团队
- 好的
团队协作
,使团队总效能大于每个人的效能。 - 通过技术来建立团队信任,例如
精准评估工作
、提交有质量的工作
、快速反馈
。 - 以各种方式抛弃忧虑提升效率,例如:
- 不要隐瞒,反馈很重要。透明的团队有更好的进度。
敌对
、不透明
都会造成团队能力的浪费
- 透明也要注意隐私
- 足够的
时间
、资金
或团队技能
可以让团队有最好的表现。- 极限编程认知中,需要相应的回报,不能得到的团队是不极限的。
- 不要隐瞒,反馈很重要。透明的团队有更好的进度。
- 平衡个人和团队的
需求
是团队管理中的一个挑战。 - 每月需要一次
回顾
,用以在大方向
上防止团队偏离价值 - 一旦失去
连贯计划
,暂停了项目,那么团队也就被实际解散了。- 要在
关键节点
形成项目的运维、开发文档,以存档项目的状态。
- 要在
极限编程团员
- 自视成员的一部分,了解自己在团队中的作用。
- 愿意能与其他成员进行更好的配合。
- 愿意
学习
、思考
、成长
、进步
、分享
、改变
。 - 保持
趋近于完美
的状态,每次都做到更好。 - 员工需要:
基础安全
、成就感
、归属感
、成长
、亲切感
。
极限编程业务
- 计算机业务最终还是人的业务。
- 盈利很重要,所以让业务驱动项目。
- 今天的钱比明天的钱更有价值。
- 客户驱动系统的内容
- 客户知道自己要解决的问题的概要,但往往不清楚软件如何解决问题。
- 让
使用人员
融入开发团队,根据业务做出灵活的需求反应
。
极限编程沟通
- 你不能控制
别人的期望
,只能告诉别人你所知道的事情,而让对方主动调整期望。 - 选择合适的沟通方式,其中以谈话为主。
文档
沟通对小型本地团队而言是低效的。- 提出能解决问题的意见,而不是生成问题。
- 成员共同解决问题,而不是
争论
方案。 - 平衡
行动
和讨论
,不要害怕失败,失败是成功之母。 - 清晰的沟通可以避免缺陷。 缺陷造成不信任,从而破坏团队。
- 很多
信息
的缺失,造成人力物力的浪费。
极限编程计划
- 计划:
听
、说
以及将目标
和特定时间段
联系再一起的训练
,每个团员都应参与计划。 - 计划是必要的浪费,提升能力减少它的费时。
- 迅速提出一个短期计划(一周),并不断演化它。
- 通过调整交付范围来控制项目计划,有时候需要把一个功能分为多个步骤。
- 预估周期内可用
结对时间
,选择故事的优先级,不要改变估算。 - 按
风险
和价值
排序故事,以选出低风险高价值的故事。 - 每个人每天能完成的工作是固定的。
- 预估周期内可用
季度详细计划
也是需要的,它用来形成一个目标,使上层可以更好的监管进度,也可以用来与实际进行对比。- 每周的起点可以是任意一天。在那一天完成一周的测试用例
- 我的建议:周二为起点,周一为终点。
- 周一的部署问题可以快速安排解决
- 而周三到周五都可以对上一周的任务进行交付
- 应该抵制
同时的大量交付
,应该防止程序的阶段性跳跃
,使用流模式
进行生产。
极限编程设计
- 软件是由人开发的,
开发过程
不能忽视人性化。 设计
是服务于技术
和商业人员
之间的信任关系
的。- 不再设计需求,转变为设计
故事
。- 需求是“我要什么”
- 故事是“将会发生什么”
增量设计
如此有价值是因为软件开发是科研工作。- 使用增量式设计更符合趋近于完美的
步调
。- 保持
持续设计
,将设计归为日常工作,而不是前期工作。
- 保持
经验
促进设计,不止长期经验,还有短期经验
。- 利用
已有的经验
为设计的下一阶段提供信息
。
- 利用
- 在
临近使用
时设计,并在使用后获得反馈
,可以降低造成系统严重破损
的可能。
- 使用增量式设计更符合趋近于完美的
- 控制自己,不要做时间跨度过大的设计。
消除重复
,是一个很好的设计优化的切入点。- 减少项目数量,通过配置来多份部署,多份代码是巨大的浪费。
- 先
按问题拆分
来设计解决方案,再自然地按解决方案
拆分系统。
极限编程开发
- 提供自动测试作为
验收依据
。 - 使用
测试优先
编程:测试
、编码
、重构
…再次循环- 越早发现的缺陷修复成本越低,所以采用自动化测试与测试先行。
- 我的建议:从集成测试开始开发。
集成
让组件变得更为强大。
- 让测试构建耗时低于10分钟,每天进行多次集成
测试
- 每一次部署都应该有它的
当前价值
或者未来价值
,都要尽量的考虑所有人的意愿。 - 不管项目上的问题是什么,始终是
人的问题
,也必然由人去解决,而不是极限方法。- 要对问题的
后续
全面负责,从根源上解决问题,使团队不再造成此类缺陷,而不是只针对当前问题去解决。 - 解决难题:
大问题
转小问题
、优先使用简单
方案。
- 要对问题的
- 加班更容易使团队成员失去基本的
人性需求
,但这因人而异。- 当你太疲惫时,你很难意识到你正在降低项目的
价值
。
- 当你太疲惫时,你很难意识到你正在降低项目的
- 一切
工作
以产出代码
(和测试代码
)为基础,其它
实践都使拘泥于形式的浪费
。 模式
不是目的,是平衡开发人员
与使用人员
双方需求的手段。
极限编程交付
- 以可使用的系统
功能
为单位验收,而不是单个成员的工作完成度。 - 付出回报让
客户(或客户的客户)
参与计划,可以更早的拿到反馈
。 - 不要对客户遮掩团队的缺陷,这会让你变得不可信任。
- 保持
短周期
的、持续
的、具体
的交付与反馈。- 例如:每周一次迭代设计,每日进行功能迭代。
- 以管理手段为保险,防止技术手段失败造成的重大损失。
- 更早的进行第一次软件部署,尽量做到每日部署,尽早得到反馈。
- 在做到
每日部署
的路上,可以得到改进的灵感
。 - 尽管是无感知的更新,或者也可以增加一个
主动感知
,促进反馈
生成。
- 在做到
极限编程结对
- 成员间更紧密的
空间距离
,有助于解决问题,但也要考虑到隐私需求。 结对编程
很好,但也要注意搭档的感受
。- 所有长期的代码都应该由两个人在
讨论
中编写完成。- 第一步:可以挑选我担心的一段代码,结对完成。
- 如果没有进行结对编程,那就
共享代码
使一份程序最少有两个人能对它提出建议。
极限编程学习
- 提升能力的两条路径:从
实践
出发总结出理论
,从理论
出发完成实践
。 - 实践极限编程并
分享
它,分享也是实践的一部分。 - 有高级能力的人能从
更高的视角
审视问题,所以要虚心请教。 - 不是你
未知
的东西导致你陷入困境,而是你已知
的东西并不正确。 – Will Rogers - 要留出做
总结
的时间,并实际地进行总结并应用总结,最终习惯于随时总结。 - 把
问题
看做改变的机遇
,从问题中获得技能提升、关系升华、软件改进。 - 改变从意识开始,意识来自
度量
,就是从过去的经验中得到反省
,以使未来的决定更加明智。 - 找到程序开发中的
短板
,并想办法解决它,即使它不来自技术。 - 应用
新实践
的目的是更多价值回报。
极限编程分享
- 你唯一能改变的人是自己。
积极
发表意见是团队健康
的一个标志,沉默
代表了风险
堆积。- 除了季度计划,还需要每周了解本周
实际情况
。 - 模范带头开发是一种有力的
领导形式
。首先改变自己
,然后把成果分享出来。 - 组织或参与
开放的社区
,倾听
他人的想法,非常有助于进步
。- 每个人的每句话都是有
意义
的,即使他不符合你的价值观
。
- 每个人的每句话都是有
极限编程组织
价值观
指导人的行动
,不要
促使团队成员害怕
失败,从而形成错误的价值观。- 以
团队为单位
,增进沟通,齐头并进,共同承担,而不是个人领先
,后续跟进。- 开发者了解功能定义,并编写功能
代码
和测试
。 - 测试员帮助定义功能点,并指导开发实现
自动化测试用例
。 - 架构师发现并实现
大规模重构
,沟通以使架构大而化小。 - 项目经理促进团队和
其它组织
的沟通,并陈述系统能做
的事和客户的需求
。 - 产品经理编写并排序
故事
,还要解答未完善的部分,并根据团队进度
调整排序。 - 主管人员监察团队
方向
,负责清晰地表达并维持更大范围的目标
。
- 开发者了解功能定义,并编写功能
- 虽然角色的
工作
是固定的,但团队成员
的角色不是绝对固定的。 - 尽早解决软件开发的
财务算法
问题,明确软件团队
和投资者
之间的共赢关系。 - 以
团队为单位
进行绩效考评,以团队影响力
为标准考评
个人。 - 保持
风险审计
。明确整个系统的风险
点。 - 为了使
社会关系
进步而分工,不为了减少工作而分工。 - 两个团队大小
断点
:12和150。 —— Malcolm Gladwell所著的《引爆流行》
极限编程经验
- 要尊重
个体自由
,但不惜任何代价的个体自由。这些是不能帮助团队取得成功的。 - 不要害怕
冗余
,有时候适当的冗余是有价值
的。 - 主动降
低质量
并不会加速交付,除非你不知道如何获得高质量
。 按量付费
可以得到更多反馈
,更好的部署环境
。- 需要更好的
价格优势
才能使客户也能支持按量付费。
- 需要更好的
- 将每个人的计划和实际完成,放在一个公开的地方。
减少缺陷
的目标
是,团队信任
在适度增长。- XP最难的一点是,XP需要一个
教练
,否则很容易进入误区
。 - 要鼓励使用
先进
的技术,否则整个市场会变得萧条。
写在后面
闲人老师花了一个月读了两遍本书,然后花了两天总结了读书笔记。
稍后还准备搞个PPT
版的分享文案,用来分享
给需要的人。
有需要的可以加QQ群:1033245535
。
也欢迎加群讨论学习编程、测试与管理的艺术。