Desenvolvimento

Testes de software

Como programadores, toda vez que codificamos algo sentimos uma necessidade enorme de pôr nosso código a prova e essa necessidade é uma atividade que é sempre inerente a codificação: o teste. Seja nos casos em que escrevemos apenas um pequeno método ou uma função, seja na criação de uma classe ou de um script, durante ou ao final do processo de codificação acabamos testando o que produzimos para verificar se o que escrevemos funciona de fato. Para tanto, há várias técnicas e níveis de testes que podem nos guiar durante esse processo.

Testes nada mais são do que experimentos que fazemos sob o artefato codificado. As técnicas são as abordagens que aplicamos em nossos experimentos e os níveis estão relacionados a extensão desses experimentos.

Há diversas nomenclaturas para diversos tipos de testes. Dentre elas, há de se saber:

  • teste de unidade: é o experimento que testa a menor parte do software. Em softwares orientados a objetos, a menor unidade é uma classe. Ou seja, os testes de unidade visam pôr à prova uma classe de maneira isolada. Em alguns casos é necessário simular as dependências desta classe durante o teste;
  • teste unitário: é um termo comumente usado pelas pessoas para um teste de unidade [1];
  • teste de integração: é o experimento que testa a combinação entre recursos. Ou seja, os testes de integração visam garantir que um ou mais componentes combinados (ou unidades) funcionem. A combinação de componentes pode ser, por exemplo, entre uma classe do software e um recurso externo. Um recurso externo ao software pode ser um banco de dados, um web service, um sistema de envio de mensagens ou mesmo um arquivo de texto no disco rígido;
  • teste de sistema: é o experimento que testa o software como um todo. Ou seja, o objetivo dos testes de sistema é avaliar como todas as unidades e recursos externos funcionam em conjunto;
  • teste de aceitação: é o experimento realizado por um usuário do software que executa uma operação a fim de verificar se o comportamento executado é igual ao comportamento desejado. Em outras palavras, o teste visa avaliar se o comportamento está de acordo com o requisitado e se satisfaz os critérios de aceitação;
  • teste funcional: é a técnica que visa avaliar se o resultado obtido por meio de uma entrada fornecida é igual ao resultado esperado. Testes de unidade, de integração, de sistema e de aceitação são testes funcionais;
  • teste de regressão: é a técnica que visa aplicar todos os testes já existentes ao artefato modificado. Ou seja, ao aplicar os testes novamente no item alterado, o objetivo é avaliar se uma nova alteração no código não alterou o comportamento do item testado, mantendo em funcionamento o que já funcionava antes;
  • teste de carga: é o experimento que avalia o limite operacional de um software. Ou seja, visa avaliar o poder de um software em suportar uma quantidade excessiva de um determinado processamento, como por exemplo, a quantidade de requisições por segundo que um sistema web suporta.

E aí, conhece mais algum tipo de teste? Comenta aí! =)

Referências:

[1] Unidade, integração ou sistema? Qual teste fazer?

Anúncios
Padrão
Carreira, Evento, Resenha

Resenha do último dia do TDC SP 2015

image

Panorâmica do stands do The Developer's Conference SP 2015

Pela 4ª vez consecutiva pude participar do maior evento para desenvolvedores do Brasil, o The Developer’s Conference em São Paulo – SP. Esse ano tive a prazerosa companhia de outras 5 pessoas que também saíram de Ararquara – SP e São Carlos – SP e investiram um pouco do seu tempo e dinheiro para fazer algo diferente, já que era a primeira participação de todos.

Segundo dados da organização, o evento na capital de SP que abrigou 40 trilhas de diversos temas, tendo trilhas para crianças e jovens, teve mais de 3000 inscrições presenciais, além de inscrições online para assistir a trilha Stadium, que foi transmitida gratuitamente ao vivo pela internet.

