:root…blog:

this is my home… my ideas… my thoughts… my life…

Programmers!?

without comments

Hoje, enquanto programava lá no trabalho, percebi que tenho que preparar meu sistema e meu código muito mais contra erros de programadores do que dos usuários finais.

Por exemplo, estava blindando a engine do sistema contra passagem de parâmetros inválidos. Entre os incontáveis “if parametro.__class__ != algo”, tive uma idéia: que tal medir a quantidade de “bugs” devido a passagem de um parâmetro inválido sintaticamente (ou seja, pelo programador), e os semanticamente errados (pelo usuário final).

Exemplificando o exemplo ainda mais: uma função que calcula o número de segundos entre dois horários:

def Delta(hora_inicial, hora_final):
  if hora_inicial.__class__ != datetime.time:
    raise exceptions.Exception()
  if hora_final.__class__ != datetime.time:
    raise exceptions.Exception()
  hoje = datetime.date.today()
  segundos = (
      datetime.datetime.combine(hoje, hora_inicial) -
      datetime.datetime.combine(hoje, hora_final)
  ).seconds
  if hora_final < hora_inicial:
    segundos = 86400 - segundos
  return segundos

Foram quatro linhas de código para validar a entrada da função, que teoricamente só vai ser utilizada por um programador, e ter certeza que os parâmetros são dois horários (deixei a validação em dois passos pois as mensagens podem ser diferentes para um parâmetro ou o outro). E duas linhas para validar a semântica - ou seja, os valor em si, e ter certeza que o valor final é maior que o inicial (caso contrário, multiplicamos por -1, que, quando trabalhando com horário, é 24horas - valor, ou 86400s - valor).

O número de problemas causados por possíveis erros de programadores é tão grande que acabo gastando mais tempo protegendo a engine deles, do que dos próprios usuários (cujo erro pode ser somente inverter a ordem de entrada nos campos). Claro que não inclui no código o procedimento de parse uma string digitada pelo usuário em um datetime.time, mas é algo trivial.

Não sei se é preguiça de ler a documentação, ou mesmo a pressa (preferem chutar e ver uma exception subir, do que parar para ler código), mas está aí um belo degrau em que muitos programadores tropeçam. Vai a dica: além de documentar seu código, ao utilizar bibliotecas “novas” RTFM.

Beijos e abraços!

ps 1: não, eu não comentei o código acima - preguiça da meia-noite.

Written by rootguy

July 2nd, 2008 at 11:47 pm

Posted in Tech

Tagged with , ,

Leave a Reply