sexta-feira, 24 de dezembro de 2010

Estratégia, Tipos e Técnicas de Teste


Estratégia de Testes de Software - Visa descrever os objetivos das atividades de teste e sua abordagem em geral, ou seja, deverá se ater aos tipos de testes, os níveis e as técnicas para uma execução bem sucedida.
Para elaborar uma boa estratégia de teste se faz necessário responder as perguntas abaixo:
  1. Quando testar?
  2. O que testar?
  3. Como testar?
Respondendo as questões acima e executando alguns passos como: Traçar prioridades para os testes, analisar os requisitos do sistema, tipos e técnicas de teste, torna-se possível desenhar uma estratégia eficiente e concisa. 
Tipos de Teste: Teste de Conformidade, Teste de Contingência, Teste de Desempenho ou Performance, Teste de Estresse, Teste de Funcionalidade, Teste de Integração, Teste de Regressão, Teste de Segurança e Teste de Usabilidade.
Esses testes são subdivididos em: Técnica Estrutural e Funcional.
Técnica Estrutural - É utilizada para garantir que o sistema desenvolvido esteja bem estruturado e que funcione corretamente.
Compõe essa técnica: Os testes de Conformidade, de Contigência, de Estresse, de Desempenho e de Segurança.
Teste de Conformidade - Utilizado para verificar se a aplicação está dentro dos padrões e procedimentos.
Teste de Contingência - Utilizado para verificar se após uma falha, a recuperação dos serviços são restabelecidos.  
Teste de Estresse - Utilizado para verificar o comportamento do sistema durante condições limite de execução.
Teste de Desempenho - Utilizado para verificar o tempo de resposta de uma funcionalidade do sistema ou de todo o sistema.
Teste de Segurança - Utilizado para garantir que os dados do sistema estão sendo acessados apenas por usuários autorizados.
Técnica Funcional - Essa técnica é utilizada para verificar se os requisitos do sistema estão de acordo com o solicitado.
Compõe essa técnica: Os testes de Funcionalidade, de Integração, de Regressão e de Usabilidade.
Teste de Funcionalidade - Utilizado para verificar se as funções do sistema são executadas corretamente e/ou se as regras de negócio estão aplicadas. 
Teste de Integração - Utilizado para verificar e garantir que o software desenvolvido consiga se comunicar adequadamente com outros softwares.
Teste de Regressão - Utilizado para garantir que os defeitos encontrados foram corrigidos e que a alteração em alguma parte do software (código) não tenha afetado outras partes.
Teste de Usabilidade - Utilizado para analisar o grau de facilidade de manuseio e interatividade do sistema com o usuário.
Para concluir este assunto vou falar brevemente sobre "Estágios ou níveis de teste".
O que seria Estágios ou níveis de teste? E para que serve?
Vimos como elaborar uma boa "Estratégia de Teste", levantando 3 simples questões:
  1. Quando testar?
  2. O que testar?
  3. Como testar?
É justamente nesta primeira questão, "Quando testar", que se aplica o assunto de hoje.
Estágios ou níveis de teste aborda exatamente esta pergunta, servindo como direcionamento para a execução dos testes, ou seja, qual tipo de teste utilizar em uma determinada fase do desenvolvimento do software.
Cito abaixo os quatro níveis de teste:
  • Testes Unitários
  • Testes de Integração
  • Testes de Sistema
  • Teste de Aceitação
Testes Unitários - Serve para garantir que uma funcionalidade especificada nos requisitos, seja implementada adequadamente.
Testes de Integração - Aplicado para verificar e garantir que o software desenvolvido consiga se comunicar adequadamente com outros softwares.
Neste nível existem duas técnicas ou métodos:
Abordagem Top-Down - Utiliza uma abordagem incremental e serve para identificar problemas de forma antecipada.

quinta-feira, 23 de dezembro de 2010

Projeto de interface com o usuário

Slides de aula do Departamento de Ciências da Computação e Estaística da UNESP sobre Projeto de Interface de Usuário.

Acesse aqui

Desenvolvimento baseado em componentes: experiências de sucesso

Artigo de autoria de Leonardo Azevedo, Fernanda Baião, Márcio Duran, José Blaschek, Jano de Souza e Geraldo Zimbrão.

Acesse aqui

Exemplo de projeto de arquitetura do software

Um bom exemplo de projeto de arquitetura do software.

Acesse aqui

Projeto de uma arquitetura de software

Resumo sobre projeto arquitetural de software.

Acesse aqui

quinta-feira, 2 de dezembro de 2010

Tutorial do Crontab

O "cron" é um programa de "agendamento de tarefas". Com ele você pode programar para ser executado qualquer coisa numa certa periodicidade ou até mesmo em um exato dia, numa exata hora. Um uso bem comum do cron é o agendamento de tarefas administrativas de manutenção do seu sistema, como por exemplo, procura por links simbólicos quebrados, análise de segurança do sistema, backup, entre outros.

