敏捷对商业意味着什么

这是我第13部分系列文章的第7个帖子, “敏捷的神话和误解” ,它基于我在第一届PSIA Softech菲律宾软件工程大会上的演讲。 我正在努力纠正有关敏捷软件开发的12种常见误解。

首先,让我纠正一下敏捷几乎不关心设计的观念。 敏捷宣言的许多(即使不是大多数)签署人都是设计方面的思想领袖。 Martin Fowler和Robert Martin是两个在2001年在Snowbird度假胜地举行开创性的“轻型过程峰会”的人 ,其中创造了“敏捷软件开发”一词,并写了“敏捷宣言”。 Martin Fowler是“设计模式”的代名词。 罗伯特·马丁(Robert Martin)撰写了第一批标题为“敏捷”的书,即“敏捷软件开发”。 在这本书中,他概述了现在著名的“ SOLID”原则 ,而本书的其余大部分涉及设计模式,重构和测试驱动开发。

现在让我们讨论前期设计。 敏捷团队被告知“大设计先期”是不好的,因此有人将其解释为“无设计先期”必须是好的。 事实恰恰在中间–由Spikes支持的“最小设计前期”。

关于敏捷的第一本书籍之一。 它的覆盖范围主要是设计–
这就是SOLID原则的引入,
其余的大部分都涉及
设计模式,重构和测试驱动的开发。

大的前期设计有什么问题?

“大型前期设计”的主要问题是,在花了所有时间和精力来创建设计之后,我们几乎总是发现,只有当团队开始编码时,或更糟糕的是,当团队开始时,许多设计是错误的在项目结束时进行性能测试!

对于Java开发人员,您还记得EJB2的黑暗时代吗? 我们所有人都喜欢将EJB引入我们的项目,因为这是旨在使系统“可伸缩”的Sun Microsystems标准。 我们最终要做的是一个接一个的项目,只能支持他们打算支持的部分用户。 我知道一个工资项目应该支持数千个用户,但是当仅用十个用户进行测试时,系统就会爬行。 经过两年的发展,整个项目被取消,给客户和供应商带来巨大损失。

那Healthcare.gov呢? 许多问题归咎于使用了非常新的列式数据库,该数据库保证了性能和可伸缩性,但引起的问题却比解决的多。 当我自己是一名开发人员时,我记得我盯着一个UML图,它是我的老板强迫我实现的,但是不可能用代码实现!

Big Upfront Design的主要问题是很少经过验证 。 而且,当我们发现设计决策是错误的时,已经编写了太多的代码,因此更改设计变得昂贵,浪费和冒险。

敏捷设计基于增量和证据

那么如何在敏捷中完成设计呢? 首先是“只需要足够的设计”的想法–团队只需做出足够的设计决策即可继续进行该项目。 但是,与敏捷中的所有决策一样,决策需要基于经验或基于证据。 因此,在对设计投入大量代码之前,需要对设计决策进行验证。

验证设计决策的最佳方法之一是通过Spike解决方案。 团队编写一个或多个实现设计的小型原型,通常会从项目中获取实际用例或功能。 如果性能是设计的考虑因素,则团队可以对Spike解决方案进行性能测试。 根据设计应达到的关注程度(安全性,完整性,可伸缩性,易用性等),也可以应用其他类型的测试。因此,团队很早就发现设计方法是简单还是简单。难以使用,无法按预期执行或与设计要解决的问题相关。

在做出一些初步的设计决定之后,其余的设计将随着每个Sprint逐步完成。 这就是“紧急设计”的概念。 对于每个Sprint,团队将继续进行足够的设计以实施近期工作。 人们通常会通过重构来发现并实施对设计的改进或纠正。

关于UML工具的说明

当我提倡设计时,我不主张提倡购买一些UML软件。 我在软件领域工作多年,尝试过很多工具– UML工具起初适用于小型设计,但是随着设计变得越来越复杂,以及在设计上进行协作的需求增加,UML工具只会使团队陷入困境比帮助团队前进。

可以说,对于团队来说,最好的设计工具是白板 。 它可以向整个团队散发信息,可以进行即兴讨论和协作,而且有限的空间可防止您使设计过于复杂,因此您可以继续执行代码。

不要浪费时间在一些UML工具上详述您的设计。 在白板上随意涂抹即可使团队继续前进。 在代码本身中完成设计。

不要浪费时间在一些UML工具上详述您的设计。 在白板上随意涂抹即可使团队继续前进。 在代码本身中完成设计。

设计的哪些部分是前期的?

