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

时间:2024-04-01 17:34:28

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

前言

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

现代软件开发特点

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

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

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

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

  注意,敏捷宣言的提出都是建立在需求变化频繁的基础上,每一条宣言的后半句所提到的如过程工具并不是不重要,只是我们更重视前面的东西。正如大神Kent Beck 所说的:
【软件工程基础】敏捷软件开发(Agile Software Development)

敏捷指的是什么?

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

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

敏捷过程特点

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

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

敏捷原则12条

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

总结

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

  老话又谈,写完收工。