Questions tagged «bad-code»

4
什么是反腐败层?如何使用?
我正在尝试弄清“反腐败”层的真正含义。我知道这是一种过渡/解决旧代码或错误API的方法。我不明白的是它是如何工作的,是什么使它与不良层完全分离。 我已经进行了一些搜索,但是找不到任何简单的示例或解释,因此我正在寻找可以理解并可以通过简单示例进行解释的人员。可以满足我的问题的答案应该很简单(不一定要简短),并提供易于理解的实现和使用示例。 有关我的用例,请参见此问题。

14
向客户展示错误代码?
一位客户要求我重新设计他们的网站,这是另一位顾问开发的ASP.NET Webforms应用程序。这似乎是一个相对简单的工作,但是在查看了代码之后,显然并非如此。 该应用程序编写得不好。完全没有 它极易受到SQL注入攻击的影响,业务逻辑散布在整个应用程序中,重复很多,无用的代码无所作为。最重要的是,它不断抛出令人窒息的异常,因此站点看起来运行平稳。 我的工作是简单地更新HTML和CSS,但是许多HTML都是在业务逻辑中生成的,这将是一场噩梦。我对重新设计的估计比客户期望的时间更长。他们问为什么这么久。 我如何向客户解释这段代码有多糟糕?在他们看来,应用程序运行得很好,重新设计应该是一次性的。这是我对前任顾问的反对。我如何给出非技术客户会理解的简单而具体的示例? 更新资料 感谢您的所有回复。SQL注入攻击演示很有意义,我将在测试环境中进行演示。那只是该应用程序中许多问题的一部分。我一直在寻找方法来解释为什么其他部分(例如,在数据层中生成的html)需要用更好的实践来替换,以便进行html和css更新。这里有很多很好的建议,当我与客户交谈时,我会综合考虑。

11
“ goto”语句导致什么样的错误?有历史上重要的例子吗?
我知道,除了打破嵌套在循环中的循环之外,其他方法都是这样。该goto语句是易于出错的编程风格,因此一直被人们回避和谴责。 替代文字: “尼尔·斯蒂芬森(Neal Stephenson)认为给他的唱片公司定名为“ dengo”很可爱”, 请参见以下原始漫画:http://xkcd.com/292/ 因为我很早就学到了 对于什么类型的错误goto实际上导致什么,我真的没有任何见识或经验。那么我们在这里谈论什么: 不稳定吗? 无法维护或无法读取的代码? 安全漏洞? 还有其他东西吗? 实际上,“ goto”语句会导致哪种错误?有历史上重要的例子吗?

10
为什么“从表中选择*”被视为不良做法
昨天我正在与“业余”程序员讨论(我自己是专业程序员)。我们遇到了他的一些工作,他说他总是查询数据库中的所有列(即使在生产服务器上/代码中)。 我试图说服他不要这样做,但是还没有那么成功。在我看来,程序员仅应查询“简洁”,效率和流量方面实际需要的内容。我误会我的观点了吗?
96 database  sql  mysql  bad-code 

13
C ++中最差的做法,常见错误[关闭]
在阅读了Linus Torvalds的这本著名的文章之后,我想知道C ++程序员的真正陷阱是什么。我明确不是在这个问题及其答案中提及错别字或不良的程序流,而是指编译器未检测到的更高级错误,这些错误不会在首次运行时导致明显的错误,完整的设计错误,在C中不可能实现的事情,但是可能由不了解其代码的全部含义的新手在C ++中完成。 我也欢迎回答指出通常不会出现的巨大性能下降。我的一位教授曾经告诉我有关我编写的LR(1)解析器生成器的示例: 您使用了太多不必要的继承和虚拟性实例。继承使设计更加复杂(由于RTTI(运行时类型推断)子系统,因此效率低下),因此仅应在有意义的地方使用它,例如,用于解析表中的操作。因为您大量使用模板,所以实际上不需要继承。”

12
哪种设计模式定义最差或定义最窄?[关闭]
对于每个编程项目,都有过编程经验的管理人员会在为您的项目推荐一些设计模式时大放异彩。当设计模式有意义或您需要可扩展的解决方案时,我喜欢它们。例如,我以积极的方式使用了代理,观察员和命令模式,并且每天都这样做。但是,如果只有一种创建对象的方法,我真的很犹豫地说出Factory模式,因为工厂将来可能会使一切变得更容易,但是却使代码复杂且纯属开销。 因此,我的问题是关于我的未来职业以及我对经理类型的回答,这些类型周围会出现随机的模式名称: 您使用了哪些设计模式,这使您整体退缩?哪些是最糟糕的设计模式,除了在一种有意义的单一情况下,您应该考虑哪些(请阅读:哪些设计模式定义非常狭窄)?(这就像我在寻找对亚马逊整体产品的负面评价,以了解使用设计模式的人最讨厌的东西。)而且我在这里不是在谈论反模式,而是通常被认为是“好的”模式。 编辑:正如一些回答所言,问题通常是模式不是“不良”而是“使用错误”。如果您知道一些经常被滥用甚至难以使用的模式,那么它们也可以作为答案。

