「敏捷建模」敏捷设计理念的纪律

news2024/11/27 10:24:05

本文概述了敏捷软件开发团队的设计策略。这些策略对于扩展敏捷软件开发以满足现代IT组织的实际需求至关重要。敏捷的设计方法与传统方法截然不同,显然也更有效。重要的是要了解:

  • 敏捷设计实践

  • 敏捷设计理念

  • 整个敏捷生命周期的设计

1.敏捷设计实践

从高级架构实践到低级编程实践,有一系列敏捷设计实践,参见图1。这些实践中的每一个都很重要,如果您的团队要在敏捷设计方面有效,则每个实践都是必需的。

图1.敏捷设计实践。

368f6e8aa68a33366271dc5cf4eae0b8.jpeg

2.敏捷设计理念

  1. 敏捷设计是紧急的,它们不是预先定义的。随着时间的推移,您的整体系统设计将不断涌现,不断发展以满足新的需求并酌情利用新技术。虽然在“迭代0”期间您经常会在项目的最初阶段进行一些初始架构建模,但这足以让您的团队继续前进。在您开始编码之前,敏捷者不需要获得完整记录的模型集(尽管有时,有时候,您可能需要执行前瞻性建模)。

  2. 您的单元测试构成了大部分详细的设计文档。使用测试驱动开发(TDD)开发方法,您可以编写测试,然后编写足够的域代码来完成测试。这种方法的一个重要副作用是,您的单元测试不仅验证您的代码,它们还以可执行规范的形式构成您的大部分设计文档。TDD是AMDD的补充,实际上是由AMDD扩展的。

  3. 设计模型需要勉强够用。您不需要对模型中的每个细节进行建模,模型不需要完美,并且它们当然不需要完整。还记得你最后一次从设计规范编码(如果你曾经做过)?你真的看过所有细粒度的细节吗?不,因为你有足够的能力自己处理细节。

  4. 多种型号。有效的开发人员意识到每种类型的模型都有其优点和缺点,因此他们需要为手头的工作应用正确的模型。由于软件开发很复杂,因此您很快意识到需要了解各种模型才能有效。本新闻稿中提到的所有模型等都在Agile Models Distilled页面中进行了描述。

  5. 您通常只需要模型的子集。虽然您可以使用许多建模技术,但事实是任何给定的项目团队只需要一个子集。可以这样想:在家里的工具箱里,你有各种各样的螺丝刀,扳手,钳子等等。对于任何给定的维修工作,您将只使用一些工具。不同的工作,不同的工具。您永远不需要同时使用所有工具,但随着时间的推移,您将以各种方式使用它们。

  6. 每种型号都可用于各种用途。UML类图可用于描述高级域模型或低级设计,更不用说介于两者之间的事物了。用例可用于模拟流程的基本性质或详细的系统使用描述,其中考虑了架构决策。永远不要低估模型的灵活性。

  7. 设计师也应该编码。每当模型被移交给其他人进行编码时,程序员就不会理解模型,会遗漏一些细微差别,甚至可能完全忽略模型以支持他们自己的方法。此外,即使交接成功,您也会发现模型中需要的细节远远多于您自己编写的细节。简而言之,将设计与编程分离是一个风险和昂贵的主张。在团队中推广可以设计和编码的专家是更有效的。

  8. 用代码证明它。永远不要假设你的设计有效相反,通过编写代码来确定它是否确实有效,从而获得具体的反馈。

  9. 反馈是你的朋友。永远不要忘记你和你团队中的其他人一样只是凡人。期待收到反馈 - 我建议您积极寻求 - 关于您的工作,并准备好考虑并采取相应行动。您的系统不仅会更好,您还可以在此过程中学到一些东西。

  10. 有时最简单的工具是复杂的CASE工具。在需求方面,我更喜欢纸和白板等包容性工具,但在设计方面,我倾向于使用复杂的工具(重新)为我生成代码。就像我的祖父总是说的那样,你应该使用合适的工具来完成工作。

  11. 迭代,迭代,迭代。使用迭代的开发方法,您可以根据需求进行一些工作,进行一些分析,进行一些设计,一些编码,一些测试,并根据需要在这些活动之间进行迭代。您还将在处理各种工件之间来回迭代,在正确的时间处理正确的工件。

  12. 设计非常重要,你应该每天都这样做。在构建之前,仔细思考如何构建某些东西,实际设计它是至关重要的。您的设计工作可以采用白板上的草图形式,使用复杂建模工具创建的详细模型,或者在编写业务代码之前编写的简单测试。敏捷开发人员意识到设计是如此重要以至于他们每天都在做,设计不仅仅是您在完成编写源代码的“实际工作”之前在项目早期所做的一个阶段。

  13. 明智地为您的实施环境设计。利用您的实施环境的功能,但要聪明一点。权衡是正常的,但要了解其影响并管理所涉及的风险。每次使用产品(例如数据库,操作系统或中间件工具)中的独特性能增强功能时,您可能会将系统与该产品耦合,从而降低其可移植性。为了最大限度地降低实施环境对系统的影响,您可以对软件进行分层并包装特定功能,使其对用户显得通用。

  14. 记录复杂的事情。如果它很复杂,那就彻底记录下来。更好的是,花时间设计它,这很简单。记住AM练习创建简单内容。

  15. 不要过度记录。您需要记录您的设计,但不应该过度记录。请记住,用户付钱给您构建系统,而不是记录它们。在记录和文档之间有一个细微的界限,只有通过经验才能找到它。在文档方面尽量保持敏捷。

  16. 不要被数据社区所牵制。不幸的是,数据社区中的许多人认为您需要采用串行方法进行设计,尤其是涉及数据库时。这种信念是由于不了解进化发展或某种被误导的需要来确定“一个真理高于一切”。诸如敏捷数据建模,数据库重构和数据库回归测试等进化数据库设计技术在实践中工作得非常好。

  17. 记住用户体验(UX)。对于最终用户,用户界面(UI)是系统。这意味着您的设计的一个重要方面是UX。有关更多信息,请参阅敏捷可用性简介以及如何将设计集成到敏捷过程中。

