Processo de teste ágil x tradicional

Neste artigo vamos falar sobre diferentes metodologias de desenvolvimento de sistemas e processos de teste de software. Confira essa comparação entre metodologia ágil e metodologia tradicional.

Fique por dentro
Neste artigo vamos falar sobre diferentes metodologias de desenvolvimento de sistemas e processos de teste de software. O artigo apresentará qual a importância da metodologia na qualidade, qual o papel e função dos testadores, como podem e devem contribuir para a melhoria, além de um comparativo sobre as diferentes metodologias utilizadas atualmente. Este artigo será útil em situações nas quais os testadores devem trabalhar com determinada metodologia de desenvolvimento de sistemas, fazendo parte de todo o processo, desde a concepção até a conclusão de um projeto, trabalhando com melhorias, correções e alterações de requisitos dentro de um ciclo de desenvolvimento. Logo, será possível conhecer, avaliar e identificar possíveis pontos de melhoria, além de dinamizar e melhorar o dia a dia de trabalho dos testadores.

A área de testes, dentro da engenharia e desenvolvimento de software, vem ganhando cada vez mais espaço dentro de instituições de ensino, empresas e organizações, formando e qualificando profissionais, agregando conhecimento e contribuindo muito para melhoria da qualidade e valor de produtos, sejam eles de quaisquer tipos de sistemas.

Quando testadores participam de projetos onde os processos ou determinada metodologia escolhida não é a melhor, ou não flui de uma maneira eficiente, muitas vezes ficam desmotivados ou frustrados, pois o processo e a metodologia utilizados não são os melhores para a situação. Um processo mal definido ou com má utilização contribui negativamente para fatores como alta rotatividade de pessoas, baixa eficácia de testes, atrasos ou demoras em entregas e, como resultado, temos um sistema instável, com muitos erros e clientes insatisfeitos.

Exemplificando essa situação, podemos pensar em um sistema cujo desenvolvimento não atinge o esperado nem pela empresa construtora, nem pela empresa contratante, a qual utiliza e paga pelo usufruto do sistema. Conclui-se que a empresa responsável pelas entregas ou desenvolvimento não possui processos bem definidos de testes e não trabalha na melhoria e evolução de seus produtos, escolhendo e gerenciando mal a metodologia utilizada. Em um mundo onde o mercado é cada vez mais competitivo, isso é inadmissível. Com a alta concorrência, jamais a empresa pode pecar em ter um produto razoável e de qualidade duvidosa porque a metodologia utilizada no ciclo de desenvolvimento é falha ou não suporta determinado tipo de projeto. Fazer uma escolha errada e não admitir alteração é pior do que fazer a escolha errada e reconhecer os erros. O mercado é muito exigente quando paga por um serviço e não recebe o acordado ou recebe com diversas falhas e erros.

Ao longo deste artigo, vamos mostrar e discutir sobre a importância de uma boa metodologia e sobre como defini-la para determinado projeto, uma vez que uma metodologia adequada para projetos pequenos e pouco complexos pode não se adequar bem para projetos maiores de alta complexidade.

O que é um projeto de software?

Podemos definir um projeto de software como sendo um empreendimento temporário dividido em ciclos de vida ou fases com o objetivo de criar um produto, serviço ou resultado único de forma a atender às especificações e expectativas de negócio. Os ciclos de vida de um projeto de software normalmente definem: qual trabalho técnico será realizado, quais entregas serão geradas em cada fase, como serão verificadas e validadas, quais as pessoas ou papéis estarão envolvidos em cada fase e como será realizado o controle e aprovação de cada fase.

Todo o processo de testes, metodologias, equipes e definições são realizados em projetos, por isso é crucial que o conceito esteja claro e bem definido.

Processo de testes de software

De forma geral, o processo de testes de software representa uma estruturação de atividades, etapas, artefatos, papéis e responsabilidades que buscam a padronização de equipes e trabalhos buscando uma forma de ampliar a organização, a qualidade e o controle dos projetos de teste.

Para melhor eficácia e eficiência, o processo de teste, como qualquer outro processo, deve ser revisto continuamente de forma a aperfeiçoar sua atuação buscando a melhoria contínua, além de analisar sua aplicabilidade e continuidade possibilitando aos profissionais envolvidos uma maior visibilidade e organização de seus trabalhos, o que resulta em uma maior agilidade e controle operacional dos projetos.

