VidaGeek.net

Linux, Open-source, Programação e Produtividade

Archive for February, 2007

Dia C - Estratégias de depuração (debug)

Um dos maiores problemas que um programador encontra é a fase de testes do software. Praticamente sempre algum bug (erro) sintático, conceitual ou lógico está no meio do código muito bem disfarçado. Em C esse problema é ainda maior porque após a compilação do código, C gera pouquissímos erros e assim fica realmente complicado descobrir o que está acontecendo. Um simples ‘*’ pode tomar algumas horas do programador antes de ser corrigido. Essas horas perdidas significam que o projeto pode estar ficando atrasado, o que não é bom independente se o projeto é de software proprietário ou livre. Aqui vão algumas dicas para lidar com esses erros:

1. A melhor forma de lidar com erros é evitá-los. Planeje bastante o programa que você vai desenvolver (mesmo que seja pequeno). Estruture bem as funções que você vai usar. Minimize o tamanho das funções. É muito importante evitar funções que fazem muitas coisas de uma vez. Mantenha o código claro durante a programação. Esse tempo extra gasto costuma reduzir muito o tempo de depuração. Na verdade ele não é tempo gasto. É tempo investido.

2. Evite escrever grandes quantidades de código antes de depurar o código que forma a base para este novo.

3. Sempre comece a depurar a partir das funções mais simples e gradualmente começando a depurar funções mais complexas. Assim você garante a segurança das funções mais simples, que geralmente são usadas nas mais compplexas.

4. Faça bons casos de teste. Na maioria das vezes testes automatizados podem nos mostrar erros que nem imagináva-mos que poderiam ocorrer.

5. Para remover bugs encontrados, existem algumas estratégias como:
- Impressão de variáveis para que seja possível rastrear a execução do programa ou
- Usar um depurador (debugger)
O primeiro possui uma curva de aprendizado de 30 segundos. Basta saber usar o printf que já é possível depurar o seu código. Para usar o segundo, você terá que investir um certo tempo no aprendizado, mas novamente, é um bom investimento. É muito mais rápido e eficaz usar um depurador (como o gdb) do que tentar rastrear o código (as vezes, rastrear é impraticavel pois o sistema ou módulo é grande demais).

6. Lembre-se que qualquer código está sujeito a erros. É provado que é impossível provar que o seu código produzirá o resultado certo para qualquer entrada a que ele seja submetido. Um algoritmo pode ser provado correto, mas uma implementação nunca. Assim, bons casos de testes garantem, pelo menos, uma segurança satisfatória.

Mais informações: gdb -> Google

Na próxima semana: Pilha do C.

Posts Relacionados:

  • Séries
  • Dia C - Usando testes para o desenvolvimento
  • Falando em Java: Interfaces ricas na Web com Ajax
  • FISL 8.0 Participando na Comunidade Mundial: A experiência real de desenvolvedores
  • Acompanhe-nos por RSS, por Email ou via Twitter.

    Textos Clássicos

    O site Babar Kazarcolocou no ar uma coletânea de publicações sobre Ciência da Computação, incluindo trabalhos de Knuth e dos criadores do algoritmo criptográfico RSA(Rivest, Shamir e Adleman). Se você se interessa por Ciência da Computação vale a pena investir seu tempo lendo esses trabalhos.

    Posts Relacionados:

  • FISL 9.0: Jornalismo Livre
  • Guia Latex - Parte I: O que é e por que usar
  • Guia Latex - Parte III: Estruturando e marcando o texto
  • YACP (Yet Another C Primer)
  • MMORPGs - Lord of the Rings Online
  • Guia Linux - Parte III: Programação
  • Retrospectiva 2008
  • Acompanhe-nos por RSS, por Email ou via Twitter.

  • 0 Comments
  • Filed under: Dicas
  • Aleatórios

    Como todo geek nerd programador está cansado de saber, nem todo random é aleatório.

    Um instante para que você possa digerir isso.

    É isso aí. Engana-se quem pensa que números aleatórios são facilmente obtidos num sistema computacional com uma função matemática recorrente e um número inicial, a semente (ou seed, como preferem as linguagens) . Se você fizer isso, obterá números pseudoaleatórios (que, de alguma forma, ainda possuem algum resquício de ordem) porque:

    • computadores são máquinas determinísticas (mas se alguém provar que P = NP, pode ser um dia haja um algoritmo para gerar números verdadeiramente aleatórios em tempo polinomial)
    • as funções mais comumente usadas são, em geral, periódicas (não se preocupe, o período é grande o suficiente para aquele jogo legal que você está rascunhando)
    • se a mesma semente for dada, a seqüência de números emitida pelo gerador será exatamente a mesma (em essência, aqui está a não-aleatoriedade)

    Agora você se pergunta: “Então, como raios vou conseguir números verdadeiramente aleatórios?”

    E, para variar, já existe uma resposta. Há grupos de pessoas determinadas a gerar números aleatórios de verdade. Para isso, é necessária uma fonte de entropia (vocábulo leigo: desordem), como, mas não limitado a: antenas captando ruído branco, oscilações de temperatura do processador (ou do ambiente!), ou um sensor CCD captando luminosidade de fundo.

    A partir daí, basta traduzir esses sinais caóticos para um formato digital, filtrá-los se necessário, pegar os bits de uma maneira que interesse, e pronto! Aí está o seu número, letra, ou o-que-quer-que-seja aleatório.

    Sim, é mais fácil falar do que fazer.

    Para ler mais:

    Se você não quiser ter todo esse trabalho, o pessoal do random.org fornece bits aleatórios para você, de graça, e você pode até pegá-los em tempo real para sua aplicação Java.

    Tem também o LavaRnd, onde eles usam um sensor CCD (como o que há em uma webcam) como fonte caótica, e têm um projeto no Sourceforge que contará com o código fonte necessário para todo mundo gerar seus próprios bits aleatórios.

    Posts Relacionados:

  • No related posts
  • Acompanhe-nos por RSS, por Email ou via Twitter.

  • 0 Comments
  • Filed under: Programacao
  • Eleições via Internet?

    A Estônia será o primeiro pais do mundo a permitir votação pela internet, na eleição parlamentar de 4 de março. Já havia sido permitida votação via web, mas de forma limitada. Apenas 10 mil cidadãos votaram.
    Especialistas estimam que entre 20 e 40 mil eleitores (são 940 mil, ao total) votarão via internet entre 26 e 28 de fevereiro.

    Mais informações: Folha Online.

    Posts Relacionados:

  • Firefox começa a dominar Europa
  • Eleições, spam e telefonemas com gravações
  • Os criadores do Skype atacam novamente…
  • FISL 8.0 - Privacidade na Internet: um debate em aberto (Thiago Tavares Nunes de Oliveira e Demi Getschko)
  • FISL 8.0: Wireless Meshing with OLPC
  • Webcomics para Geeks: xkcd
  • Quer trabalhar na Google?
  • Acompanhe-nos por RSS, por Email ou via Twitter.

  • 0 Comments
  • Filed under: News

  • Publicidade