Quem participou da trilha Stadium, presencialmente ou online, pode saborear um pouco de tudo, uma vez que essa trilha é uma mistura de todas as trilhas que acontecem a cada dia. Ou seja, uma palestra de cada uma das trilhas do dia acontece na trilha Stadium. No sábado, houve palestras sobre Java, PHP, Phyton, Ruby, .NET, Internet das Coias, Impressão em 3D e Games.

Na trilha Java, na qual me inscrevi, o dia começou com uma palestra da dupla Bruno Souza, o JavaMan, e Edson Yanaga sobre os últimos e os próximos anos da plataforma. Como ela mudou a nossa vida e o mundo, o fato do código ser aberto, a relação com o Brasil, as novidades do Java 8 e 9, como expressões lambda, cloud computing e modularização, e os desafios em relação as melhorias de segurança e resoluções de bugs.

Em seguida, Bruno Borges apresentou os benefícios da cloud computing em relação ao tempo e o custo, os itens que podem transformar sua aplicação e os serviços cloud da Oracle para aplicações Enterprise (EE) e, a novidade, para aplicações Standard (SE).

Infelizmente não consegui assistir a palestra do Marco A. Maciel sob o tema “Java 8 rodando em 256 KB de RAM!”. Essa palestra dividiu o horário com a palestra do Vinícius M. Senger, que exibiu seus projetos de Internet das Coisas usando Java.

Douglas Campos não utilizou slides e surpreendeu a demonstrar domínio sobre performance, uso de memória, Garbage Collector, entre outros itens da JVM (Java Virtual Machine).

Fabio Velloso e o commiter Java, Otávio G. de Santana, também dividiram um dos horários. Fabio apresentou o uso do Spark e a situações em que seu uso é mais adequado para big data, assim como o uso em conjunto com expressões lambda do Java 8. Em seguida, Otávio destacou as especificações e recursos que estão sendo planejados e desenvolvidos para a versão 9 e futuras versões do Java, assim como os bugs corrigidos na versão 8 e as melhorias de performance.

Quase terminando o dia, Adam Brandizzi que trabalha com o módulo de calendário do Liferay Portal, explanou sobre os paradigmas de fusos horários para software, assim como demonstrou a nova API de tempo do Java 8, concebida sob o pacote java.time.

O último horário da trilha Java foi mais um divido em duas palestras. Felipe Mamud e Raphael H. R. de Almeida demostraram os princípios da programação reativa e, por fim, Yago Silva indagou sobre internacionalização e localização em sistemas e demonstrou o que está por vir com a nova API monetária, prevista para a versão 9 do Java, inclusive a preocupação com as moedas virtuais, como por exemplo a Bitcoin.

Os intervalos do evento serviram para conversar com o pessoal da caravana e obter suas percepções do evento até aquele momento e com as pessoas que participavam do evento e dos stands. Embora o evento contasse com stands de empresas como Google, Microsoft, IBM, Red Hat e UOL, no último dia de evento, quanto mais tarde menos se encontrava alguém da respectiva empresa para conversar. O stand da Google, por exemplo, me pareceu vazio o dia todo. Este fato pode ser compreensível, uma vez que as pessoas podem estar cansadas após 5 dias de evento. Contudo, muitos participantes só podem despender do sábado para participar do evento e esperam encontrar representantes das empresas conhecê-las.

Em resumo, o evento foi excelente. Uma oportunidade de adquirir mais conhecimento, fazer networking, engajar pessoas, rever conhecidos, renovar-se e até mesmo passear.

E você, foi no The Developer’s Conference? O que achou?

Padrão
Carreira

Inglês: a barreira final

Você que não lê, muito menos entende alguém falando em inglês, já se sentiu estagnado em algum momento sem conseguir resolver aquele problema no projeto em que trabalha por que não entende totalmente aquele framework? Travou ao tentar configurar corretamente aquele software livre gratuito que não possue muita documentação em português? Já teve a sensação de só encontrar cursos e livros em português que tratam sempre do mesmo assunto e no mesmo nível? É, talvez seja a hora de você considerar em aprender inglês!