Independentemente das metodologias utilizadas nos projetos, o processo pode ser dividido em sete partes: planejamento dos testes, especificação dos testes, modelagem dos testes, disponibilização ou preparação do ambiente de testes, execução dos testes, análise dos resultados e encerramento do processo. Segue um breve detalhamento da composição de cada parte:

De um modo geral, de uma metodologia para outra, poucas atividades são alteradas para os testadores. Normalmente o que difere é a ordem e a forma como as atividades são feitas, mas geralmente o processo não sofre alteração na sua essência. As poucas diferenças existentes serão tratadas e exploradas nos tópicos a seguir.

Desenvolvimento de software

Desenvolvimento de software é uma tarefa muito complexa, difícil e de alto risco. Inúmeros problemas são enfrentados diariamente, e nós, testadores, não estamos excluídos nesse processo, aliás, muito pelo contrário, como somos praticamente o final do processo, somos a ligação entre desenvolvedor e usuário.

Entre alguns desses problemas enfrentados, podemos destacar: alto consumo de tempo que supera estimativas e cronograma, funcionalidades que não solucionam os problemas dos usuários, baixa qualidade dos sistemas desenvolvidos, tempo para teste e qualidade reduzidos e, em alguns casos, até o cancelamento do projeto por inviabilidade.

Tendo como grande objetivo a redução de risco associado ao desenvolvimento de software, as metodologias definem uma maneira de trabalhar em projetos utilizando processos, sendo elas um conjunto de atividades e resultados associados que auxiliam no desenvolvimento e construção de softwares.

Metodologia tradicional

Nesse contexto temos a metodologia tradicional, possuindo como técnica ou modelo mais conhecido o modelo clássico ou cascata (waterfall), que também é conhecido como abordagem “top-down”. O modelo foi proposto por Royce em 1970, derivado de modelos industriais de diversos segmentos de engenharias; seu principal objetivo era de estabelecer ordem e padrão em desenvolvimento de software. Foi chamado de desenvolvimento tradicional, pois é a base para diversos modelos utilizados há décadas pela indústria de software e é considerado um modelo rígido de pouca flexibilidade, adaptabilidade e versatilidade, sendo utilizado em projetos de pequeno, médio e grande porte.

Grande parte de seu alto grau de aceitação e utilização está no fato de ser um modelo orientado para documentação, seja ela de qualquer tipo, como textos, representações gráficas, simulação, diagramas, casos de usos, entre outras. A ideia principal dessa metodologia é que o software é construído baseado em uma sequência de fases, sendo que cada uma delas depende da conclusão da outra para ser iniciada, com exceção da primeira, conforme ilustra a Figura 1.

Figura 1. Ciclo de desenvolvimento utilizando metodologia tradicional

Os resultados da primeira etapa, da Análise, são concluídos, então a saída “flui” para a segunda etapa, que é a de Projeto. Logo, quando a etapa de Projeto for concluída, sua saída ou resultado “flui” para a seguinte, sendo que uma etapa nunca se inicia antes da etapa anterior ser finalizada. As atividades são agrupadas em tarefas executadas sequencialmente.

Além do modelo clássico, existem também variações que são empregadas de forma iterativa e incremental, tendo ainda uma forte linearidade no processo, caracterizado por “cascatas menores” dentro de cada iteração.No decorrer das tarefas e para a conclusão das mesmas, fazem parte da metodologia tradicional algumas premissas que a influenciam, como:

Metodologia ágil

A metodologia ágil surgiu da necessidade de minimizar riscos e custos associados ao desenvolvimento de software. Para a utilização da metodologia ágil, o framework Scrum é a ferramenta mais indicada. É um framework pois facilita o uso de diversos processos e técnicas. O Scrum vem sendo utilizado como uma ferramenta para controlar e gerenciar o processo de desenvolvimento de produtos complexos que agregam maior valor para o cliente.

O framework Scrum é composto por ciclos de desenvolvimentos, mais conhecidos como Sprints, com duração fixa não ultrapassando mais de um mês. Ele é maleável, mas pouco adaptativo, ou seja, deve-se evitar ao máximo realizar mudanças desnecessárias que afetem o objetivo da sprint. Essas mudanças devem ser discutidas entre o product owner e a equipe de desenvolvimento.

