软件工程务实——敏捷开发_敏捷软件开发-程序员宅基地

技术标签: 敏捷流程  软件工程  

1、敏捷开发的概述

敏捷软件开发( agile software development), 又称敏捷开发,是从20世纪90年代开始逐渐引起广泛关注的-些新型软件开发方法,它是一类轻量级的软件开发方法,提供了一组思想和策略来指导软件系统的快速开发并响应用户需求的变化。

随着软件交付周期的日益加快,迭代式敏捷开发方法渐成标准,已经成为大多数软件开发团队的必选项。迭代对整个团队的需求、架构、协同及测试能力都提出了更高的要求,敏捷可以被看成是迭代式开发的一种导人方式,只不过敏捷的范围其实比迭代化开发更大些。

简单地说,敏捷开发是一种以人为核心、 迭代、循序渐进的开发方法。在敏捷开发中,软件项目的构建被切分成多个子项目,各个子项目的成果都经过测试,具备集成和可运行的特征。换言之,就是把一个大项目分为多个相互联系但也可独立运行的小项目,并分别完成,在此过程中软件一直处于可使用状态。

什么叫以人为核心?

强调团队合作和交流。开发团队成员之间需要紧密合作,理解客户需求,共同努力完成软件开发任务。

什么叫迭代?

每一次执行这些步骤或过程被称为一次迭代,每一次迭代都会根据上一次迭代的结果进行调整和改进,直到得到满足特定条件的最终结果。

什么叫循环渐进?

通过逐步增加软件的功能,使得软件的交付过程更加可控和可预测。每个迭代周期都会添加一些新的功能,直到最终满足客户需求。

2、敏捷方法的由来

从20世纪70年代到90年代提出并使用的许多软件开发方法都试图在软件构思、文档化、开发和测试的过程中强加某种形式的严格性。在20世纪90年代后期,一些抵制这种严格性的开发人员系统地阐述了他们的原则,试图强调灵活性在快速有效的软件生产中所发挥的作用。

2001年,这群关注迭代和敏捷方法的人(铸就了“敏捷”这一术语)为寻求共识汇聚一堂。该会议的成果就是创建了敏捷联盟并发表了代表敏捷精神原则的“敏捷宣言”。敏捷宣言可以概括为四种核心价值和十二条原则,用于指导迭代的以人为中心的软件开发方法。“敏捷宣言”强调的敏捷软件开发的四种核心价值如下所示。
(1)“个体和交互”胜过“过程和工具”。

相对于过程和工具,他们更强调个人和交互的价值。这种观点包括给开发人员提供他们所需的资源,并相信他们能够做好自己的工作。开发团队将他们组织起来,让他们进行面对面交互式的沟通,而不是通过文档进行沟通。

(2)“可以工作的软件”胜过“面面俱到的文档”。

他们更喜欢在生产运行的软件上花费时间,而不是将时间花费在编写各种文档上。也就是说,对成功的主要测量指标是软件正确工作的程度。

(3)“客户合作”胜过“ 合同谈判”。

他们将精力集中在与客户的合作上,而不是在合同谈判上,从而客户成为软件开发过程的一个关键方面。

(4)“响应变化”胜过“遵循计划”。

他们专注于对变化的反应,而不是创建一个计 划而后遵循这个计划,因为他们相信不可能在开发的初始就预测到所有的需求。

“敏捷宣言”提出的十二条基本原则已经应用于管理大量的业务以及IT相关项目中,包括商业智能。这十二条基本原则如下所示。

(1)我们的最高目标是,通过尽早和持续地交付有价值的软件来使客户满意。

(2)欢迎对需求提出变更,即使到了项目开发的后期,也要善于利用需求变更,帮助客户创造竞争优势。

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

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

(5)要善于激励项目人员,给他们提供所需要的环境和支持,并且信任他们]能够完成工作。

( 6)无论是团队内还是团队间,最具有效果并且富有效率的传递信息的方法,就是面对面地交流。

(7)可用的软件是衡量进度的主要指标。

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

(9)坚持不懈地追求技术卓越和良好设计,将会增强敏捷能力。