Estas tarefas são programadas para todo dia, toda semana ou todo mês, serem automaticamente executadas através do crontab e um script shell comum. A configuração do cron geralmente é chamada de crontab.

Os sistemas Linux possuem o cron sempre presente. Pelo menos eu nunca vi nenhuma distribuição que não incluísse o tão útil cron. A configuração tem duas partes: Uma global, e uma por usuário. Na global, que é o root quem controla, o crontab pode ser configurado para executar qualquer tarefa de qualquer lugar, como qualquer usuário. Já na parte por usuário, cada usuário tem seu próprio crontab, sendo restringido àpenas ao que o usuário pode fazer (e não tudo, como é o caso do root).

Para configurar um crontab por usuário, utiliza-se o comando "crontab", junto com um parâmetro, dependendo do que você quiser fazer. Abaixo uma relação:

ComandoFunção
crontab -eEdita o crontab atual do usuário
crontab -lExibe o atual conteúdo do crontab do usuário
crontab -rRemove o crontab do usuário

Se você quiser verificar os arquivos crontab dos usuários, você precisará ser root. O comando crontab coloca os arquivos dos usuários no diretório:

/var/spool/cron/usuario 

Onde "usuario" corresponde ao usuário dono do arquivo crontab.

Agora se você quiser editar o crontab global, este fica no arquivo "/etc/crontab", e só pode ser manipulado pelo root. E agora que já sabemos onde ficam os arquivos de configuração, vamos estudar o formato da linha do crontab, que é quem vai dizer o que executar e quando. Vamos ver um exemplo:

0 4 * * * who

Então como se pode ver, a linha é dividida em 6 campos separados por tabs ou espaço:

CampoFunção
1o.Minuto
2o.Hora
3o.Dia do mês
4o.Mês
5o.Dia da semana
6o.Programa pra execução

Todos estes campos, sem contar com o 6o., são especificados por números. Veja a tabela abaixo para os valores destes campos:

CampoFunção
Minuto0-59
Hora0-23
Dia do mês1-31
Mês1-12
Dia da semana0-6 (o "0" é domingo, "1" segunda, etc)

Então o que nosso primeiro exemplo estava dizendo? A linha está dizendo: "Execute o comando 'who' todo dia de todo mês sendo o dia qualquer dia da semana, às 4 horas e 0 minutos.". Vamos pegar mais exemplos para analisar:

1,21,41 * * * * echo "Meu crontab rodou mesmo!"

Aqui está dizendo: "Executar o comando do sexto campo toda hora, todo dia, nos minutos 1, 21 e 41".

30 4 * * 1 rm -rf /tmp/*

Aqui está dizendo: "Apagar todo conteúdo do diretório /tmp toda segunda-feira, as 4:30 da manhã.".

45 19 1,15 * * /usr/local/bin/backup

Aqui está dizendo: "Executar o comando 'backup' todo dia 1 e 15 às 19:45.".

E assim você pode ir montando inúmeros jeitos de agendamento possível. No arquivo do crontab global, o sexto campo pode ser substituído pelo nome do usuário, e um sétimo campo adicionado com o programa para a execução, como mostro no exemplo a seguir:

0-59/5 * * * * root /usr/bin/mrtg /etc/mrtg/mrtg.cfg

Aqui está dizendo: "Executar o mrtg como usuário root, durante 5 e 5 minutos dos minutos 0-59. Ou seja, executar de 5 em 5 minutos o mrtg sempre.".

Em alguma distribuições, os agendamentos mais comuns estão programados para serem executados. Veja as linhas abaixo:

01 * * * * root run-parts /etc/cron.hourly
02 4 * * * root run-parts /etc/cron.daily
22 4 * * 0 root run-parts /etc/cron.weekly
42 4 1 * * root run-parts /etc/cron.monthly

O programa "run-parts" executa todos os scripts executáveis dentro de um certo diretório. Então com essas linhas, temos diretórios programados para executar programas de hora em hora, diariamente, semanalmente ou mensalmente. Abaixo a tabela:

DiretórioPeríodo
/etc/cron.hourlyDe hora em hora
/etc/cron.dailyDiariamente
/etc/cron.weeklySemanalmente
/etc/cron.monthlyMensalmente

Então todos os arquivos executáveis dentro de cada diretório serão executados no seu correspondente período. Ou seja, posso colocar um certo conteúdo no arquivo "/etc/cron.daily/teste", depois torná-lo executável através do comando "chmod +x /etc/cron.daily/teste", e então ele será executado todo dia as 4:02 da manhã.

Bem é isso! Agora você já pode programar suas tarefas para serem automaticamente executadas e te poupar muito trabalho manual :)