É verdade que há vários tutoriais, artigos, cursos, vídeos, livros e publicações em geral em português, mas há uma infinidade do mesmo conteúdo em inglês. Mesmo com o advento da internet, tenho notado que o conteúdo em português é limitado e em sua maioria são de níveis básicos, como instalação, configuração e uso, e de níveis intermediários, que não se aprofundam muito no tema. Alguns conteúdos avançados publicados em português são livros traduzidos do inglês, por exemplo, que são lançados tempos depois da versão original.

Quem quer se manter atualizado e aprender conteúdos avançados de tecnologia precisa pelo menos ler bem conteúdos em inglês. Ouvir e entender alguém falando em inglês é algo que deve ser considerado, pois há muitos webinars, hangouts e outros vídeos que são grandes fontes de aprendizado.

Eu ainda faço aulas de inglês. Continuo aprendendo e revendo gramática, descobrindo novas palavras e expressões e melhorando minha conversação. Minha recomendação é que se você se quer ser mais independente e estar apto a aprender qualquer tecnologia, reserve um tempo da sua semana para estudar inglês.

Faça aulas

A não ser que você seja uma pessoa muito disciplinada para estudar sozinho, ter o compromisso de comparecer à uma aula manterá você nos trilhos. Participar de aulas em grupo é vantajoso pois você pode treinar sua conversação com pessoas do mesmo nível que o seu, sem se sentir intimidado e com medo de falar algo errado para o seu professor. Outra vantagem de aprender em grupo é que você não terá a opção de remarcar as aulas, postergando seu compromisso.

Use a tecnologia a seu favor

Você também pode treinar sua habilidades utilizando o Duolingo. Eu uso esta plataforma que usa a técnica de gamificação/ludificação e possui aplicativo para as principais plataformas móveis. Utilize ele em seu smartphone nas pausas do almoço, antes de dormir ou mesmo no banheiro enquanto você relaxa… =)

Leia o que você puder e goste em inglês

Se você já sabe um pouco e tem um bom vocabulário, eu indico dois livros que li e são muito bons para quem está neste nível: “I, Robot” e “Oliver Twist”. Os dois são livros relativamente de leitura fácil e agradável. Mas há milhares de livros gratuitos (e-books e audio books) disponibilizados de forma colaborativa pelo Projeto Gutenberg. Vale a pena pesquisar.

Concluindo…

Eu acredito que sabendo bem o idioma inglês de forma que você entenda o que lê e o que ouve, não haverá mais muitas barreiras para o seu aprendizado. E aí, do you agree?

PS:

Aqui vale uma menção ao texto Ler Inglês é Fundamental para o Desenvolvedor! do Bruno Souza (@brjavaman) em seu blog. Eu já usava o Duolingo, mas a dica do Projeto Gutenberg veio daqui.

Padrão
Carreira

Sua carreira, seu investimento

Você já parou para pensar em como você gasta todo o dinheiro que você ganha? Ao invés de gastar tudo em supérfluos e, claro, despesas fixas como água, luz, internet e alimentação, que tal investir parte deste dinheiro em algo que gere retorno? Não estou falando de títulos de capitalização, fundos de investimento ou coisas do tipo. Estou falando sobre você investir em você mesmo. É isto aí. Invista-se! Não espere que a empresa em que você trabalha ou qualquer outra organização façam isto por você. Aliás, essa iniciativa sendo sua, mostra o quanto você é proativo e empregadores adoram pessoas proativas.

