Palestra no LinguÁgil 2016

Oi pessoal,

Estou de volta e desta vez com uma novidade. Fiz uma palestra recentemente em um evento super importante de TI para a Bahia, o LinguÁgil. Na palestra falei sobre testes: a necessidade de realizar teste de software; a realidade do nosso mercado; o processo de testes padrão; e uma abordagem ágil, o SBTM.

Confiram os dados do evento acessando este link!
A minha apresentação está disponível aqui!

No final de abril tem mais, irei palestrar na faculdade Unijorge, unidade Comércio, no evento GDG Tech Tour #2. Fiquem ligados!

Um pouco de Gamification

Gamification é um novo paradigma para a computação e gerência de projetos. Essa técnica vem sendo utilizada como meio de motivar pessoas, sejam elas funcionários de uma empresa ou clientes de um website. No primeiro caso, a técnica pode ser incluída ao processo da empresa, seja na gerência de comunicação utilizada por ela ou no ciclo de relacionamento departamento pessoal x funcionários. Já no segundo caso, pode-se ter essa técnica atribuída à interface do website e forma de interação do cliente com suas funções.

Mas afinal de contas, o que é Gamification? Bom… segundo a Universidade Pensylvânia, “Gamification is the use of game elements and game design techniques”, traduzindo: “Gamificação é o uso dos elementos e técnicas de projeto de jogos”. Ou seja, é a aplicação do sistema de missões versus recompensa encontrada nos jogos sobre um contexto que não seja necessariamente de jogos, um ambiente real. Desta forma, conforme exemplos citados anteriormente: o profissional passa a cumprir as suas metas pessoais e da empresa, percebe seu valor e por isso cresce em eficiência e produtividade;  ou, o cliente passa a ter mais atenção pela proposta do produto ao acessar o website.

O sentido é ajudar as pessoas na realização de suas tarefas cotidianas mesmo (comunicação, rotina de exercícios físicos ou estudo, entre outros) criando um ambiente propício à evolução delas, dado um contexto técnico (relacionamento interpessoal, reeducação alimentar, controle financeiro, etc.). Ou seja, a pessoa irá evoluir sem nem sentir que o está fazendo. Será mais atrativo à ela realizar aquelas atividades mais burocráticas ou tecnicamente complexas, pelo simples fato de que ela receberá uma recompensa ao concluí-las.

Continuar lendo

Uma estratégia para desenvolver/testar o seu código com eficácia

Oi galera,

Passando para deixar uma dica rápida!

Estes dias tenho focado mais no campo de programação, desenvolvendo módulos para um projeto complexo em ambiente Java. O que venho notando é que eu ganho maior eficácia sobre o que produzo seguindo os seguintes passos simples:

  1. Isolar uma função para codificar/testar;
  2. Analisar todos os requisitos que se relacionem com a função em questão;
  3. Priorizar os requisitos (para mim funciona assim: 1º lugar – ação principal (caminho feliz); 2º em diante, ações complementares (fluxos de exceção));
  4. Criar interface/estrutura primária (desenhar o botão na tela; desenvolver a consulta que irá participar da view);
    1. Teste – escrever método de teste;
  5. Fazer funcionar o requisito em evidência no momento (seguindo ordem de prioridades);
    1. Executar o teste e colher o(s) resultado(s) do teste;
  6. Ajustar comportamento e layout da função/componente;
    1. Reportar/arquivar o(s) resultado(s) do teste.
  7. Repetir os passos 3 a 6 até esgotar os requisitos da função.
  8. Executar os testes funcionais de roteiro e exploratórios sobre toda a função.
  9. Restando tempo (difícil! =] ) – refatorar código/teste.

Essa receita mescla as estratégias: dividir para conquistar e desenvolvimento iterativo/incremental. Meu objetivo é integrar esse processo com o TDD ou BDD \o/.

Esse é apenas o método que eu observei seguir para obter o resultado mais proveitoso quando codifico/testo as funções deste sistema. Ele tem me evitado muito estresse e perda de tempo como no princípio. Existem outros meios e abordagens para realizar as mesmas tarefas. Cabe a cada profissional avaliar qual a forma mais adequada de gerenciar o seu processo de desenvolvimento/testes.

Se você também possui um método para desempenhar suas atividades, compartilhe!!

Até mais! 🙂

Diferença entre TDD e BDD

TDD e BDD são metodologias de desenvolvimento ágil. No TDD (Test Driven Development) o desenvolvimento deve ser guiado a testes, onde um teste unitário deve ser escrito antes que uma funcionalidade do sistema o seja. O objetivo, então, é fazer com que o teste passe com sucesso, significando que assim a funcionalidade está pronta e conta com garantia de qualidade.

No BDD (Behaviour Driven Development) o desenvolvimento deve ser guiado aos comportamentos que o sistema deve apresentar. Desta forma, um comportamento (requisito/especificação) é priorizado em relação ao teste unitário, o que não exclui a execução do fluxo do TDD neste processo. A figura abaixo apresenta o fluxo do TDD e BDD:

tdd_bdd

Existem algumas ferramentas que oferecem apoio à adoção de uma metodologia ou outra ao processo de codificação do sistemas, das quais RSpec(http://rspec.info/)  e Cucumber(http://cukes.info/) são exemplos. Em resumo elas permitem: 1) escrever uma especificação em uma “pseudo linguagem”; 2) transformar a especificação em uma função de teste. Isso porque esses frameworks implementam o TDD para guiar a realização do BDD.

Assim como o TDD e BDD, existem outras metodologias de desenvolvimento ágil que pode ser aplicadas à etapa de codificação do software (DDD, FDD, ATDD, etc). Cada uma delas evidencia uma etapa do ciclo de vida do processo de desenvolvimento do software ou um artefato que faça parte dele como forma de guiar a construção do sistema. Para saber qual deles utilizar é necessário realizar uma análise sobre o projeto, time e outros recursos envolvidos ao processo.

 

Referências:
http://sobrecodigo.com/comparacao-entre-tdd-e-bdd-como-aprender-um-me-ajudou-com-o-outro/
http://caironoleto.com/2008/06/11/diferenca-entre-tdd-e-bdd/
http://blog.fasagri.com.br/?p=113