写点什么

争论:是否应该避免架构重写?

  • 2008-05-21
  • 本文字数:1417 字

    阅读完需:约 5 分钟

由于软件应对需求变化的能力越来越差,通过更新架构进行软件重建的做法变得越来越有吸引力。这种做法是相当有风险的,因此具体策略的选择显得相当重要。 Andy Singelton 最近的一篇博客就此问题进行了讨论。文章认为成本、技术复杂性、潜在的商业风险是在进行战略选择时不得不认真权衡的三个因素。对此他提出了三种解决方案,并简要分析了每种方法的优缺点:

- “原型和延展”方案,完全编写新的软件;
- “增量开发”方案,在仍然使用原有代码集的基础上,更新部分组件并进行重构;
- “购买”方案,购买能满足新需求的软件。

然而,几位博客作者却认为第一种选择——从无到有地重写软件——无论如何都应该避免。早在 2000 年 Netscape 6 发布之后, Joel Spolsky 就不提倡这种方法。 他形容 Netscape 重写代码的决定“简直就是一个无比失误的战略性错误”,同时还举了一些犯类似“错误”的例子:dBase、Borland 的 Quattro Pro、以及 Microsoft 的 Pyramid 项目。Joel 认为在许多案例中做出需要重写软件的判断带有一定的主观性,其往往是由重用代码时遇到困难造成的。此外,他认为冗长的测试和缺陷修复过程在很大程度上造成了代码可读性低下:

新代码优于旧代码的观点显然是荒谬的。旧代码毕竟已经过测试并投入使用。大量缺陷已经被发现并被修复。[……]

回头再看看那个两页长的函数。是的,我知道它只完成了显示窗口这个简单功能,但是它已经增加了一些东西,没有人知道是为什么。好,我来告诉你为什么:它们是对缺陷的修复。[……]

这些缺陷的每一个都是在实际使用了数周之后才被发现的。[……]

当你扔掉代码并从零开始的时候,你就是随手扔掉了所有这些认识。这些不断收集到的对缺陷的收集和修复可都是多年编程的积累!

Joel Spolsky 还强调了重写项目存在的潜在商业风险,认为其可能削弱团队应对新出现市场需求的能力。因此他认为,即使旧的代码集就架构而言真的很糟糕,也应该努力清理代码、重构、修改接口,而不是进行全面的重写。

重写软件的一个常见理由是,吸取第一次发布后的经验教训后,团队会把工作做得更好。但是,Joel Spolsky 强调了开发团队极有可能会随时间而发生变化这一事实。正如最近回应了Spolsky 文章的Dharmesh Shah 所强调的,市场情况也很有可能发生改变。

Dharmesh Shah 列出了其它一些进行软件重写的理由——比如说差的代码集,或是最初对平台或语言的错误选择——同时他也指出这个做法的局限性。他详细说明了为什么要抵制进行重写的趋势:开发过程难免要比预期的要长;不能对现有客户提出的潜在市场变化和要求做出响应,这存在很大的风险,甚至有可能会削弱软件的竞争优势;而且有不同的替代性解决办法,例如重构,重构在减少前面那些风险的同时,对清理代码也很有帮助。Dharmesh Shah 认为重写只在少数几种情况下是可行的:如果最初的技术选择阻碍你的商业成功,或者技术前景有巨大的转变——比如从客户端 - 服务器到基于 Web 的计算——而你的软件又无法适应它。

然而 Bob Warfield对Dharmesh Shah 的帖子进行了评论, 根据其把Quattro Pro 从Modula-2 编译器移植到Turbo Pascal 的经验,他认为为了改变语言而重写软件是不值得的。他还添加了一些关于这个问题的其它见解,比如在人力资源方面的考虑,尤其是当由于现有代码 的低质量而决定重建的时候。他更进一步地强调了重构的价值,认为重构能超越代码,还认为由团队获得的经验可用于重构,比如用户模型。

