浅谈敏捷开发的思维

什么是敏捷

Agile(敏捷)来源于敏捷宣言,宣言明确指出,“敏捷”:

  • 不是一种方法论
  • 也不是开发软件的具体方法
  • 更不是一个框架或者过程

“敏捷”是一套价值观(理念)和原则,帮助团队在软件开发过程中更好地做出决策。


 什么是敏捷开发

        简而言之,就是遵循了“敏捷”这一开发原则的开发方法。

        “敏捷并不意味着一味强调速度,而是轻量和高效。”

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

思考🤔:对于一个项目工程,多人团队合作分工提交代码,按照敏捷开发思维,每个人员的代码应该相对独立可提测发板,而没有互相强依赖关系。不能应该一个人代码报风险阻塞就影响其他人,造成团队效率降低。举一反三,小到每一个产品需求,涉及到多个业务模块,也应该把需求拆分独立,抓住核心要点即可。大到团队管理,也是一样道理,不能一个部门delay其他部门都进入阻塞状态(停工等待)。

敏捷开发流程如下:

 

敏捷宣言

  • 个体和互动   高于    流程和工具
  • 工作的软件   高于    详尽的文档
  • 客户合作       高于    合同谈判
  • 响应变化       高于    遵循计划

注:这并不意味摒弃了右边的原则,而是应该更加注重左边的原则。

比如就“简单”和“尽早交付”而言:
当我们在构建某个功能时,发现其可能会需要数据库支持,一般情况下我们会去构建数据库并为其编码,然而敏捷认为:为这个功能构建数据库就意味着要浪费很多时间,软件就不得不延迟交付给客户,如果能找到一种替代的简单方法完成该功能,那就更符合我的敏捷原则。

敏捷开发的核心价值是“轻量、高效”,但不要形而上学,为了追求高效而删繁就简,应该保持在架构背景和长远规范的合理范围内去做敏捷开发。


瀑布模型开发

        瀑布型是最常见的结构开发方法。规定了计划、需求分析、设计、编码、测试的自上而下相互衔接的结构化开发方法,

各阶段介绍
需求分析

入口条件:项目计划书已通过评审

出口条件:软件需求规格说明书通过评审

操作过程:根据项目经理或者开发代表提出或者了解的用户需求,进行分析确认,由项目经理和系统分析人员共同指定需求规格说明书,主要说明软件的运行环境、开发工具以及详细的功能和性能需求。

设计

入口条件:软件需求规格说明书已通过评审

出口条件:软件设计说明书通过评审(可分为概要设计和详细设计)

操作过程:根据软件的需求规格说明书,将软件分解到功能模块一级,并定义好全局变量和全局数据以及各个模块之间的接口描述(一般可以将此整理成为概要说明书)。并根据模块划分,定义好实现每一个模块功能所需的结构、变量以及函数,并对每一个函数提供基于伪代码的实现(这些可拆分为详细设计说明书)。将这些形成软件设计说明书。

编码实现

入口条件:设计说明书已通过评审

出口条件:代码通过评审和编译检查,并通过运行测试

操作过程:开发人员根据详细设计说明书定义的函数实现过程,依照一定的编码规则,编写出软件的实现代码,然后使用编译检查工具对其进行编译检查

测试

入口条件:代码通过评审和编译检查,并通过运行的冒烟测试

出口条件:软件的功能和性能通过验证

操作过程:测试人员编写系统测试用例,并根据测试用例,在实际的系统运行环境中,验证软件的功能和性能(可分为单元测试、集成测试和系统测试)

优缺点
优点:结构清晰

缺点:测试在项目生命周期的最后阶段进行,当系统出现严重 Bug 并且修改代价很大时,就会无可避免的推迟项目提交日期。而且瀑布模型使得开发中的很多关键成员例如开发、测试处于长期空闲状态。测试人员由于最后才开始介入测试,会因为没有充分的准备而导致测试的缺失和不够深入



 
总结:在理解了“敏捷”的价值和原则后,将其带入到软件开发过程中做出正确的决策,就是所谓的敏捷开发了。

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/327395.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

PVE虚拟机配置文件恢复(qm list不显示虚拟机,web控制台看不到虚拟机)

本文章的目的是故障后复盘: 故障现象在命令行执行qm list不显示虚拟机,web控制台看不到虚拟机,网上查不到相关现象的处理办法。 处理思路:虚拟机还在正常工作,通过查看kvm进程ps aux | grep kvm,百度查看…

产品百度百科怎么创建?产品如何上百度百科?

百度百科作为一个权威的信息平台,承载着巨大的流量和曝光度。对于一个产品来说,能够在百度百科上拥有一席之地,无疑是一种极高的荣誉,同时也是提升品牌知名度、增加信任度的重要手段。产品百度百科不仅能够详细、全面地介绍产品信…

【学习iOS高质量开发】——熟悉Objective-C

文章目录 一、Objective-C的起源1.OC和其它面向对象语言2.OC和C语言3.要点 二、在类的头文件中尽量少引用其他头文件1.OC的文件2.向前声明的好处3.如何正确引入头文件4.要点 三、多用字面量语法,少用与之等价的方法1.何为字面量语法2.字面数值3.字面量数组4.字面量字…

跟着cherno手搓游戏引擎【6】ImGui和ImGui事件

导入ImGui: 下载链接: GitHub - TheCherno/imgui: Dear ImGui: Bloat-free Immediate Mode Graphical User interface for C with minimal dependencies 新建文件夹,把下载好的文件放入对应路径: SRC下的premake5.lua文件&#…

算法通关村番外篇-LeetCode编程从0到1系列四