( 10)要做到简单,即尽最大可能减少不必要的工作,这是一门艺术。

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

( 12)每隔一定时间,团队会在如何才能更有效地工作方面进行反省,然后相应地对自己的行为进行调整。

3、计划驱动开发和敏捷开发

软件开发的敏捷方法认为,设计和实现是软件过程的核心活动。敏捷方法将其他的活动,如需求的导出和测试,合并到设计和实现活动中。相对而言,软件工程的计划驱动方法,识别软件过程中的每个阶段及其相关输出。前一个阶段的输出作为规划接下来的过程活动的基础。对于系统描述,计划驱动和敏捷方法之间的不同如图2-5所示。

在这里插入图片描述
在计划驱动的方法中,迭代发生在各个活动之中,用正式文件在软件过程的各个阶段之间进行沟通。例如,需求演化,最终产生一个需求描述。这个需求描述又作为设计和实现过程的输人信息。根据这个需求,可以估计所需要的资源和时间,制定完美的计划。整个的开发过程,是完全按照计划来驱动的。

在敏捷方法中,迭代发生在所有活动之间。敏捷方法认为需求是不确定的,它是在固定的时间和资源范围内,估计出所需要实现的产品特性。通过这个价值的驱动,来实现用户需要的功能。因此,需求和设计阶段不是单独开发的,而是同时进行的。

计划驱动的软件过程可以支持增量式开发和交付。例如,分配需求并将设计和开发阶段计划为一系列的增量,这是完全可行的。敏捷过程也并不是一定围绕代码展开的,它可以产生-些设计文档,而不是产生一个新版本系统。实际上,大多数的软件工程包括计划驱动的开发和敏捷开发的实践。为了在计划驱动和敏捷方法之间得到平衡,通常需要回答以下一些技术的、人员和机构方面的问题。

(1)在实现开始之前,有非常详细的描述和设计非常重要吗?如果是,就需要使用计划驱动的方法。

(2 )增量交付策略,即软件交付给用户并快速地取得反馈,可行吗?如果是,考虑使用敏捷方法。

(3)开发的系统有多大?敏捷方法对于小的、处于同一地点的开发团队来说大多是有效的,这种团队的交流往往是非正式的。可能不适用于需要大的开发团队的大型系统,这种系统可能要用计划驱动的方法。

(4)开发的系统是什么类型?实施之前需要大量分析的系统(如有复杂时序要求的实时系统),通常需要相当详细的设计来实现这些分析。这种情况下,计划驱动的方法可能是最好的。

(5)预想的系统寿命是多长?长寿命的系统可能需要通过更多的设计文档来体现系统开发者的最初意向,以支持团队工作。然而,敏捷方法的支持者们认为,文档通常不能得到及时更新,且在长期的系统维护中很少用到。

(6)以什么样的技术来支持系统开发?敏捷方法通常依赖于好的工具。

4、如何选择敏捷方法

敏捷方法介绍
敏捷方法包含了很多具体的开发过程和方法,在这里面最有影响的两个方法就是极限编程和Scrum开发方法。如何选择哪种合适的方法取决于多种因素。在做出决定之前,通常需要充分考虑以下这些方面。
(1)方法的复杂度。确保创建的团队或组织能够应付这种复杂度。

(2)社区支持。流行的方法可能并不是最理想的选择,但流行的方法至少有较多的社区及行业支持,可以使开发小组受益匪浅。

(3)实用工具。选择一种可以提供许多支持工具的方法。一个良好的自动化工具可以帮助团队有效地处理日常工作,促进团队协作,并减少管理成本。

(4)目前的开发方式和目前团队关于敏捷方法的认识程度。选择一些与开发小组当前开发方式比较接近的敏捷方法将有助于推动该方法的实施。

(5)团队规模。较小规模的团队最好从简单的方式人手。当然,这并不意味着必须选择那些本身就比较简单的方法如Crystal Clear 。开发团队可以选择一些相对比较全面的方法,但从简单人手。当团队的规模逐渐扩大时,再增加相应的细节。

