成千上万的错误!


30

我最近被分配到一个新项目。好吧,实际上是一个用经典ASP编写的旧项目。现在,该应用程序的新版本正在最新的ASP.NET中编写,但预计不会在一段时间内成为RTM(估计发布日期为2017年1月),因此我必须对旧应用程序执行一些维护,直到可以丢弃。
另外,我有一种感觉,不是所有客户都会立即切换到新程序,因此该版本可能会出现一段时间。

问题是,它充满了错误。它的一部分可以追溯到上个世纪,当时还没有Web标准,而且我不太介意Quirks模式,width并且height属性而不是CSS,用于布局的表格,框架集等,但是哦,所有这些错误!width="20px"在所有onchange="javascript:..."使用css的地方,style="width:20"并且style="width=20px"很常见。更不用说有矛盾widthstyle属性的地方。等等。
因此,Web应用程序仅在IE下运行,并且仅在兼容模式下运行。显然,开发人员从来没有考虑过代码有效性,只有结果看起来像他们所想的那样。

而且我不知道该如何处理。在查找代码中的其他错误时,我发现无法对那些错误闭目。
我当然可以进行全局查找和替换,以解决大部分问题,但这意味着我的第一次提交将包含成千上万个已更改的.asp文件。我可以那样做吗?


21
“错误”是指您不喜欢的编码样式吗?
伊万(Ewan)2016年

9
我听到的提示:到音乐学生练习的地方。尝试在隔音室里呆15分钟。尖叫十五分钟。现在您感觉好了,去修复错误!认真地,与管理层核实目标是什么。如果需要此软件,它可能很快会阻止他们升级计算机,并导致更换旧的损坏的计算机时出现问题。
gnasher729

24
这个问题听起来更像是在咆哮。您为什么抱怨几个月后将要使用的软件?
布朗

5
用“经典ASP”编写的代码遵循经典ASP的标准(例如,以前的标准)并不是“错误”,而这些标准恰好与Web编码的最新方式不同-而最新的方式很可能会“淘汰”日期”(无论如何)。“很明显,开发人员从未考虑过代码的有效性”-如果OP认为他/她可以编写在未来15年或更长时间内仍然“看起来有效”的代码,那么时间就会证明这种信念是否自然而然(或无知)。
alephzero

19
“我必须对旧应用程序进行一些维护,直到可以将其丢弃为止。” 什么保养?请具体说明。如果您的任务是维护此代码库,而没有其他要求,那么不要更改任何内容。对其进行维护意味着您将继续使之工作,而不是纠正那些最初不被认为已损坏的事情。
Stephan Branczyk '16

Answers:


99

听起来您好像将几件事混淆为“错误”一词

  • 旧版html属性
  • 编码风格
  • 不会导致错误的编码错误
  • 未报告的错误
  • 现在的错误
  • 报告的错误
  • 报告您已分配修复的错误

在将要替换的旧版应用程序中,您仅应关注这些错误类型之一。最后一个。

我要说的是,您甚至不应该在正在修正错误的功能上重构其他内容,这主要是由于:

  • 现在的错误

您可以从代码中看到它可能是如何工作的,但从未成功过,但是在过去的10年中,所有用户都一直在使用不确定宽度的元素,他们不会感谢您修复它。

从好的方面来说,如果您愤世嫉俗地使用JFDI,您将可以快速解决这些错误,而新版本的团队将无法跟上旧版本的功能。

当您向客户推荐chrome插件ie6模拟器时,这会给您带来讽刺的欢乐,让您充满欢乐的微笑,这样他们就可以继续使用他们喜欢的选框“功能”


28
现在出现的错误 ”-哦,喜悦...
FP

36
确实在触摸时要非常谨慎,这立即浮现
Dennis Jaheruddin

3
请澄清... JFDI ...
GER

5
@GER“只是[专业]做到”,这意味着避开正常的标准和测试以及其他事情,而无需担心它是否以可维护和可读的方式进行修复。
Nzall

3
像aglie但更多
伊万

40

您要问的不是技术问题,这里没有人可以回答。

您正在维护模式下开发一款软件,并且观察到过时的技术以及大量的缺陷和不一致性。您问该怎么办。例如,您是否应该努力使它与跨浏览器兼容?您是否应该使其符合现代标准?您是否应该解决整个应用程序中的语法不一致问题?事实是,这些都是业务决策。您应该问您的经理或产品负责人他们要您解决什么问题以及他们的优先事项是什么。由于已经有一个项目在重写应用程序,因此管理层很可能已经意识到您遇到的问题。

如果该应用程序将在几个月内被完全替换,则很可能他们只希望您解决特定的关键问题,而剩下的一团糟。但是我们不知道。

您询问是否可以在整个代码库中进行广泛的搜索和替换操作,从而更改成千上万个文件。当然可以。问题是您是否应该这样做。这种全面的变化可能需要进行广泛的测试,以确保没有任何问题。同样,如果收益超过时间和风险成本,则是业务决策。


1
这是一项商业决定,但答案显而易见,以至于他不需要问经理。如果不需要,他不应该清理混乱。(+1)
usr

14

如果将在18至24周内更换该应用程序(将预期的延迟添加到上述6至8周的估算中),那么您真的需要问自己:仍然通过投入大量的工作来为您的业务增加什么价值旧版本。

当然,如果您需要在未来几年内坚持支持该应用程序,那么从长远来看,摆脱技术债务可能是值得的。但是当所有这些东西都将被丢弃时,为什么还要麻烦呢?只需在所有其他黑客修复程序之上添加另一个黑客修复程序,即可修复根本无法等到新版本发布后就解决的任何问题。