3
从JSON API返回HTML是否可以?
在我当前的项目中,我负责服务的实现,该服务涉及使用新创建的RESTful API,这些文档记录为仅支持JSON。 客户端始终使用“ application / json”的接受标头和“ application / json”的内容类型发出请求。但是,某些端点会发送带有HTML内容类型的响应,甚至是HTML正文。对我来说,这显然是错误的方法,永远无法辩解。 在整个项目中,相同的做法已应用于两个不同的供应商和两个不同的服务。我发现自己必须证明为什么需要更改服务。供应商表示,客户端应对此进行处理,甚至我选择的REST库也受到了质疑(RestEasy),因为默认情况下它不应对此问题。 这是一个主要的挫败点。我找不到很多引用来支持我的论点,我认为这是因为要点很明显,所以没有意义。 问题是,我缺少什么吗?我对此很腐吗?在这种情况下,可以使用不具有application / json内容类型的JSON API吗?参考将不胜感激。您如何从商业角度解决这种情况?

8
使用预先存在的不良做法还是与旧代码不太适合的良好做法更好?
我之所以这样想,是因为我试图为现有的3rd party软件编写扩展,而他们的数据库却被严重地非规范化。我需要使用他们现有的表并添加一堆新字段。 我可以选择以其设计风格(包含几乎所有属性都放在一个大表中)创建新表,或者一起创建一组新表,并使用诸如触发器之类的其他功能在新表和新表之间同步数据。旧桌子。 我最终选择了使用现有不良设计风格的第一种选择,但是我面临的问题是:采用预先存在的不良做法还是实施与现有代码不能很好地配合的良好做法更好?在某些情况下,我应该选择一个? 注意:到目前为止,许多答案都与缓慢重构错误代码有关,但是我无法做到这一点。该代码不是我们的,供应商经常对其进行更新。我只能在上面建立。

10
如何证明应用程序建立在错误的代码库上?
我目前正在审查由一些以前在我的工作中工作过的开发人员构建的系统。从用户的角度来看,该系统运行良好,但是当深入研究代码审查时,这简直是一团糟。我非常确信该应用程序的构建方式将无法承受未来的更新,更不用说使用率的高增长了。 问题是我知道情况有多严重,但我的上级却没有。我该如何向经理证明这一点,以便他真正地看到问题并可以说服他在当前代码库上进行最少的分类,并在不久的将来为该应用程序的下一版本启动新的开发线?

7
当成为团队的新成员时,您如何处理现有集成和单元测试的质量?
我在职业生涯中遇到的一个反复出现的主题是成为新的开发人员加入团队,并很快对现有的单元和集成测试套件产生内在的不信任。 在面试过程中,管理层告诉您,他们“大力支持单元测试”,并公开鼓励他们进行测试。他们可以,但是关于测试本身的一切都是错误的。就像他们声称拥有100%集成测试覆盖率但少于10%可重复单元测试覆盖率时声称100%覆盖率这一事实。我发现了一些其他问题: 在什么是单元测试和什么是集成测试之间没有明确的指示。单元测试和集成测试在同一个类别中混合在一起。 尚未声明对特定环境的数据库中非常特定的动态数据有明确依赖关系的集成测试。 非事务集成测试,基本上是可能会或可能不会麻烦自行清理的测试,有时需要手动数据库“清理”以使测试可重复。 绝不进行任何模拟,而应用程序代码则需要进行大修,以使模拟成为可能。换句话说,设计时不要考虑测试。 没有明确的命名约定可以快速查看测试名称并大致确定要进行的测试。 这并不是说所有测试都是无用的或不好的,很多测试都相当好并且值得保留,但是有时候感觉就像淘金。我故意避免运行测试,只是因为我担心为黑箱测试用例搞砸数据库。 从本质上讲,这使我对单元和集成测试产生了固有的不信任感,而我个人没有以某种方式编写或审查这些测试。在某种程度上,如果您对测试套件的质量不抱有信心,那么它实际上对团队或项目毫无价值。 当您发现自己处于这种情况时该怎么办?您认为最佳的攻击计划是应对此类问题? 是否应该在跨发行版的巨大努力下重构所有测试?您是否应该放弃这个旧项目可能会有一天可靠的单元测试范围的想法?

6
您如何处理故意的错误代码?
关于故意错误代码的故事很多,不仅在TheDailyWTF上,而且在SO上。典型的案例包括: 具有无用的浪费时间的构造(例如,空循环计入了巨大的价值),因此程序员可以轻松地通过在任务执行时删除应用程序来“加速”应用程序。 提供故意误导,错误或没有文档的文档,以产生昂贵的支持请求。 即使一切正常,也容易产生错误,或更糟糕的是,即使应用程序运行良好,也会锁定应用程序,因此需要昂贵的支持电话才能解锁。 这些观点显示出或多或少的恶意态度(即使有时是偶然的),尤其是第一点经常发生。 一个人应该如何处理这样的结构?忽略问题,还是仅删除有问题的代码?通知他们的经理,或与介绍“功能”的人交谈?
21 bad-code 