Em se tratando da área de TI, pare por um minuto e pense nas seguintes questões:

  • O quanto do meu salário eu invisto em itens que me ajudarão na minha carreira? Um investimento pode ser, por exemplo, um smartphone com aquele sistema operacional que você pretende estudar ou com aquelas tecnologias que você sempre quis testar. Também pode ser aquele upgrade na sua máquina. Afinal, não tem coisa pior do que trabalhar com tecnologia e ter um notebook velho que vive travando por falta de memória.
  • Quantos livros eu comprei e realmente li para me atualizar? Pense em livros técnicos de programação, um livro sobre aquele software que você custa a configurar ou mesmo sobre gestão (pessoal ou profissional), metodologia ou governança.
  • Quantos cursos eu já fiz para me capacitar e me aperfeiçoar? Às vezes livros não são suficientes e você precisa de um tutor/professor para lhe auxiliar e tirar suas dúvidas. Fazer uma graduação ou uma especialização/MBA também são ótimas maneiras de se capacitar para quem é do nível técnico ou graduado, respectivamente.
  • De quantos encontros, conferências e congressos eu participei? Palestras, minicursos e workshops são ótimos meios introdutórios para se aprender novos conceitos, novas tecnologias e sobre softwares. Além disto, participando de eventos deste tipo, você pode conhecer novas pessoas. E novas pessoas podem gerar novas oportunidades profissionais e de conhecimento.

Tenho certeza de que se você fizer algum investimento que te motive, você estará melhor preparado para o seu dia a dia de trabalho e terá um currículo mais poderoso.

E aí, o que você faz em prol da sua carreira?

Padrão
Desenvolvimento, Processos

Qualidade: a hipocrisia

Softwares surgiram para auxiliar na resolução de problemas e facilitar nosso trabalho cotidiano. Mas, e quando o software que utilizamos não nos fornece garantias?

Em busca do ponto de origem desta falta de garantia, sabe-se por exemplo que desenvolver um software não é uma tarefa trivial, mas também não exige do programador extensos estudos, anos de experiência e certificações, ainda mais com milhares de páginas na web com tutoriais, vídeo aulas e até códigos prontos. De certa forma, alguém que queira aprender a programar em PHP, tida como a linguagem dos sobrinhos de donos de empresa, não precisa se matricular em um curso com carga horária de 400 horas. Em contrapartida, ele dificilmente conseguirá desenvolver um sistema ERP com qualidade. E este é o ponto.

Os males causados pelos criadores do software que não pensam na qualidade dele tendem a ser rotulados, assim como suas próprias criações. No mundo open source, há vários projetos estacionados pela falta de padrão e organização. Provavelmente, o caos tomou conta do código e do processo em que desenvolvimento se sustenta. Claro que há exceções como em casos em que há falta de colaboração, recursos e tempo, mas não é difícil encontrarmos na grande maioria das empresas privadas e órgãos públicos projetos travados ou custosos que tendem a reformular-se.

Também não é a toa que ouve-se uma enxurrada de notícias e matérias dizendo sobram vagas na área de TI. E sobram vagas por falta de profissionais qualificados. Por outro lado, muitas micro e pequenas empresas ainda preferem contratar estagiários a possuir uma equipe de desenvolvimento capacitada e com know-how.

A qualidade resultante de um produto ou serviço, é o somatório de itens de qualidade agregados: mão-de-obra, processos, ferramentas, etc.

Diante deste cenário, por que a qualidade ainda continua sendo mais hipocritamente argumentada do que praticada?

Padrão
Não categorizado

Início: Um novo desafio

Hoje início mais um desafio no meu cotidiano. Criei um blog! Este blog.

E neste blog tentarei transmitir conhecimentos adquiridos e os que estou adquirindo nas áreas de desenvolvimento, infraestrutura e processos de TI, quase sempre baseados em softwares livres, que facilitam os estudos devido as suas formas de licenciamento. A ideia não é colocar artigos técnicos, de como fazer ou tutoriais passo-a-passo, pois há publicações em demasia destes gêneros na rede mundial. Entretanto, podem haver posts destes de forma a ajudar quem precise testar alguma ferramenta ou mostrar sua utilização. Procurarei sempre pôr referências em meus posts para embasar meus textos. Deste modo, espero contribuir de alguma forma e também aprender com os comentários.

Então, vamos ao trabalho!

Padrão