3.整个生命周期的设计

图2描绘了通用敏捷软件开发生命周期。为了便于讨论,需要注意的重要一点是,传统主义者不熟悉设计阶段,也没有需求阶段。敏捷开发人员将在迭代0期间进行一些高级架构建模,也称为预热阶段,在开发迭代期间甚至在最终游戏期间(如果需要)进行详细设计。

图2. Agile SDLC(单击以展开)。

a78b6272f353aeeeb6fdfb9a820b2088.jpeg

图3描绘了敏捷模型驱动开发(AMDD)生命周期,其重点是建模如何适应整个敏捷软件开发生命周期。在项目早期,您至少需要了解如何构建系统。它是大型机COBOL应用程序吗?一个.Net应用程序?J2EE?别的什么?在迭代0期间,项目的开发人员将聚集在一个房间,通常围绕白板,讨论,然后勾勒出系统的潜在架构。这种架构可能会随着时间的推移而发展,它不会非常详细(它现在只需要足够好),并且需要编写很少的文档(如果有的话)。目标是确定架构策略,而不是编写大量文档。

图3. AMDD生命周期。

04b183406b424adf353d40d64d581d41.jpeg

当开发人员有新的实施要求时,他们会问自己是否理解要求的内容。如果没有,那么他们会做一些即时(JIT)“模型风暴”来确定实施要求的策略。这种模型风暴通常在迭代开始时在迭代的详细规划工作期间完成,或者在迭代期间的某个时间如果他们意识到他们需要进一步探索需求。这种建模工作的一部分将是对需求的分析以及解决方案的设计,这通常会在几分钟的时间内发生。在极限编程(XP)中,他们将此称为“快速设计会话”。

