O que é Coding Dojo?

Nada mais é do que uma prática bastante divertida e interessante com o
intuito de praticar o desenvolvimento de software dos participantes,
fazendo com que as técnicas dos mesmos se aperfeiçoem. Tendo em vista:

    Desenvolvimento orientado a Testes: Desenvolver um teste antes mesmo
    de fazer quaisquer tipo de implementação, com intuito de passar a
    visão correta da implementação desejada.
    Pequenos Passos (ou passos de bebê): Deve-se desenvolver o código o
    mais simples possível para que o teste passe, quando for escrever um
    outro teste para o mesmo método deve-se escrever um teste um pouco
    mais complexo (ou melhor, um pouco menos simples).
    Programação em par: Junção de 2 pessoas em um computador. Onde uma é
    o chamado piloto e a outra o co-piloto, ou seja, o piloto mete a mão
    no teclado, já o co-piloto, podemos dizer assim, “coordena” os passos
    tomados. Valendo salientar que essas 2 pessoas no Dojo devem ficar
    explicando em voz alta o que estão fazendo para a platéia.
  • Três momentos:
    1. o Vermelho: Quando um ou mais testes não estão passando. A
      dupla que está de “posse” do computador deve fazer o teste passar e a
      platéia não deve falar neste momento, para não atrapalhar.
      o Verde: Quando os testes são rodados e os mesmos passados,
      aí sim, neste momento a platéia poderá dar sugestões para melhor o
      código.
      o Amarelo: Resumindo, refatoração. Após a platéia dar
      sugestões de modificações.

    Bem, resumidamente um Coding Dojo funciona desta forma.

    Grupo DevNatal: http://groups.google.com.br/group/devnatal
    Grupo DojoRN: http://groups.google.com.br/group/dojorn

  • Scrum Flácido

    Já sabemos como liderar, estimar, nos organizar gerencialmente, mas ainda não está conseguindo obter uma qualidade. Sim, estou falando do Scrum Flácido, onde há um descuido com algumas coisas, por exemplo, uma parte técnica debitada. E agora, qual a possível solução? Da-lhe eXtreme Programming!
    Feedback, programação em par, refatoração, testes, ciclos curtos… Estas são umas das abordagens do XP.
    O XP utiliza o conceito de simplicidade, primeiramente em colocar aquilo que é evidentemente necessário, você já deve estar cansado de ouvir falar da pesquisa do The Standish Group, onde 45% das funcionalidades jamais são utilizadas, 19% raramente são usadas e 64% não precisavam ser implementadas.
    Pois bem, o XP prega que o software só deverá ter o que realmente é necessário, deixando de lado o desperdicio de tempo e o dinheiro.
    É importante destacar que só porque o Scrum não inclui nenhuma atividade técnica dentro do seu escopo não se deve ser concluido que não se deva aplicar alguma resolução para o mesmo. A junção do XP com o Scrum é uma das mais aplicadas e mais bem sucedidas, pois juntando a ótima gerencia do Scrum com as boas práticas técnicas do XP, os dois se tornam um aliado forticimo para o sucesso do desenvolvimento de software.

    Segundo dia do OxenteRails

    Neste post venho falar um pouco sobre o segundo dia do evento OxenteRails.
    No decorrer deste segundo dia tivemos a oportunidade de criar uma comunidade para os desenvolvedores daqui de Natal, o DevNatal onde iremos participar da 1ª sessão do DojoRN que irá acontecer no dia 14 de agosto às 14:00 na Sync. A Sync fica dentro da sede do provedor Interjato que, por sua vez, fica localizado ao lado do Midway Mall na Av. Romualdo Galvão. Quem tiver dúvida é só entrar em contato comigo.

    Bem, voltando ao foco: OxenteRails.

    A 1ª palestra do dia foi do Marcos Tapajós que falou sobre o CounBD, que nada mais do que um banco de dados não-relacional que trabalha em cima do conceito da orientação a documentos, que por sinal está bombando atualmente. Este tipo de banco de dados possui uma abstração mais alta se comparar com banco de dados “comuns”. O principal tema abordado foi o CouchRest, que nada mais é que uma gem que se utiliza com o CounBD que ainda nem foi lançado, pois ela irá trabalhar com o Rails 3.

    Logo em seguida tivemos a oportunidade de ver a palestra do Carlos Brando, que tinha como tema da sua palestra: “Criando uma carreira notável em desenvolvimento de software”. O palestrante falou que deveriamos pensar como programadores, que devemos aprender outras linguagens de programação, praticar e entre outras dicas. Uma coisa que me fixou bem foi ele ter dito que necessitamos de 10.000 horas para conseguirmos ser expert em um determinado assunto.

    E após o Carlos Brando entra em cena o Alê Gomes, que teve o seu tema de palestra “Start You Up – Não basta desenvolver, tem que empreender” MUITO BACANA! Pra mim foi a palestra que mais valeu a pena, muito bom mesmo. Ele falou sobre investimentos ativos e passivos, onde o ativo é aquele que aumenta o seu capital, já o passivo é o inverso, o que diminui o seu capital. Lembro até de um trecho que ele falou: “Ricos ficam cada vez mais ficos e pobres ficam cada vez mais pobres”, levando para o assunto abordado, os ricos, digamos assim, “priorizam” o ativo, ou seja, aumenta o capital, já os pobres “priorizam” o passivo, ficando com menos capital. Daí veio uma pergunta: “No que o nerd investe?” e veio logo a resposta em um slide com a foto de Einstein: “Conhecimento”. Este conhecimento que acumulamos vale ouro. Mas, como realmente fazer este conhecimento virar um ativo? Uma das respostas para essa pergunta é: alugar o seu conhecimento, onde ele citou que aluguel incrementa o capital de forma linear, mas podemos ter também o cultivo de ativos que incrementa o capital de forma exponencial. Empreender as idéias, tornar essas idéias ativas, foi um dos pontos que o Alê Gomes enfatizou. Básicamente isso.
    Tiveram outras palestras bastante interessantes, assim como a de Vinicius Teles que também considerei umas das melhores de todo o evento, ele tinha como o tema: “Fuja da Escravidão, antes que ela te alcance”. O Vinicius citou que 10% das pessoas detém 90% da riqueza mundial, e essas 80% dessas pessoas possuem negócio próprio. Falou bastantas coisas bacanas. Não vou entrar mais em detalhes aqui que já tá um pouco tarde para mim.

    Bem, só deixar um último comentário, o evento foi muito bom, quem foi sabe disso. Valeu a pena, já estou aguardando ansiosamente para o próximo, e você que não foi este ano, não perca o próximo, ok? Esta é a dica que eu dou.

    CategoriasDevNatal, oxenterails, rails Etiquetas:

    Primeiro dia do OxenteRails

    Super bacana o evento, gostei bastante. Bem, vou dar uma resumida nas palestras que assisti.

    Oxenterails
    Galera esperando pra começar as palestras.

    Akita
    Este é o Akita, ele falou um pouco sobre a historia do Ruby, como ele surgiu, super bacana pra quem gosta de saber como tudo começou.

    DanielCukier
    Assisti a palestra do Daniel Cukier com o tema de Aprendizado Agil, super bacana, já tinha visto um video dele com o tema de “Padrões para Introduzir Novas Ideias”, acho que era isso, super bacana. Vale a pena assistir. E ver esse cara ao vivo foi muito massa, passou altas informações.

    Leandro
    E assisti também uma palestra do Leandro Silva sobre “Gerenciando times agéis”. Muito bacana, é todas as palestras que assisti foram bacanas mesmo! O cara falou muita coisa sobre um time agil, como ele deve ser. Os times tem que ser responsaveis e comprometidos. E foi só isso que eu assisti.

    Quem não foi perdeu, fato.
    E ainda ganhei um livro, era meu dia de sorte! :)
    livro

    Categoriasoxenterails, rails

    Prévia do Oxenterails

    E aí galerinha, cheguei agora a pouco do ignite do oxenterails na Saidera Lounge, super bacana, conheci uma galerinha lá, troquei umas idéias, super bacana. Inclusive surgiu uma idéia de juntar um pessoal e começar a se reunir em um periodo para trocarmos figurinhas, trocar informações e etc.
    Pois bem, amanhã começa o evento e estarei lá participando e estarei postando o acompanhamento aqui no blog sobre o evento.
    Sem mais delongas, vou dormir agora que amanhã o dia será bastante corrido! :)

    Desenvolvimento orientado a teste

    Um sistema que tenha uma ótima cobertura com testes possui uma confiança maior, isto é proporcional. Se sua aplicação possuir testes que abrangem boa parte do software, o software estará seguro em sua boa parte, e caso não possua uma boa cobertura, o software deixará esta segurança proporcionalmente como disse anteriormente.

    E qual seria o objetivo do teste? É simplesmente descobrir problemas do programa, caso este teste passe, ou seja, obtenha sucesso, obtém-se uma segurança maior, e se o teste não passar, o que acontece? Simplesmente o seu Test Runner (o software responsável por rodar os testes e gerar o resultado do mesmo) irá demonstrar os testes que não tiveram sucesso.

    Alguns termos e seus significados:

  • Fixture: é o conjunto de entradas e saídas de dados necessários para o teste.
  • Test Unit: é o teste realizado sobre uma classe.
  • Test Case: é uma especificação de alguma condição que deverá ser testada.
  • Test Suite: é o conjunto de Test Cases.
  • Test Runner: este eu já comentei anteriormente, ele é o software responsável por rodar testes e a geração dos resultados. Um exemplo de Test Runner é o JUnit para Java.
  • E os resultados que pode-se encontrar, são eles:

  • Sucesso: Como o próprio nome já diz, é quando acontece sucesso no teste, quando ele passa.
  • Falha: Tão difícil de explicar quanto o anterior, acontece quando o teste não obtém sucesso.
  • Erro: Este acontece quando o código nem chega a rodar.
  • Valendo salientar que o TDD ( Test-Driven Development ) prega que devemos desenvolver o teste antes mesmo de escrever algum código funcional para o software, isto soa estranho para quem não está habituado com esse “estilo de vida”, digamos assim. Pense comigo… Se escrevermos o teste depois da implementação, poderá haver um problema no teste que o faça passar mesmo que o código testado esteja errado. Uma forma de testarmos o teste é, ao invés de escrever um teste para o teste, ter certeza que o mesmo falha quando a implementação está incorreta, ou seja, se os testes não exercitam cada linha do código, então este não testado, é legado. O código legado não dá uma segurança ao programador e é difícil de entender, o que leva ele a usar a famosa depuração (debug). E o código não testado é código não documentado, já que os testes são a especificação. Este “jeitinho” de desenvolver é conhecido como “Desenvolvimento por Intenção”.
    Os passos que o TDD prega: Testar -> Codificar -> Refatorar
    Seguindo esta ordem.

    Pois bem, tendo essa base, já dá para ir para a parte mais interessante, a prática. Vou usar um exemplo super simples, que acredito que o entendimento irá acontecer da melhor forma.
    Irei utilizar a linguagem Java para os exemplos.
    Imaginemos que quero desenvolver uma calculadora que precise somar dois números, vamos primeiros desenvolver o teste.

    Criemos um projeto, chamarei de Calculadora.
    Criemos uma classe de teste ( estou utilizando o JUnit ) e chamaremos ela de CalculadoraTest.
    Como utilizar o JUnit?

  • No Eclipse: Java Build Path > Add Libraries > JUnit
  • No Netbeans: Properties > Libraries > Add Library > JUnit
  • Os testes usam os “Assert Methods”, por exemplo:
    -assertEquals(valor esperado, valor obtido);
    Existem outros Assert Methods, mas não irei entrar em detalhes neste post, o foco é somente passar a base de como funciona. Um detalhe sobre estes métodos é que eles são estáticos, ou seja, não se faz necessário fazer referencia da classe proprietária do método e é necessário fazer um import static.

    Vamos ao exemplo:

    import static junit.framework.Assert.*; //importando a biblioteca do JUnit

    public class CalculadoraTest {
    @Test
    public void verificaSoma() {
    assertEquals(4, Calculadora.somar(2,2));
    //Nesta linha de código estou chamando o método somar e passado dois parâmetros, cujo
    //resultado esperado é o número 4 no parâmetro a esquerda do método assertEquals
    }

    Se nesse momento tentarmos rodar o código ira dar erro, correto? Pois não implementamos a solução. Esta é a primeira fase. Agora iremos implementar a classe Calculadora:

    public class Calculadora {
    public int Somar(int valor1, int valor2){
    return valor1 – valor2; //Sim, estou implementando errado.
    }
    }

    Onde rodar o teste:

    Resultados:

    Pode notar nesta imagem que temos as informacoes do que foi feito com sucesso( Runs ), os Erros ( Errors ) e as falhas ( Failures ), a classe de teste criada ( CalculadoratTest ) e o metodo implementado ( VerificaSoma )

    Pois bem, neste momento irá dar uma falha, pois o teste não irá passar. Onde o resultado de Somar(2,2) resultaria em 0 e não o 4 que se espera no teste. Mas vamos lá, vamos concertar nosso código para que passe, troque o sinal de menos para o sinal de mais e irá dar certo o nosso teste.
    É interessante ser bem detalhista nos métodos do teste, eu poderia ter criado o método “verificaSomaPositiva” e fazer testes com números positivos, poderia criar um outro método “verificaSomaNegativa” e fazer testes com numero negativos, e assim por diante. Facilita até para identificar o problema mais rapidamente ao ver o método que falhou.

    Bem pessoal, é isso. Espero que o post tenha sido bem proveitoso na medida do possível, não entrei em grandes detalhes, era mais para dar uma pequena base sobre o assunto. Até a próxima.

    CategoriasSoftware Etiquetas: , , ,

    Hello world!

    Meu primeiro post no meu primeiro blog.

    Pois bem, neste blog irei colocar informações sobre a área da informática, mais precisamente na área de desenvolvimento de software.

    Então, até o próximo post!

    CategoriasUncategorized