(6)不需要只遵从一种方法。可以为团队选择一个主要的方法(如Scrum法),然后从其他方法中借鉴对本团队或组织有所帮助的其他方式加以整合。

敏捷总是在不断发展演变的,因此,没有一个人能保证目前的敏捷方法都是正确的。每个采用敏捷开发的团队都可以通过发现并形成自已的想法和最佳实践,对敏捷开发做出自已的贡献。

5、学习总结

通过本课程和图书的学习,下面是我的一些总结:

认识到了适应变化的重要性:敏捷开发强调对变化的快速适应能力。在学习过程中,我意识到项目需求和环境往往是不断变化的,而敏捷方法能够帮助我们更好地处理这些变化。学会接受并适应变化,可以使我们更加灵活地应对挑战。

了解了团队合作的价值:敏捷开发注重团队成员之间的合作和沟通。通过与团队紧密合作,我深刻体会到团队协作的力量。团队成员相互支持、共享知识和技能,能够迅速解决问题并提高工作效率。

了解了快速反馈的积极作用:敏捷开发强调持续的反馈机制。我发现及时获取反馈对于项目的顺利进行至关重要。通过频繁的检查点和评估,我们可以及早发现问题并及时进行调整,使得项目能够保持正确的方向。

认识自我组织和自我管理的挑战:敏捷开发鼓励团队成员自我组织和自我管理。这对于每个人都是一种挑战,需要培养自我驱动力和责任感。在学习过程中,我意识到积极主动地承担责任和主动学习新知识非常重要。

通过持续改进的追求:敏捷开发鼓励团队不断地追求改进和学习。我体会到,通过不断反思和总结项目经验,我们可以发现问题并找到解决方案,使得每个项目都能够进步和提高。

总的来说,学习敏捷开发是一次锻炼和成长的过程。它教会了我灵活应对变化、与团队合作、接受快速反馈、自我组织和持续改进的重要性。这些经验和技能对于我的职业生涯和个人发展都具有长远的价值。

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_64278441/article/details/131605650

智能推荐

Qt制作局域网即时通讯软件_局域网内语音通话qt-程序员宅基地

文章浏览阅读5.5k次,点赞31次,收藏86次。Qt制作局域网即时通讯软件 利用Qt制作的局域网即时通信软件,可实现文本信息、表情包、图片、文档等的传输功能。界面风格模仿的Tim,所以本软件取名为Timi,tim的mini版本。登录界面:使用之前做的登录界面,后续修改。原因是没找到好的素材(不会美工),有会美工愿意提供素材的请联系。 文本信息发送:气泡效n果,文本信揭秘那息可自动换行,并且文本信息可选择/可复制。 发送..._局域网内语音通话qt

基于web的科研项目管理系统设计与实现_基于web的项目管理系统的设计与实现-程序员宅基地

文章浏览阅读5.1k次,点赞4次,收藏45次。需求:(1)项目申报模块包括申报新项目和我的申报信息。申报新项目:申报者对新项目进行申报,填写完申报信息并提交后,项目置为新申请状态;我的申报信息:申报者可以在我的申报信息里查看申报过的项目信息。(2)项目评审模块包括管理评审和专家评审。管理员评审:管理员对新申报的项目进行网络评审。专家评审:专家对初审状态的项目进行网络评审。(3)项目管理模块包括项目列表、项目进度和项目结题。项目..._基于web的项目管理系统的设计与实现

mysql dwith boost_linux下Mysql 8.0.19 编译安装-程序员宅基地

文章浏览阅读951次。1 前言linux下安装MySQL的方式有很多种,包括以仓库的方式安装(yum,apt,zypper),以包的方式安装(rpm,deb),以docker方式安装,从压缩包解压安装,从源码编译安装,这里使用的是最后一种,从源码编译安装。编译安装需要大量的耐心与时间,而且还会遇到非常多奇奇怪怪的问题,因此,需要极大的毅力,很有可能一万次失败也换不来一次的成功,请做好心理准备。2 准备工作下面是安装要求..._mysql dwith boost

mysql 高级(进阶学习)_mysql高级进阶-程序员宅基地