如果团队采用测试驱动开发(TDD)方法,则详细设计被有效地指定为开发人员测试,而不是详细模型。因为在编写足够的生产代码来完成测试之前编写测试,实际上在编写测试时会考虑生产代码的设计。您不是创建必然会过时的静态设计文档,而是编写一个可执行规范,开发人员可以通过该规范来保持最新,因为它实际上为它们提供了价值。该策略是单一采购信息的AM实践的一个示例,其中信息被捕获一次并用于多种目的。在这种情况下,详细规范和确认测试。

当你停下来思考它时,特别是在图2中,TDD有点用词不当。虽然您的开发人员测试正在“推动”代码的设计,但您的敏捷模型正在推动您的整体思考。

本文:https://pub.intelligentx.net/agilemodeling-agile-design

讨论:请加入知识星球【首席架构师圈】或者小号【ca_cea】

本文:「敏捷建模」敏捷设计理念的纪律icon-default.png?t=N176https://architect.pub/agilemodeling-agile-design

谢谢大家关注,转发,点赞和点在看。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

大数据概述

一、大数据时代 大数据时代 三次信息化浪潮:个人计算机80年-互联网95年-物联网、云计算和大数据(2010年) 发展时间较短,大数据人才缺失大数据人才 培训出来的:Java-》大数据 优点:对于大数据技术的细节会比较清楚 缺点&#xff1…

为什么Redis集群的最大槽数是16384个?

对于客户端请求的key,根据公式HASH_SLOTCRC16(key) mod 16384,计算出映射到哪个分片上,然后Redis会去相应的节点进行操作! 为什么有16384个槽? Redis集群并没有使用一致性hash而是引入了哈希槽的概念。Redis 集群有16…

金仓数据库事务日志与检查点

事务日志与检查点 WAL文件,在金仓数据库中,事务日志文件称为Write Ahead Log(预写式日志,简称WAL)。 WAL存储了数据库系统中所有更改和操作的历史,相当于Oracle的REDO。 WAL机制是在这个写数据的过程中加…

[Android开发基础4] 意图与意图过滤器

文章目录 意图(Intent) 简介 显式意图 隐式意图 意图过滤器(IntentFiler) action data category 意图(Intent) 简介 Intent被称为意图,是程序中各组件进行交互的一种重要方式&#xff0c…

第四章.误差反向传播法—简单层的实现(加法层(AddLayer)+乘法层(MulLayer))

第四章.误差反向传播法 4.1 简单层的实现 本章主要讲述的是加法层(AddLayer)和乘法层(MulLayer)的实现过程。 1.加法层(AddLayer) 从正向传播和反向传播两个层面进行分析。 1).示例: 以zxy为对象,观察它的传播。zxy的导数:∂z/∂x1,∂z/∂…

从CNN到Transformer:基于PyTorch的遥感影像、无人机影像的地物分类、目标检测、语义分割和点云分类

我国高分辨率对地观测系统重大专项已全面启动,高空间、高光谱、高时间分辨率和宽地面覆盖于一体的全球天空地一体化立体对地观测网逐步形成,将成为保障国家安全的基础性和战略性资源。随着小卫星星座的普及,对地观测已具备多次以上的全球覆盖…

DVWA靶场通关和源码分析

文章目录一、Brute Force1.low2、medium3、High4、Impossible二、Command Injection1、Low2、Medium3、High三、CSRF1、Low2、Medium3、High4、Impossible四、File Inclusion1、Low2、Medium3、High五、File Upload1、Low2、Medium3、High4、Impossible六、 SQL注入1、Low2、Me…

关于catkin的一些笔记以及资料连接

大佬们早就不用catkin_make编译节点了,快来瞅瞅他们使用的啥 https://zhuanlan.zhihu.com/p/399753815 https://catkin-tools.readthedocs.io/en/latest/index.html# ROS 编译系统 catkin 详解 https://www.jianshu.com/p/7fccfe18d7d3 ROS学习笔记(六…

【20230206-0209】哈希表小结

