11 月 19 - 20 日 Apache Pulsar 社区年度盛会来啦,立即报名! 了解详情
写点什么

敏捷开发实践真的不利于架构设计吗?

  • 2007-07-17
  • 本文字数:1375 字

    阅读完需:约 5 分钟

增量迭代开发(敏捷实践之一,它意味着每次迭代的产出只是本次迭代范围内的需求)真的不利于产生好的设计吗?Scrum 真的提倡“忽视架构问题”吗?如果没有敏捷技术实践的话,架构设计能有效的演化吗?测试先行式的开发真会产生优雅的设计吗?在红绿条提示下的重构循环只在局部小范围内有效吗?

来自Net Objectives 的 Alan Shalloway 就利用 Scrum 构建应用的经验向 ScrumDevelopment yahoo group 的成员提出一些问题,问题之一就是“他们是否找到代码质量是依靠什么来保证的?”

当我在课程中或在那些讨论“向已建系统中追加新特性”的会议中提出这个问题时,每个人都认为这属于集成成本。我想,这是因为大多数人不会编写那些融入了很多设计模式的具有良好的扩展性、足够灵活并且易维护的代码。这些人中,大部分也没有使用过 Scrum。

Shalloway 随后详细解释了他的观点:

……正如 Scrum 所告诉我们的,他们(指在 Scrum 团队中的开发者)根据客户价值一次只开发系统的一小部分,如果团队中有高级架构师的话,就会组织得更好。很多开发者有一种很好的意识,即他们会回头看一下是否应该做一些改动,使架构更合理。但更多的人并不知道,假如代码是通过拷贝、粘贴并修改(甚至改得面目全非)得来的,那么这会带来很多冗余。此时,Template Method 可能是一个比较好的解决方案。 也许我悲观了一些,但我的感觉是,假如你没有注意熵的话,就意味着它们会达到你不期望的地步。在你的案例中,你正在使用 Scrum 来改善很多团队忽视的东西。所以,我的问题是:

  1. 大家忽视它了吗?
  2. 如果真是这样,它会引来问题吗?

到目前为止,这些反应都表明很多使用 Scrum 的团队有这个问题,甚至那些坚持写测试和进行重构的团队也有同样的问题。那些没有使用多少有些变化的敏捷技术实践的团队,可能会有更大的麻烦。(请记住:Scrum 与开发技术没有必然的联系,你可以使用传统方法开发软件,也可以用 XP,或者其它技术实践,只要你在 Scrum 的框架之内使用就可以了)

接下来,让我们讨论一下现实中, Red-Green-Refactor loop 是如何发挥作用的?一个团队在写测试和重构方面深有心得,就会有一个好的设计吗? Paul Jones 的 blog 中有一篇关于 TDD 如何创建了混沌代码(Ravioli Code),宣称用 TDD 开发出来的代码是低耦合的代码:

我想,很多 TDD 和测试先行的理想主义者和宣传者写出了的确经过充分测试的代码,但还是很难理解。

Jones 并不想撼动 TDD,因为与其测试目的相比,TDD 实际上更关注于设计。但这还是会带来一个有趣的事情。在使用这些实践的敏捷社区中,好在哪里呢?随着社区的成长,这些实践带来的麻烦比其带来的好处还多吗?与传统开发技术相比,这些工具被不正确的使用是否更危险?

最后,让我们假设:我们正在恰当地使用 Scrum 和 TDD。毕竟,象 Ron Jeffries 在《 We Tried Baseball and It Didn’t Work 》一文中所呈现的,我们不能因为自己没有正确地使用它而将不好的结果强加给它。TDD 会产生好的设计吗?对于使用 Red-Green-Refactor loop 的做法,重构可以说是一种局部优化技术。我们优化局部的设计。本质上,这等同于 steepest descent algorithm ,也就意味着重构几乎总是会带来次优设计,就象使用 TDD 来做“数独游戏”一样。