文章浏览阅读1.4k次,点赞2次,收藏8次。视图就是将某个查询语句存储在数据中,并为其命名,视图中并不存储数据,数据还是在基本表中存储。定义视图使用视图删除视图存储过程就是把一段处理逻辑存入到数据库中,使用是就由 JDBC 调用即可。调用存储过程可以减少应用程序和数据库交互次数,在数据库内部执行,执行效率高。存储事先需要定义,有三种参数类型:in 入参(接收调用者传入的数据)out 返回(向调用者返回数据)inout (既可以接收调用者传入的数据,也可以向调用者返回数据)函数是一个特殊的存储过程。存储过程不仅有输入参数,还有输出参数,但是没有返回值,_mysql高级进阶

goquery php,golang:Goquery简单爬虫实例-程序员宅基地

文章浏览阅读189次。Selection类型提供的方法,这些方法是页面解析最重要,最核心的方法1)类似函数的位置操作-Eq(indexint)*Selection//根据索引获取某个节点集-First()*Selection//获取第一个子节点集-Last()*Selection//获取最后一个子节点集-Next()*Selection..._goquery获取tbody的数据

计算机资源库在哪,电脑的资源管理在哪里-程序员宅基地

文章浏览阅读2.7k次。语音内容:大家好,我是时间财富网智能客服时间君,上述问题将由我为大家进行解答。电脑的资源管理的位置:1、单击开始菜单,在弹出的快捷菜单中选择文件资源管理器。2、按组合键Win+R打开运行窗口。3、在运行窗口中输入命令:explorer按回车键执行命令即可以打开资源管理器窗口。4、在桌面的任务栏上右击鼠标,在弹出的快捷菜单中选择“任务管理器。5、在任务管理器的菜单栏中选择文件中运行新任务。6、在运行..._计算机库到哪里找

随便推点

python文件加密_python加密文件-程序员宅基地

文章浏览阅读3.7k次。dd_python加密文件

推荐算法(一)--基本介绍_详细论述基于流行度的推荐算法的设计步骤法与应用特点-程序员宅基地

文章浏览阅读4.4w次,点赞26次,收藏194次。       &am_详细论述基于流行度的推荐算法的设计步骤法与应用特点

3DS轨迹球 + 光照_3d 模型 轨迹球旋转-程序员宅基地

文章浏览阅读388次。在前面的基础上 加个光照,会有什么效果?下面以博文《3D球体一个(纪念第一个opengl程序~~)》为模板,加入上一篇的代码下面是该文效果:加入我们的://显示有纹理贴图的3ds模型,+光照 +虚拟球旋转 //按a或d使...#define name3DS "Data/3ds/boy_back.3DS" //waji building_nb //wjj1_b_3d 模型 轨迹球旋转

整理一下nvm的安装以及安装后node生效且npm不生效的问题_nvm 安装之后 npm 不是有效-程序员宅基地

文章浏览阅读2.2w次,点赞35次,收藏134次。关于nvm / node / npm安装前须知nvm安装安装包地址配置路径和下载源检查nvm安装是否成功nvm相关指令node检查npm检查npm安装失败的处理查找和node版本相匹配的npm版本npm安装安装前须知必须卸载掉已有的node版本!!!这里不具体说了,如果不会卸载,可以参考这里:点击查看nvm安装安装包地址https://gitee.com/guozia007/layup-packages解压,傻瓜式安装,不过多说明了。配置路径和下载源来到安装nvm的文件夹,找到se_nvm 安装之后 npm 不是有效

对于以太坊的反思,美链,课程总结_学习以太坊感受-程序员宅基地

文章浏览阅读2k次。反思与总结_学习以太坊感受

Docker安装MySQL、nginx并且部署SpringBoot项目前后端(超详细版)_docker desktop 整合 nginx 和spring-程序员宅基地

文章浏览阅读1.4k次,点赞24次,收藏16次。超级详细的Docker部署Springboot项目的步骤,大家只需要按照文档一步一步的复制粘贴即可。_docker desktop 整合 nginx 和spring