那么,设计的哪些部分是预先完成的? 对于我所观察到的所有项目,至少在设计的三个方面,甚至在第一个Sprint开始之前就已经进行了一些前期工作。 这些是域模型,体系结构和用户界面。 除非事先在这三个方面中的每个方面都至少确定了一些设计,否则要使团队高效地合作几乎是不可能的。 同样,仅完成了足以让团队开始使用的设计。 设计的其余部分随每个Sprint一起出现

领域模型

系统的业务逻辑是最重要的部分,因为这就是系统存在的原因。 它也是系统中更改最频繁的一部分。

许多团队只是将他们的业务逻辑塞入称为“事务脚本”的程序例程中。 这对于简单的系统来说是很好的,但是对于任何中等复杂的情况,这会导致很多混乱,混乱,重复的,难以理解的代码。 而且由于业务逻辑发生了很大的变化,因此这种令人困惑的代码可能会成为错误的来源。 除此之外,难以理解的代码会使团队工作减慢。

因此,以组织化,可读性强且易于更改的方式编写业务逻辑非常重要。 推荐的实现此目标的方法是通过所谓的“丰富域模型”,即将特定业务域的实体建模为类,并将它们之间的交互编码为方法调用。

设计域模型是一个冗长的话题 ,我可能已经失去了一些人,所以让我为您提供一个很好的起点-Craig Larman的“ Applying UML&Patterns” ( 应用UML和模式) ,它是分步指导您分析业务领域来设计领域模型。 作为补充,请使用Len Silverston的“数据模型资源手册”系列,该系列是经过行业测试的数据模型的目录,这些数据模型是域模型设计的起点。

学习领域分析和设计的最佳起点。

3卷目录,包含针对各种行业(例如制造,会计和保险)的已建立数据模型。

我建议团队开始一个项目时,它会绘制一些简单的,局部的,低细节的UML类图,以达成他们对业务领域的理解。 如果团队可以邀请产品负责人或客户来验证他们的理解,那将是很好的。 这是偏向于低细节图而不是高细节图的原因之一–低细节图往往更容易理解,并且对非技术人员的威胁较小。

建筑

“架构”只是设计中处理“非功能性”需求(换句话说,不是业务逻辑的需求)的一部分的幻想。 例如性能,正常运行时间,安全性和成本。

通常,架构错误只会在系统部署到最后或更糟糕的时候才发现。 架构错误可能会表现为系统运行缓慢或安全漏洞! 它可能表现为昂贵的经常性成本或扩展系统的成本很高。 由于这些错误是在最后发现的,因此更改这些体系结构决策非常昂贵且冒险,因为已经在所选体系结构之上投入了很多代码。

为什么架构决策经常出错? 架构决策通常基于供应商文档,供应商演示或受欢迎程度。 供应商可能会提供演示或概念证明来销售您的产品,但请记住,供应商存在偏见–他建立了概念证明来销售您的产品,而不是真正测试产品是否有效为您的特定项目。

还有诸如“恢复驱动开发”之类的东西。 这是开发人员选择技术的地方,不是因为他们认为这是最适合其项目的技术,而是因为该技术的经验会在他们的简历中看起来不错。 他们将使用该技术一段时间,将其放入简历中,并寻找更好的工作。 您现在可能会选择可能不是最佳选择的技术。 哦,我在代码基础混乱的组织中多次见过这种情况。

架构决策应基于团队进行的测试,并针对要解决的问题 在敏捷中,我们构建了简单的原型,称为“尖峰解决方案” ,以解决技术问题。 这些钉可以进行性能测试和其他适用性评估。 可以使用所讨论的技术选择某些用户案例或场景并将其实现为完整堆栈,然后进行各种测试和其他评估。

用户界面

为了保持用户界面的一致性,应尽早确定系统用户界面的高级主题和布局。 每次迭代时,都会根据客户的反馈进行改进和详细说明。

结语

好的设计,尤其是面向对象的设计,是敏捷的核心。 因此,需要预先设计一些思路,以使团队朝着正确的方向发展。 敏捷只是在设计决策中强调简单性证据

翻译自: https://www.javacodegeeks.com/2014/09/agile-myth-6-agile-means-no-upfront-design.html

敏捷对商业意味着什么