Para a execução dos ciclos iterativos, o Scrum é composto por equipes com um número razoavelmente baixo de participantes para facilitar o gerenciamento, e, associados aos membros que formam as equipes, temos: papéis, artefatos e cerimônias.

Testes na metodologia tradicional

Anteriormente vimos como o modelo tradicional funciona sob o ponto de vista de todos os envolvidos, agora vamos detalhar um pouco mais sobre as atividades da equipe de testes dentro desse contexto.

Nessa metodologia, a atividade de teste é realizada ao final de cada versão, sendo esse o momento em que o analista de testes analisa os requisitos a partir das especificações e das documentações geradas. Entre as atividades de teste podemos destacar:

Testes na metodologia ágil

Após conhecermos quais as atribuições e como funciona o teste na metodologia tradicional, vamos detalhar e explorar um pouco mais sobre as atividades da equipe de testes dentro da metodologia ágil.

Diferentemente da metodologia tradicional, a atividade de teste no sistema propriamente dito é um processo empírico, sendo realizado em todas as fases do projeto, do início ao fim, onde os profissionais de testes contribuem para o processo como um todo, validando os requisitos desde a sua criação até a entrega final. Como não há necessidade explícita de uma documentação extensa e abrangente, a comunicação entre a equipe é fator crucial de sucesso. Existe a validação de documentos em todos os passos e momentos do processo e isso contribui para o aprendizado de todos, já que todos participam de todo o processo. O analista de teste é responsável por monitorar se as atividades do time estão aderentes ao processo de desenvolvimento além de coletar as métricas do processo de teste.

Entre essas atividades realizadas, podemos destacar:

Diferenças entre as metodologias

A metodologia tradicional é fundamentada em processos definidos e a metodologia ágil em processos empíricos. De forma mais resumida e direta, podemos observar na Tabela 1, e também na Figura 2, o que foi discutido até aqui, enfatizando as diferenças e características entre os dois tipos de metodologias, sendo que todos os pontos levantados afetam direta ou indiretamente o processo de testes e a forma sob como e quando são executados.

METODOLOGIA TRADICIONAL OU CLÁSSICA METODOLOGIA ÁGIL
Processos definidos Processos empíricos
Planejamento rígido Maior liberdade no planejamento das ações
Maior foco em processos do que no produto Menos formalidade e maior ênfase no produto
Feedbacks não são essenciais Feedbacks são essenciais
Documentação extensa Documentação necessária
Inibe a comunicação entre as pessoas Estimula a comunicação entre as pessoas
Planejamento prevê um trabalho extenso, com a entrega do produto somente nos estágios finais do cronograma (não evita conflitos com cliente) Entregas de partes do projeto de forma contínua e incremental (iterações) com o objetivo de obter um rápido feedback do cliente sobre o andamento do projeto
Conceito de que “entradas iguais sempre geram saídas iguais” Conceito de que “entradas iguais geram saídas diferentes”
Atividades realizadas sequencialmente. Testes executados somente no final, quando “tudo” estiver pronto Atividades realizadas paralelamente. Testes executados durante todo o processo, equipe de testes mais presente em todo os pontos de desenvolvimento
Baseado na definição de todas as etapas do trabalho Baseado na experiência e controlado através de inspeção e adaptação contínua
Resistência a mudanças Flexibilidade e postura positiva diante da necessidade de mudanças (mesmo em fases finais do projeto)
Decisões tomadas em uma abordagem top-down Liberdade para o time tomar decisões em conjunto
Forte centralização em torno da figura do gerente de projetos Responsabilidade compartilhada entre os membros da equipe, espírito de colaboração e time engajado
Liderança que monopoliza toda a comunicação já que a preocupação é com o controle das ações Comunicação fluída e livre entre os membros do time
Líderes indicando “O que fazer” e “Como fazer”, ao invés de dizer o “Porquê” Equipes auto organizáveis; a divisão do trabalho é resultado do entendimento do projeto e de um consenso entre o time
Problemas geralmente escalados até a gerência Atuação conjunta do time para a resolução de problemas
Longa fase de análise; em muitos casos parte da equipe é deixada de lado nesses estágios iniciais (já que considera que tais membros ingressarão apenas na fase de execução) Reuniões diárias entre o time onde são discutidos o que será feito naquele momento, revendo o planejamento a médio e curto prazo, além de prováveis impedimentos
Um forte enfoque na geração de documentos e no controle através desses artefatos Embora existam documentos e se estimule a criação dos mesmos, há um pragmatismo maior (sem conferir uma importância exagerada a esses artefatos)
Maior envolvimento do cliente em estágios iniciais, com certo relaxamento de postura, uma vez que o projeto tenha se iniciado Participação ativa do cliente, inclusive enquanto o projeto está sendo implementado
Foco na “antecipação” (algo difícil em um ambiente sempre sujeito a mudanças repentinas) Ênfase na “adaptação” (requer “jogo de cintura”)
Tabela 1. Diferenças entre as metodologias
Figura 2. Metodologia tradicional x metodologia ágil

