31 de mar. de 2010

15 Práticas Para Um Analista de Qualidade Altamente Eficaz




Os testes de software são processos integrantes de toda e qualquer metodologia de software, basicamente são responsáveis por executar e garantir o sucesso de dois princípios básicos:

VALIDAÇÃO = garante que se está construindo CERTO O PRODUTO;

VERIFICAÇÃO = garante que se está construindo O PRODUTO CERTO;

Ou seja, a Validação está intimamente ligada à conformidade com os requisitos de negócio do sistema. Já a Verificação está ligada ao processo de codificação correta do sistema, prevenindo-o de erros e falhas.

Baseado nesses princípios e na busca de que o mesmos estejam nos projetos de maneira efetiva, eu gostaria de expor, de maneira bem genérica, as principais práticas de um profissional responsável por executar e gerenciar o processo de testes em projetos de software. Tais práticas são consenso de mercado e indicações de sucesso no processo de testes, o que indica que o profissional que as adota pode ser considerado um profissional altamente eficaz. Logo, se você, profissional da área de testes, almeja obter êxito em sua profissão, fique ligado às dicas! ;)

Vamos então a elas:

1 - Prepare um documento de abordagem de teste e plano de qualidade; 

2 - Obtenha a aprovação durante o planejamento dos testes;

3 - Defina os ambientes de teste necessários e garanta a clareza na execução dos testes;

4 - Documente o gerenciamento de configuração e garanta a rastreabilidade;

5 - Separe os testes funcionais de testes operacionais e de performance;

6 - Estabeleça frameworks para a melhoria contínua para o processo de testes;

7 - Tenha usuários de negócio envolvidos para identificar as regras-chave para o processo de descoberta de condições;

8 - Use desenvolvimento de scripts de testes e revisão;

9 - Faça testes de regressão;

10 - Automatize o rastreamento de problemas e outros itens que requerem um vínculo;

11 - Use ferramentas de workflow para construção de rastreamento e atividades de teste;

12 - Estabeleça uma abordagem de reporte que permita exportar para dashboards de métricas voltadas para os gerentes, certamente eles vão te cobrar isso!

13 - Faça a arquitetura de processos de testes e ambientes para existir durante toda a vida da aplicação;

14 - Desenvolva um framework para testes de regressão e construa softwares de testes automatizados que deixem claro o Retorno Sobre Investimento do projeto, conhecido também, do inglês, ROI (Return On Investment);

15 - E por último, mas não menos importante: Rigorosamente, organize os dados de teste e aplique controle de versão.


E então, como é implementado o processo de testes em seus projetos? Há algo semelhante com o comentado aqui? Você, profissional de qualidade, se preocupa com tais práticas? Você teria mais alguma boa prática para complementar este post?

É isso pessoal, espero que aproveitem as dicas. 

Por favor, não deixem de opinar sobre o que foi escrito! ;)

Um grande abraço e até o próximo artigo!


.

8 de mar. de 2010

Capacidades da Arquitetura Ideal




Gostaria de abordar hoje sobre as capacidades que uma arquitetura bem planejada deve contemplar para proporcionar bons índices de qualidade. Este tema se torna extremamente importante se olharmos sob a ótica de que a qualidade afeta diretamente a satisfação do cliente e envolvidos com o sistema, sendo um ponto fundamental para o sucesso de um projeto de software.

Foram eleitas basicamente as seguintes 11 capacidades:

Disponibilidade

É a capacidade do sistema se manter no ar para uso devido. Diz-se que o sistema possui alta disponibilidade quando se mantém disponível a maior parte do tempo. Quando se contrata serviços de infra-estrutura, geralmente é acorda um percentual de disponibilidade que tal infra deve garantir, podendo pagar multas caso não cumpra o acordo, são as chamadas SLA's de disponibilidade.


 Robustez

É a característica pela qual se mede o nível de tolerância a falhas do sistema. O software deve ser capaz de prever situações inusitadas vindas de seus usuários e reagir com medidas que o mantenha estável, ou seja, sem apresentar falhas.


Gerenciabilidade

É a capacidade que mede o quão um sofware é configurável. A configuração dos níveis de logs gerados por um determinado software é um bom exemplo disso.


 Flexibilidade

Característica inerente à maneira em como um determinado software se comporta à mudanças, tanto arquiteturais quanto funcionais. Por exemplo, se um software hoje acessa uma base de dados Oracle, diz-se que ele é flexível caso seja possível mudá-lo para acessar uma base de dados SQL Server sem que para isso sejam necessárias grandes alterações em seu código-fonte.


 Desempenho

Esta característica está relacionada à utilização de recursos, como por exemplo, o tempo de processamento de uma grande quantidade de mensagens em uma fila JMS ou o tempo de processamento de uma consulta no banco de dados.


 Capacidade

Se refere às limitações impostas ao sistema, com o que o sistema deve suportar. Por exemplo: um sistema deve suportar 500 acessos simultâneos.


Resiliência

Este nome um tanto quanto "exótico" se refere ao grau de estabilidade do sistema mediante a picos de processamentos. Exemplo: um determinado sistema tem que suportar uma carga durante 3 horas e depois voltar ao seu estado normal sem sofrer quedas ou gerar defeitos.


Escalabilidade

É a capacidade de um determinado sistema ser flexível a ponto de prever o seu crescimento, ou seja, possbilita o seu incremento de funcionalidade e capacidades sem se tornar obsoleto, acompanhando sempre as necessidades do usuário.


Extensibilidade

É a capacidade que o sistema tem de crescer pela adição de novos componentes e que, muitas vezes, permita ao sistema fazer algo que ele já faz, mas de forma diferente. O polimorfismo em classes é um bom exemplo de extensibilidade em sistemas orientados a objetos, sendo possível através do uso de programação para interfaces e  nunca para classes com implementação concreta.


 Reusabilidade

Permite que um determinado sistema seja usado em contextos diferentes, ou então, que seus componentes sejam usados também em outras aplicações. Este tipo de reusabilidade de componentes facilita muito o desenvolvimento de aplicações corporativas, pois, proporciona uma maior facilidade de manutenção e ganho na produtividade do software.


Segurança

É a característica que permite avaliar o quanto um sistema é protegido, dadas as suas condições de exposição, contra ataques ou falhas internas ou externas que gerem inconsistências em suas informações ou outros tipos de defeitos, compromentendo a todas as outras capacidades aqui citadas. 
Um bom sistema deve prover condições de segurança nos quisitos autenticidade,  confidencialidade,  integridade e disponibilidade.

 

Fico por aqui pessoal. Para qualquer dúvida ou complemento das informações aqui postadas, não deixem de postar os seus comentários.   ;)

Um grande abraço e até o próximo post!

.