3
在我的绳子尽头[关闭]
关闭。这个问题是题外话。它当前不接受答案。 想改善这个问题吗? 更新问题,使它成为软件工程堆栈交换的主题。 4年前关闭。 我是一家大公司的承包商。目前,该项目有三位开发人员,其中包括我自己。 问题是其他2个开发人员没有真正得到它。“它”的意思是: 他们不了解我们正在使用的技术的最佳实践。在我和其他人给他们提供示例六个月之后,就使用了可怕的反模式。 他们是“复制和粘贴”程序员,主要产生意大利面条代码。 他们不断地破坏事物,执行更改,但不进行基本的冒烟测试以查看一切是否良好 他们拒绝/很少要求进行代码审查。 他们甚至拒绝/很少做诸如格式化代码之类的基本事情。 没有关于任何类的文档(jsdocs) 害怕删除无能为力的代码 即使我们具有版本控制,也应将注释的代码块保留在任何地方。 我发现自己在格式化其他代码,修复错误,发现已损坏的功能以及创建抽象结构以删除意大利面条时感到越来越沮丧。 我真的不知道该怎么办。我尽量不要沮丧,但这只是一团糟。我像这些人一样喜欢这些人,但是我觉得编码情况太糟糕了,如果他们整天只浏览Web,我可以更快地行动。 要求我们的经理审查其他svn提交访问权限是否不合时宜;提交只能由对我们正在做的事情有知识的人进行审核后才能完成?作为承包商,我不确定这是否是最好的选择。 有没有一种微妙/不是那么微妙的方式来弄清楚我要修复的东西?
17 bad-code 

7
如果流利的编码员无视良好做法,那么他的流利程度对他不利吗?[关闭]
已关闭。这个问题是基于观点的。它当前不接受答案。 想改善这个问题吗?更新问题,以便通过编辑此帖子以事实和引文回答。 4年前关闭。 我正在开发一个相当大且有错误的应用程序-由于它的编写方式(我将为您提供详细信息,但是在您可以想到的大多数领域中它都违反了规则),如果不进行重大重构就几乎不可能开发它。 该应用程序的重要部分是由实习生,n00bs等创作的;但是在高级开发人员中也有一个程序员,尽管谦卑,但他留下的代码也是可疑的,也许还是以不同的方式。 当然,他的代码往往会在大多数时间完成工作,但通常是很隐秘的,需要重新发明轮子(例如,使用大型自定义方法来完成相当普通的SQL db备份)等。基本上,不必要的混乱以及大量的过度设计 让我想到,如果不是其他素质的陪伴者,作为一名高技能的编码员(我故意不使用“开发人员”一词,假设它表示更多的技能)实际上可能是有毒的。 假设这是真的,我能想到的一些原因是: 如果您轻松编写代码,则感觉(或实际上实际上是短期内)可以更快地就地找到自己的解决方案,而无需使用库,既有功能等。 如果有足够的经验来轻松维护复杂程序的心理形象,则不太倾向于将其拆分为模块,层等。 因此,我的观点是,如果一个流利的编码人员恰好是一个不良的开发人员,那么他们的流利性不仅不能弥补后者的不足,反而会带来更大的危害。 你对那个怎么想的?是真的吗(如果有,程度如何)?

11
在进行其他操作时,是否应该修复先前存在的缺陷?
难题:在使用新功能或修复缺陷的过程中,您会在代码中发现遗留问题。你该怎么办?对其进行修复,并有可能改变代码的行为。直到现在为止,由于某种偶然原因,它一直在工作,或者还没有发现缺陷,或者值得任何人报告。您是否应该不理会它,并允许该问题使以后的代码难以使用?解决问题只会增加原始任务的时间,并迫使您进行回归测试。很少有人会欣赏这项工作。但是,以某种方式修复它似乎正确。问题较少的代码更易于重构和构建。 当我们致力于使Web应用程序现代化时,我一次又一次地发现自己处于这种情况。当我不切实际地处理这些旧错误时,我无法分辨自己是痴迷还是光荣。您如何处理这些情况? 谢谢,科里

8
您在压力下会写不好的代码吗?[关闭]
关闭。这个问题是题外话。它当前不接受答案。 想改善这个问题吗? 更新问题,以使它成为软件工程堆栈交换的主题。 7年前关闭。 当您承受压力时,临近最后期限,经理正在喘不过气来,您是否发现自己开始编写不良代码?为了完成任务,TDD和最佳做法会顺道溜走吗?在这种情况下您会怎么做?您的经历是什么?
14 bad-code 

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.