查看英文原文: Debate: Should Architecture Rewrite be Avoided?

2008-05-21 07:081015
用户头像

发布了 151 篇内容, 共 62.3 次阅读, 收获喜欢 18 次。

关注

评论

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

OmniFocus Pro 4 for mac(最佳GTD时间效率工具)v4.5正式直装版

小玖_苹果Mac软件

Affinity Photo for Mac(好用的图片编辑软件)v2.5.7 免激活版

小玖_苹果Mac软件

RAR Extractor - Unzip:告别繁琐,解压RAR文件从未如此简单!

理理

4K Video Downloader Plus Pro for Mac(4K视频下载器)v1.10.2激活版

小玖_苹果Mac软件

OmniFocus Pro 4 for mac(最佳GTD时间效率工具)v4.5正式激活版

小玖_苹果Mac软件

Reviewbot 开源 | 这些写 Go 代码的小技巧,你都知道吗?

大卡尔

DevOps 工程实践 静态代码检查 CodeReview

Affinity Publisher for Mac(逆天排版神器)v2.5.7 直装版

小玖_苹果Mac软件

Affinity Designer for Mac(强大的矢量图设计软件)v2.5.7中文免激活版

小玖_苹果Mac软件

Ample Sound Ample Ethno U for Mac(夏威夷四弦琴虚拟乐器)激活版

理理

中国铁设:构筑业财深度融合下风险实时感知与智能预测新模式

用友智能财务

企业 合同 财务

【YashanDB知识库】OM仲裁节点故障后手工切换方案和yasom仲裁重新部署后重新纳管数据库集群方案

YashanDB

数据库 yashandb

Mellel 6 for Mac(文字处理软件)v6.2.0 中文激活版

小玖_苹果Mac软件

Word 2024 LTSC for Mac(word 2024)v16.92正式激活版

iMac小白

多校加速人工智能通识课程落地,和鲸Heywhale重磅上线课程+平台+资源一体化解决方案

ModelWhale

AI智能体开发步骤

北京木奇移动技术有限公司

AI智能体 软件外包公司 AI口语陪练

【YashanDB知识库】exp导出csv报错YAS-00218 string conversion failed

YashanDB

数据库 yashandb

【YashanDB知识库】YAS-00218 string conversion failed.

YashanDB

数据库 yashandb

【YashanDB知识库】虚拟机重启后启动YMP报错

YashanDB

数据库 yashandb

PowerPhotos for Mac(mac专用图片管理工具)v2.7.0直装版

小玖_苹果Mac软件

亿级订单系统的数据库查询性能优化之路

京东零售技术

后端 供应链

Microsoft Outlook 2021 LTSC for Mac v16.92中文正式版

小玖_苹果Mac软件

NocoBase 本周更新汇总:提升性能

NocoBase

开源 低代码 零代码 无代码 版本更新

PlistEdit Pro for Mac:深度解析plist,让系统设置更灵活!

理理

文本编辑器和十六进制编辑器010 Editor破解版 附010 Editor永久激活码

理理

DW2021破解版 Dreamweaver 2021安装包(网页设计软件)

理理

Microsoft PowerPoint LTSC 2024 for Mac( ppt 2024)v16.92中文正式版

iMac小白

最新前端架构设计:中央仓库管理-基于工作空间和git-submodule实现共用和管理

京东零售技术

后端

Excel 2024 LTSC for Mac(excel表格)v16.92中文正式版

iMac小白

Highlight for Mac:文本高亮神器,让阅读更轻松!

理理

RocksDB 内存超限问题剖析

vivo互联网技术

RocksDB 内存分配管理 glibc ptmalloc jemalloc

Bridge 2025 for Mac (Br2025最新灵感管理神器)v15.0.1 中文激活版

iMac小白

争论:是否应该避免架构重写?_架构_Sadek Drobi_InfoQ精选文章