Código espaguete - Spaghetti code

O código Spaghetti é uma frase pejorativa para código-fonte não estruturado e de difícil manutenção . O código espaguete pode ser causado por vários fatores, como requisitos de projeto voláteis , falta de regras de estilo de programação e engenheiros de software com habilidade ou experiência insuficiente.

Significado

O código que usa instruções GOTO em excesso em vez de construções de programação estruturada , resultando em programas complicados e impossíveis de manter, costuma ser chamado de código espaguete. Esse código tem uma estrutura de controle complexa e emaranhada , resultando em um fluxo de programa que é conceitualmente como uma tigela de espaguete , torcida e emaranhada. Em uma publicação de 1980 do Escritório Nacional de Padrões dos Estados Unidos , a frase programa spaghetti foi usada para descrever programas mais antigos que tinham "arquivos fragmentados e espalhados". O código Spaghetti também pode descrever um antipadrão no qual o código orientado a objetos é escrito em um estilo procedural, como por meio da criação de classes cujos métodos são excessivamente longos e confusos, ou abandonando conceitos orientados a objetos, como o polimorfismo . A presença dessa forma de código espaguete pode reduzir significativamente a compreensão de um sistema.

História

Não está claro quando a frase código spaghetti passou a ser usada comum; no entanto, várias referências apareceram em 1977, incluindo Macaroni is Better Than Spaghetti de Guy Steele. No livro de 1978 Uma cartilha sobre programação disciplinada usando PL / I, PL / CS e PL / CT , Richard Conway usou o termo para descrever tipos de programas que "têm a mesma estrutura lógica limpa de um prato de espaguete", uma frase repetido no livro de 1979, uma introdução à programação, que ele escreveu em co-autoria com David Gries . No artigo de 1988, Um modelo em espiral de desenvolvimento e aprimoramento de software , o termo é usado para descrever a prática mais antiga do modelo de código e correção , que carecia de planejamento e acabou levando ao desenvolvimento do modelo em cascata . No livro de 1979, Structured programming for the COBOL programmer , o autor Paul Noll usa as frases spaghetti code e rat's nest como sinônimos para descrever o código-fonte mal estruturado.

Na conferência Ada - Europe '93 , Ada foi descrita como forçando o programador a "produzir código compreensível, em vez de código espaguete", devido ao seu mecanismo de propagação de exceções restritivo.

Em uma paródia de linguagens de computador de 1981 em The Michigan Technic intitulada "BASICally falando ... FORTRAN bytes !!", o autor descreveu FORTRAN afirmando que "consiste inteiramente em código espaguete".

Richard Hamming descreveu em suas palestras a etimologia do termo no contexto da programação inicial em códigos binários:

Se, ao consertar um erro, você quisesse inserir algumas instruções omitidas, então você pegou a instrução imediatamente anterior e a substituiu por uma transferência para algum espaço vazio. Lá você insere a instrução que acabou de escrever, adiciona as instruções que deseja inserir e, em seguida, transfere de volta para o programa principal. Assim o programa logo se tornou uma sequência de saltos do controle para lugares estranhos. Quando, como quase sempre acontece, houve erros nas correções você então usou o mesmo truque novamente, usando algum outro espaço disponível. Como resultado, o caminho de controle do programa por meio do armazenamento logo assumiu a aparência de uma lata de espaguete. Por que não simplesmente inseri-los na execução das instruções? Porque então você teria que revisar todo o programa e alterar todos os endereços que se referiam a qualquer uma das instruções movidas! Qualquer coisa menos isso!

Frases Relacionadas

Código Ravioli

Código Ravioli é um termo específico da programação orientada a objetos . Ele descreve o código que compreende classes bem estruturadas que são fáceis de entender isoladamente, mas difíceis de entender como um todo.

Código lasanha

O código lasanha se refere ao código cujas camadas são tão complicadas e entrelaçadas que fazer uma alteração em uma camada exigiria alterações em todas as outras camadas.

Exemplos

Aqui segue o que seria considerado um exemplo trivial de código espaguete em BASIC . O programa imprime cada um dos números de 1 a 100 na tela junto com seu quadrado. O recuo não é usado para diferenciar as várias ações executadas pelo código, e as GOTOinstruções do programa criam uma confiança nos números de linha . O fluxo de execução de uma área para outra é mais difícil de prever. As ocorrências de código espaguete no mundo real são mais complexas e podem aumentar muito os custos de manutenção de um programa.

1 i=0;

2 i=i+1;

3 PRINT i; "squared=";i*i;

4 IF i>=100 THEN GOTO 6;

5 GOTO 2;

6 PRINT "Program Completed.";

7 END

Aqui está o mesmo código escrito em um estilo de programação estruturada :

1 FOR i=1 TO 100
2     PRINT i;"squared=";i*i
3 NEXT i
4 PRINT "Program Completed."
5 END

O programa salta de uma área para outra, mas esse salto é formal e mais facilmente previsível, porque os loops e funções for fornecem controle de fluxo, enquanto a instrução goto encoraja o controle de fluxo arbitrário. Embora este exemplo seja pequeno, os programas do mundo real são compostos de muitas linhas de código e são difíceis de manter quando escritos em um código espaguete.

Aqui está outro exemplo de código Spaghetti com instruções GOTO incorporadas.

  INPUT "How many numbers should be sorted? "; T
  DIM n(T)
  FOR i = 1 TO T
    PRINT "NUMBER:"; i
    INPUT n(i)
  NEXT i
  'Calculations:
  C = T
 E180:
  C = INT(C / 2)
  IF C = 0 THEN GOTO C330
  D = T - C
  E = 1
 I220:
  f = E
 F230:
  g = f + C
  IF n(f) > n(g) THEN SWAP n(f), n(g)
  f = f - C
  IF f > 0 THEN GOTO F230
  E = E + 1
  IF E > D THEN GOTO E180
 GOTO I220
 C330:
  PRINT "The sorted list is"
  FOR i = 1 TO T
    PRINT n(i)
  NEXT i

Veja também

Referências

links externos