首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

是否存在重构成本超过重写成本的程度?

在软件开发过程中,重构和重写是两种常见的代码优化方法。重构是对现有代码进行调整和优化,以提高代码质量和可维护性,而重写则是从头开始重新编写软件。重构通常需要较少的时间和成本,但可能会带来一定的风险,而重写则可能会带来更好的结果,但需要更多的时间和成本。

在某些情况下,重构的成本可能会超过重写的成本。这通常是因为重构需要开发人员对现有代码有深入的了解,并且需要投入大量的时间和精力来进行调整和优化。而重写则可以从头开始,采用更先进的技术和架构,以提高软件的性能和可扩展性。

因此,在决定是否进行重构或重写时,需要根据具体情况进行评估和权衡。如果重构的成本确实超过了重写的成本,那么可以考虑采用重写的方法,以实现更好的结果。

推荐的腾讯云相关产品和产品介绍链接地址:

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

ES VS CH,成本太高,效率太低?不存在

,最主要是,这些数据是否生成,是否加载都是可控,用户需要知道合理数据建模,而不是让系统自动推测数据类型 就好比方说,比较BMW混动7系和常规动力丰田陆巡油耗,得出结论BMW在省油方面做得比丰田强...1.6G变为了1G,优化过后,膨胀比变为了0.7,因此,ES,并非那么没有效率,只是看是否针对应用场景正确配置了数据模型 我们在存储成本优先情况下,甚至可以配置"index.codec": "best_compression...,我们不提取字段,全部保存在message当中,把index: false配置一下,可以看到索引大小缩小为3.3mb,几乎是原始数据1/4 [在这里插入图片描述] 因此,如果我们愿意,我们可以有不同方式来平衡存储成本和查询性能...另外一个和存储大小,成本有关特性是ES上Searchable Snapshot,通过该功能,我们可以: 节省一半Cold层成本 以对象存储成本,存储历史数据,并且可以检索 [在这里插入图片描述...有时,我们不一定强调快,能在更大数据集上运行查询也是一个能力,通过ES最新async search功能,结合searchable snapshot,ES集群可以对数十PB存在在对象存储上数据进行检索

7.8K51

难以持续SaaS产品如何解救?

没有经历过的人是很难想象这样代价和成本,迁移老客户,老客户劳筋动骨;不迁移老客户,老客户一定程度受忽视和伤害,影响口碑; 除非客户非常少,或者可以基本保证比较低成本全部迁移,笔者很不建议另起炉灶新开发一套...如果在短时间内很难有合适的人,也最好有一个外部顾问来进行一定程度把关。  2: 将理想产品形态大致设计出来。...实际上所谓重构,很多时候都是一个个模块,一个个功能进行重写,将大风险用敏捷,庖丁解牛方式去分解掉。  4: 追求极致,不要重蹈覆辙,每次重构机会都是一次重生机会。...5: 尽最大努力做减法,每一次成功减法都是一次胜利。 对于臃肿系统重构,在重构重写过程中,一定要想尽一切办法做减法。...每次迭代升级,重构新版本体验需要大大超过原来版本,或者有能够解决客户痛点新功能,用户才有动力升级。在设计安排每次迭代计划时候,要充分考虑用户升级动力,否则会碰到很多阻力。

27130

系统重构未来:重构工具 Coca 一周年

系统必然之路:系统重构 or 重写 没啥说,部分系统都是要被重构或者重写。那么另外一部分呢?他们被淘汰了——要么是产品,要么是公司,笑~。...如果系统不被指南,和进行频繁代码级重构的话,那么系统被取代速度就更快了。 重构 vs 重写 关于系统级别的重构,我们先要讨论第一个问题其实蛮简单:我到底是要重构还是重写?...对于重构而言,我们所要面对是技术挑战;对于重写而言,我们所面对是业务挑战。 重构技术挑战 我们所面临主要技术挑战是: 是否能确保过程安全性?...即,支撑业务可扩展性 是否寻找最合适重构技巧?比如通过 IDEA 重构 如何让重构技能被传承?...是否能确保细小业务功能不被遗失? 能否设计出更完善业务知识管理体系? 系统重构未来 在 Coca 编写完成之后,我发布了《系统重构与迁移指南》一份短小、精悍重构手册。

66040

为什么不重构呢?