您也可能会问自己,在仍然剩余的生命周期内该应用程序可以做什么。当您现在真的很无聊并且与您的时间完全没有关系时,您可以对其进行大修,并消除您提到的所有样式问题,但是这很可能一开始会破坏很多东西而不是解决问题。最终,如果有足够的时间,您也许可以摆脱这些新问题,但是您没有时间。


11
s/weeks/years/
CodesInChaos

9
去年,我修复了一个性能错误,该错误本质上相当于一个表,该表应缓存一些最近的值,实际上保留所有历史记录并无限增长。在代码的适当位置,有一条评论说“基本上应该定期清除,但这无关紧要,因为我们计划在2007年底之前废弃该系统”。没有比临时解决方案更长寿的了。
Peteris

@Peteris好吧,临时税。但是,是的。
杰伊(Jay)

上一次我开发像这样的应用程序时,它也注定是临时的。它要控制的硬件已被废弃,并建立了替换产品,并且将开发新软件来控制替换产品,该软件将在6个月内上市。不幸的是,替换硬件出现了故障,所有的预算都花在了修复故障上,因此替换控制系统已一无所有。几年后,整个项目被废弃了。AFAIK,五年后,整个系统仍然可以在旧的硬件和软件上运行。
Jules

幸运的是,我可以解决最严重的问题(SQL注入攻击,具有数百万行但没有索引的SQL表,原始开发人员忘记检查授权的页面...)。
Jules

3

不进行重大更改的原因:

一:代码将在几个月后消失。您花5个月的时间修复一个系统,然后在1个月后将其丢弃,是否真的值得公司花费时间?警告:系统在计划要离开时很少消失。更换系统几乎总是很晚,有些用户由于某种原因无法升级,等等。但这是一个复杂的问题。

第二:如果您进行了大量更改,尤其是大量搜索和替换,则会引入错误。不是的,您可能会引入bug:会的。假设您进行了S&R,并将“ width = 200”更改为“ width:200px”。ASP pges上是否有C#或VB代码?因为如果您有一个设置为200的名为“ width”的变量,那么您就将其破坏了。(或者,您是否考虑过将S&R限制为ASP页面?)或者,如果将“ width:200”更改为“ width:200px”,那么如果代码中有一个地方显示“ width:200mm”,会发生什么情况? “?现在显示“ width:200pxmm”。好吧,假设您想到了这些。如果某个地方的宽度规范无效,那当然会被忽略,而现在布局很好。你“修复” 宽度,现在它以200px布局...并且显示被拧紧了,因为200px实际上是错误的宽度,并且只能工作,因为忽略了该值?大规模S&R十分危险,因为您几乎可以肯定没有在研究每一个改变的地方。您甚至可能不确定要测试什么。

三:“明显”错误的代码实际上可能是用户想要的。我已经看到了很多要求规范,这些规范要求的行为显然是错误的和疯狂的……然后我回到用户那里,询问他们真正想要的是什么,事实证明他们真的想要这种疯狂的行为,因为那是他们的业务运作方式或政府法规对此有何要求。

即使该行为确实是错误的,也许用户也已经开始期待它,并且他们会定期解决它,并且通过修复它,您将破坏他们的解决方法。示例:我在一个系统上工作,在这个系统上,您可以指定一个可以公开销售的日期和日期。这两个日期实际上都是从当天开始的午夜,因此,如果您说“至7月30日”,则表示它以7月29日这一天结束,即7月30日上午12:01之前的一分钟而不是7月30日结束我曾经修复过这个问题,但是我只能这样做,因为只有不到六名有权使用该屏幕的人,我可以简单地告诉他们所有我已经修复了它。如果有成百上千的用户,并且现在他们都已经确定了您确实必须提供截止日期之后的第二天,那么我的“解决方案”


0

我当然可以进行全局查找和替换,以解决大部分问题,但这意味着我的第一次提交将包含成千上万个已更改的.asp文件。我可以那样做吗?

我不明白为什么不这样。一个提交应该是概念上的一件事,但我不明白为什么一个全球性的查找和替换从style="width=20"style="width: 20px"不会被视为“一件事”,概念上说。并且,如果这可以帮助您更好地入睡,又可以避免在修理其他东西时分心,又不浪费任何东西,那为什么呢?


12
为什么不?因为在大型遗留代码库上进行全面的搜索和替换需要事后进行大量测试才能确保没有任何问题。
JacquesB '16

-2

您的问题是确定优先顺序:放映中的哪些问题(生产中)?哪些是定时炸弹?哪一个可以保留更长的时间(因为它已经起作用并且已经这样做了很多年,甚至还可以)?

在您遇到的情况下,我要做的是列出要查看的问题类别。例如,替换style="width=(\d+)"style="width: \1px"(可以使用regexp进行全局查找/替换来纠正-抱歉,如果我的不是100%)将是一种类别,并且如果只有一种情况发生,那就是。为每个类别列出一个优先级(执行此操作的紧急程度)和工作估计(执行此类别需要多长时间)。

您的维护任务也将显示在此列表中。现在,您开始应用某种管理,即使仅对您自己也是如此,并且当您有空但无事可做或者需要与经理就要做的工作(或要求)进行协商时,就可以使用一种工具。时间分配给他可能不知道的事情)。(如果采取正确的措施,这种主动性可能会帮助您引起宣传注意。)

我猜您喜欢编程是因为您在某种程度上拥有一点完美主义的个性。但是在商业环境中,您需要开始意识到完美是善的敌人(而善带来金钱,完美可能不一定会为更多的工作带来更多的收益)。首先执行所需的操作,然后执行具有的功能。是的,这可能无济于事。只是咧着嘴笑,忍受它,也许会成为一种爱好,以锻炼自己的完美主义并保持理智;-)

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.