:本文仅供娱乐。不要试图在工作中重复它。不过,在家做你想做的事吧。 免责声明 我们,开发人员,经常遇到 ,这只是我们工作的一部分。因此,乍一看,“你能故意制造一个错误吗?”这个问题。可能看起来很平庸——“是的,当然,我可以写一个错误。”然而,如果你仔细想想,一切似乎都不再那么明显了。 错误 事实上, 。 bug 是一个错误,通常是一个缺陷 错误与损坏的代码不同 工作计划。 软件问题中的“bug”一词起源于 1947 年,当时一只飞蛾导致哈佛 Mark II 计算机出现故障。工程师们确实发现了一只飞蛾卡在其中一个继电器中,他们将其称为“发现的第一个实际错误案例”。 有什么问题? 众所周知,世界可以通过数学公式很好地描述。公式实际上就是算法。因此,如果我们能够用数学方法描述某些现象,那么纠正所得公式以使其 给出错误结果是一项艰巨的任务。尽管如此,现在还不到绝望的时候。 可能会在这里帮助我们。我们都见过这些 。界限总是有问题🤷♀️。因此,让我们注意创建错误的第一个想法 - 。 仅有时 边界条件 if index == 0 {…} else if index == n-1 {…} 忽略边缘情况 一般来说,遍历数组是潜在错误的宝库。其中最常见的是 。如果你从未偶然发现过这样的事情,那么你就从未编码过。不幸的是,这个错误非常流行,以至于人们开始为数组编写安全包装器,例如 。所以今天,如果没有这个东西,你的同事几乎不会批准任何代码。你可以尝试一下,但可能性不大…… 索引越界 array[safe: index] 常见的错误包括 。当没有退出条件时,递归算法可以无限递归。递归在这里似乎是可选的 - 写 ,然后就完成了。然而,该错误的流行再次对我们不利。开发人员很清楚无限循环的潜在问题,他们的眼睛肯定会在代码审查时注意到这样的事情👮 堆栈溢出 while true 为了仍然将你的阴险计划投入生产,请尝试使用 。 全局变量作为退出条件,并从外部悄悄地更改它 var coditionCounter = 0; class A { func foo() { while coditionCounter < 10 { coditionCounter++; B.boo(); } } } class B { func boo() { coditionCounter--; } } 一般建议 有趣的是,即使是 ChatGPT 在编写错误时也拒绝提供帮助。也许我只需要高级订阅......🤔 好的一面是, 提供了一套有助于编写无错误代码的通用规则:以小增量进行代码、遵循编码标准、编写单元测试以及等等。我们可以尝试做相反的事情 - 编写意大利面条式代码并忘记 SOLID。然而,这样一来, 。我们得到的不是优雅的精确武器,而是难以控制的混乱,这将征服我们的程序。 人工智能 我们就失去了对我们编写的所有代码的控制 在解决创建错误的问题时,值得确定子任务。首先,我们需要提出一些罕见的边缘情况。其次,我们需要将错误伪装成常规代码,以便通过代码审查。第三,我们必须削弱QA部门的注意力。第四,不要立即被抓住。但这已经是可选的。 我的一般建议如下(您可以在评论中分享您的建议): 。要返回,请从最意想不到的地方更改重要参数的值。通过几个类来完成此操作,就像您是 VPN 一样。 操纵访问级别 在子类中实现一些意想不到的逻辑。简而言之, 。 打破了 SOLID 中的 L 原则 class A { func decrease() { x--; } } class B: A { override func decrease() { x++; } } 将你的隐秘变化隐藏在更大的函数中。 - 迷失在人群中。 队伍越多越好 在拉取请求中使用相同的原则。在小PR中,被注意到的概率更高。 尝试将错误分解为多个部分并将它们放入 中。如果可能的话,也给不同的审稿人。 不同的拉取请求 找出 QA 的弱点并赢得他的信任。或者在检查期间通过谈话来分散他们的注意力。 顺便问一下,你听说过Heisenbug吗?这是一个在研究/ 过程中消失或改变其行为的错误。就像薛定谔的猫一样。如果修复问题不会分配给您,那就完美了。 调试 heisenbug 的一个常见示例是在使用优化编译器编译程序时出现的错误,但在未经优化的情况下编译同一程序时则不会出现错误(通常是为了使用调试器检查程序而这样做)。在调试时,优化程序通常保存在寄存器中的值通常会被推送到主存储器。 你可以 相信你自己!历史上有一些非常严肃的公司在生产中承认错误的例子。 最昂贵的软件错误之一发生在 1996 年,当时执行 Cluster 任务的阿丽亚娜 5 号火箭在升空后仅 40 秒就爆炸了。此次故障可追溯到火箭制导系统中的软件错误。 阿丽亚娜 5 号航班 501: 1999 年,NASA 由于软件错误丢失了火星气候轨道器。该软件使用英制单位(磅秒)而不是公制单位(牛顿秒),导致航天器在火星大气层中燃烧。 NASA 的火星气候轨道器: 此外,有些错误可能会成为功能,例如 中的跳墙或 中圣雄甘地的行为……可能。 《马里奥》 《文明》 开发错误是思考算法并彻底预测可能出现问题的能力。因此,即使您没有理由在代码中留下错误,它仍然值得考虑。