重构是提高质量重要工具。许多开发方法都依赖于重构,尤其是对于敏捷方法,在更多计划驱动组织中也是如此。但事实上,是否重构来处理设计中某些问题呢?是否存在重构障碍呢?...不重构原因 存在质量问题而不进行重构理由可以分为以下几类: 资源 对所需资源关注是不进行重构一个经常被提到原因。...投资回报率 虽然重构可能会带来好处,但也有成本,投资回报率也必须考虑,例如“必须再次权衡成本和好处,在承担重构、重测试等方面的成本之前,必须明确收益。” 技术 项目的特点限制了重构能力。...然而,对软件系统测量表明,有些类具有很多方法,或者在层次结构中非常深。它就需要重构么? 实际上,工程师更倾向于限制类深度,而不是方法数量,但是当超过某个深度限制时,开发者倾向于不做任何事情。...实际上,重构时机只是做出是否重构判断时机。 另外,使用重构工具两个好处是错误率更低,所需时间更少,因此好工具支持应该在一定程度上解决开发人员问题。

27220

软件编程概念与入门

软件编程概念与入门 1.概要 2 项目开发流程 3.编程提升 1.概要 (1)软件编程为什么存在? 随着技术发展,项目的复杂度与程序复杂度骤增,导致编程实际与预期有所偏差。...(2)架构设计 架构相当于系统奠基人,在技术选型上如果选择不对,对于项目影响颇深。需求正确、方案不对。技术升级是特别的迅速是否使用某种新技术是项目架构师需要考虑事情。...debug,unit test,function test,integration test, system test (8)项目的部署 3.编程提升 (1)代码特性 外在特性:可用性(用户学习使用程度...重构原则是不改变代码行为,使代码维护性、扩展性更强。怎么判断?在代码中觉得很怪地方。重构级别有data、statement、method,class。重构总方法就是一点点重构,一点点测试。...重写区别于重构,会改变代码逻辑。

59720

该如何接手别人遗留下代码?

假设你遇到了修复遗留应用程序问题,已经存在风险,并且不需要添加更多应用程序。采用本文方法风险和成本将会比从头开始重写系统更低。 为什么不要重写代码 在我们开始之前,你应该先了解一些事项。...如果你需要修复遗留代码,那是因为你需要将风险降至最低;为什么你会故意采用无法量化风险? 如何重构遗留代码 假设你不想面对大规模重写带来成本和风险,那么如何重构代码呢?...假设我们正在重构 Web 应用程序,你已决定首先编写测试以验证是否可以在管理页面上列出用户。...但是,如果你仍在尝试从重写重构之间做出决定,请记住,这种方法是一种成本相对较低且风险也较低方法。如果它被证明是行不通,你可能会冒很小风险。如果改写证明不可行,那么你可能会花费公司一大笔钱。...修复遗留代码库虽不如送火箭上天一般高难度,但它确实需要一定程度专业知识来转换现有的代码库。遗憾是,大多数开发人员似乎对此技能并不感兴趣,他们似乎也并不想处理遗留代码库。

55730

高昂PR,开源困惑

PR是开源社区基石,正真实践了开源益处:“人人贡献,人人受益”。 一个PR提出后历程还是比较长。如果很多人关注和讨论,可能促使你PR早日受到项目维护者关注,尽快合并进去。...但是项目一旦到大到一定程度后,合并PR代价就会变得极为高昂。因为项目大到一定程度,质量要求会变得很高,否则是没办法继续下去。如果不控制好质量,很可能就需要重构才能让项目继续走下去。...而PR天生来源复杂,质量参差不齐,光review成本就已经很高了,更别说反复交流修改碰撞带来时间代价,很多情况甚至review的人相当于重写了一遍。...第二个是,新PR极容易造成regression,以前修好问题又出现了,或者出现新问题。所以这个时候合并一个新PR基本已经很困难了,或者说远远已经超过了专门维护人员成本。...这或许也是一个困境,我们总是希望人人都能够贡献,然而接受这种贡献成本在到某个阶段就变得高昂了,这可能违反了我们直觉。这和开源一样,最终还是需要商业回馈,方能开花结果。

37220

老码农看到技术债务

当前可用技术债务量化工具仅仅关注几个维度,比如代码债务和一定程度设计债务和测试债务。对于同其它维度相关问题,比如架构债务或文档债务,这类工具并没有提供全面的检测支持。...技术债务现金衡量 当然,技术债务货币化有助于了解技术债务严重程度,提供了一种跟踪技术债务偿还进度方法。不过,需要谨慎对待这些成本和工作量估计。...VC们可以以此判断向某项软件产品中投入资金是否理智。 有助于判断软件支付能力,判断在重构重写这二者之间做出选择 有哪些有效方式可以用来将技术债务以金钱衡量呢?...防止技术债务产生主要方法是了解开发团队存在技术债务。开发团队必须了解技术债务,它各种方面和类型,以及债务对他们项目的影响。...它们Bug会成为我们Bug,安全漏洞也会成为我们安全漏洞,错误决定会成为了我们错误决定。 我们所使用其他软件代码量可能会非常大,由此产生技术债务也可能大,甚至超过自己所编写代码量。

85930

如何接手别人系统-遗留系统重建道法术器势志(万字长文)

还有一种特殊风险是重写代码与原来非常相似,因为要考虑复杂需求场景,为了避免这一问题,就要从旧系统汲取到足够知识,来判断该功能实现是否河里了。...我在前后加了评估、总结,评估是为了确认是否重构必要,评估复杂度、影响范围以及工作量得出重构成本,从重构收益和风险。...如重构数据库,是否有数据库专家支持;重构Java Web 服务,团队是否有足够Java 技术成员;要做重建护城河,构建自动化测试能力,是否有CI/CD基础,DevOps流程是否完善。...分析本身会对重构范围进行审视,如不能控制重构带来风险,需要重新回到为什么要重构这部分内容当中去,是否重构方案本身是不合理是否应该放弃重构,或者选择重写、重搭、迁移等其他方案。...结合工程实践经验来看,我们通常会在紧迫时间内完成指定任务,按时交付,所以我个人要求是不超过80行。

57750

【敏捷实践】推行TDD思考

软件成本等于开发成本与维护成本之和,而维护成本增加主要就归咎于内部质量糟糕。这里讲内部质量包括:代码可读性、可重用性、可扩展性等。当我们让开发人员为原有代码编写单元测试时,总是觉得举步维艰。...除非我们能够快刀斩乱麻,那对于这个系统而言,就不是维护,而是重写了。测试先行开发至少在一定程度规避了这样问题。即使代码内部质量仍有所欠缺,但在足够覆盖率保护下,我们要进行重构也变得更为简单。...若有测试保障,重构就变得安全。但尽可能地,我们还是希望运用工具提供自动重构功能,这既提高了重构效率,也在一定程度下确保了重构安全。...当一个人在掌控键盘时,另一个人就可以重点关注代码可读性,看看代码是否散发出臭味。两个人眼睛终归要更锐利一些,至少视野范围更广泛。 及时重构重构诸多实践中最重要一点。...不要让重构成为你在未来偿还债务杀手锏。越拖到后面,偿还债务成本就越高。以重构而论,可能需要重构能力就更强,因为重构变得复杂了。

68660

接手了一座年收入 2000 万美元“屎山”,我到底该重写还是跳槽?

作为中层管理人员或开发人员来执行变革是行不通,而且会付出巨大个人成本。...该公司最终对该技术团队再次进行了深度整顿,这个过程实际上花费了他们整个 D 轮融资以及 3 年产品开发时间。” 也就是说不了解整个情况的话,一旦重写失败,沉没成本会相当昂贵。...可以试图解决一些性能和用户体验上问题,比如利用现代框架重写前端,让管理层和客户兴奋之后,再逐步重构后端(此时,更多测试覆盖率可能会派上用场)。...简而言之,如果领导层不了解他们处于不可持续境地,并且不愿意投入时间和金钱来修复它,那么重写重构可能性为零。” 参考链接: https://news.ycombinator.com/item?...一路过来,给我最深感受就是一定要不断学习并关注前沿。只要你能坚持下来,多思考、少抱怨、勤动手,就很容易实现弯道超车!所以,不要问我现在干什么是否来得及。

25120

代码质量与技术债

测试覆盖率:编写单元测试,特别是针对复杂代码测试覆盖是否足够。 设计与架构:是否高内聚、低耦合,依赖最少。...代码质量指的是代码内在非功能性质量,用户不能直接体验到这种质量好坏,代码质量不好,最直接“受害者”是开发者或组织自身,因为代码质量好坏直接决定了软件可维护性成本高低,例如重复代码会造成维护成本成倍增加...,修改代价很可能超过重写代价。...代码扫描工具中对应代码质量每条扫描规则都对应着一个债务计算方法,有的规则是设定了固定债务值,有的则根据违规程度有相应计算公式。...当负债率达到100%时,即债务开始超过资产,资不抵债,这时就称这种情况为“技术破产”。当然,日常工作中碰到这种情况时,我们不会用这么吓人术语,通常是打着“重构旗号重写一遍。

2.8K72

技术债:人因素

「利息」继续借债,债务成本会越来越高,累积利息会呈指数增长 —— 在技术债基础上继续引入技术债,会让事情变得越来越糟糕,引入新功能(软件资产)时间会越来越长。...3) 当债务累积到一定程度超过资产时,如果此时没有足够自由现金流来偿还本息,那么个人或者公司可能不得不寻求破产保护 —— 当技术债太大无法通过重构来解决时(或者成本太高),此时重写是最好方案。...其实在实际工作中,技术债引入很大程度上是因为人和流程原因,而流程是人制定和人来执行,所以归根结底是人原因。 首先说人原因。...开发者是否对已有系统有足够了解,往往决定了这个功能质量。 那么,什么叫对已有系统有足够了解?...很可能 reviewer 主要精力都放在了基本代码问题上,而没有功夫去管更重要问题:接口设计是否合理,数据结构是否合理,逻辑是否有问题等。