现在是我们用批判的眼光来重新审视我们的这些实践的时候了吗?

查看英文原文: Are Agile Development Practices Detrimental to Architecture and Design?

2007-07-17 23:491437
用户头像

发布了 100 篇内容, 共 19.4 次阅读, 收获喜欢 4 次。

关注

评论

发布
暂无评论
发现更多内容

进来看看是不是你想要的效果,Android吸顶效果,并有着ViewPager左右切换

第三女神程忆难

Java android kotlin 安卓 移动开发

NA(Nirvana)公链“为应用而生” NAC公链领跑公链新格局!

区块链第一资讯

技术人如何调研和选型第三方 SDK?全文干货

融云 RongCloud

极智网络告警关联规则挖掘

鲸品堂

方法论 解决方案

“区块链+电子商务”,电商能否再创辉煌?

电微13828808271

区块链电子合同技术方案,区块链电子合同存证

13828808769

区块链 区块链+

将本地maven仓库的数据恢复到Nexus仓库

白粥

工作笔记

程序员去大公司面试,我的头条面试经历分享,搞懂这些直接来阿里入职

欢喜学安卓

android 程序员 面试 移动开发

智慧公安情报综合研判平台开发,助推公安信息化发展

13828808769

智慧城市

css网页布局小结

Darren

CSS

MySQL 事务隔离

Sakura

4月日更

企业如何做数字化转型?想要资产状况及时把控,它的作用至关重要!

一只数据鲸鱼

数字化 数据可视化 资产管理

Dubbo 学习笔记(三) Spring Boot 整合 Dubbo(官方版)

U+2647

Spring Boot dubbo 4月日更

阿里高级架构师纯手打832页Java全栈知识点笔记,吃透后成功七面上岸滴滴!

Java架构追梦

Java 阿里巴巴 架构 面试 成长笔记

你的数仓函数结果不稳定,可能是属性指定错了

华为云开发者联盟

函数 GaussDB(DWS) 函数属性 函数下推 易失性级别

OKR实践中的痛点(5):战略缺失怎么玩OKR?

大叔杨

团队管理 OKR 敏捷 敏捷绩效

【LeetCode】子集二Java题解

Albert

算法 LeetCode 4月日更

面试官:请说说什么是BFC?大白话讲清楚

蛙人

CSS 大前端

区块链电子政务——不动产综合服务平台

电微13828808271

一文读懂容器存储接口 CSI

阿里巴巴云原生

容器 云原生 k8s 存储 调度

装双系统?不需要!教你在iMac上流畅使用Windows

懒得勤快

Mac 虚拟机 苹果 crossover

云数据库时代的新思考,这位90后大咖想邀你聊聊

华为云开发者联盟

数据库 开源 opengauss GaussDB 华为云数据库

SpringBoot Admin2.0 集成 Java 诊断神器 Arthas 实践

阿里巴巴云原生

Java 运维 云原生 中间件 Arthas

Linux rmdir 命令

一个大红包

linux命令 4月日更

大数据前置知识-服务器及磁盘

大数据技术指南

大数据 4月日更

派出所重点人员管控系统开发,建设智慧警务

13828808769

智慧组工

systemctl的使用

箭上有毒

linux运维 4月日更

大意!6行代码,“报废”5片单片机!

不脱发的程序猿

程序人生 嵌入式软件 单片机 4月日更 国产MCU

android开发面试题,字节跳动Android三面凉凉,手慢无

欢喜学安卓

android 程序员 面试 移动开发

EGG Network阿凡提 公链EFTalk全球首创POTP二叉交叉共识机制

币圈那点事

云小课 | 不了解EIP带宽计费规则?看这里!

华为云开发者联盟

带宽 弹性公网IP 带宽变更 计费模式

敏捷开发实践真的不利于架构设计吗?_敏捷_Amr Elssamadisy_InfoQ精选文章