【软件工程基础】敏捷软件开发(Agile Software Development)

  软将工程基础第三篇:敏捷软件开发(Agile Software Development)。下文图片,摘自老师ppt。

文章目录

  • 前言
  • 现代软件开发特点
  • 敏捷宣言(Agile Manifesto)
  • 敏捷指的是什么?
  • 敏捷过程特点
  • 敏捷原则12条
  • 总结

前言

  现代软件开发有需求变化大,人员流动大等特点,传统的软件生存周期模型难以很好的交付软件。所以,针对现代软件开发的特点,有前辈大神们就总结出了敏捷软件开发的思想和方法。本文简单总结敏捷软件开发的一些知识点

现代软件开发特点

  Software development fails to deliver, and fails to deliver value. This failure has huge economic and human impact. We need to find a new way to develop software.
                       -Kent Beck

  (传统软件开发模式下)现代软件开发难以交付软件,即是交付软件,也难以保证软件的价值。具体来讲,软件开发具有如下4个特点

  1. 需求变化频繁
  2. 技术变化过快
  3. 人员变动频繁
  4. 工程进度紧张

  针对现在的软件开发特点,大神们就提出很多关于如何敏捷开发软件的思想。

敏捷宣言(Agile Manifesto)

  针对现代软件开发特点,提出了敏捷宣言,有以下4项:

【软件工程基础】敏捷软件开发(Agile Software Development)_第1张图片
1.个体和交互要胜过过程和工具。
  交互是构建一个高效团队的关键,如下方法有利于良好的交互(了解):

  1. 明确 原则和目标
  2. 确保沟通环节之间的关联性
  3. 确保表达正确 并 理解准确
  4. 沟通不应该有主观情绪,否则容易转换成对错之争
  5. 不要让无意义的争论持续

2.工作的软件胜于详尽的文档
  正如瀑布模型里面所说的,文档的作用是方便人员理解软件。但是现代软件需求变化大,产生的文档可能数量繁多,不利于管理,并且可能前一阶段性的文档在面对新的变化时,就会变得无用,或是起误导作用
  根据马丁文档第一定理,只有当迫切需要,具有重大意义时,才采取文档。而工作的软件可视化性,直观性优于繁琐的文档,更有利于人员快速理解软件

3.客户的合作胜过谈合同
  现代软件开发变化过大,签合同显得意义不大。所以强调和用户紧密合作,这样可以及时地得到用户的反馈,而不是依赖于过时的合同中关于软件开发需求的描述。

4.响应变化而不是遵循计划
  简单来说就是需求变化大,遵循计划显得意义不大。这里不是说计划没有用处。而是说针对软件开发时,近期计划要明确,远期计划要模糊。

  注意,敏捷宣言的提出都是建立在需求变化频繁的基础上,每一条宣言的后半句所提到的如过程工具并不是不重要,只是我们更重视前面的东西。正如大神Kent Beck 所说的:
在这里插入图片描述

敏捷指的是什么?

  敏捷宣言指的敏捷指的是如下方面(当然不止这么多):
【软件工程基础】敏捷软件开发(Agile Software Development)_第2张图片

  1. 对变化做出有效响应
  2. 利益相关者要做有效的交流
  3. 拉客户到团队
  4. 组建团队 ,控制其能完成有效的工作
  5. 快速 增量式 的交付软件

敏捷过程特点

【软件工程基础】敏捷软件开发(Agile Software Development)_第3张图片

  1. 用户需求驱动
  2. 计划是短期的
  3. 迭代增量式的开发软件 而且重在构建活动
  4. 交付多个软件增量
  5. 随着变化而调整

敏捷原则12条

1.最优先要做的是通过尽早地、持续地交付有价值的软件来使客户满意。

  这里主要指的是尽早让软件和客户见面,这样能及早地获得用户反馈。当然,为了快速,我们的功能可以相对少一点,可以通过得到每一次反馈之后,继续开发软件,然后又和客户见面(持续性)。

2. 即使在开发后期,也欢迎需求改变。敏捷过程利用变化来为客户创造竞争优势。

  现代软件开发的特点就是需求变化大,所以要拥抱变化,当然,这样的需求变化也有利于团队的构建和团队成员能力的提升。

3.经常性地交付可以工作的软件,交付的间隔可以从几个星期到几个月,交付的时间间隔越短越好

  这里强调的是可工作的软件,正如敏捷宣言第二条,这有利于人去理解软件。强调间隔时间短,主要指的是时间短,变化就小,并且能及时得到用户反馈。

4.在整个项目开发期间,业务人员和开发人员必须天天在一起工作

  便于交流,及时得到软件需求。

5.围绕有积极性的个人构建项目团队。为他们提供所需的环境和支持,并信任他们 能够完成工作。

  高效团队和友好环境有利于软件开发。

6.在团队内部,最有效果并富有效率的信息传递方法是面对面的交流。

  面对面交流有利于达成共识,及时获得反馈。

7.可运行的软件是首要的进度度量标准。

  不从开发阶段看进度(开发者),而是从客户角度(工作软件功能完成度)看进度。

8.敏捷过程提倡可持续的开发速度。责任人、开发者和用户应该能够保持一个长期 的、稳定的开发速度。

  这有利于客户进行项目规划和控制,有利于开发团队保持旺盛战斗力

9.持续关注优秀的技能和好的设计,增强敏捷能力。

  通过敏捷软件开发,每一个人都可以担任各种角色 ,多面手,获得能力的提升。

10.简单(是不必做的工作最大化的艺术)是必要的。

  敏捷开发不强调对明天问题预测 ,强调当下 ,不扩大今天的工作。简单才能专注。此外,把复杂问题简单化。

11.最好的架构、需求和设计出自于自组织的团队。

  类5,高效团队有利于软件开发。

12.每隔一段时间,团队应反省如何才能有效地工作,并相应地调整自身的行为。

  这其实是如11所示的,是自组织的表现。团队是一个整体,反省有利于构建一个高效的团队。

总结:敏捷原则其实大部分看重的是组织管理,如如何构建一个高效团队,如何提升个人能力,如何和用户交流。另外一部分是针对技术需求,如尽早交付软件,拥抱变化等等。

【软件工程基础】敏捷软件开发(Agile Software Development)_第4张图片

总结

  敏捷软件开发,基础是拥抱变化,以及围绕基础如何快速开发软件。其实归根起来,是人和技术。人:如开发团队要积极,客户要配合。技术:如快速交付软件获取需求,可视化软件等等。

  老话又谈,写完收工。

你可能感兴趣的:(软件工程基础)