`

也读《敏捷软件开发》--- 极限编程

 
阅读更多
写在前面:
像书中提到的迭代开发、结对编程、持续集成、持续重构等概念,在我们的实际开发中经常会用到的,有意或者无意,该书就提供了理论的支持,使得我们在以后的开发中,更能得心应手。下面对书中的要点做下记录:
--------------------------
极限编程(XP,eXtreme Programming)是敏捷开发中的一种。它由一系列简单却相互依赖的实践组成。

1.客户成为团队成员
我们希望客户与开发人员能在一起紧密的工作,以便于彼此知晓对方所面临的问题,并共同去解决这些问题。

2.用户素材
就是正在进行的关于需求谈话的助记符。它是一个计划工具,客户可以使用它并根据优先级和估算代价来安排实现该需求的时间。(也就是说:通过和用户交谈,获取其需求要点,记录这些要点和相关的实现代价供用户参考,由用户决定实现什么)

3.短交付周期
XP项目每两周交付一次可以工作的软件。每周的迭代都实现了客户的一些需求。在每次迭代结束时,会给用户演示迭代生成的系统,也得到他们的反馈。
1)迭代计划
每次迭代大概耗时两周。一旦迭代开始,客户就同意不再修改当次迭代中的用户素材和优先级。迭代期间,开发人员可以自由地将用户素材分解成任务,并依据最具技术和商务意义的顺序来开发这些任务。
2)发布计划
XP团队通常创建一个计划来规划随后大概6次迭代的内容,就是所谓的发布计划。一次发布通常需要3个月的工作。发布计划是由一组客户根据开发人员给出的预算所选择的、排行优先级别的用户素材组成。
发布计划不是一成不变的,客户可以随时改变计划的内容,如,它可以取消用户素材、添加新的用户素材或者改变用户素材的优先级等。

4.验收测试
可以以客户指定的验收测试的形式来捕获有关用户素材的细节。

5.结对编程
所有的产品代码(包括设计、编写)都是有结对的程序员(2人)使用一台电脑通过完成的。

6.测试驱动的开发方法
编写所有的产品代码的目的就是为了通过单元测试。首先编写一个单元测试,然后编写代码使测试通过。
编写测试用例和代码之间的更迭速度是很快的,基本在几分钟左右。测试用例和代码共同演化,其中测试用例循环渐进地对代码的编写进行指导。
结果就是,一个完整的测试用例集和代码一起发展起来。开发人员可以非常方便的应用这些测试用例集检查程序是否正常工作。非常方便重构后的测试工作。
为了使测试用例通过而写的代码,可以被看做是可测试的代码。这样会强烈地激发开发人员去解除各个模块之间的耦合,而方便对每一个模块的测试。因此,测试驱动开发的方式使得代码的设计耦合度降低,方便以后的开发维护。

7.集体所有权
结对编程中的每一对都具有check out任何模块并对它进行修改的权力。没有程序员对任何一个特定的模块或技术单独负责。(在实际的开发中,个人感觉采取折中的方式会好些)

8.持续集成
完成了一个功能,合并到代码仓库中,解决必要的冲突,当然,越早集成冲突率越低。

9.可持续的开发速度
团队要具备可持续发展的能力,不能透支明天的时间。

10.开放的工作空间
自由交谈,激励辩论,唯一的目的就是更高效的交互、开发出高质量的产品。

11.计划游戏
计划游戏(planning game)的本质是划分业务人员和开发人员之间的职责。业务人员(也就是客户)决定特性(feature)的重要性,开发人员决定实现一个特性所话费的代价。

12.简单的设计
XP团队使他们的设计尽可能地简单、具有表现力。这里有3条原则:
1)考虑能够工作的最简单事情(用最简单的方式完成当前的用户素材)
2)你将不需要它(只有在迫切需求时,才引入较为复杂的重型架构)
3)一次,并且只有一次(消除重复性的代码,不要出现两段相同的代码)

13.重构
代码往往会腐化。随着我们添加一个个的功能,修改过一个个的bug,代码的结构会逐渐退化。如果置之不理的话,这种退化最终会导致纠结不清,难以维护的混乱代码。

XP团队通过经常性的代码重构来扭转这种退化。重构就是在不改变代码行为的前提下,对其进行一系列的改造(transformation),旨在改进系统的实践活动。每一个改造也许微不足道,但是无数次的叠加,就形成了对系统设计和架构显著的改进。

在每一次细微的改造之后,需要运行单元测试以确保改造没有照成任何破坏,然后再去做下一次改造。如此往复,周而复始,每次改造都需要运行测试。通过这种方式,我们可以在改造系统设计的同时,保存系统可以工作。

重构是持续进行的,而不是在项目结束时、版本发布时、迭代结束时、甚至每天快下班时才进行的。重构是我们每隔一个小时或者半个小时就要做的事情。通过重构,我们可以持续地保持尽可能干净、简单并且具有表现力的代码。

14.隐喻
简单的理解就是,把抽象的、复杂的软件处理逻辑想象成现实世界中比较简单的容易理解的场景(当然,这个场景越有意思越好)
分享到:
评论

相关推荐

    Agile Software Development----敏捷软件开发----Draft version: 3b

    ### 敏捷软件开发——关键知识点解析 #### 一、引言:未知与不可言传 本书开篇即探讨了一个核心问题:软件开发过程中存在大量的未知性和无法完全沟通的情况。作者指出,在软件开发中,经验的分解是非常困难的,...

    敏捷开发-敏捷软件开发:原则、模式与实践

    在本书中,享誉全球的软件开发专家和软件工程大师Robert C.Martin将向您展示如何解决软件开发人员、项目经理及软件项目领导...这本综合性、实用性的敏捷开发和极限编程方面的指南,是由敏捷开发的创始人之一所撰写的。

    敏捷软件开发-英文版

    ### 敏捷软件开发知识点详解 #### 一、引言:不可知与不可沟通 - **不可知性**:在软件开发过程中,存在着大量的未知因素,这些未知因素往往难以预测和控制,使得软件开发充满了不确定性。 - **沟通障碍**:沟通在...

    敏捷软件开发-原则、模式与实践

    这本综合性、实用性的敏捷开发和极限编程方面的指南,是由敏捷开发的创始人之一所撰写的。 讲述在预算和时间要求下,软件开发人员和项目经理如何使用敏捷开发完成项目; 使用真实案例讲解如何用极限编程来设计、测试...

    敏捷软件开发-原则、模式与实践(C#版

    《敏捷软件开发:原则、模式与实践》是Robert C. Martin(也被业界称为Uncle Bob)的经典著作,这本书深入探讨了敏捷开发的核心理念、最佳实践和实用技术,特别是在C#编程语言环境下的应用。以下是对该书主要内容的...

    敏捷开发和极限编程

    敏捷开发和极限编程是两种现代软件开发方法论,旨在应对传统开发模式中面临的挑战,特别是对变更的响应能力和快速交付高质量软件的需求。 敏捷开发源于2001年,由一群业界专家提出的敏捷联盟,强调了人与人之间交互...

    敏捷软件开发-概要篇

    敏捷软件开发是一种以人为核心、迭代、逐步交付的软件开发方法论。它强调灵活应对变化,以快速响应需求变更,提高软件开发效率和质量。在敏捷开发中,团队通过短期的工作周期,通常称为“冲刺”或“迭代”,来构建可...

    敏捷开发极限编程

    ### 敏捷开发与极限编程的关键知识点 #### 一、敏捷开发概述 ##### 1. 敏捷开发的定义及兴起原因 ...无论是敏捷开发的整体理念还是极限编程的具体实践,都为现代软件开发提供了强大的支持和指导。

    敏捷软件开发原则、模式与实践.pdf

    敏捷软件开发原则、模式与实践的知识,不仅适用于软件开发人员,也适用于项目经理、软件工程师以及软件架构师等。对于高校计算机专业本科生、研究生和软件学院的师生而言,这本书可以作为学习敏捷开发、极限编程、...

    敏捷软件开发.pdf

    Martin(也被称为“鲍勃叔叔”),作为软件开发和工程领域的大师,阐述了敏捷开发中的核心原则、设计模式和实践,尤其是在极限编程(Extreme Programming, 简称XP)方面的应用。XP是一种敏捷软件开发方法,它在预算...

    敏捷过程与极限编程的描述

    敏捷过程与极限编程,极限编程的有效实践 敏捷软件开发宣言

    敏捷软件开发-原则、模式与实践(C#版).chm

    4. **极限编程(XP)**:XP是一种敏捷开发方法,其核心实践包括测试驱动开发(TDD)、结对编程、持续集成、简单设计和重构等,这些在书中也会有详细阐述。 5. **模式与实践**:书中会讨论软件开发中的设计模式,如工厂...

    敏捷建模-极限编程和统一过程的有效实践

    综上所述,敏捷建模结合极限编程和统一过程,提供了一种灵活、高效和迭代的软件开发模式。通过采用.NET、C#、C++和Java等技术,开发团队可以利用强大的工具和库来实现敏捷原则,同时面向对象的编程思想能帮助他们...

    敏捷开发-敏捷软件开发:原则、模式与实践(全)(高清有目录)

    在本书中,享誉全球的软件开发专家和软件工程大师Robert C.Martin将向您展示如何解决软件开发人员、项目经理及软件项目领导...这本综合性、实用性的敏捷开发和极限编程方面的指南,是由敏捷开发的创始人之一所撰写的。

Global site tag (gtag.js) - Google Analytics