前几天和同事们去西交大做校园宣讲,当然我是去帮忙加旁听的。:-) HR和同事们介绍了很多关于公司的情况,包括文化,价值观,敏捷开发等等,很多东西我都是第一次学习到,后来我对马同学说,你那富有激情的关于公司的敏捷介绍让我收获很大,他说我这句话给他很大的鼓舞,呵呵。
下面我将马同学的讲解简单介绍一下,首先看下面这个图:
这两个圆圈表示不同的视角上的敏捷实践,包括开发者视角和项目管理的视角。接下来从里向外进行介绍,因为有些实践我了解得不清楚,如果下面有哪些说得不对的地方也请大家指出。
Test-Driven Development,测试驱动开发,它是敏捷开发的最重要的部分。在ThoughtWorks,我们实现任何一个功能都是从测试开始,首先对业务需求进行分析,分解为一个一个的Story,记录在Story Card上。然后两个人同时坐在电脑前面,一个人依照Story,从业务需求的角度来编写测试代码,另一个人看着他并且进行思考,如果有不同的意见就会提出来进行讨论,直到达成共识,这样写出来的测试代码就真实反映了业务功能需求。接着由另一个人控制键盘,编写该测试代码的实现。如果没有测试代码,就不能编写功能的实现代码。先写测试代码,能够让开发人员明确目标,就是让测试通过。
Continuous Integration,持续集成。在以往的软件开发过程中,集成是一件很痛苦的事情,通常很长时间才会做一次集成,这样的话,会引发很多问题,比如build未通过或者单元测试失败。敏捷开发中提倡持续集成,一天之内集成十几次甚至几十次,如此频繁的集成能尽量减少冲突,由于集成很频繁,每一次集成的改变也很少,即使集成失败也容易定位错误。一次集成要做哪些事情呢?它至少包括:获得所有源代码;编译源代码;运行所有测试,包括单元测试、功能测试等;确认编译和测试是否通过,最后发送报告。当然也会做一些其它的任务,比如说代码分析、测试覆盖率分析等等。 在我们公司里,开发人员的桌上有一个火山灯用来标志集成的状态,如果是黄灯,表示正在集成;如果是绿灯,表示上一次集成通过,开发人员在这时候获得的代码是可用而可靠的;如果显示为红灯,就要小心了,上一次集成未通过,需要尽快定位失败原因从而让灯变绿。在持续集成上,我们公司使用的是自己开发的产品CruiseControl
Refactoring,重构。相信大家对它都很熟悉了,有很多很多的书用来介绍重构,最著名的是Martin的《重构》,Joshua的《从重构到模式》等。重构是在不改变系统外部行为下,对内部结构进行整理优化,使得代码尽量简单、优美、可扩展。在以往开发中,通常是在有需求过来,现在的系统架构不容易实现,从而对原有系统进行重构;或者在开发过程中有剩余时间了,对现在代码进行重构整理。但是在敏捷开发中,重构贯穿于整个开发流程,每一次开发者check in代码之前,都要对所写代码进行重构,让代码达到clean code that works。值得注意的是,在重构时,每一次改变要尽可能小,用单元测试来保证重构是否引起冲突,并且不只是对实现代码进行重构,如果测试代码中有重复,也要对它进行重构。
Pair-Programming,结对编程。在敏捷开发中,做任何事情都是Pair的,包括分析、写测试、写实现代码或者重构。Pair做事有很多好处,两个人在一起探讨很容易产生思想的火花,也不容易走上偏路。在我们公司,还有很多事都是Pair来做,比如Pair学习,Pair翻译,Pair做PPT,关于这个话题,钱钱同学有一篇很有名的文章对它进行介绍,名为Pair Programming (结对编程)。
Stand up,站立会议。每天早上,项目组的所有成员都会站立进行一次会议,由于是站立的,所以时间不会很长,一般来说是15-20分钟。会议的内容并不是需求分析、任务分配等,而是每个人都回答三个问题:1. 你昨天做了什么?2. 你今天要做什么? 3. 你遇到了哪些困难?站立会议让团队进行交流,彼此相互熟悉工作内容,如果有人曾经遇到过和你类似的问题,那么在站立会议后,他就会和你进行讨论。
Frequent Releases,小版本发布。在敏捷开发中,不会出现这种情况,拿到需求以后就闭门造车,直到最后才将产品交付给客户,而是尽量多的产品发布,一般以周、月为单位。这样,客户每隔一段时间就会拿到发布的产品进行试用,而我们可以从客户那得到更多的反馈来改进产品。正因为发布频繁,每一个版本新增的功能简单,不需要复杂的设计,这样文档和设计就在很大程度上简化了。又因为简单设计,没有复杂的架构,所以客户有新的需求或者需求进行变动,也能很快的适应。
Minimal Documentation,较少的文档。其实敏捷开发中并不是没有文档,而是有大量的文档,即测试。这些测试代码真实的反应了客户的需求以及系统API的用法,如果有新人加入团队,最快的熟悉项目的方法就是给他看测试代码,而比一边看着文档一边进行debug要高效。如果用书面文档或者注释,某天代码变化了,需要对这些文档进行更新。一旦忘记更新文档,就会出现代码和文档不匹配的情况,这更加会让人迷惑。而在敏捷中并不会出现,因为只有测试变化了,代码才会变化,测试是真实反应代码的。 这时有人会问:代码不写注释行吗?一般来说好的代码不是需要大量的注释吗?其实简单可读的代码才是好的代码,既然简单可读了,别人一看就能够看懂,这时候根本不需要对代码进行任何注释。若你觉得这段代码不加注释的话别人可能看不懂,就表示设计还不够简单,需要对它进行重构。
Collaborative Focus,以合作为中心,表现为代码共享。在敏捷开发中,代码是归团队所有而不是哪些模块的代码属于哪些人,每个人都有权利获得系统任何一部分的代码然后修改它,如果有人看到某些代码不爽的话,那他能够对这部分代码重构而不需要征求代码作者的同意,很可能也不知道是谁写的这部分代码。这样每个人都能熟悉系统的代码,即使团队的人员变动,也没有风险。
Customer Engagement ,现场客户。敏捷开发中,客户是与开发团队一起工作的,团队到客户现场进行开发或者邀请客户到团队公司里来开发。如果开发过程中有什么问题或者产品经过一个迭代后,能够以最快速度得到客户的反馈。
Automated Testing ,自动化测试。为了减小人力或者重复劳动,所有的测试包括单元测试、功能测试或集成测试等都是自动化的,这对QA人员提出了更高的要求。他们要熟悉开发语言、自动化测试工具,能够编写自动化测试脚本或者用工具录制。我们公司在自动化测试上做了大量的工作,包括Selenium开源项目。
Adaptive Planning,可调整计划。敏捷开发中计划是可调整的,并不是像以往的开发过程中,需求分析->概要设计->详细设计->开发->测试->交付,每一个阶段都是有计划的进行,一个阶段结束便开始下一个阶段。而敏捷开发中只有一次一次的迭代,小版本的发布,根据客户反馈随时作出相应的调整和变化。
敏捷开发过程与传统的开发过程有很大不同,在这过程中,团队是有激情有活力的,能够适应更大的变化,做出更高质量的软件。
- 大小: 113.1 KB
分享到:
相关推荐
#### 一、敏捷开发简介 敏捷开发(Agile Development)是一种以人为本、迭代式的开发方法论,旨在通过一系列灵活的管理策略和技术实践,提高软件开发团队的效率和响应市场变化的能力。相较于传统瀑布模型,敏捷开发...
1、敏捷开发简介 2、敏捷的起源 3、敏捷方法体系 4、敏捷宣言 5、为什么要敏捷?
**软件工程与敏捷开发简介** - **软件工程**:旨在研究和应用有效管理软件开发项目的科学。它涉及软件设计、开发、测试、维护等多个方面,并通过标准化的过程和技术来提高软件的质量和生产效率。 - **敏捷开发**:...
敏捷开发简介** 敏捷开发是一种以人为本、迭代、增量式开发的方法论。它强调快速响应变化、早期交付可用软件,并在整个项目生命周期中持续改进。敏捷开发的目标是在短时间内向市场交付高质量的产品,同时能够灵活...
### Flash敏捷开发:快速学习敏捷软件开发 #### 敏捷软件开发概述 敏捷软件开发是一种迭代的方法论,用于管理新软件开发项目的过程。它强调快速响应变化、客户满意度以及持续改进。与传统的瀑布模型不同,敏捷方法...
这份资料包包含了两份文件,分别是"敏捷开发.pdf"和"c++敏捷软件开发方法简介.ppt",旨在帮助开发者了解如何在C++项目中应用敏捷原则和实践。 **敏捷开发的核心理念** 1. **个体和互动高于流程和工具**:敏捷开发...
### 敏捷开发(原著)知识点详述 #### 一、敏捷开发概述 **敏捷开发**是一种以人为本、迭代渐进的软件开发方法论。它强调快速响应变化、重视客户合作与高质量交付价值。《敏捷开发(原著)》一书详细介绍了敏捷开发的...
**敏捷开发简介:** 敏捷开发是一种以迭代、循序渐进的方式进行软件开发的方法论。与传统的瀑布式开发模型相比,敏捷开发更加强调灵活性和快速响应变化的能力。它的核心目标是通过持续的交付和反馈循环,实现高效的...
Scrum敏捷开发简介 - **定义与起源**:Scrum是一种轻量级的敏捷开发框架,其名称来源于橄榄球运动中的“Scrum”概念,指的是比赛中的一种战术性排列,即球员们紧密聚集在一起,通过集体协作将球向前推进。在软件...
- **敏捷开发简介**: - **核心概念**:敏捷开发强调快速响应变化、客户满意度和团队协作。 - **价值观与原则**:《敏捷宣言》提出了四大价值观和十二条原则,指导敏捷开发实践。 - **不断创新**:敏捷方法鼓励...
4. **响应变化胜过遵循计划**:面对不可避免的变化,敏捷开发提倡灵活适应,认为能够快速响应变化的项目更有可能成功。计划应当是灵活的,随着项目的进展进行调整。 这些价值观衍生出了12条实践原则,其中包括: 1...
#### 第1章 敏捷开发简介 **敏捷开发**是一种以迭代、自适应为核心思想的软件开发方法。它强调团队与客户间的紧密合作,能够快速响应需求的变化,从而有效提高软件产品的质量和市场竞争力。 - **敏捷宣言的核心...
1. **个体和交互胜过过程和工具**:在敏捷开发中,人际关系、沟通和团队合作被认为比严格的流程和工具更重要。优秀的团队成员和良好的协作比单一的技术能力更能推动项目的成功。 2. **可以工作的软件胜过面面俱到的...
- **敏捷开发简介**: - 敏捷开发是一种迭代、循序渐进的开发方式,强调快速响应变化和持续交付高质量的软件产品。 - 其核心在于使团队更加灵活地应对变化,提高开发效率,确保产品能够快速适应市场需求的变化。 ...
敏捷软件开发方法简介 敏捷软件开发方法简介 敏捷软件开发方法简介
**敏捷软件开发简介** 敏捷软件开发是一种以人为核心、迭代、逐步交付的软件开发方法论。它强调在快速变化的需求环境中,通过灵活响应变化来提高软件项目的成功率。本PPT将深入探讨敏捷软件开发的基本理念、核心...
从编委简介中可以看出,参与编写《敏捷开发知识体系》的成员,例如李春林、宁德军、张忠等,他们拥有丰富的业界经验和对敏捷开发实践的深刻理解。这些业界专家来自不同的公司,具有不同的背景,但他们共同的实践经验...
敏捷开发为什么会出现呢,那最简介的解释就是,传统的开发模式已经越来越不能适应,某些领域的飞速发展。瀑布模型可是说是典型的预见性为驱动的方法,将软件生命周期划分为制定计划、需求分析、软件设计、程序编写、...
### Rails 敏捷开发实践 #### 一、引言 《Rails 敏捷开发实践》是一本关于如何高效地利用 Ruby on Rails 进行敏捷开发的经典书籍。本书由蔡望勤(Jesse Cai)撰写,他是一位资深的 Ruby 开发者,自2006年起便致力于...