哈希表一般哈希表都是用来快速判断一个元素是否出现在集合里。哈希函数哈希碰撞--解决方法:拉链法和线性探测法。拉链法:冲突的元素都被存储在链表中线性探测法:一定要保证tableSize大于dataSize,利用哈希表中的空位解决碰撞问题。…

linux性能优化-内存buffer/cache区分

# 注意不同版本的free输出可能会有所不同 $ freetotal used free shared buff/cache available Mem: 8169348 263524 6875352 668 1030472 7611064 Swap: 0 0 0本文目的用来区分free中…

linux——守护进程守护刷抖音程序不被意外退出

先搞清楚几个概念:udev:设备管理工具,以守护进程的方式工作。位于应用层,主要用于监听内核硬件状态,它能够根据系统中的硬件设备的状态动态更新设备文件,包括设备文件的创建,删除等守护进程:守护…

vue 最详细教学篇(三)

文章目录vue2-cli 项目文件分析示例项目解析router-linkrouterrouter-viewmain.jspackage.jsonvue2-cli 项目 vue-cli>> 文件分析 从上图分析项目文件 1. node_modules // npm 所有下载文件包都在里面 2. public // 根目录文件, 存放index.html和一些脚本文件 3. sr…

CSDN每日一练:小桥流水人家

题目名称:小桥流水人家 时间限制:1000ms内存限制:256M 题目描述 在n*m的地图上,存在一个喷水点(x,y). 如果相邻的位置低于有水的地方,水就能流到相邻的某位置。 已知各个地方的海拔高度,求水的最大覆盖个格…

[js基础]ECMAScript2015(ES6)精要知识点(下)

模块化模块就是在单个文件中声明的JavaScript代码。我们可以用JS代码直接从其他文件中导入函数、变量和类。在NodeJS之前,由于没有过于复杂的开发场景,前端是不存在模块化的,后端才有模块化。NodeJS诞生之后,它使用CommonJS的模块…

filebrowser logo和样式自定义及免密访问

这两天接到项目一个需求,客户需要文件管理存储服务,看了下大概的功能,计划用源码开发的,但是看后期这块调整也不大,就采用开源的项目进行即可,开源项目对比后,发现filebrowser比较适合我&#x…

Spring如何解决循环依赖

今天面试了同程旅行,面试官问到了这个问题,所以今天来总结学习一下 Spring是如何解决循环依赖问题? 前言 Spring的依赖注入分为 setter注入和 构造器注入 这里说的解决循环依赖主要指的是:单例模式下的setter循环依赖 如果是&a…

ThreadLocal使用与原理

目录一、ThreadLocal1.ThreadLocal简介1.1 是什么2.能干嘛1.3 api介绍1.4 实战1.5 通过上面代码总结2.从阿里ThreadLocal规范开始3.ThreadLocal源码分析3.1 Thread,ThreadLocal,ThreadLocalMap 关系3.2 总结4.ThreadLocal内存泄露问题4.1 什么是内存泄漏…

PCIE 学习笔记(入门简介)

PCIE 学习笔记书到用时方恨少啊,一年前学PCIE的笔记,再拿出来瞅瞅。发到博客上,方便看。PCIE基础PCIE和PCI的不同PCIE采用差分信号传输,并且是dual-simplex传输——每条lane上有TX通道和RX通道,所以每条lane上的信号是…

DBeaver连接达梦数据库

1、下载Dbeaver安装包 1、官网下载:Download | DBeaver Community 2、下载完成后双击运行.exe文件,进行安装 2、配置达梦数据库驱动 1、达梦数据库驱动下载:Mybatis 框架 | 达梦技术文档 2、为DBeaver添加驱动 3、自定义DM驱动管理器的相关配…

购买低代码平台,要考量哪些指标?

近些年来,低代码平台的热度在逐渐上升,可以看出企业数字化转型得速度也在逐渐加快。企业的数字开发需求越来越强,市场之间的竞争也愈演愈烈。特别是对于中小型企业,既要考虑到产品功能需求,又要考虑成本压力&#xff0…