Vantagens e desvantagens de cada metodologia

As duas metodologias vistas até aqui, de um modo geral e do ponto de vista do teste, possuem suas vantagens e desvantagens. Agora que já sabemos como é o funcionamento e quais as diferenças entre elas, vamos observar na Tabela 2 as vantagens e desvantagens da metodologia tradicional e, na Tabela 3, as vantagens e desvantagens da metodologia ágil para então concluirmos em análise, qual delas é viável ou inviável para um determinado projeto.

METODOLOGIA TRADICIONAL OU CLÁSSICA
Vantagens Desvantagens
Torna o processo de desenvolvimento estruturado. Tem uma ordem sequencial de fases. Cada fase cai em cascata na próxima e cada fase deve estar terminada antes do início da seguinte Não fornece feedback entre as fases e não permite a atualização ou redefinição das fases anteriores
Atividades identificadas nas fases do modelo são fundamentais e estão na ordem certa Não suporta modificações nos requisitos
Fases bem definidas Não prevê manutenção
Maior foco no planejamento Não permite reutilização
A fase seguinte só se inicia, geralmente, caso o cliente aceite os artefatos produzidos na fase anterior É excessivamente sincronizado
Se ocorrer um atraso, todo o processo é afetado
Exigência de que o cliente estabeleça todos os requisitos no início do projeto
Entrega para a equipe de testes somente próximo ao final do projeto
O modelo conduz a uma rígida divisão de trabalho
Baixa visibilidade dos problemas
Sem status do andamento das atividades para o time
Entrega para o cliente somente no final do projeto. Não existe entregas parciais
Defeitos, erros ou falhas, sejam críticos ou não, são somente encontrados no final. Encarecimento das correções
Tabela 2. Vantagens e desvantagens da metodologia tradicional
METODOLOGIA ÁGIL
Vantagens Desvantagens
Diminuição da expectativa dos clientes por entregas Pouca documentação
Rápida adaptação a mudanças Custo conhecido somente ao longo do projeto. Esse fato exige que o gestor do projeto dedique mais tempo no controle dos custos envolvidos
Maior satisfação dos clientes Manutenção de requisitos requer atenção especial, já que mudanças devem ser acordadas e documentadas
Entregas menores, porém com alto valor de negócio para os clientes Inadequada para projetos com equipes muito grandes. Limita-se o número de membros no time para melhor organização, planejamento e gerenciamento
Maior comunicação entre os membros do time
Status de cada membro da equipe é transparente aos outros. Todos sabem quais as atividades do outro
Suporte a modificação de solução e requisitos
Todos podem e devem contribuir para o todo. Trabalho em equipe.
Defeitos, erros ou falhas, sejam críticos ou não, são encontrados durante todo o ciclo
Tabela 3. Vantagens e desvantagens da metodologia ágil

Análise comparativa

Já vimos que as metodologias possuem seus pontos altos e baixos, as diferenças entre elas e como funciona o processo de testes dentro de cada uma. Em síntese, todos os modelos assumem que o projeto irá passar por cada etapa apenas uma vez. A diferença é que o ágil preza por uma melhor comunicação, ciclos incrementais, pouca documentação e retrabalho antes da entrega ao cliente e não após a entrega como funciona no modelo tradicional.

A seleção da abordagem mais adequada dependerá de diferentes variáveis, como: características de cada projeto, da empresa e do que é requisitado pelo cliente. Metodologias tradicionais costumam ser mais indicadas em cenários mais formais, além de serem mais recomendadas caso a equipe seja grande e os sistemas a serem desenvolvidos sejam de alto risco (muitas vezes requerem mais documentação). Já métodos ágeis são normalmente mais recomendados para equipes pequenas nas quais a flexibilidade diante de constantes mudanças é fundamental. Embora isso não queira dizer que abordagens ágeis, como o Scrum, não sejam recomendadas para projetos grandes. Vale lembrar que se, na visão do cliente, o produto apenas faz sentido quando for entregue completo, então utilizar métodos ágeis pode não ser a escolha mais adequada.

