极限编程XP的认识
最近准备学习下 领域驱动设计相关的知识,对出现的一些紧密相关的术语做一些了解。
XP
XP 更关注技术和工程实践
极限编程和传统方法学的本质不同在于它更强调可适应性而不是可预测性。
XP目标
极限编程的主要目标在于降低因需求变更而带来的成本。
传统系统开发方法中,系统需求是在项目开发之初 就已经确定了,并在之后的开发过程中 保持不变(基本不变)。这意味着项目 开发进入到之后的阶段时出现的需求变更 将导致开发成本 急速增加,需求的变更在互联网等快速迭代的领域中是无法避免的。
极限编程透过引入基本价值、原则、方法等概念来达到降低变更成本的目的。一个应用了极限编程方法的系统开发项目在应对需求变更时将显得更为灵活。
核心价值
-
沟通(Communication)
- 构建一个软件系统的基本任务之一就是与系统的开发者交流以明确系统的具体需求。在一些正式的软件开发方法中,这一任务是通过文档来完成的。
- 极限编程技术可以被看成是在开发小组的成员之间迅速构建与传播制度上的认识的一种方法。它的目标是向所有开发人员提供一个对于系统的共享的视角,而这一视角又是与系统的最终用户的视角相吻合的。为了达到这一目标,极限编程支持设计、抽象、还有用户-程序员间交流的简单化,鼓励经常性的口头交流与回馈。
-
简单(Simplicity)
- 鼓励 从最简单的解决方式 入手,通过不断重构达到更好的结果。
- 指关注 当下周期的需求,不关注 后面可能出现变化的需求。 简化设计和代码,可以提高 交流的质量,并且能被 小组成员 更好的理解。
-
反馈(Feedback)
- 反馈 越快越好
- 来自系统的反馈: 通过编写单元测试,程序员能够直观得到修改的结果
- 来自客户的反馈:功能性测试由 客户和 测试人员来编写
- 来自小组的反馈:在项目计划会中,可以对新需求的实现所需的时间进行评估,反馈
Kent Beck的话来说:“编程中的乐观主义是危险的,而及时反馈则是解决它的方法
-
勇气(Courage)
- 极限编程理论中的“系统开发中的勇气”最好用一组实践来诠释。其中之一就是“只为今天的需求设计以及编码,不要考虑明天”这条戒律。这是努力避免陷入设计的泥潭、而在其他问题上花费了太多不必要的精力。勇气使得开发人员在需要重构他们的代码时能感到舒适。这意味着重新审查现有系统并完善它会使得以后出现的变化需求更容易被实现。另一个勇气的例子是了解什么时候应该完全丢弃现有的代码。每个程序员都有这样的经历:他们花了一整天的时间纠缠于自己设计和代码中的一个复杂的难题却无所得,而第二天回来以一个全新而清醒的角度来考虑,在半小时内就轻松解决了问题。
尊重(Respect)
极限编程的5个原则
组成极限编程基础的原则,正是基于上面描述的那几条价值。在系统开发项目中,这些原则被用来为决策做出指导。与价值相比,原则被描述的更加具体化,以便在实际应用中更为简单的转变为具体的指导意见。
1、快速反馈
当反馈能做到及时、迅速,将发挥极大的作用。一个事件和对这一事件做出反馈之间的时间,一般被用来掌握新情况以及做出修改。与传统开发方法不同,与客户的发生接触是不断反复出现的。客户能够清楚地洞察开发中系统的状况。他/她能够在整个开发过程中及时给出反馈意见,并且在需要的时候能够掌控系统的开发方向。
单元测试同样对贯彻反馈原则起到作用。在编写代码的过程中,应需求变更而做出修改的系统将出现怎样的反应,正是通过单元测试来给出直接反馈的。比如,某个程序员对系统中的一部分代码进行了修改,而假如这样的修改影响到了系统中的另一部分(超出了这个程序员的可控范围),则这个程序员不会去关注这个缺陷。往往这样的问题会在系统进入生产环节时暴露出来。
2、假设简单
假设简单认为任何问题都可以”极度简单”地解决。传统的系统开发方法要考虑未来的变化,要考虑代码的可重用性。极限编程拒绝这样做。
3、增量变化
迭代开发,小步推进,使整个开发进度和正在开发的系统 对于 用户来说更加可控。
4、拥抱变化
接受需求的变化
5、高质量的工作
没人喜欢拖泥带水,每个人都期望出色的完成工作。极限编程的提倡者认为范围、时间、成本和质量这个四个软件开发的变量,只有质量不可妥协的。
极限编程的12个核心实践
- 短交付周期
- 迭代交付
- 计划游戏
- 明确:预测在交付日期前可以完成多少工作;现在和下一步该做些什么。
- 软件发布计划。需求池
- 周期开发计划。 需求拆分。评估每个任务的开发成本和风险
- 结对编程
- 指 代码由两个人坐在一台电脑前一起完成。一个人负责 编写,一个人 代码评审。可交叉进行
- 身边没有见过这样的形式。
- 可持续的节奏
- 代码集体所有
- 每个人对 代码负责
- 完善的单元测试 预警 引入的代码错误
- 编码规范
- 统一的编程标准,使每个程序员都能 更易读懂他人写的代码
- 简单设计
- 用最简单的设计来 实现需求。
- 后期 可通过 不断的重构 调整
- 测试驱动开发
- 测试驱动开发的基本思想就是在开发功能代码之前,先编写测试代码,然后只编写使测试通过的功能代码,从而以测试来驱动整个开发过程的进行。这有助于编写简洁可用和高质量的代码,有很高的灵活性和健壮性,能快速响应变化,并加速开发过程。
- 测试驱动开发的基本过程
- 快速新增一个测试点
- 运行所有的测试,发现新增的测试不能通过
- 做一些小小的改动,尽快让测试程序运行
- 运行所有的测试,并全部通过后
- 重构代码,消除 重复设计,优化设计结构
- 重构
- 主要为了 减少程序和设计中重复出现的部分,增强程序和设计的可重用性。
- 配合 测试进行
- 系统隐喻
- 持续集成
- 早集成,常集成,尽早发现问题
- 持续集成是一种软件开发实践,每次集成都通过自动化的构建(包括编译,发布,自动化测试)来验证,从而尽快地发现集成错误
- 现场客户
- 客户 指 真正使用该系统的人。
- 及时提供 反馈

浙公网安备 33010602011771号