Pressupostos

by alisson.vale 21/6/2008 12:35:00

Pressupostos são hipóteses que precisamos admitir antecipamente para que possamos aceitar ou compreender as teorias que delas decorrem. Eles são o ponto de partida para justificar as abordagens adotadas. Para optar entre uma ou outra linha de pensamento é necessário antes de mais nada estabelecer concordância com eles.

Quando comparamos o modelo Ágil com o Waterfall eu acredito em quatro pressupostos básicos sobre a qual precisamos nos posicionar antes de partir para uma ou outra abordagem.

São eles:

  Waterfall Agile
Sobre a natureza das atividades de desenvolvimento de software
Produção taylorista
Criação colaborativa
Sobre o modelo de qualidade Seguir especificações Satisfazer usuários e clientes
Sobre a forma de organizar as pessoas Grupos de Trabalho Times de Projeto
Sobre o modelo de gestão Gestão de escopo fixo Gestão de escopo variável

Afinal, software deve ser produzido de modo fabril ou criado colaborativamente? Para ter qualidade ele deverá seguir rigidamente especificações pré-acordadas ou ser capaz de satisfazer os anseios e necessidades de usuários e clientes? Como devemos organizar as pessoas? Por meio de um grupo de trabalho com tarefas pré-definidas em um processo controlado? ou criando times de projeto com liberdade para definir e otimizar o seu próprio modelo de trabalho?

Talvez a pior escolha, nesse caso, seja não fazer uma escolha. O modelo teórico que vai embasar as suas práticas de trabalho será decorrente dessa escolha. Há uma conexão direta entre esses pressupostos, os princípios que lhe endereçam, e aquilo que precisamos praticar no dia-a-dia para implantá-los. Quando não há rigidez na escolha do conjunto adequado de pressupostos, o modelo teórico adotado se enfraquece, as práticas anulam-se umas às outras e os riscos de insucesso aumentam.

Cenários para Testes Automatizados com db4o

by alisson.vale 17/6/2008 21:43:00

Recentemente chegou às bancas a edição de número 09 da revista MundoDotNet. Essa edição conta com um artigo onde descrevo uma técnica interessante para administração de cenários de testes implementada com sucesso pelo meu colega Paulo Cesar Fernandes aqui na empresa. 

A técnica consiste em interceptar a execução de métodos de forma a armazenar objetos construídos durante a execução da aplicação em um banco de dados orientado a objetos. Assim, esses objetos podem ser carregados na memória no momento em que são necessários para o SetUp de testes unitários.

Na verdade, o artigo foi um pouco além de descrever a técnica. Grande parte do texto é dedicada a explicar as raízes e as várias formas em que técnicas de teste podem ser utilizadas para aumentar a qualidade do software no contexto de um projeto ágil.

Alguns tópicos e trechos do artigo

Uma nova visão para as atividades de teste de software:  A relação das atividades de teste com qualidade. Algumas das idéias de Deming que podem ser utilizadas em desenvolvimento de software. A relação de Deming com o estilo de administração japonês que levou ao Movimento Ágil e as técnicas que este movimento trouxe de forma a permitir a redução de inpeções no software.

Testes como oportunidades para aumentar a qualidade: Em projetos ágeis, testar significa criar oportunidades para que o produto absorva elementos de qualidade de forma permanente. "Um teste automatizado injeta qualidade dentro do software".

Quando testes automatizados podem aumentar a qualidade do processo:  Testes de aceitação automatizados criam as condições para melhoria do processo de desenvolvimento na medida em que estabelecem um instrumento de colaboração e de comunicação entre clientes e desenvolvedores. "o propósito de um teste de aceitação é aumentar a qualidade do processo de comunicação necessário para as atividades de análise e levantamento de requisitos, por meio de especificações executáveis".

