zoukankan      html  css  js  c++  java
  • 极限编程学习思路整理

    一、什么是极限编程XP(Extreme Programming)?
    1、以开车为例,开车并不是简单把车开对方向,开车是需要保持注意力集中,这样调整一下,再那样调整一下。这里面包含了三个非常重要的东西:保持清醒、适应、改变。

    2、这个跟软件开发有什么关系?
     
    因为软件中所有东西都在改变(需求、设计、业务、团队、团队成员),问题不在于变化,因为变化总要发生,问题在于我们没有应对变化的能力。
    就好像车不会永远是沿着笔直的公路往前走,由开车的人来决定车应该往哪个方向走。这就相当于我们软件开发中“客户驱动系统内容”,由客户来决定想要的是什么?
    开车的过程中,我们需要不断的小的来适应。这就好比软件开发过程中“团队驱动开发过程”,团队的每一项是实践都是不断地改进效率,沟通,自信心和生产率的试验。通过短周期的部署软件朝着目标前进,在这个过程中不断地去适应变化,避免很长时间才发现自己走错了方向。

    3、那么到底什么是极限编程?
    极限编程是一种轻量级的方法论,适用于中小规模团队面对模糊或者快速变化的需求。
    极限,就是将常识性的原理和实践用到极致。
    二、极限编程是要解决什么问题?
    (1)、人的问题:需要我们坦诚自己有能力做什么,然后去做能所能及的事。放弃我们不成熟的自负,好像自己比谁都懂得多。找到自己在团队中最合适的位置,然后做最适合自己的事,然后在做事的过程中不断地去调整自己以适应团队的需要,让自己成为最好的自己。
    (2)、团队的问题:好的合作关系是做好事情的保证。良好的沟通协作非常的重要。
    极限编程,就是致力于解决:编程技术、清晰沟通和团队协作的问题。
    三、起源和发展?
    (1)、90年代初,Kent Beck、Ward Cunningham和Ron Jeffries三人一起提出了极限编程方法。
    (2)、1999年,Kent Beck编写了《Extreme Programming Explained - Embrace Change》。
    (3)、2004年,《Extreme Programming Explained - Embrace Change》的第二版出版。

    四、价值观?
    沟通、简单、反馈、勇气、尊重。
    五、有哪些实践?
    一、技术层面
    基本实践:
    (1)、结对编程:分析、设计、测试等各阶段都可以。
    (2)、测试先行:测试-编码-重构-测试-编码-重构,可以避免范围蔓延、降低耦合提高内聚、用自动化保证代码的正确性以获取队友的新人、节奏(小步快跑)。
    (3)、增量设计:保持当前设计在能满足当前需求的情况下的最简单设计。但需要利用重构等手法,保持代码的整洁,提高代码的可维护性,对修改封闭,对扩展开放,对后续的变化有很好的适应性。
    扩展实践:
    (1)、共享代码:建立团队的统一编码风格和编程标准,让团队成员共同承担责任,为团队的代码负责,消除强相关性。结对编程很有利于这项实践的达成,同时持续集成也是集体所有制的一个重要先决条件。
    (2)、代码和测试:项目中需要永久维护的只有代码和测试,其他文档都可以从代码和测试中生成。至于项目的重要历史记录,则依靠技术机制来维护。(比如:Svn,所以不要把需要删除的代码注释掉,应该直接去掉)
    (3)、单一代码库:保持一个代码主干。你可以在一个临时分支上开发,但永远不要让它的生存期超过几个小时。多代码流是软件开发中巨大的浪费源。可以通过改善构建体系,从同一个代码库生成几个产品,把变更放到配置文件里来缓解这个问题。
    相关实践和书籍推荐:
    语言&框架:
    新手:《Java核心技术》、《深入浅出Java》、《Agile Java中文版:测试驱动开发的编程技术》
    高级新手:《Thinking in Java》、《Effective Java》、《Java程序性能优化》
    胜任者:阅读JDK源代码、《深入理解Java虚拟机》、《Java并发编程实践》、《分布式Java应用基础与实践》、《Java程序员修炼之道》
    精通者:阅读Spring Hibernate等优秀框架源码、《Spring 技术内幕》
    重构:
    新手:《重构》
    高级新手:做重构练习、阅读《重构手册》
    胜任者:《重构与模式》、《Head First设计模式》
    精通者:《修改代码的艺术》、《The Mekado Method》、做Mekado练习。
    专家:《领域特定语言》
    Clean Code:
    新手:《clean code》
    高级新手:《重构》
    精通者:持续代码审查
    专家:《Head First设计模式》
    自动化测试:
    高级新手:学会使用JUnit、Mockito、Powerock、Hamcrest等工具、《单元测试的艺术》、《单元测试之道》、《Google软件测试之道》
    胜任者:《测试驱动开发:实战与模式解析》、《测试驱动开发的艺术》
    精通者:学习Selenium WebDriver、《Cucumber:行为驱动开发指南》、《验收测试驱动开发:ATDD实例详解》
    专家:《实例化需求:团队如何交互正确的软件》
    模式:
    新手:《Head First设计模式》、《敏捷软件开发原则、模式与实践》
    高级新手:《Java与模式》、《实现模式》
    胜任者:分享设计与模式、《分析模式:可复用的对象模型》
    精通者:《重构与模式》、《企业应用架构模式》
    设计:
    新手:《敏捷软件开发原则、模式与实践》
    高级新手:阅读开源框架的源码、《软件架构师的12项修炼》
    胜任者:Review项目中的设计、《恰如其分的软件架构:风险驱动的设计方法》、《架构之美》
    精通者:《企业应用架构模式》、《领域驱动设计》、《实现领域驱动设计》

    二、团队层面
    基本实践:
    (1)、坐到一起(便于日常协作过程中的沟通和交流)。
    (2)、完整团队(各种技能和视角的人构成一个完整的跨职能团队)。
    (3)、富含信息的工作空间(可视化的展现出团队的状态,比如:故事卡墙,这些信息都是重要的、活跃的、实时更新的)。
    (4)、充满活力的工作(软件开发项目是马拉松长跑而不是全速短跑。我希望每天都是精力充沛的,每天晚上都是疲惫又心满意足的。我希望周五那天虽然疲惫却心满意足,然后我希望周一能够充满热情和创意地投入工作。)。
    扩展实践:
    (1)、团队连续性(把人抽象为即插即用的编程单位,一旦项目完成了,他们重新回到“池”中,这种测量可以将微观效率最大化,但会破坏组织的整体效率。通过保持队员在一起,并且鼓励合理数量的调整,组织可以获得团队稳定性和知识经验的持续传播所带来的双重收益)。
    (2)、缩减团队(随着团队能力的增强,保持工作量不变,同时逐渐减少团队的规模。这样可以从团队中抽出人来组成更多的团队)
    (3)、根源分析(每次开发后发现一个缺陷,都要同时排除这个缺陷和它产生的原因。我们的目标不仅仅是这个缺陷不再会重现,还要保证团队不要再犯同类的错误。这里推荐大家使用“五个为什么”来帮助大家分析问题的根源)。
    三、计划
    基本实践:
    (1)、故事:有别于需求,故事需要“尽早估算”,估算为业务和技术观点的交流提供了机会,让大家知道什么东西可以较早创造价值。
    (2)、周循环:一次计划一周的工作,让团队有短期目标,保持节奏感。
    (3)、季度循环:一次计划一个季度的工作。每个季度根据更大的目标对团队、项目、进度和安排做一次反省。
    (4)、松弛:在任何计划中,都包含一些假如落后了就可以取消的小任务。你总可以再后来增加更多的故事、交付比承诺更多的故事。保持承诺的有效性,建立起良好的信任关系。

    四、持续集成和交互
    基本实践:
    (1)、十分钟构建:快速反馈,构建整个系统和运行所有的测试,缩短反馈时间。
    (2)、持续集成:不超过两个小时,就对改变的地方进行一次集成和测试。时间越长,代价越高。
    扩展实践:
    (1)、增量部署:大的部署会导致高风险和昂贵的人力及经济成本,找到你马上能处理的小块功能或少量的数据集,并部署它。
    (2)、每日部署:构建环境是平稳并自动化的。缺陷率需要足够的低(每年几个)。部署工作必须是自动化的,增量产出和失败有回滚能力。团队成员及团队成员和客户间高度信任。实际工作中,我们可能做不到每日部署,但可以把它作为前进的方向,比如:每周部署,隔周部署,每月部署等。
    推荐书籍和实践:
    新手:学习Maven、Gradle、《Maven实战》、《Gradle In Action》
    高级新手:学习Jekins、学习配置管理、《持续集成》
    胜任者:使用脚本自动化开发环境搭建、《持续交互》
    精通者:学些Chef、Puppet,使用Vagrant、Packer虚拟化环境
    五、业务
    扩展实践:
    (1)、真实客户参与。
    (2)、范围可协商的合同:将大而长的合体分成两份或者多份,附上可选的实现部分。有“变更要求”的高成本合同,可以在开始时确定一个较小的边界,以降低带来的成本。这种机制鼓励沟通和反馈,并让每个人都有勇气做现在看起来正确的事情,而不用仅仅因为合同要求去做那些无用的事情。
    (3)、依用付费:在系统每次被使用时收费,让团队得到直接有效的反馈,得到系统精确而及时的信息,使其工作更有效率,还可以优化成本,提高利润。如果做不到,也可采用“订阅模式”,团队可以通过保持率(继续订阅的客户人数)来获取系统的反馈信息。

    https://book.douban.com/review/7467829/

  • 相关阅读:
    类的几个内置函数,装饰器
    面向对象,类的介绍
    模块,包,获取命令行的输入
    三元运算 ,列表推导式,迭代器,生成器
    测试运行kafka的时候缺少包的错误
    mysql5.5版本以后插入中午显示问号的解决办法
    mysql 不能插入中文和显示中文
    WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
    Hive环境的安装部署(完美安装)(集群内或集群外都适用)(含卸载自带mysql安装指定版本)
    hive的安装,一般不容易察觉的hdfs的配置问题导致hive安装的失败
  • 原文地址:https://www.cnblogs.com/xiang--liu/p/10402150.html
Copyright © 2011-2022 走看看