敏捷对商业意味着什么_敏捷神话6:“敏捷意味着没有前期设计”相关推荐

  1. 回调破前高意味着什么_股票破前高意味着啥,突破前期高点买入法

    内容导航: Q1:股票破了历史高点为什么很容易翻倍 首先,两者没有必然联系. 然后,所有翻倍的股票一定都先有破历史新高这个条件,但是破历史新高然后翻倍,就是很小的概率. 最后,要判断股票有没有翻倍的可 ...

  2. 敏捷迭代是什么意思_我认为“敏捷”的方向是第4部分:“敏捷”是什么意思?...

    敏捷迭代是什么意思 我开始这个系列,询问"敏捷"的发展方向. (我不喜欢在Agile 2019大会上看到的东西.) 第1部分是关于我看到的4个大问题. 第2部分是为什么我们需要经理 ...

  3. 初创公司需要哪些部门_初创公司何时需要敏捷?

    初创公司需要哪些部门 我开始写另一篇关于经济和敏捷/软件开发的文章,但是它花了很长的时间,所以暂时来说-- 早在1968年,彼得·德鲁克(Peter Drucker)写道: 大型组织不能具有多功能性. ...

  4. scrum回顾_沙龙回顾 | 大规模敏捷框架-Essential SAFe介绍

    作者:袁翠 2019年1月20日,这是一个周日的晚上,尽管如此,来参加沙龙的人还是不少,与其在家无所事事,不如来一场知识的火花碰撞. 按照惯例,先是进行自我介绍.如果说这次自我介绍与以往有任何不同的地 ...

  5. CODING 敏捷实战系列加餐课:CODING 做敏捷这一年 - 理解一站式 DevOps 产品思想

    在数字化协同的大背景下,过去一年 CODING 以老牌代码托管工具为基础,华丽转型为一站式 DevOps 研发管理工具.本次课程 <CODING 做敏捷这一年:理解一站式 DevOps 产品思想 ...

  6. 敏捷 | 【万字长文】 说透 如何学习敏捷开发流程和运用

    作为程序员如果说你不了解 敏捷开发流程,不能说你不是一个好程序员,肯定的是你一定很痛苦,你将面临项目周期和版本无序的困扰. 针对这种情况,建议你看看这边文章,看完你完全能够明白敏捷. 敏捷开发是目前很 ...

  7. 商业模式新生代_商业模式设计方法之场景(化)——《商业模式新生代》之十二...

    今天我们来看#商业模式#设计方法的最后一种方法--场景,其实这里的场景不知道大家和我一样,看起来比较别扭,难以理解.因为这本书是舶来品,英译过来的,所以我只好用万能的百度来查了查,书里场景对应的单词是 ...

  8. 英文ppt结尾欢迎您的意见_不受欢迎的意见,您需要大型的前期设计

    英文ppt结尾欢迎您的意见 您需要大型的前期设计(You need a big upfront design) You've probably heard that creating extensiv ...

  9. 铁拳nat映射_铁拳如何重塑我的数据可视化设计流程

    铁拳nat映射 It's been a full year since I've become an independent data visualization designer. When I f ...

最新文章

  1. sh脚本每天创建一个文件夹_我每天创建一个月的视频。 这就是发生的事
  2. SAP QM 执行事务代码QS23为检验特性分配Selected Set的时候报错 - You cannot use entries from catalogs 1 and 3-
  3. 凌轩:中国电信在校园市场的困与囧
  4. SQL Server事务
  5. java数据从本地文件中取出_java 从数据库取数据并存入本地文本中
  6. ThinkPHP框架整合phpqrcode生成二维码DEMO
  7. Mysql-innoDB存储引擎(事务,锁,MVCC)
  8. 使用WeexSDK,网络请求信任证书的问题
  9. Docker小白到实战之常用命令演示,通俗易懂
  10. PHP远程文件管理,可以给表格排序,遍历目录,时间排序
  11. 2.5、Android Studio添加多适配的向量图片
  12. 最简单爬虫rvest_告别复制粘贴
  13. TransBigData 针对交通时空大数据处理的Python包
  14. 获取用户已安装的APP列表及APK安装包
  15. poscms表结构和字段
  16. 使用Pyppeteer进行gmail模拟登录
  17. linux磁盘配额测试,Linux磁盘配额测试过程完全攻略
  18. TDD三定律和5条规则
  19. java来源_java的来源
  20. Python数据挖掘(1)亲和性分析

热门文章

  1. 线性递推数列_学习笔记
  2. shopify开发经验
  3. 笑看云卷云舒,聆听花开花落
  4. 犹太人传承了三千多年的10大赚钱定律
  5. 用一杯水的单纯 面对一辈子的复杂
  6. SMARTS决策引擎使用手册(6)
  7. 有趣好玩实用的网站 保证闻所未闻
  8. 职场人士如何抵御消极心理暗示
  9. 【Unity3d】将Particle转成UGUI
  10. rx590 黑苹果 无货_应粉丝要求花9000配了一台高端黑苹果电脑,大家看看值不值吧!...