Quando testes automatizados podem aumentar a qualidade do produto: Aqui a defesa é que o uso de TDD aumenta a qualidade interna do produto na medida em que cria as condições para a evolução sustentável do software. "o propósito do teste unitário é influenciar o design da aplicação, permitindo que ele evolua sem sofrer os danos causados pelo seu processo de degradação".

O artigo também oferece um rápido exemplo de como uma ferramenta como o Fitnesse pode criar especificações executáveis fáceis de ler e de produzir. Conforme imagem a seguir:

 




A abordagem Ágil oferece uma nova perspectiva para endereçar qualidade de software.
Acho que esse artigo dará ao leitor uma boa idéia do que isso quer dizer.

A Inspeção boa e a ruim

by alisson.vale 10/6/2008 22:37:00

Embora Quality has nothing to do with testing seja um ótimo post que vale a pena dar uma olhada, acho que o título ficaria melhor formulado como Quality has nothing to do with finding defects. Testes são instrumentos de feedback que obtemos do software quando comparamos seus resultados com nossas expectativas. Assim, quando o resultado de um teste é associado com a completude de uma expectativa, ele é sim um importante instrumento de qualidade.

O mérito do post está em desmistificar as atividades de teste como sendo as únicas necessárias para garantir a qualidade do software. Na verdade, o que ocorre é que as atividades de teste perdem dramaticamente o poder de agregar valor em termos de qualidade quando são utilizadas como instrumento de inspeção-para-a-localização-de-defeitos. Se uma feature sai do ambiente de desenvolvimento sem funcionamento adequado, será certamente mais apropriado parar e descobrir porquê isso ocorreu do que registrar os problemas em um bug tracking e depois continuar o trabalho de inspeção incansável até que nenhum problema seja mais encontrado.

Uma melhor opção é utilizar as atividades de testes como instrumentos para prevenção-de-defeitos. Ao criar, por exemplo, um teste automatizado, não há inspeção. Há a formalização de critérios de aceitação que passarão a conviver eternamente de forma agregada ao produto à partir daquele momento. Assim, somos capazes de introduzir qualidade no produto no mesmo passo em quê o desenvolvemos.

A qualidade dos incrementos de software liberados em um projeto Ágil depende muito do efeito conjunto resultante da aplicação de diferentes tipos de técnicas e práticas, cujo intuito central é evitar que defeitos sejam introduzidos no produto. A ação conjunta desses elementos tem o poder de eliminar (muitas vezes por completo) a necessidade de inspeções-para-a-localização-de-defeitos.

Testes orientados para inspecionar aquilo que, já no seu início, é produzido sem levar em conta os vários aspectos de qualidade relevantes para desenvolvimento de software, são nocivos na medida em que criam uma cultura em que quem desenvolve não precisa garantir a qualidade daquilo que faz, pois há uma implícita delegação para que isso seja verificado por uma outra pessoa.   

No entanto, inspeções não serão sempre ruins. Há as inspeções boas também. Elas ocorrem quando o foco é gerar feedback. Ao inspecionar uma nova funcionalidade, por exemplo,  o foco de quem inspeciona não precisa ser verificação e conferência. O objetivo da boa inspeção é dar feedback, é oferecer um novo ponto de vista de modo a encontrar pontos que poderiam estar melhor resolvidos. O mesmo ocorre quando inspecionamos código, seja passando o código para um colega inspecionar, ou seja fazendo inspeção contínua com pair programming. Em ambos os casos, a procura-por-problemas é elemento secundário, enquanto que feedback é o elemento central.

Em resumo, a inspeção ruim procura por defeitos, enquanto que a boa gera feedback.

Sobre o Autor

Alisson Vale Alisson Vale
Líder de Projeto da Phidelis Tecnologia.


E-mail me Send mail
      Sign in

Últimos posts

Últimos comentários

Termo de Responsabilidade

Este site apresenta apenas opiniões pessoais. Não necessariamente representa as opiniões ou práticas da Phidelis Tecnologia.

© 2008