42820

《JAVA SE》面向对象编程(上篇)

有的时候客观事物之间就存在一些关联关系, 那么在表示成类和对象时候也会存在一定关联. 2.1 背景 当类和类之间满足:一个类is a 另一个类,一定存在继承关系。...一般我们不希望出现超过三层继承关系. 如果继承层次太多, 就需要考虑对代码进行重构了。 如果想从语法上进行限制继承, 就可以使用final关键字。...Duck重写了Birdeat方法~~~ 关于重写注意事项: 重写和重载完全不一样. 不要混淆(思考一下, 重载规则是啥?)...普通方法可以重写, static 修饰静态方法不能重写 重写中子类方法访问权限不能低于父类方法访问权限....例如不小心将方法名字拼写错了 (比如写成 aet), 那么此时编译器就会发现父类中没有 aet 方法, 就会编译报错, 提示无法构成重写 3.4 多态好处 1) 类调用者对类使用成本进一步降低 封装是让类调用者不需要知道类实现细节

25710

处理遗留系统

在时间允许情况下,我会考虑对相关代码进行一些小重构,例如提取方法或提取类等。虽然这些重构不能改变遗留系统本质,但至少可以提高代码可读性,并能在一定程度下去除代码重复。...事实上,在软件成本中,维护成本所占比例远远大于开发成本。...为遗留系统绘制包图(Package Diagram)同样非常重要,它既能帮助你理解遗留系统结构,又能为我们找到系统中可能存在双向依赖和循环依赖,找到分解不合理包,这就为我们系统重构奠定了良好基础...只要不是更改开发平台,通常情况下,我们不会考虑重写遗留系统。如果需要重构遗留系统,就必须采取“分而治之,小步前进”策略。可以首先选择实现较为容易,或者独立性较好模块进行重构。...必须对整个遗留系统进行审慎分析,并结合具体情况考虑这项工程复杂度、成本与预算,了解团队重构与设计能力。

