15 indícios musicais que o seu programa ABAP pode melhorar

nota musical azulDepois de ver um número bom de programas ABAP feito por outros e ter que alterar programas que eu mesmo fiz e tive dificuldade, resolvi criar uma lista de indícios que seu programa em ABAP “pode melhorar”, por assim dizer.

Para deixar o post mais interessante e ajudar você a lembrar das dicas, separei músicas que remetem a cada um dos temas. Espero que gostem mais das dicas do que de algumas das músicas.

Confira a lista e garanta que você está evitando que se eu (ou outra pessoa) ver seu código um dia eu fique chateado com você. 😉

1 – Falta de Razão de Viver

Everybody’s got a reason to live, baby (Kiss)

Todo programa tem um propósito e ele tem que ser explicado brevemente. O programa em si  pode ser complexo ou simples, não importa. Uma descrição do que o programa faz e porquê o faz logo início do mesmo ajuda muito em várias situações: correções, auditorias, migrações, pente finos gerais etc etc.

Se você não teve tempo nem de escrever duas linhas sobre o programa imagina-se a pressa que teve para fazer o mesmo e seu impacto na qualidade. Se você apenas não se importou com este fato, saiba que outros se importarão e muitos outros  podem não pensar 2x antes de abolir seu programa sem uma razão de viver.

2 – Z_STANDARD_COPY

Nois é foda, nois é fera, nóis não copia nóis cria (Cacio e Marcos)

Esta falha de desenho Este erro escroto pode vir do funcional, ou pode ser ideia do responsável técnico mas uma cópia de um programa standard é o primeiro indício que algo estranho pode ter ocorrido no passado. Há situações extremas que uma cópia do standard é inevitável ou surpreendentemente a opção menos dolorosa mas estas são excessões. Quem já aplicou uma nota (OSS Note) manualmente sabe o que estou falando.

Se você copiar um programa standard e ter a brilhante ideia de reutilizar includes do programa standard para evitar copiar tudo para Z’s novos, saiba que a chance do seu programa simplesmente quebrar após a aplicação de uma nota ou aplicação de support/enhancement packages é enorme. A garantia que seu programa Z_STANDARD_COPY não vai quebrar é copiar todas as partes do programa, até aquelas que você não precisa alterar. Obviamente sua cópia não contemplará todas as melhorias feitas no programa standard via notas e support package, o que pode te obrigar a alterar seu programa de qualquer maneira.

Há jeitos mais fáceis a médio/longo prazo de se reutilizar um programa standard como estudando seu funcionamento e reutilizando seus módulos de função e classes globais que o mesmo usa. Se você souber reutilizar o que precisa sem copiar nada você será muito mais foda do que alguém que mistura Funk com Sertanejo.

3 – Programas Passaporte

“These tickets and passports lead me home” (Holiday Parade)

Os programas passaporte em nada tem a ver com o flight model. Eles são aqueles programas que te acompanharão pela sua vida profissional como ABAPer. Em outras palavras a garantia que você manterá seu emprego como ABAPer, porém da maneira errada pois só você será capaz de alterar/corrigir um programa passaporte.

Se você criou um programa que os outros tem medo de tocar, cuidado! Ele pode ser seu passaporte… para casa.

4 – Variáveis a lá Ricky Martin

Un, Dos, Tres
Un pasito pa’delante María
Un, Dos, Tres
Un pasito pa’ atras (Ricky Martin)

Variáveis Ricky Martin são aquelas que são nomeadas com um número na frente, geralmente “Un, Dos, Tres”. Por exemplo:

DATA: t_vbak1 TYPE STANDARD TABLE OF ty_vbak1,

t_vbak2 TYPE STANDARD TABLE OF ty_vbak2,

t_vbak3 TYPE STANDARD TABLE OF ty_vbak3.

Ultimamente vi até PERFORMs do tipo Ricky Martin. Pergunto-lhe: qual a função de cada uma delas no programa? E a diferença entre elas? Se você não sabe dizer, por que alguém tem que revirar seu código para entender? Que tal um _faturado, _estornado e _cancelado ao invés de 1, 2 e 3?  Isso requer um entendimento funcional do que se está codificando, algo muito mais relevante que contar até três. Faça diferente de Maria e não dê pasitos para trás. Muito menos se o Ricky Martin estiver atrás de você ;-).

5 – PERFORM X_TUDO

