软将工程基础第三篇:敏捷软件开发(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个特点:
- 需求变化频繁
- 技术变化过快
- 人员变动频繁
- 工程进度紧张
针对现在的软件开发特点,大神们就提出很多关于如何敏捷开发软件的思想。
敏捷宣言(Agile Manifesto)
针对现代软件开发特点,提出了敏捷宣言,有以下4项:
1.个体和交互要胜过过程和工具。
交互是构建一个高效团队的关键,如下方法有利于良好的交互(了解):
- 明确 原则和目标
- 确保沟通环节之间的关联性
- 确保表达正确 并 理解准确
- 沟通不应该有主观情绪,否则容易转换成对错之争
- 不要让无意义的争论持续
2.工作的软件胜于详尽的文档
正如瀑布模型里面所说的,文档的作用是方便人员理解软件。但是现代软件需求变化大,产生的文档可能数量繁多,不利于管理,并且可能前一阶段性的文档在面对新的变化时,就会变得无用,或是起误导作用。
根据马丁文档第一定理,只有当迫切需要,具有重大意义时,才采取文档。而工作的软件可视化性,直观性优于繁琐的文档,更有利于人员快速理解软件。
3.客户的合作胜过谈合同
现代软件开发变化过大,签合同显得意义不大。所以强调和用户紧密合作,这样可以及时地得到用户的反馈,而不是依赖于过时的合同中关于软件开发需求的描述。
4.响应变化而不是遵循计划
简单来说就是需求变化大,遵循计划显得意义不大。这里不是说计划没有用处。而是说针对软件开发时,近期计划要明确,远期计划要模糊。
注意,敏捷宣言的提出都是建立在需求变化频繁的基础上,每一条宣言的后半句所提到的如过程工具并不是不重要,只是我们更重视前面的东西。正如大神Kent Beck 所说的:
敏捷指的是什么?
敏捷宣言指的敏捷指的是如下方面(当然不止这么多):
- 对变化做出有效响应
- 利益相关者要做有效的交流
- 拉客户到团队
- 组建团队 ,控制其能完成有效的工作
- 快速 增量式 的交付软件
敏捷过程特点
- 用户需求驱动
- 计划是短期的
- 迭代增量式的开发软件 而且重在构建活动
- 交付多个软件增量
- 随着变化而调整
敏捷原则12条
1.最优先要做的是通过尽早地、持续地交付有价值的软件来使客户满意。
这里主要指的是尽早让软件和客户见面,这样能及早地获得用户反馈。当然,为了快速,我们的功能可以相对少一点,可以通过得到每一次反馈之后,继续开发软件,然后又和客户见面(持续性)。
2. 即使在开发后期,也欢迎需求改变。敏捷过程利用变化来为客户创造竞争优势。
现代软件开发的特点就是需求变化大,所以要拥抱变化,当然,这样的需求变化也有利于团队的构建和团队成员能力的提升。
3.经常性地交付可以工作的软件,交付的间隔可以从几个星期到几个月,交付的时间间隔越短越好。
这里强调的是可工作的软件,正如敏捷宣言第二条,这有利于人去理解软件。强调间隔时间短,主要指的是时间短,变化就小,并且能及时得到用户反馈。
4.在整个项目开发期间,业务人员和开发人员必须天天在一起工作。
便于交流,及时得到软件需求。
5.围绕有积极性的个人构建项目团队。为他们提供所需的环境和支持,并信任他们 能够完成工作。
高效团队和友好环境有利于软件开发。
6.在团队内部,最有效果并富有效率的信息传递方法是面对面的交流。
面对面交流有利于达成共识,及时获得反馈。
7.可运行的软件是首要的进度度量标准。
不从开发阶段看进度(开发者),而是从客户角度(工作软件功能完成度)看进度。
8.敏捷过程提倡可持续的开发速度。责任人、开发者和用户应该能够保持一个长期 的、稳定的开发速度。
这有利于客户进行项目规划和控制,有利于开发团队保持旺盛战斗力
9.持续关注优秀的技能和好的设计,增强敏捷能力。
通过敏捷软件开发,每一个人都可以担任各种角色 ,多面手,获得能力的提升。
10.简单(是不必做的工作最大化的艺术)是必要的。
敏捷开发不强调对明天问题预测 ,强调当下 ,不扩大今天的工作。简单才能专注。此外,把复杂问题简单化。
11.最好的架构、需求和设计出自于自组织的团队。
类5,高效团队有利于软件开发。
12.每隔一段时间,团队应反省如何才能有效地工作,并相应地调整自身的行为。
这其实是如11所示的,是自组织的表现。团队是一个整体,反省有利于构建一个高效的团队。
总结:敏捷原则其实大部分看重的是组织管理,如如何构建一个高效团队,如何提升个人能力,如何和用户交流。另外一部分是针对技术需求,如尽早交付软件,拥抱变化等等。
总结
敏捷软件开发,基础是拥抱变化,以及围绕基础如何快速开发软件。其实归根起来,是人和技术。人:如开发团队要积极,客户要配合。技术:如快速交付软件获取需求,可视化软件等等。
老话又谈,写完收工。