61040

过渡策略

,风险大 极高人力成本维护两个应用 冰激凌策略 介绍 通过将单体应用不同组件分解到单独服务中,从而从单体应用逐步过渡到微服务。...这个过程是渐进,有时会同时存在单体应用和微服务。...优点 是可以在不影响服务正常运行和终端用户体验情况下,以较低风险逐步迁移到微服务 缺点 需要比较长执行周期 乐高策略 介绍 适用于那些因为老单体应用过大或者过复杂而无法重构组织。...优点 该策略优点是无须对原来单体应用做过多改造,而且构建新微服务应用很快。 缺点 是原来应用还存在问题,需要创建新API来支持面向微服务功能。...乐高策略有助于在大型项目重构中换取一些时间,但同时伴有很大风险。 核按钮策略 介绍 这种策略比较少用,它是指将整个单体应用全部重写为微服务。

50310

临时方案传染性

项目中存在着各种各样技术挑战:文档匮乏、缺乏经验丰富开发者、缺乏领域专家、相关领域专家无法提供技术支持……。总之,一系列技术难点使得项目开发越来越困难。...上线时间影响了我们技术决策 修正缺陷成本 而这些相关问题讨论,已经是一个相当成熟领域: 相关学术讨论会讨论结果表明,在大型项目的早期需求阶段进行投稿,以及对设计的确认和验证可以把『成本-修改...对于业务成功团队,它们选择了更好方案:重写,又或者是采用新架构(重写一种方言),比如微服务或者 DDD 方式。...更多相关内容可以见:《系统重构与迁移指南》 ( https://migration.ink/ ) 渐进式重构/修正 主要也是采用缓慢方式,慢慢来确保架构能行驶在正确路上。...嗯,同上,可以参考《系统重构与迁移指南》。 其它 架构设计程度与腐化速度是成反比。(当然,避免过度设计) 没有银弹。

33230

推行TDD思考

软件成本等于开发成本与维护成本之和,而维护成本增加主要归咎于内部质量糟糕。 当我们让开发人员为原有代码编写单元测试时,总是觉得举步维艰,主因就在于代码可测试性不够好。...然而,一旦采用这种粗暴方式,则对于系统而言,就不是维护,而是重写了。 测试先行开发至少在一定程度规避了这样问题。因为开发人员首先要写好测试,这就驱使开发人员必须强制地思考代码可测试性。...若有测试保障,重构就变得安全。但尽可能地,我们还是希望运用工具提供自动重构功能,这既提高了重构效率,也在一定程度下确保了重构安全。...当一个人在掌控键盘时,另一个人就可以重点关注代码可读性,看看代码是否散发出臭味。两个人眼睛终归要更锐利一些,至少视野范围更广泛。 及时重构重构诸多实践中最重要一点。...不要让重构成为你在未来偿还债务杀手锏。越拖到后面,偿还债务成本就越高。以重构而论,如果将重构拖到最后,则需要重构能力就更强,因为程序结构会变得更复杂。

1.2K90

特斯拉、微软、谷歌、Meta等大厂传裁员;AMD与英特尔CPU被曝恐存在内核内存漏洞,缓解措施将增加12%-28%计算成本

AMD与英特尔被爆CPU恐存在内核内存漏洞,缓解措施将增加12%-28%计算成本 近日,苏黎世联邦理工学院研究人员发现,英特尔和AMD 部分微处理器易受新发现推测性执行攻击,从而泄露密码数据和其他敏感材料...据内部备忘录要求,“每位经理都要考虑团队中每一个人是否为Meta带来了价值。”...,然后被探测出来后,不单单是储存在云盘上会被和谐......就连本地文件也难逃一谐。”...截止发稿前,该话题微博阅读量已超过2亿次。...目前,该话题在知乎引发热议,多个回答认为该费用具有吸引力,可在一定程度上提高年轻人科研动力,促进科技发展。(知乎) 更多内容,点击下方关注: 扫码添加 AI 科技评论 微信号,投稿&进群:

51820

SonarQube各指标的定义及计算方法

Portfolio Management System”中提出,之后被软件工程界接受并推广,《重构作者 Martin Fowler 也在其网站上对技术债务有所介绍。...示例:如果开发1 LOC成本估计为30分钟,则此属性值为30。目前我们采用是系统默认值30。注意此处成本是指从零开始重写代码所需成本。...评级由技术债务比率值决定,技术债务比率是将项目的技术债务与从零开始重写代码所需成本进行比较。A到D默认值为0.05,0.1,0.2,0.5。任何超过0.5评级就为E。...有时,Bug和Code Smell之间界线是模糊。当有疑问时,问自己:“打破这条规则代码是否是程序员想要?如果答案是“可能不是”,那么它是一个Bug。否则它就是一个代码坏味道。...9、Issues问题 9.1 Open Issues 当前存在全部问题 9.2 Reopened Issues 关闭后又重新打开问题,可能由于之前误判关闭或者重新出现同样问题,需要再次将问题置为打开状态

2.7K30
领券