X-Tudo, X-Tudo… Tudo-Tudo! (Boneco X, TV Cultura)

Um PERFOM x_tudo, z_processa_dados, f_select_data é simplesmente tudo que você não precisa, tudo que não lhe ajuda, e geralmente contém tudo quanto é lógica que não funciona. Crie blocos de códigos mais compactos e modulares.

6 – Falta de variáveis de “escape”

You can run you can hide but you can’t escape my love. (Enrique Iglesias)

Existe um certo padrão de facto em ABAP para não se utilizar constantes quando elas só atrapalham. A adição MODE do comando CALL TRANSACTION (quando se faz um batch input por exemplo) talvez seja o melhor exemplo de quando nunca usar uma constante. Criando uma variável e permitindo que alguém altere esta variável antes de rodar algum comando (como um funcional com conhecimentos supersônicos de debugger) é uma excelente prática e não há motivos para evitá-la.

Como diz Enrique, você pode rodar, você pode esconder o variável v_mode, mas você não pode escapar de ter que debugar um programa de batch input em produção sem poder alterar o fonte.

7 – Dom de iludir no “core” do programa

Você sabe explicar
Você sabe
Entender tudo bem
Você está
Você é
Você faz
Você quer
Você tem…  (Caetano Veloso)

Por feeling, há sempre uma determinada parte de um programa que  é aquela parte realmente importante: a que liga os pontos, faz chover, aquela que se não funcionar… nada vai. Aquele LOOP na tabela interna principal que pega todos os dados de tabelas internas auxiliares e junta tudo numa coisa só para então montar um ALV….

Pois bem… este trecho de código merece bons comentários no código. Não deixe de incluí-los. Por falar em bom, eu prefiro a versão do Jorge Drexler a do Caetano Veloso, que é o compositor.

8 – Código Pirâmide de Cartas

There was nothing to fear and nothing to doubt (Radiohead)

Sabe aquele module pool que de tanta variável global resolveram criar um TOP Include 2 e  que para acrescentar uma coluna no table control você tem que mudar a estrutura da tabela Z e que para mudar a estrutura da tabela Z você precisa alterar o módulo de função que popula dados nela e que para alterar o módulo de função você precisa alterar a BADi que é chamada pelo seu programa Z_STANDARD_COPY….

Refiro-me aos programas que se você mexer “só um if”, tudo que funcionava para de funcionar. Se você notar que um programa está se transformando numa pirâmide de cartas posta na frente de um ventilador por uma pessoa nervosa, pare! Como diz o Radiohead, não havia nada a temer e nada do que duvidar: refatore seu programa antes de dar um passo adiante.

9 – Tudo numa coisa só

Tem hora que a gente se pergunta
Por que é que não se junta tudo numa coisa só? (O Teatro Mágico)

Que tal criar uma classe só no programa para ter fácil acesso a todos os dados que preciso? Se uma hora você se perguntar porque não se junta tudo numa coisa só, a resposta é simples: MVC é melhor.

10 – Incapacidade de testar unidades

G-Unit is poppin’ and we performin’ all the clubs (G-Unit)

Você precisa fazer uma pequena alteração e só consegue testá-la executando o programa inteiro, que demora 5 minutos para rodar. Se você não consegue testar unitariamente partes do seu programa modularidade pode melhorar. Caso haja dependência de muitos dados, considere o uso de Mocks. ABAP Unit is poppin and calling methods in all the transaction clubs.

11 – Trololo

Ye-ye-ye-ye-yeh
Ye-ye-yeh
Ye-ye-yeh
Ohohohohooooooooooo
Aaaaoooooh aaaooo
Hooo haha (Eduard Anatolyevich Khil)

Erros do tipo “Erro no processamento” são tão úteis quanto um erro “Trololo”. Eles não ajudam em nada o usuário e farão você ser acionado sempre para entender o que está ocorrendo. Isso pode ser facilmente evitado definindo mensagens de erro claras e objetivas. Quando o erro é completo, defina documentações para o mesmo na SE91.

12 – Erro único no sistema

I don’t know why I’m scared,
‘Cause I’ve been here before,
Every feeling, every word,
I’ve imagined it all,
You’ll never know if you never start (Adele)

Se você costuma usar algo do tipo:

MESSAGE e000(ZUNICAMENSAGEMDECLASSE) WITH ‘Erro na criação da fatura’

