: este artigo foi escrito apenas para diversão. Não tente repetir isso no trabalho. Porém, faça o que quiser em casa. Isenção de responsabilidade Nós, desenvolvedores, encontramos regularmente, é apenas parte do nosso trabalho. Portanto, à primeira vista, a pergunta “Você pode criar um bug de propósito?” pode parecer banal - “Sim, claro, posso escrever um bug”. Porém, se você pensar bem, tudo não parece mais tão óbvio. bugs O fato é que . Um bug é um erro, uma falha em um sistema geralmente bug não é o mesmo que código quebrado programa de trabalho. O termo "bug" no contexto de problemas de software originou-se em 1947, quando uma mariposa causou um mau funcionamento no computador Harvard Mark II. Os engenheiros literalmente encontraram uma mariposa presa em um dos relés e se referiram a isso como o “primeiro caso real de bug encontrado”. Qual é o problema? O mundo é conhecido por ser bem descrito por fórmulas matemáticas. E as fórmulas são na verdade os algoritmos. Portanto, se formos capazes de descrever matematicamente algum fenômeno, então corrigir a fórmula resultante de modo que ela dê o resultado errado não é uma tarefa trivial. No entanto, não é hora de se desesperar. podem vir a ajudar-nos aqui. Todos nós já vimos isso . Sempre há algo errado com os limites 🤷♀️. Então, vamos observar a primeira ideia para criar um bug - . apenas às vezes As condições limite if index == 0 {…} else if index == n-1 {…} ignorar casos extremos Em geral, iterar através de arrays é um depósito de possíveis bugs. E o mais comum deles é . Se você nunca se deparou com tal coisa, você nunca codificou. Infelizmente, esse bug é tão popular que as pessoas começaram a escrever wrappers seguros para arrays, algo como . Então, hoje, dificilmente seus colegas aprovarão algum código sem essa coisa. Você pode tentar, mas é improvável… o índice fora dos limites array[safe: index] Bugs predominantes incluem . Um algoritmo recursivo pode ocorrer infinitamente quando não há condição de saída. A recursão parece opcional aqui - escreva e pronto. No entanto, mais uma vez, a popularidade do bug está jogando contra nós. Os desenvolvedores estão bem cientes dos problemas potenciais dos loops infinitos, e seus olhos certamente perceberão algo assim na revisão do código 👮 estouro de pilha while true Para ainda colocar seu plano insidioso em produção, tente usar . uma variável global para as condições de saída e altere-a silenciosamente de fora var coditionCounter = 0; class A { func foo() { while coditionCounter < 10 { coditionCounter++; B.boo(); } } } class B { func boo() { coditionCounter--; } } Conselho Geral É engraçado que até o ChatGPT se recuse a ajudar quando se trata de escrever bugs. Talvez eu só precise de uma assinatura premium… 🤔 Pelo lado positivo, oferece um conjunto de regras gerais que contribuem para escrever código livre de bugs: codificar em pequenos incrementos, seguir padrões de codificação, escrever testes de unidade e bla-bla-bla. Podemos tentar fazer o oposto - escrever código espaguete e esquecer o SOLID. Porém, desta forma, que escrevemos. Em vez de uma arma elegante e precisa, teremos um caos incontrolável, que conquistará nosso programa. a IA perdemos o controle sobre todo o código Ao resolver o problema de criação de um bug, vale a pena determinar as subtarefas. Primeiro, precisamos encontrar alguns casos extremos raros. Em segundo lugar, precisamos disfarçar o bug como um código normal para que ele passe na revisão do código. Terceiro, temos que diminuir a atenção do departamento de controle de qualidade. Quarto, não seja pego imediatamente. Mas isso já é opcional. Meu conselho geral é o seguinte (e você compartilha o seu nos comentários): . Para voltar atrás, altere os valores de parâmetros importantes nos locais mais inesperados. Faça isso através de diversas aulas como se você fosse uma VPN. Manipule o nível de acesso Implemente alguma lógica inesperada na classe filha. Resumindo, . quebre o princípio L em SOLID class A { func decrease() { x--; } } class B: A { override func decrease() { x++; } } Oculte suas mudanças insidiosas em funções maiores. - perca-se na multidão. Quanto mais filas, melhor Use o mesmo princípio em solicitações pull. Num PR pequeno, a probabilidade de ser notado é maior. Tente dividir o bug em partes e colocá-las em . Se possível, também para revisores diferentes. pull requests diferentes Encontre os pontos fracos do seu controle de qualidade e conquiste a confiança dele. Ou distraia-os com conversas durante a verificação. A propósito, você já ouviu falar de Heisenbug? Este é um bug que desaparece ou muda seu comportamento durante a pesquisa/ . Como o gato de Schrodinger. Perfeito se o problema de correção não for atribuído a você. depuração Um exemplo comum de heisenbug é um bug que aparece quando o programa é compilado com um compilador otimizador, mas não quando o mesmo programa é compilado sem otimização (como geralmente é feito com o propósito de examiná-lo com um depurador). Durante a depuração, os valores que um programa otimizado normalmente manteria nos registradores são frequentemente enviados para a memória principal. Você pode Acredite em si mesmo! A história conhece exemplos de quando um bug foi admitido em produção em empresas muito sérias. Um dos bugs de software mais caros ocorreu em 1996, quando o foguete Ariane 5, transportando a missão Cluster, explodiu apenas 40 segundos após a decolagem. A falha foi atribuída a um bug de software no sistema de orientação do foguete. Voo Ariane 5 501: Em 1999, a NASA perdeu o Mars Climate Orbiter devido a um erro de software. O software usou unidades imperiais (libra-segundos) em vez de unidades métricas (newton-segundos), fazendo com que a espaçonave queimasse na atmosfera marciana. Mars Climate Orbiter da NASA: Além disso, alguns bugs podem se tornar recursos, como o salto na parede em ou o comportamento de Mahatma Gandh em …provavelmente. Mario Civilization Desenvolver um bug é a capacidade de pensar em seu algoritmo e antecipar completamente possíveis problemas. Portanto, mesmo que você não tenha motivos para deixar um bug no código, ainda vale a pena considerar.