Archive for setembro, 2011

[Coding Dojo] Analizando URLs

Realizamos um Dojo interessante, o problema escolhido possibilitou a escolha de uma linguagem de programação diferente, fizemos alguns refactoring no código, o resultado você pode conferir na retrospectiva.

Utilizamos o PHP (Sem um framework de testes) e escolhemos o problema Analizando URLs (dojopuzzles.com)

Código do problema

<HTML>
<HEAD>
 <TITLE>DOJO</TITLE>
</HEAD>
<BODY>
<pre style="background-color:#EBEBEB;">
<?php
  function testeVazio(){
    if(valida("") != "Erro, parametros vazios!") {
      echo "Passou vazio e não detectou erro ............. FAIL";
    } else {
      echo "Teste valida com parametros vazios ........... OK";
    }
    echo "<br />";
  }

  function testaEspacoEmBranco() {
    if(valida(" ") != "Erro, espacos em branco detectado!") {
      echo "Passou espacos em branco e nao detectou erro . FAIL";
    } else {
      echo "Teste valida espacos em branco ............... OK";
    }
    echo "<br />";
  }

  function testaDoisEspacosBrancos(){
    if(valida("  ") != "Erro, espacos em branco detectado!")
      echo "Passou dois espacos em branco nao detectados . FAIL";
    else
      echo "Passou no teste dos dois espacos em branco.... OK<br/>";
  }

  function testaProtocolo() {
    $teste = array(
      "protocolo" => "http",
      "host" => "teste",
    );

    if(valida("http://teste") != $teste ) {
      echo "Erro, Retornou array invalido ................ FAIL";
    } else {
      echo "Array semelhante, passou ..................... OK";
    }
  }

  function valida($param){
    if ($param == "")
      return ("Erro, parametros vazios!");

    $url = trim($param);
    if ($url == ""){
      return "Erro, espacos em branco detectado!";
    } /*else {
      return "Passou no teste dos espacos em brancos...... OK<br/>";
    }*/

    return array("protocolo"=>"http",
                 "host"=>"teste"
    );

  }

  testeVazio();
  testaEspacoEmBranco();
  testaDoisEspacosBrancos();
  testaProtocolo();
?>
</pre>
</BODY>
</HTML>

Retrospectiva

  1. Pontos positivos
    • Maior entendimento
    • Linguagem fácil
    • Integração com o Grupo
    • Aprendizado de uma nova linguagem
    • Novas funções aprendidas
    • Linguagem interessante
    • Refactoring
    • Pontos Negativos
    • Dependência de um Timer
    • Entendimento da Estrutura
    • Editor Ruim
    • Sugestão
    • Utilizar o Notepad++
Link pro Repositório! github.com

Dez hackers que entraram para a história

 

O Blog Gizmodo traz um apanhado dos hackers que de algum modo marcaram a história da computação. Passando desde Konrad Zuze, criador do primeiro computador (sim, não foi o ENIAC o primeiro computador ;) , até chegar no Linus Torvalds, o “mais conhecido” dos hackers ..do bem.. inventor do linux.

Vale a leitura e o aprendizado de cada um deles e a contribuição deixada pelos hackers no mundo da informática que conhecemos hoje.

Vale também uma busca na wikipedia sobre cada um dos nomes para obter ainda mais informações.

Obs: Computadores, Vírus, Telefonia, Eletrônica, Programação, etc!

Link: Gizmodo

Realizando TDD em C, simples e prático – MinUnit

Gostaria de compartilhar aqui uma ferramenta que vem sendo utilizada nos Dojos da FAC SBO, extremamente útil e fácil de utilizar.
Para realizar o Dojo o ideal é ter alguma ferramenta que auxilie nos testes (TDD) de maneira que não fosse necessário muitos desvios no código.
Após várias buscas na Internet, descobri ferramentas interessantes, algumas poderosas, porém para quem está começando em TDD, esse “monte” de opção poderia atrapalhar mais do que ajudar, até que finalmente encontrei uma biblioteca simplista que cumpre com o necessário, e é de fácil entendimento, mesmo por pessoas que estão começando a programar em C.
MinUnit – a minimal unit testing framework for C [link]
Esse senhor é composto de 2 arquivos simples, o primeiro é a biblioteca, que tem apenas 4 linhas e é responsavel pela mágica, veja:

/* file: minunit.h */
#define mu_assert(message, test) do { if (!(test)) return message; } while (0)
#define mu_run_test(test) do { char *message = test(); tests_run++; \
                               if (message) return message; } while (0)
extern int tests_run;

Esse arquivo você coloca no diretório da sua aplicação e da um #include nele, pronto, agora é só utilizar o esqueleto abaixo (o segundo arquivo) e então passar a ter os testes para a sua aplicação.

/* file minunit_example.c */

#include <stdio.h>
#include "minunit.h"

int tests_run = 0;

int foo = 7;
int bar = 4;

static char * test_foo() {
    mu_assert("error, foo != 7", foo == 7);
    return 0;
}

static char * test_bar() {
    mu_assert("error, bar != 5", bar == 5);
    return 0;
}

static char * all_tests() {
    mu_run_test(test_foo);
    mu_run_test(test_bar);
    return 0;
}

int main(int argc, char **argv) {
    char *result = all_tests();
    if (result != 0) {
        printf("%s\n", result);
    }
    else {
        printf("ALL TESTS PASSED\n");
    }
    printf("Tests run: %d\n", tests_run);

    return result != 0;
}

Tudo o que você deverá ter em seu arquivo é:

  • Criar seu teste com a assinatura padrão – static char * test_bar()
  • Adicionar na função all_tests através do comando mu_run_test(nome_da_sua_funcao) as funções criadas por ti.
  • Em sua função de teste, você fará afirmações (asserts) utilizando a função *mu_assert(“mensagem”, teste_lógico);
  • Run!

*Vale lembrar que a idéia é, se seu teste_lógico falhar, então a mensagem será exibida!

Idéia: Olhe o código da MinUnit, veja e reveja, entenda, é um código SIMPLES entre aspas!