para todas as mensagens de erro em programas Z, atenção! O jeito mais simples de se verificar a causa de um erro é através de sua classe de mensagem + número da mensagem. Se você tem uma possibilidade só, você terá que debugar um programa.. talvez por inteiro e algumas vezes pois haverá a sensação constante que você já viu aquele erro antes, cada uma das palavras… e será verdade.

13 – Break remanescente

I don’t worry about a thing
’cause nothing’s gonna be alright (Jorge Drexler)

Se você acabou de codificar alguma coisa e está tão confiante que tudo irá funcionar que deixou um comando break no código só para facilitar a próxima hora de debugar e corrigir o próximo bug, não peça para ninguém testar. Conclua seu trabalho com confiança antes de pedir para alguém dar sequência ao trabalho. Lembre-se da canção e de Murphy.

14 – LOOP AT SCREEN deveria ser um programa a parte

I’m a little used to calling outside your name
I wont see you tonight so I can keep from going insane
But I don’t know enough, I get some kinda lazy day (Daniel Powter)

Eu particularmente tenho aversão ao comando LOOP AT SCREEN. Verificar qual campo é alterado via IFs e definir propriedades nebulosas e mal documentadas de uma estrutura global não parece ser boa ideia. Quando se tem uma tela de seleção complexa as coisas ainda pioram mais. Apenas o LOOP AT SCREEN deveria ser um programa a parte. Se você procura uma alternativa para não ficar louco assim como Daniel Powter use o nosso projeto Open Source SCREEN BREAKER.

15 – Debugar para entender

Step by step, ooh baby (New Kids On The Block)

O debuger é uma ferramenta com o propósito principal de encontrar erros. Seu objetivo não é entender o funcionamento de um programa. Para isso serve a documentação do programa. Se você sai apertando F5 no SAP antes de dar ENTER no arquivo .doc no windows você está perdendo tempo. Além de ser um grande alerta de falha na documentação este é um indício que um programa esta confuso.

Quais suas dicas?

Gostou da lista musical? Quantos indícios você é familiarizado? Você cria variáveis Ricky Martin? Há alguma dica que gostaria de incluir neste post? Não deixe de incluí-la nos comentários. Não esqueça de escolher uma música (de qualquer gosto) que represente a dica.

Abraços!

Fábio Pagoti

Formado em Sistemas de Informação pela Universidade de São Paulo. Comecei no mundo da programação com Java mas logo caí no mundo ABAP. Estagiei na Nestlé por 2 anos e foi lá onde conheci o Furlan. Depois de efetivado fui morar no Canadá por 1 ano onde pude aprender a área de testes em desenvolvimento de software. Hoje sou consultor e instrutor ABAP, amante de projetos Open Source, Wordpress, Data Mining e da esfera SAP. Siga-me no twitter: @fabiopagoti

You may also like...

6 Responses

  1. Fabio Kazunari (Kazu) says:

    Boa seleção , gostei do Nois non copia nois cria huahua !!
    eu iria incluir o Light Blue Night do CPM 22 , para aquele ” Consultor” abap que acaba fazendo tudo que o Funcional pede , sem avaliar o impacto da mudança (famoso è so um IFzinho ) e combina a alteração com o funcional na base da conversa e quando da errado é a velha historia que o abap que inventou isso !!

    • Fábio Pagoti says:

      Obrigado pelo comentário Fabio! Isso me pareceu uma espécie de desgosto profissional baseado em experiência. Boa dica realmente. Avaliar o impacto técnico é algo que o ABAPer tem que ficar de olho antes de clicar no lápis.

  2. Chupacabras says:

    Rss*** Parabéns pelo POST e pelas excelentes analogias. Me diverti aqui. Eu adicionaria esta daqui 🙂 (ref ao código em geral) http://www.youtube.com/watch?v=y5Xei4VfIv8&noredirect=1
    Abraços

  3. Kanaãm says:

    É Santinhos, ri demais aqui, porém isso tudo que você falou é fato!
    independente de linguagem e tecnologia, sempre teremos os que dizem como Tom Jobim
    “A gente leva do código o código que a gente leva”!
    http://www.youtube.com/watch?v=EWpeJAejqjA (com leila pinheiro)
    Abraços!!!

    • Fábio Pagoti says:

      Oi Kanaãm! Feliz surpresa de te ver por aqui!! Está atuando com ABAP?

      Obrigado pela sugestão de músicas. Essa realmente dá para refletir por muito tempo…. é bem filosófica.

      Abraços!