大家好我是苏麟 , 今天带来算法通关村番外篇-LeetCode编程从0到1系列四 . 矩阵 1672. 最富有客户的资产总量 描述 : 给你一个 m x n 的整数网格 accounts ,其中 accounts[i][j] 是第 i​​​​​ 位客户在第 j 家银行托管的资产数量。返回最富有客户所拥有的 资产…

书客Sun立式护眼台灯正式上市,技术优势全面领跑,革新行业的护眼养眼!

在当今智能化的社会,我们与电子屏幕的接触日益增多,同时,无需离开家门即可享受各种便捷服务。由于过度使用电子设备、与阳光的接触机会逐渐减少或其他不合理的用眼习惯导致近视问题不断加剧。 作为专业的护眼品牌,SUKER书客深刻认…

Python画球面投影图

天文学研究中,有时候需要画的并不是传统的XYZ坐标系,而是需要画一个形如这样子的球面投影图: 下面讲一下这种图怎么画 1. 首先要安装healpy包 pip install healpy 2. 然后导入包 如果之前安装过healpy,有的会提示不存在healpy…

matlab串口数据交互的使用

一、matlab将串口数据读取并储存到position中 delete(instrfindall);%注销系统之前已经打开的串口资源 clear s %清空s的数据 s serial(COM6,BaudRate,115200);%定义串口及波特率 fopen(s)%打开串口 fwrite(s,00AB,)%向串口写入读取电机位置指令 for i1:8 %共8个电机position…

IPv6隧道--GRE隧道

GRE隧道 通用路由封装协议GRE(Generic Routing Encapsulation)可以对某些网络层协议(如IPX、ATM、IPv6、AppleTalk等)的数据报文进行封装,使这些被封装的数据报文能够在另一个网络层协议(如IPv4)中传输。 GRE提供了将一种协议的报文封装在另一种协议报文中的机制,是一…

【UE Niagara 喷射火焰系列】06 - 制作火焰喷射过程中飞舞的火星

在上一篇博客(【UE Niagara学习笔记】05 - 喷射火焰顶部的蓝色火焰)的基础上继续实现喷射火焰的火星的效果。 目录 效果 步骤 一、创建材质实例 二、添加新的发射器 2.1 设置粒子材质 2.2 设置发射器持续生成粒子 2.3 设置粒子生成数量 2.4 设…

day19【LeetCode力扣】160.相交链表

day19【LeetCode力扣】160.相交链表 1.题目描述 给你两个单链表的头节点 headA 和 headB ,请你找出并返回两个单链表相交的起始节点。如果两个链表不存在相交节点,返回 null 。 图示两个链表在节点 c1 开始相交**:** 题目数据 保证 整个链…

是时候丢掉 DDE 了

有人问我这样一个问题: “作为一名应用程序开发者,如果希望和外壳(Explorer/Shell)打交道,我可以直接忽略掉 DDE 吗?” 此问题的答案是:是的,完全没有任何问题。虽然在发明它的 16 位 Windows 协作多任务…

HubSpot电子邮件自动回复怎么设置?附注意事项!

HubSpot 提供了电子邮件自动回复的功能,使得企业能够更高效地管理和处理电子邮件通信。以下是关于 HubSpot 电子邮件自动回复的一些重要信息和步骤: 设置电子邮件自动回复的步骤: 登录HubSpot账户: 打开 HubSpot 平台并登录你的账…

数据管理系统-week2-对象数据模型

文章目录 前言一、对象的类二、关联(Association)三、 连接属性(Link Attribute)四、关联类(Association Class)五、Qualification五、Generalisation参考文献Association • Link Attribute • Association Class • Qualification • Generalization 前言 在实际的项…

Python--GIL(全局解释器锁)

在Python中,GIL(全局解释器锁)是一个非常重要的概念,它对Python的多线程编程有着深远的影响。GIL是Python解释器级别的锁,用于保证任何时刻只有一个线程在执行Python字节码。这意味着即使在多核处理器上,Py…

Java Web 状态管理(上) Cookie基础

Java Web 状态管理(上) Cookie基础知识 前言一、Cookie产生的背景(不重要)二、Cookie简介三、Cookie的使用场景引入添加苹果进入购物车添加香蕉进入购物车那么假设说没有Cookie正常有Cookie的情况 四、场景简单模拟创建第一个Serv…

蓝桥杯备赛day02 -- 算法训练题 拿金币Java

目录 题目: 问题描述 输入格式 输出格式 解题过程 第一步 定义dp数组 第二步 确定 dp 数组递推公式 第三步 dp数组的初始化 第四步 dp数组的遍历顺序 第五步 举例说明 报错:内存超限 用dp数组去存储位置上的金币 dp数组从二维降为一维 收获&a…

Spark详解

Spark 概念 Spark 提供了一个全面、统一的框架用于管理各种有着不同性质(文本数据、图表数据等)的数据集和数据源(批量数据或实时的流数据)的大数据处理的需求。 核心架构 Spark Core 包含 Spark 的基本功能;尤其是…

计算机毕业设计 基于Java的国产动漫网站的设计与实现 Java实战项目 附源码+文档+视频讲解

博主介绍:✌从事软件开发10年之余,专注于Java技术领域、Python人工智能及数据挖掘、小程序项目开发和Android项目开发等。CSDN、掘金、华为云、InfoQ、阿里云等平台优质作者✌ 🍅文末获取源码联系🍅 👇🏻 精…

A ConvNet for the 2020s

21世纪20年代的卷积神经网络 论文链接:https://arxiv.org/abs/2201.03545 项目链接:https://github.com/facebookresearch/ConvNeXt Abstract 视觉识别的“咆哮的20年代”始于视觉Transformer(ViT)的引入,它很快取代了卷积神经网络&#x…