A escolha da metodologia também deve levar em conta a cultura da empresa, que em situações onde a metodologia ágil pode ser utilizada, não é possível implantá-la, pois o development team não é familiarizado com essa forma de trabalho, com entregas rápidas e percepção de valor antes do produto final. No caso, optar pelo ágil pode aumentar drasticamente os gastos, já que a equipe precisará de treinamento, absorção de conhecimento, além da curva de aprendizado.

Outros fatores que ajudam na escolha da metodologia podem ser: nível de maturidade dos processos na empresa, natureza da aplicação ou sistema, acordos com clientes e tendências de mercado. Cada modelo possui cenários de trabalho diferentes para tratar esses pontos, mas ambos podem ser utilizados. Uma análise de alguns pontos, como o development team, a cultura da empresa, os riscos do projeto, acordos com clientes e gastos, combinados com os pontos positivos e negativos de cada método apresentado devem ajudar a escolher qual a melhor opção.

Existem casos onde, por motivos que levam desde a adaptação até a complexidade do negócio, as duas metodologias podem andar lado a lado, de forma que uma apoie a outra, combinando características das duas metodologias. Pode parecer estranho, mas é muito comum.

Ambas as abordagens são excelentes dentro do que propõem, mas não perfeitas,e possuem pontos altos e baixos em áreas específicas ou em determinados tipos de aplicações utilizadas em projetos distintos.

Ao longo deste artigo, vimos alguns conceitos relativos a processos, desenvolvimento de software, processos de testes, como funcionam as metodologias e como elas podem ajudar ou atrapalhar dependendo do tipo de projeto, analisando suas vantagens e desvantagens.

Definir uma metodologia ou saber como utilizá-la tem fator de importância decisivo entre obter ou não sucesso. Uma má definição ou, ainda, uma má utilização dos recursos providos por elas aumenta consideravelmente os riscos do projeto não obter êxito. Saber utilizar é tão importante quanto a escolha de qual delas utilizar. A definição da metodologia impacta drasticamente na qualidade, já que a equipe de testes é afetada diretamente. Além disso, a escolha da metodologia também afeta a escolha do perfil de profissionais necessários para compor a equipe.

Testes são fundamentais atualmente e fatores como tecnologia, desempenho, performance, rapidez em resposta e qualidade são indispensáveis e devem fazer parte do cotidiano de todos os profissionais e membros do development team. Eles devem ter sempre em mente a intenção de melhoria de qualidade final dos sistemas ou produtos. Toda a equipe deve estar qualificada e engajada no propósito de produzir um produto de confiança e com a velocidade esperada pelos seus clientes. A forma com que isso será feito é onde a metodologia atua.

Criar mais ou menos documentos não é fator decisivo para a escolha de uma metodologia, mas poder opinar, discutir pontos e propor melhorias, sim. Nesse caso, a metodologia tradicional é muito mais engessada do que a ágil, já que a ágil abre espaço a discussões e opiniões de todos os envolvidos, enquanto que na tradicional pouco disso é aproveitado, pois a equipe de testes é tardiamente envolvida.

Mais do que uma mudança, a escolha quebra o paradigma de que só existe uma forma de sucesso para desenvolver e fabricar software. Vimos que tudo depende de vários fatores e, com toda certeza, pode-se ter sucesso tanto com o ágil quanto com o tradicional.

Com diferentes métodos podemos ganhar agilidade, tempo e melhoramos a nossa qualidade nas entregas, mas não garantimos obtenção de sucesso. Para aprimorar a decisão sobre a escolha de métodos, nada melhor do que ter em mente os seguintes pontos: quão receptivos a mudanças são os profissionais que fazem parte da equipe? Qual o acordo sobre entregas com o cliente? Qual nível de exigência do cliente em relação a qualidade? Qual o tamanho da equipe que irá trabalhar no projeto? Qual o nível de conhecimento dos profissionais que fazem parte do time? Qual o risco que se está disposto a assumir para o negócio? Baseado nessas questões e analisando as duas metodologias, conseguimos escolher qual é melhor ou pior para se obter sucesso dentro de um projeto.

Artigos relacionados