UNIVERSIDADE FEDERAL DA BAHIA Um estudo sobre o impacto

Transcrição

UNIVERSIDADE FEDERAL DA BAHIA Um estudo sobre o impacto
UNIVERSIDADE FEDERAL DA BAHIA
INSTITUTO DE MATEMÁTICA
DEPARTAMENTO DE CIÊNCIA DA COMPUTAÇÃO
Daniela Soares Feitosa
Um estudo sobre o impacto do uso de
Desenvolvimento Orientado por Testes na melhoria
da qualidade de software
Salvador
2007
Daniela Soares Feitosa
Monografia apresentada ao Curso de
graduação em Ciência da Computação,
Departamento de Ciência da Computação,
Instituto de Matemática, Universidade Federal da Bahia, como requisito parcial para
obtenção do grau de Bacharel em Ciência da
Computação.
Orientador:
Antonio Soares de Azevedo Terceiro
Salvador
2007
RESUMO
O desenvolvimento de software orientado por testes (TDD - Test Driven Development) é
uma das técnicas utilizadas no modelo de programação XP - eXtreme Programming, cujo uso
tem aumentado bastante. Esta técnica tem como um de seus objetivos antecipar a identificação
de defeitos durante o desenvolvimento do software e, para isso, os testes são feitos antes da
implementação do código. Esse tipo de desenvolvimento ajuda os desenvolvedores a focar na
funcionalidade das aplicações e a disponibilidade de testes antes do desenvolvimento permite
um rápido feedback. Este trabalho é uma revisão sistemática que tem como objetivo analisar
se a utilização desta técnica diminui a quantidade de defeitos numa aplicação, melhorando sua
qualidade e confiança.
Palavras-chave: engenharia de software, desenvolvimento orientado por testes, revisão
sistemática.
ABSTRACT
Test Driven Development is one of the techniques used in the practices of XP - eXtreme
Programming, whose use has increased significantly. This technique has as one of its goals
to previously identify defects during software development and, therefore, the tests are written
prior to implementation of the code. This type of development help developers to focus on
the functionality of applications and the availability of tests before the development allows a
rapid feedback. This work is a systematic review that aims to examine whether the use of this
technique reduces the amount of defects in an application, improving its quality and reliability.
Keywords: software engineering, test-driven development, systematic review.
LISTA DE FIGURAS
2.1
Test Driven Development (BHAT; NAGAPPAN, 2006, p.357) . . . . . . . . .
3.1
Hierarquia dos estudos para Engenharia de Software (KITCHENHAM, 2004,
p.13) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
4.1
21
Gráfico dos resultados obtidos a partir do estudo na Microsoft - (BHAT; NAGAPPAN, 2006, p.361) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
4.2
14
25
Densidade dos defeitos encontrados no estudo na IBM - (VOUK, 17-20 Nov.
2003, p.7) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
26
LISTA DE ABREVIATURAS E SIGLAS
CASE
Computer-Aided Software Engineering,
p. 10
TDD
Test-Driven Development,
p. 13
XP
eXtreme Programming,
p. 14
SUMÁRIO
1
Introdução
8
2
Conceitos
10
2.1
Engenharia de Software . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
10
2.2
Testes de Software . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
11
2.2.1
Fases de teste . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
11
2.3
Testes automatizados de software . . . . . . . . . . . . . . . . . . . . . . . . .
12
2.4
Test-Driven Development (TDD) . . . . . . . . . . . . . . . . . . . . . . . . .
13
2.4.1
14
3
Extreme Programming (XP) . . . . . . . . . . . . . . . . . . . . . . .
Metodologia
18
3.1
Protocolo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
19
3.1.1
Descrição do problema . . . . . . . . . . . . . . . . . . . . . . . . . .
19
3.1.2
Objetivo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
19
3.1.3
Questões da pesquisa . . . . . . . . . . . . . . . . . . . . . . . . . . .
20
3.1.4
Palavras-chave . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
20
3.1.5
Método utilizado para pesquisa de fontes primárias . . . . . . . . . . .
20
3.1.6
Critério de seleção dos estudos . . . . . . . . . . . . . . . . . . . . . .
20
3.1.7
Critério de qualidade dos estudos . . . . . . . . . . . . . . . . . . . .
21
3.1.8
Método de avaliação dos estudos . . . . . . . . . . . . . . . . . . . . .
22
3.1.9
Método de extração dos dados . . . . . . . . . . . . . . . . . . . . . .
22
3.1.10 Método de síntese dos dados . . . . . . . . . . . . . . . . . . . . . . .
22
3.2
4
5
Execução da Revisão Sistemática . . . . . . . . . . . . . . . . . . . . . . . . .
22
Resultados
24
4.1
24
Discussão dos resultados . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Conclusão
28
5.1
Uso de revisão sistemática . . . . . . . . . . . . . . . . . . . . . . . . . . . .
28
5.2
TDD X Quantidade de defeitos . . . . . . . . . . . . . . . . . . . . . . . . . .
28
5.3
Contribuições do trabalho . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
29
Apêndice A -- Formulário de condução da revisão
30
Apêndice B -- Formulário de seleção de estudos
32
Apêndice C -- Formulário de extração de dados
47
Referências Bibliográficas
50
8
1
INTRODUÇÃO
O processo de desenvolvimento de um software é uma atividade complexa que envolve
diferentes questões. Entre elas, destaca-se uma das mais difíceis de ser respondida, que é sobre como garantir a qualidade do software. Testes sistemáticos e tecnicamente completos são
utilizados para garantir essa qualidade. Alguns dos fatores que afetam a qualidade de software podem ser medidos diretamente, como defeitos por quantidade de linhas de código e por
unidade de tempo, enquanto outros podem ser medidos apenas indiretamente, como usabilidade
e manutenibilidade. Estes fatores devem ser calculados e as medidas encontradas indicarão a
qualidade do software (PRESSMAN, 2005).
Segundo Ian Sommerville (SOMMERVILLE, 2003), a Engenharia de Software enfrenta
três desafios principais neste século:
• Sistemas legados: A maioria dos grandes softwares utilizados atualmente foi desenvolvido há muitos anos. O desafio é manter e atualizar estes sistemas legados de uma
forma economicamente viável e garantindo a entrega dos serviços prestados por estes
sistemas;
• Heterogeneidade: O software desenvolvido deve ser confiável e flexível o bastante para
ser bem-sucedido em diferentes combinações de hardware e software;
• Entrega: O aumento da complexidade do software e diminuição dos prazos de entrega
comprometem a qualidade do software;
A importância da qualidade do software se mostra ainda mais evidente ao tentar solucionar
este último ponto. Se a complexidade do software aumenta e o prazo de entrega diminui, devese encontrar uma forma de garantir a qualidade do software apesar dos desafios. Test Driven
Development (TDD) surgiu como uma possível solução para este problema.
TDD já é usada informalmente por bons programadores a muito tempo, mas as primeiras
tentativas de definí-la como uma prática de desenvolvimento começaram no final de 2002, com
9
as publicações de Kent Beck (BECK, 2003) e David Astels (ASTELS, 2003). Esta técnica
consiste em implementar testes para cada nova funcionalidade do software antes mesmo de
implementá-la. Os testes deverão ser executados regularmente para verificar se o código foi
bem implementado. Essa forma de desenvolver ajuda os desenvolvedores a focar na funcionalidade das aplicações e, caso os testes passem, o desenvolvedor saberá que o código foi bem
implementado, garantindo a qualidade da aplicação.
TDD ajuda os desenvolvedores a focar na funcionalidade das aplicações e a disponibilidade
de testes antes do desenvolvimento permite um rápido feedback. Entretanto, não é garantido
que a quantidade de defeitos diminuirá.
Neste trabalho, foi conduzida uma revisão sistemática com o objetivo de analisar se a utilização de TDD diminui a quantidade de defeitos no software, comparando com outras técnicas
de desenvolvimento. Para isso, alguns estudos que obtiveram resultados experimentais foram
identificados, analisados e avaliados como proposto em (KITCHENHAM, 2004).
Em função do número reduzido de estudos específicos sobre o impacto de TDD na quantidade de defeitos no software, não é possível estatisticamente afirmar que há uma diminuição na
quantidade de defeitos, apesar dessa ser uma tendência apontada por esses mesmos estudos.
Este trabalho encontra-se dividido em 6 capítulos. O capítulo 2 fará uma introdução sobre
os principais conceitos envolvendo TDD. O capítulo 3 descreve a metodologia utilizada, apresentando detalhadamente o protocolo e a condução da revisão. O capítulo 4 apresenta os resultados obtidos da revisão. O capítulo 5 apresenta as conclusões. E, finalmente, os formulários
utilizados na condução da revisão são apresentados nos apêndices A, B e C.
10
2
CONCEITOS
Neste capítulo serão apresentados os resumos dos conceitos necessários para o entendimento deste trabalho: Engenharia de Software, Testes de software e Test Driven Development.
2.1
ENGENHARIA DE SOFTWARE
Uma primeira definição de engenharia de software foi proposta por Fritz Baur na primeira
conferência dedicada ao assunto (NAUR; RANDELL, 1969 apud PRESSMAN, 2005): “Engenharia de software é a criação e a utilização de sólidos princípios de engenharia a fim de obter
software de maneira econômica, que seja confiável e que trabalhe eficientemente em máquinas
reais”. A criação da engenharia de software surgiu numa tentativa de contornar a crise do software e dar um tratamento mais sistemático e controlado ao desenvolvimento de sistemas de
software complexos.
A engenharia de software é a área da computação que se preocupa com todos os aspectos da
produção de software e procura garantir a qualidade do software desenvolvido. Segundo Pressman (PRESSMAN, 2005), ela é composta por um conjunto de três elementos fundamentais:
métodos, ferramentas e processos, que possibilita o controle do processo de desenvolvimento
do software.
Os métodos provêm os detalhes de como fazer a implementação do software e incluem
os modelos, a especificação do software, guia do processo e um conjunto de critérios para
qualidade do software.
As ferramentas tem como objetivo proporcionar apoio automatizado ou semi-automatizado
para as atividades do processos. é um sistema de suporte ao desenvolvimento de software que
abrange toda ferramenta baseada em computadores que auxiliam atividades de engenharia de
software, desde análise de requisitos e modelagem até programação e testes.
Os processos constituem a interação dos métodos, ferramentas e pessoas. Eles definem a
sequência de práticas que será utilizada para o desenvolvimento, garantia de qualidade e entrega
11
dos produtos (documentos, relatórios, formulários etc). Estas práticas englobam as atividades
de especificação, desenvolvimento, validação e evolução.
2.2
TESTES DE SOFTWARE
Teste de software é o processo de executar um software de uma maneira controlada com o
objetivo de avaliar se o mesmo se comporta conforme o especificado. Envolve ações que vão
do levantamento de requisitos até a execução do teste propriamente dito. Segundo Sommerville
(SOMMERVILLE, 2003), teste de software é uma técnica de verificação e validação.
Verificação e validação são processos de checagem e análise de software. O objetivo da
verificação é mostrar se um programa está de acordo com a especificação e a validação mostra
se um programa faz o que o cliente/usuário deseja.
Um erro de software é um erro de implementação no código e um defeito de software é a
manifestação de um ou mais erros, fazendo com que o software não execute da forma esperada.
Testes de software revelam a presença de defeitos.
O teste é considerado bom se revela um ou mais defeitos. Teste de software não pode
provar a ausência de defeitos, pode apenas mostrar a presença de defeitos, por isso seu objetivo
é executar um programa com a intenção de revelar a presença de defeitos, e não a sua ausência.
Após a realização de um teste, o resultado deve ser avaliado e comparado ao resultado esperado.
Caso os resultados sejam diferentes, chega-se à conclusão que há defeitos e que deve ser feita a
depuração.
Todos os softwares possuem defeitos, então, para promover um ambiente mais estável para
o usuário final, é importante que a maioria desses defeitos não sejam críticos. Os testes de
software tentam garantir que a qualidade, o custo, a segurança e a confiabilidade do software
não sejam prejudicados pela presença desses defeitos.
2.2.1
FASES DE TESTE
Ian Sommerville (SOMMERVILLE, 2003) declara que os testes devem ser feitos em duas
fases. Na primeira fase, são feitos os testes de componentes e na segunda fase, os testes de
integração.
Durante a fase de testes de componentes duas técnicas de testes são muito utilizadas:
• Teste da caixa-preta: Dados de entrada são fornecidos, o teste é executado e o resultado
12
obtido é comparado a um resultado esperado previamente conhecido. É chamado de
caixa-preta porque o comportamento interno do componente não é considerado, apenas
as entradas e saídas fornecidas pelo componente são conhecidas.
• Teste da caixa-branca: Também é chamado de teste estrutural, pois avalia a estrutura e
implementação do software.
Depois de testar todos os componentes do software individualmente e verificar que funcionam, eles devem ser integrados para criar o software completo. Para garantir que o software
resultante da interação dos componentes não apresenta problemas são feitos os testes de integração. Estes testes são aplicados na construção da estrutura do programa, realizando testes
para descobrir defeitos associados às interfaces entre os componentes, verificando se todos os
componentes funcionarão corretamente quando estiverem integrados.
A integração dos componentes podem ser feitas na forma não-incremental ou incremental.
Na integração não-incremental, todos os módulos do software são combinados ao mesmo
tempo e o software resultante é testado. Neste caso, muitos defeitos podem ser encontrados e a
correção pode se tornar complicada, pois será mais difícil encontrar a origem do defeito.
Na integração incremental, o software é construído e testado em pequenos segmentos, permitindo que os erros sejam mais fáceis de ser isolados e corrigidos e as interfaces têm maior
probabilidade de serem testadas completamente.
2.3
TESTES AUTOMATIZADOS DE SOFTWARE
Para facilitar a execução dos testes, foram criadas ferramentas que ajudam na criação de
código para a automação de testes, como o JUnit. Com essas ferramentas, o desenvolvedor
escreve um teste pensando na interface do código, ao invés de se preocupar em como será implementado, verificando se os métodos e classes funcionam da forma esperada. Utilizando estas ferramentas, executar testes passou a ser tão fácil quanto compilar um software (FOWLER,
2001). Por ser fácil de executar automaticamente, os desenvolvedores podem executar os testes
automáticos várias vezes por dia, permitindo que os defeitos sejam encontrados mais rapidamente. Por exemplo, se após a execução de todos os testes, um bug for inserido no software, o
desenvolvedor saberá que o defeito foi causado pelas linhas de código inseridas entre a última
execução dos testes e a revelação do bug.
13
2.4
TEST-DRIVEN DEVELOPMENT (TDD)
Desenvolvimento Orientado por Testes (TDD) é uma técnica que consiste de pequenas iterações onde novos casos de testes são escritos contemplando uma nova funcionalidade ou
melhoria e, depois, o código necessário e suficiente para passar esses teste é implementado.
Então, o software é refatorado para contemplar as mudanças de forma que os testes continuem
passando.
Segundo Kent Beck (BECK, 2003), os seguinte passos são necessários para a utilização
dessa técnica:
• Adicionar um novo teste;
• Executar todos os testes;
• Implementar o código necessário para passar no teste;
• Executar todos os testes;
• Refatorar o código.
Como todas as funcionalidades e melhorias do código começam com um teste, o desenvolvedor precisa conhecer os casos de uso e estórias que contemplem todos os requisitos e
exceções do sistema. Essa técnica obriga o desenvolvedor a focar no requisito para escrever
bons testes.
Cada teste adicionado deve cobrir uma funcionalidade ou melhoria que ainda não foi implementada, então esse teste deverá falhar na sua primeira execução. Isso garante que o teste
não passará sem a necessidade de alterar o código.
Com a falha no teste, o desenvolvedor deve implementar o código necessário e suficiente
para passar no novo teste, sem se preocupar com a elegância do código.
Após implementado a nova funcionalidade/melhoria, os testes devem ser executados novamente e, se todos os testes passarem, o desenvolvedor tem a garantia que o código cumpre todos
os requisitos testados. Se algum não passar, o código referente ao teste que falhou deverá ser
corrigido.
Antes de adicionar um novo teste no software, o desevolvedor deve refatorar o código, para
evitar duplicação.
Bhat e Nagappan (BHAT; NAGAPPAN, 2006), resumiram os passos na Figura 2.1.
14
Figura 2.1: Test Driven Development (BHAT; NAGAPPAN, 2006, p.357)
2.4.1
EXTREME PROGRAMMING (XP)
Extreme Programming (ou XP) é uma metodologia de programação ágil composta por um
conjunto de valores, princípios e práticas que visa desenvolver softwares de alta qualidade de
forma ágil, econômica e flexível (JEFFRIES, 2007).
Os cinco valores que guiam o desenvolvimento XP são:
• Comunicação: A comunicação entre os desenvolvedores e clientes é importante para
que os desenvolvedores entendam as necessidades do cliente e estes acompanhem o desenvolvimento do projeto de perto. Também é essencial que haja comunicação entre os
desenvolvedores, para garantir que todos entendam o software da mesma forma. A comunicação verbal e presencial é priorizada para garantir que todas as partes envolvidas
tenham a chance de se compreender da melhor maneira possível.
• Simplicidade: A equipe de desenvolvedores deve se concentrar em codificar primeiro
tudo que é claramente importante para o software, evitando desenvolver o que ainda não é
essencial. Este valor está relacionado com a comunicação, pois a simplicidade do código
permite que ele seja entendido mais facilmenet por todos os desenvolvedores do projeto.
• Feedback: No desenvolvimento de software quanto mais cedo um defeito é encontrado,
mais barata é sua correção. A metodologia XP propões ciclos de desenvolvimento curtos
15
(1 a 4 semanas). Em cada ciclo ocorrem todas as fases de desenvolvimento (planejamento,
análise de requisitos, codificação, teste e documentação), que são entregues ao cliente.
Este, então, analisa se tudo o que pediu está contido na versão entregue e informa aos
desenvolvedores suas sugestões, críticas e dúvidas.
• Coragem: Os desenvolvedores que utilizam XP têm consciência que os clientes podem
querer mudanças no software. Então, têm coragem de permitir que essas mudanças sejam
feitas, pois confiam nas proteções que o software possui quando é desenvolvido utilizando
as práticas do XP, como desenvolvimento orientado por testes, programação em par e
integração contínua.
Os princípios (BEEDLE et al., 2001) seguidos pelos desenvolvedores são:
• A maior prioridade é a satisfação do cliente através da entrega rápida e contínua de software útil
• As mudanças de requisito serão bem recebidas em qualquer momento, mesmo que o
desenvolvimento já esteja adiantado.
• A entrega do software deverá ser frequente, em poucas semanas ou meses, dando preferência à menor escala.
• As pessoas que entendem de negócios e os desenvolvedores devem trabalhar juntos diariamente durante o projeto.
• Desenvolva projetos com pessoas motivadas. Dêem todo o ambiente e suporte que as
pessoas precisarem e confie que elas produzirão.
• o método mais eficiente e eficaz de transmitir informações em uma equipe de desenvolvimento é a conversa frente-a-frente.
• Um software que funciona é a primeira medida de progresso.
• Processos ágeis promovem desenvolvimento sustentável. Os clientes, desenvolvedores e
usuários devem ser capazes de manter um ritmo constante indefinidamente.
• Atenção contínua à excelência técnica e um bom projeto aumentam a agilidade.
• Simplicidade – a arte de maximizar a quantidade de trabalho a não ser feito – é essencial.
• As melhores arquiteturas, requisitos e projetos emergem de grupos auto-organizáveis.
16
• Em intervalos regulares, o grupo deve refletir sobre como se tornar mais eficaz, então
devem ajustar seu comportamento de acordo com isso.
A metodologia XP é baseada nas 12 melhores práticas de engenharia de software para
aumentar a produtividade e qualidade, com ênfase em testes via TDD. Essas práticas foram
descritas por Kent Beck (BECK, 2000) e estão listadas abaixo:
• O processo de planejamento: Esta prática permite que o cliente defina as funcionalidades que serão prioritárias no desenvolvimento, a partir dos custos estimados fornecidos
pelos desenvolvedores.
• Pequenas versões: Consiste em colocar um sistema simples em produção rapidamente e
atualizá-lo frequentemente, um ciclos curtos.
• Metáfora: Compartilhar um “sistema de nomes” e uma descrição do sistema para guiar
o desenvolvimento e a comunicação.
• Design simples: O programa desenvolvido deve ser o programa mais simples possível
que contemple os requisitos do momento. Nada que ainda não tenha sido descrito como
uma funcionalidade deve ser implementado.
• Testes: A validação do software deve ser feita em todos os momentos. Os programadores
devem escrever os testes primeiro e, depois, o código que contemple os requisitos refletidos nos testes (TDD).
• Refatoração: Esta prática é utilizada para reestruturar o sistema sem mudar seu comportamento. É utilizado para eliminar duplicações, melhorar a comunicação, simplicidade
ou adicionar mais flexibilidade.
• Programação em pares: Todo o código é produzido em pares: dois desenvolvedores
trabalhando juntos em uma máquina. Dessa forma, os desenvolvedores se ajudam. Enquanto um escreve o código, o outro pode analisar a necessidade de revisão do código
e/ou refatoração.
• Propriedade coletiva: Todo o código produzido pertence à todos os desenvolvedores.
Isto permite que um grupo produza mais rápido. Se algo precisa ser mudado, ele será
mudado sem demora, pois qualquer desenvolvedor poderá modificar qualquer parte do
código.
• Integração contínua: Os grupos de desenvolvedores integram e produzem software
várias vezes por dia, permitindo que o progresso do desenvolvimento seja mais rápido.
17
• 40 horas por semana: Desenvolvedores cansados cometem mais erros. Então, nenhum
desenvolvedor deve trabalhar mais de 40h por semana.
• Cliente sempre presente: Um cliente/usuário deve estar sempre presente no desenvolvimento, determinando requisitos, estabelecendo prioridade e respondendo às questões que
os desenvolvedores fizerem.
• Padrões de codificação: Para um grupo trabalhar efetivamente em pares e compartilhar
a propriedade do código, todos os desenvolvedores devem produzir código da mesma
forma, com regras que garantem que auxiliem a comunicação através do código.
Como o objetivo do XP é desenvolver em pequenos ciclos, TDD se torna essencial para
ter a garantia que o código que foi produzido atende às necessidades do cliente. E, se o cliente
sugerir alterações, os desenvolvedores se sentirão seguros em fazer as mudanças, já que os testes
já produzidos possibilitarão indicar eventuais defeitos introduzidos pela alteração.
18
3
METODOLOGIA
A metodologia utilizada neste trabalho é a Revisão Sistemática. A maior parte das pesquisas
começa com uma revisão de literatura, no entanto, segundo Kitchenham (KITCHENHAM,
2004), para ter valor científico é necessário que essa revisão seja feita de forma abrangente, não
tendenciosa, aberta e objetiva. Esse é a principal razão de uma revisão sistemática, que deve
identificar, avaliar e interpretar todas as pesquisas disponíveis e relevantes sobre uma questão
e, para isso, precisa ser executada seguindo um protocolo pré-definido e rigoroso. Obrigatoriamente, nesse protocolo deve conter todas as informações que permitam que a revisão seja
repetida por outros pesquisadores interessados. A revisão sistemática deve reunir informações
sobre uma determinada questão ou fenômeno, identificar lacunas na pesquisa atual e indicar um
direcionamento para pesquisas futuras.
Uma revisão sistemática envolve três fases: planejamento, execução e análise dos resultados.
Na fase de planejamento, o protocolo que deverá orientar toda a revisão sistemática é construído. Nele deve conter as informações sobre o objetivo, a descrição do problema, as questões
da pesquisa e os métodos e critérios utilizados para a busca, seleção, avaliação e extração de
dados.
Na fase de execução, os métodos descritos no protocolo são aplicados e documentados nos
formulários de condução da revisão e de seleção dos estudos. O objetivo do formulário de
condução da revisão é documentar o processo de busca. Possui campos para a armazenagem
de informações sobre a fonte onde a busca foi realizada, o endereço virtual da fonte, a data de
realização da busca, as combinações de palavras-chave que proporcionaram a busca dos artigos,
a quantidade de artigos encontrados e a quantidade de arquivos pré-selecionados. O formulário
de seleção de estudos documenta a busca e possui campos informando o nome do artigo, a lista
de autores, data de sua publicação, veículo de publicação do artigo, fonte de onde foi obtido,
situação do artigo (pendente, incluído e excluído) e informações sobre se os critérios foram
atendidos.
19
Na fase de análise dos resultados os dados dos estudos são extraídos e sintetizados e os
resultados são analisados. A extração é documentada no formulário de extração de dados, que
possui campos informando o título, abstract, objetivo do estudo, descrição do estudo experimental, resultados do estudo, além de comentários adicionais do pesquisador que extraiu os
dados.
Na seção seguinte será apresentado o protocolo utilizado para esta revisão sistemática.
3.1
PROTOCOLO
O protocolo da revisão especifica os métodos que serão utilizados para a revisão sistemática.
Segundo Kitchenham, um protocolo pré-definido é necessário para reduzir a possibilidade de
uma pesquisa tendenciosa, já que sem um protocolo, um pesquisador poderia selecionar estudos
de acordo com suas expectativas.
3.1.1
DESCRIÇÃO DO PROBLEMA
Na maioria dos projetos de desenvolvimento de software, quanto mais se distancia das
fases iniciais do desenvolvimento mais custosa fica sua correção. Então, a utilização da técnica
de desenvolvimento orientado por testes passa a ser uma boa opção, pois esta tem como um de
seus objetivos antecipar a identificação de defeitos durante o desenvolvimento do software. Esta
técnica faz parte do modelo de programação XP, cuja utilização tem aumentado bastante nos
últimos anos. Para permitir que os defeitos sejam identificados previamente, os testes são feitos
antes da implementação do código. Esse tipo de desenvolvimento ajuda os desenvolvedores a
focar na funcionalidade das aplicações e a disponibilidade de testes antes do desenvolvimento
permite um rápido feedback. Entretanto, não é garantido que a quantidade de defeitos diminuirá.
3.1.2
OBJETIVO
O foco desta revisão sistemática é analisar se a utilização da técnica de desenvolvimento
de software orientado por testes diminui a quantidade de defeitos numa aplicação. Caso seja
verificado que a quantidade de defeitos é menor, esta revisão também verificará o impacto da
utilização da técnica TDD na quantidade de defeitos do software.
20
3.1.3
QUESTÕES DA PESQUISA
Essas questões deverão ser respondidas ao final da revisão sistemática.
• Questão Primária: O uso da metodologia TDD no desenvolvimento de software diminui
a quantidade de defeitos no software?
População: Projetos de desenvolvimento
Intervenção: Test Driven Development
Resultado: Diminuição da quantidade de defeitos
• Questão Secundária: Qual o impacto da utilização de TDD na quantidade de defeitos em
um software?
3.1.4
PALAVRAS-CHAVE
Essas palavras serão utilizadas para fazer as buscas de estudos.
• População
software development, software process, software project
• Intervenção:
development test, test, tests, software test, tdd, test driven development
• Resultado:
errors, error, error detection, error identification, failure, defect
3.1.5
MÉTODO UTILIZADO PARA PESQUISA DE FONTES PRIMÁRIAS
As fontes serão pesquisada pela web nas bases eletrônicas de dados IEEE Xplore e ACM
Digital Library. As strings de busca utilizadas serão formada pela interseção das palavras que
formam a população, a intervenção e o resultado listados na subseção 3.1.4. A busca será
documentada e apresentada no apêndice A.
3.1.6
CRITÉRIO DE SELEÇÃO DOS ESTUDOS
Serão incluídos na revisão todos os artigos encontrados com a utilização do método descrito
na subseção 3.1.5 que satisfaçam todos os seguintes critérios:
21
• Os artigos devem ter sido publicados entre 1990 e 2007
• Os artigos devem estar escritos em inglês. A escolha do inglês como idioma padrão devese à sua universalidade.
• Os artigos devem estar disponíveis na web
• Os artigos devem contemplar a execução de estudos experimentais.
• Os artigos devem abordar o uso da metodologia TDD no desenvolvimento de softwares e
a quantidade de defeitos ao final do desenvolvimento.
A seleção dos estudos será documentada e apresentada no apêndice B.
3.1.7
CRITÉRIO DE QUALIDADE DOS ESTUDOS
Os artigos que atenderem aos critérios descritos na subseção 3.1.6 serão avaliados baseado
nos critérios para avaliação de estudos experimentais em engenharia de software definidos por
Barbara Kitchenham e ilustrados na figura 3.1 (KITCHENHAM, 2004). Apenas os estudos
com nível 5 serão excluídos da revisão sistemática.
Figura 3.1: Hierarquia dos estudos para Engenharia de Software (KITCHENHAM, 2004, p.13)
22
3.1.8
MÉTODO DE AVALIAÇÃO DOS ESTUDOS
Cada artigo que atender aos critérios listados na subseção 3.1.6 será lido e os estudos
selecionados serão avaliados de acordo com os critérios de qualidade estabelecidos na subseção 3.1.7.Os artigos que se enquadrarem nesses critérios serão utilizados para a finalidade
deste estudo.
3.1.9
MÉTODO DE EXTRAÇÃO DOS DADOS
Para cada artigo que atender aos critérios listados na subseção 3.1.7 será preenchido uma
cópia do formulário de extração de dados que será apresentado no apêndice C.
3.1.10
MÉTODO DE SÍNTESE DOS DADOS
Os dados dos estudos selecionados serão comparados, com a finalidade de realçar as similaridades e diferenças entre os estudos de acordo com as questões da pesquisa (ver apêndice C)
. Foi considerada a idéia de realizar meta-análise sobre os dados quantitativos dos estudos, mas
como a quantidade de artigos encontrados foi muito baixa, a idéia foi desconsiderada.
3.2
EXECUÇÃO DA REVISÃO SISTEMÁTICA
O processo de busca foi executado utilizando as combinações de palavras-chave seguindo
o método de pesquisa de fontes primárias do protocolo (subseção 3.1.5) e restringindo a busca
aos anos entre 1990 e 2007. Foram listados 489 artigos somando o material encontrados nas
duas bases eletrônicas de dados. Devido ao grande número de artigos encontrados, primeiro foi
feita uma pré-seleção a partir da leitura do resumo dos estudos. Os artigos que claramente eram
irrelevantes para a revisão foram descartados. Foram pré-selecionados 43 estudos, todos eles
abordavam estudos experimentais, testes, metodologias ágeis ou XP. Os formulários de busca
podem ser vistos no apêndice A.
Todos os artigos pré-selecionados estavam descritos em inglês e estavam disponíveis na
WEB, atendendo três dos critérios citados na subseção 3.1.6 (recentes, em inglês e disponíveis
na WEB). Os artigos pré selecionados, então, foram lidos e verificados através dos critérios
ainda não atendidos de inclusão e exclusão estabelecidos. A seleção foi documentada no formulário de seleção de estudos, juntamente com os critérios e se estes foram atendidos ou não
(apêndice B). Dos 43 artigos pré-selecionados, 2 estavam de acordo com os critérios previstos
23
no protocolo de revisão e tiveram seus dados extraídos e analisados (apêndice C).
Relatório sobre os artigos encontrados (ver critérios na subseção 3.1.6):
• Estudos que não contemplavam estudos experimentais: 19
• Estudos que contemplavam estudos experimentais, mas não utilizavam a metodologia
TDD: 19
2 abordavam testes contínuos;
3 abordam programação em par e inspeção de software;
1 adaptou a metodologia TDD para suas necessidades;
1 avaliava técnicas de redução de defeitos;
1 abordava a técnica de desenvolvimento orientado a modelos;
1 focava na utilização de práticas XP para ensinar programação orientada a objetos.
1 relacionava a qualidade de um software com a qualidade dos seu requisitos;
9 não tinham nenhum relação com o tema do trabalho;
• Estudos experimentais que abordavam TDD: 5
2 foram incluídos na pesquisa;
1 foi excluído por relatar a mesma pesquisa que um arquivo já incluído;
2 foram excluídos porque analisavam a melhora na performance dos desenvolvedores
e o aumento da quantidade de testes, não os defeitos do software
24
4
RESULTADOS
Apenas dois artigos contemplaram todos os critérios de inclusão e tiveram seus dados sintetizados.
Os dois artigos, “Evaluating the Efficacy of Test-Driven Development: Industrial Case
Studies” e “Test-Driven Development as a Defect-Reduction Practice” têm em comum a intervenção utilizada (TDD), a população avaliada (projetos de software) e o resultado (diminuição
na quantidade de defeitos). O primeiro artigo recebeu uma avaliação 3-1 e o segundo, 3-2 (ver
figura 3.1). Os contextos dos dois estudos foram diferentes. O primeiro envolvia grupos de desenvolvedores de 2 divisões da Microsoft desenvolvendo projetos similares no mesmo período e
com diferentes técnicas, enquanto que no segundo um grupo de desenvolvedores da IBM desenvolveu utilizando TDD e o software resultante foi comparado com uma outra versão já existente
desenvolvida com outra técnica. Em relação ao impacto na quantidade de defeitos, no primeiro
artigo a quantidade de defeitos utilizando TDD em uma das divisões foi 2,6 vezes menor e na
outra divisão, 4,2 vezes menor. No segundo artigo, houve uma redução de 40% na quantidade
de defeitos, comparando as duas versões.
4.1
DISCUSSÃO DOS RESULTADOS
O estudo “Evaluating the Efficacy of Test-Driven Development: Industrial Case Studies”
(BHAT; NAGAPPAN, 2006) foi realizado em duas diferentes divisões da Microsoft: Windows
e MSN. Em cada divisão, dois projetos foram selecionados e desenvolvidos por gerentes com
níveis semelhantes de responsabilidades que reportavam para um mesmo gerente com nível
superior de responsabilidade. Em cada divisão, um dos projetos foi desenvolvido utilizando
TDD e o outro não. Os projetos foram analisados após sua finalização e os desenvolvedores
não sabiam que o trabalho deles seria avaliado. Isso foi feito para minimizar a influência na
performance do desenvolvedor.
Como resultado, foi verificado que na divisão Windows, a quantidade de defeitos encontra-
25
dos no código da equipe que não utilizou TDD foi 2.6 vezes superior à outra equipe. Na divisão
MSN, o código da equipe que não utilizou TDD apresentou quantidade de defeitos 4.2 vezes
superior à equipe que utilizou a metodologia.
Para fazer avaliar os softwares produzidos, o estudo definiu defeito como sendo a ocorrência
de uma anomalia externa visível. As falhas foram normalizadas por milhares de linha de código
(KLOC).
Os projetos foram realizados com programadores profissionais em diferentes plataformas e
ambientes. A figura 4.1 mostra que nas duas divisões onde ocorreram o estudo, a qualidade do
código nos dois sistemas desenvolvidos com TDD foi pelo menos duas vezes superior à qualidade do sistemas desenvolvidos com outra técnica. Também ilustra o acréscimo no tempo de
desenvolvimento do software. Isto sugere que ao utilizar o TDD, o desenvolvedor perceberá um
aumento de qualidade do código e um acréscimo no tempo de desenvolvimento, provavelmente
aumentando os custos do software.
Figura 4.1: Gráfico dos resultados obtidos a partir do estudo na Microsoft - (BHAT; NAGAPPAN, 2006, p.361)
O estudo “Test-Driven Development as a Defect-Reduction Practice” (VOUK, 17-20 Nov.
2003) relata que um grupo de desenvolvedores da IBM desenvolve drivers de dispositivos há
mais de uma década e um dos produtos produzidos por esse grupo, que já teve sete lançamentos
desde 1998 foi usado como base para o estudo. Em 2002, uma parte do grupo desenvolveu
drivers de dispositivos em uma nova plataforma utilizando TDD. O estudo compara o sétimo
lançamento desse driver na antiga plataforma com o primeiro lançamento na nova plataforma.
Como resultado, foi verificado que o driver desenvolvido com a metodologia TDD apresentou uma redução de 40% na taxa de defeito comparado ao driver de dispositivo desenvolvido
com outra metodologia.
26
Para verificar os defeitos, foi executado um teste de Verificação Funcional (FVT) por um
grupo de testes depois da produção do código. Os testes de verificação funcional analisa os
componentes do software e os testam para observar se elas operam como uma unidade e se
executam todas as funções que deveriam. Os defeitos também foram normalizadas por milhares
de linha de código (KLOC).
Alguns detalhes devem ser considerados na avaliação dos resultados deste estudo.
• Os dispositivos no produto antigo deveria funcionar em duas plataformas (Windows e
Linux), mas o driver novo precisa funcionar apenas no Linux.
• Como o driver antigo funcionava em mais plataformas de hardware que o novo, os casos
de teste foram executados em cada plataforma.
• O driver antigo suporta mais dispositivos.
A figura 4.2 ilustra a densidade das falhas observadas no estudo. Ela mostra que a densidade
das falhas encontradas no novo driver é significativamente menor que o driver antigo (legado).
Figura 4.2: Densidade dos defeitos encontrados no estudo na IBM - (VOUK, 17-20 Nov. 2003,
p.7)
Como a quantidade de estudos encontrados foram poucos, não é possível afirmar que a
utilização da técnica de desenvolvimento TDD diminui a quantidade de defeitos na aplicação
mas sugerem que a utilização dessa técnica resultará num software com maior qualidade.
Analisando os artigos que foram descartados (apêndice B) e a pequena quantidade de artigos selecionados, essa revisão sistemática indica que há pesquisas sobre XP, métodos ágeis e
TDD, mas há uma carência de estudos experimentais que indiquem o impacto no uso de TDD
na quantidade de defeitos encontrados em aplicações. Algumas pesquisas focam na quantidade
27
de testes e na produtividade do desenvolvedor e não na quantidade de defeitos, objetivo desta
revisão sistemática.
28
5
CONCLUSÃO
5.1
USO DE REVISÃO SISTEMÁTICA
Esta revisão sistemática foi conduzida a partir de um protocolo que especificou os métodos
que foram utilizadas para a condução do trabalho. A definição do protocolo foi essencial para
permitir a condução da pesquisa. Como todos os detalhes da condução da pesquisa foi definido
no início da revisão, isso impediu que o foco fosse desviado da revisão sistemática, já que
apenas foram lidos e estudados os artigos relevantes à pesquisa.
Os critérios definidos no protocolo e utilizados para a seleção dos estudos foram necessários
e suficientes para obter apenas os estudos que podiam responder às questões da pesquisa. A
utilização de formulários foi importante para documentar a revisão e permitir que os dados dos
estudos fossem sintetizados e analisados mais facilmente. Houve dificuldade para adaptar as
strings de busca, já que as bases eletrônicas de dados não permitem que as buscas sejam feitas
da mesma forma.
5.2
TDD X QUANTIDADE DE DEFEITOS
Como foi encontrado um número reduzido de estudos, esta revisão sistemática não teve
dados suficientes para analisar o impacto da utilização da técnica TDD na quantidade de defeitos
no software final. Os poucos estudos encontrados obtiveram os mesmos resultados, revelando
que há uma tendência à diminuição da quantidade de defeitos com a utilização de TDD no
desenvolvimento.
Em um dos estudos analisados foi verificado que o tempo de desenvolvimento utilizando
a técnica TDD foi maior que quando não utilizada. E em alguns estudos que não foram selecionados para essa revisão foi verificado que houve um aumento na produtividade dos desenvolvedores e na quantidade de testes executados.
29
5.3
CONTRIBUIÇÕES DO TRABALHO
A revisão sistemática provê os meios para executar revisões de literatura abrangentes e não
tendenciosas, mas ainda é muito pouco difundido na área da computação. Este trabalho mostra
que podem ser feitas revisões sistemáticas na área de engenharia de software, reunindo de forma
sistemática e passível de reprodução evidências existentes sobre um fenômeno e identificando
lacunas nas pesquisas atuais.
A quantidade de artigos selecionados nesta revisão sistemática mostra que, apesar de TDD
ser uma técnica utilizada por muitos desenvolvedores, é necessário que haja mais pesquisas
sobre o impacto da utilização desta técnica em projetos de desenvolvimento.
30
APÊNDICE A -- FORMULÁRIO DE
CONDUÇÃO DA REVISÃO
Fonte da busca
Portal ACM
Endereço virtual
http://portal.acm.org/
Data da busca
22/10/2007
String de busca
("software development", "software process", "software
project") +("development test", "test", "tests", "software
test", "tdd", "test driven development", "test-driven development", "test driven-development’, "tfd", "test first development", "test first design") +("errors", "error", "error detection", "error identification", failure", "defect")
Período dos artigos
1990 a 2007
Quantidade encontrada
15636 artigos. Destes, os 200 mais relevantes (critério do
portal) foram listados.
Quantidade
de
arquivos
12
pré-selecionados
Fonte da busca
IEEE Xplore
Endereço virtual
http://ieeexplore.ieee.org/
Data da busca
22/10/2007
String de busca
(software development<or>software process<or>software
project) <and> (development test <or> test <or> tests
<or> software test <or> tdd <or> test driven development
<or> test-driven development <or> test driven-development
<or>tfd <or> test first development <or> test first design)
<and> (errors <or> error <or> error detection <or> error
identification <or> failure <or> defect)
Período dos artigos
1990 a 2007
31
Quantidade encontrada
289 artigos
Quantidade
31
de
pré-selecionados
arquivos
32
APÊNDICE B -- FORMULÁRIO DE SELEÇÃO
DE ESTUDOS
OBS:
• Critério 4: Contempla a execução de estudos experimentais.
• Critério 5: Aborda o uso da metodologia TDD no desenvolvimento de softwares e a
quantidade de defeitos ao final do desenvolvimento.
Nome do artigo
Evaluating Advantages of Test Driven Development: a
Controlled Experiment with Professionals
Lista de autores
Gerardo Canfora, Aniello Cimitile, Felix Garcia, Mario Piattini, Corrado Aaron Visaggio
Data de publicação
Setembro, 2006
Veículo de publicação
ACM Press
Fonte
Portal ACM
Situação do artigo (incluído
excluído
ou excluído)
Critério 4
Sim.
Critério 5
O artigo aborda o uso da metodologia TDD, mas não a
quantidade de erros do software e sim a produtividade
dos desenvolvedores e a quantidade e qualidade dos testes
unitários.
Nome do artigo
Assessing Undergraduate Experience of Continuous Integration and Test-Driven Development
Lista de autores
Jon Bowyer, Janet Hughes
Data de publicação
Maio, 2006
Veículo de publicação
ACM Press
33
Fonte
Portal ACM
Situação do artigo (incluído
excluído
ou excluído)
Critério 4
Sim.
Critério 5
O artigo avalia a participação e performance dos alunos ao
desenvolver utilizando uma metodologia ágil, e não a quantidade de erros do software.
Nome do artigo
An Experimental Evaluation of Continuous Testing During
Development
Lista de autores
David Saff, Michael D. Ernst
Data de publicação
Julho, 2004
Veículo de publicação
ACM Press
Fonte
Portal ACM
Situação do artigo (incluído
excluído
ou excluído)
Critério 4
Sim.
Critério 5
Não. Os desenvolvedores precisavam testar continuamente,
mas não necessariamente testar antes de codificar (TDD).
Nome do artigo
Adopting XP Practices for Teaching Object Oriented Programming
Lista de autores
Karen Keefe, Judithe Sheard, Martin Dick
Data de publicação
Janeiro, 2006
Veículo de publicação
Australian Computer Society, Inc
Fonte
Portal ACM
Situação do artigo (incluído
excluído
ou excluído)
Critério 4
Sim.
Critério 5
O foco do artigo é a utilização de práticas XP para ensinar
programação orientada a objetos.
Nome do artigo
Software Testing Research: Achievements, Challenges,
Dreams
Lista de autores
Antonia Bertolino
Data de publicação
Maio, 2007
Veículo de publicação
ICSE 2007: Future of Software Engineering
34
Fonte
Portal ACM
Situação do artigo (incluído
excluído
ou excluído)
Critério 4
Não, é um artigo teórico.
Critério 5
Não. O artigo apresentas os desafios atuais e futuros dos
testes de software.
Nome do artigo
On the Economic Evaluation of XP Projects
Lista de autores
Matthias M. Muller, Frank Padberg
Data de publicação
Setembro, 2003
Veículo de publicação
ACM Press
Fonte
Portal ACM
Situação do artigo (incluído
excluído
ou excluído)
Critério 4
Não, é um artigo teórico.
Critério 5
Não. O artigo apresenta um modelo para estudar o impacto
das práticas XP.
Nome do artigo
Unit Testing: Test Early, Test Often
Lista de autores
Michael Olan
Data de publicação
Dezembro, 2003
Veículo de publicação
Consortium for Computing Sciences in Colleges
Fonte
Portal ACM
Situação do artigo (incluído
excluído
ou excluído)
Critério 4
Não, é um artigo teórico.
Critério 5
Não. O artigo apresenta a necessidade de testes unitários
em todo o desenvolvimento do processo.
Nome do artigo
Rethinking Computer Science Education from a Test-first
Perspective
Lista de autores
Stephen H. Edwards
Data de publicação
Outubro, 2003
Veículo de publicação
ACM Press
Fonte
Portal ACM
Situação do artigo (incluído
excluído
ou excluído)
35
Critério 4
Não. O artigo mostra uma nova visão para a ciência da
computação, centrada no uso de TDD.
Critério 5
Não. O artigo não desenvolve um estudo de caso com TDD.
Nome do artigo
Experiences Using Test-Driven Development With An Automated Grader
Lista de autores
Stephen H. Edwards, Manuel A. Pérez-Quiñones
Data de publicação
Janeiro, 2007
Veículo de publicação
Consortium for Computing Sciences in Colleges
Fonte
Portal ACM
Situação do artigo (incluído
excluído
ou excluído)
Critério 4
Não.
Critério 5
Não. O artigo relata a experiência de testes em uma sala de
aula.
Nome do artigo
An Empirical Comparison Between Pair Development and
Software Inspection in Thailand
Lista de autores
Monvorath Phongpaibul, Barry Boehm
Data de publicação
Setembro, 2006
Veículo de publicação
ACM Press
Fonte
Portal ACM
Situação do artigo (incluído
excluído
ou excluído)
Critério 4
Sim.
Critério 5
Não. O artigo apresenta experimentos para comparar programação em par e inspeção de software como técnicas de
diminuição de erros.
Nome do artigo
Assessing Test-Driven Development at IBM
Lista de autores
E. Michael Maximilien and Laurie Williams
Data de publicação
Maio, 2003
Veículo de publicação
Proceedings of the 25th International Conference on Software Engineering
Fonte
Portal ACM
Situação do artigo (incluído
excluído
ou excluído)
36
Critério 4
Sim.
Critério 5
Sim. Foi excluído, pois o artigo aborda o mesmo estudo
de caso relatado noartigo "Test-Driven Development as a
Defect-Reduction Practice".
Nome do artigo
Evaluating the Efficacy of Test-Driven Development: Industrial Case Studies
Lista de autores
Thirumalesh Bhat, Nachiappan Nagappan
Data de publicação
Setembro, 2006
Veículo de publicação
Proceedings of the 2006 ACM/IEEE international symposium on International symposium on empirical software engineering
Fonte
Portal ACM
Situação do artigo (incluído
incluído
ou excluído)
Critério 4
Sim.
Critério 5
Sim.
Nome do artigo
Improving the Software Development Process Using Testability Research
Lista de autores
Jeffrey M. Voas and Keith W. Miller
Data de publicação
Outubro, 1992
Veículo de publicação
Proceedings on Third International Symposium on Software Reliability Engineering
Fonte
IEEE Xplore
Situação do artigo (incluído
excluído
ou excluído)
Critério 4
Não. O artigo possui uma abordagem teórica.
Critério 5
Não.
Nome do artigo
Attitude Towards Testing: A Key Contributor to Software
Quality
Lista de autores
S. Murugesan
Data de publicação
Dezembro, 1994
Veículo de publicação
Conference Proceedings on First International Conference
on Software Testing, Reliability and Quality Assurance
Fonte
IEEE Xplore
37
Situação do artigo (incluído
excluído
ou excluído)
Critério 4
Não. O artigo possui uma abordagem teórica.
Critério 5
Não.
Nome do artigo
Towards A Zero-Defect Product - The End-To-End Test
Process
Lista de autores
Rathna K. Prasad
Data de publicação
Dezembro, 1994
Veículo de publicação
Conference Proceedings on First International Conference
on Software Testing, Reliability and Quality Assurance
Fonte
IEEE Xplore
Situação do artigo (incluído
excluído
ou excluído)
Critério 4
Não. O artigo possui uma abordagem teórica.
Critério 5
Não.
Nome do artigo
Controlling Software Reliability EDuring Development
Lista de autores
Gerald W. Baumann
Data de publicação
Novembro, 1993
Veículo de publicação
Proceedings on Fourth International Symposium on Software Reliability Engineering
Fonte
IEEE Xplore
Situação do artigo (incluído
excluído
ou excluído)
Critério 4
Sim.
Critério 5
Não. O artigo não aborda o uso da técnica TDD
Nome do artigo
Test Case Design Based on Z and the Classification-Tree
Method
Lista de autores
Harbhajan Singh, Mirko Conrad, Sadegh Sadeghipour
Data de publicação
Novembro, 1997
Veículo de publicação
Proceedings on First IEEE International Conference on Formal Engineering Methods
Fonte
IEEE Xplore
Situação do artigo (incluído
excluído
ou excluído)
38
Critério 4
Não. O artigo possui uma abordagem teórica.
Critério 5
Não.
Nome do artigo
"Continuous Verification"in Mission Critical Software Development
Lista de autores
Tien-fu Chang, Alejandro Danylyzsn, So Norimatsu,Jose
Rivera, David Shepard, Anthony Lattanze, Dr.
James
Tomayko
Data de publicação
Janeiro, 1997
Veículo de publicação
Proceedings of the Thirtieth Hawaii International Conference on System Sciences
Fonte
IEEE Xplore
Situação do artigo (incluído
excluído
ou excluído)
Critério 4
Sim.
Critério 5
Não. O artigo não aborda o uso da técnica TDD.
Nome do artigo
Improving Defect Removal Effectiveness for Software Development
Lista de autores
Hareton K. N. Leung
Data de publicação
Março, 1998
Veículo de publicação
Proceedings of the Second Euromicro Conference on Software Maintenance and Reengineering
Fonte
IEEE Xplore
Situação do artigo (incluído
excluído
ou excluído)
Critério 4
Não. O artigo possui uma abordagem teórica.
Critério 5
Não.
Nome do artigo
Managing Cyclical Software Development
Lista de autores
Anthony J Lattanze, Manuel Rosso-Llopart
Data de publicação
Outubro, 1998
Veículo de publicação
Proceedings of Pioneering New Technologies: Management Issues and Challenges in the Third Millennium on
International Conference on Engineering and Technology
Management
Fonte
IEEE Xplore
39
Situação do artigo (incluído
excluído
ou excluído)
Critério 4
Não. O artigo possui uma abordagem teórica.
Critério 5
Não.
Nome do artigo
Studying the Effects of Code Inspection and Structural Testing on Software Quality
Lista de autores
Oliver Laitenberger
Data de publicação
Novembro, 1998
Veículo de publicação
Proceedings of The Ninth International Symposium on
Software Reliability Engineering
Fonte
IEEE Xplore
Situação do artigo (incluído
excluído
ou excluído)
Critério 4
Sim.
Critério 5
Não. O artigo não aborda o uso da técnica TDD.
Nome do artigo
Integrating Pair Programming into a Software Development
Process
Lista de autores
Laurie Williams
Data de publicação
Fevereiro, 2001
Veículo de publicação
Proceedings of 14th Conference on Software Engineering
Education and Training
Fonte
IEEE Xplore
Situação do artigo (incluído
excluído
ou excluído)
Critério 4
Não. O artigo possui uma abordagem teórica.
Critério 5
Não.
Nome do artigo
A Formal Model of the Software Test Process
Lista de autores
Joao W. Cangussu, Raymond A. DeCarlo and Aditya P.
Mathur
Data de publicação
Agosto, 2002
Veículo de publicação
IEEE Computer Society
Fonte
IEEE Xplore
Situação do artigo (incluído
excluído
ou excluído)
40
Critério 4
Não. O artigo possui uma abordagem teórica.
Critério 5
Não.
Nome do artigo
Test and Development Process Retrospective - a Case Study
using ODC Triggers
Lista de autores
Ram Chillarege, Kothanda Ram Prasad
Data de publicação
Junho, 2002
Veículo de publicação
Proceedings of International Conference Dependable Systems and Networks
Fonte
IEEE Xplore
Situação do artigo (incluído
excluído
ou excluído)
Critério 4
Sim.
Critério 5
Não. O artigo não utiliza a técnica TDD.
Nome do artigo
Hypothesis Testing for Module Test in Software Development
Lista de autores
Tsuneo Yamaura, Akira K. Onoma
Data de publicação
Setembro, 2006
Veículo de publicação
Annual India Conference
Fonte
IEEE Xplore
Situação do artigo (incluído
excluído
ou excluído)
Critério 4
Não. O artigo possui uma abordagem teórica.
Critério 5
Não.
Nome do artigo
On Estimating Testing Effort Needed to Assure Field Quality in Software Development
Lista de autores
Osamu Mizuno, Eijiro Shigematsu, Yasunari Takagi and
Tohru Kikuno
Data de publicação
Novembro, 2002
Veículo de publicação
Proceedings of 13th International Symposium on Software
Reliability Engineering
Fonte
IEEE Xplore
Situação do artigo (incluído
excluído
ou excluído)
Critério 4
Sim.
41
Critério 5
Não.O artigo não utiliza a técnica TDD.
Nome do artigo
An Investigation of the Applicability of Design of Experiments to Software Testing
Lista de autores
D. Richard Kuhn, Michael J. Reilly
Data de publicação
Dezembro, 2002
Veículo de publicação
Proceedings of 27th Annual NASA Goddard/IEEE Software Engineering Workshop
Fonte
IEEE Xplore
Situação do artigo (incluído
excluído
ou excluído)
Critério 4
Não. O artigo possui uma abordagem teórica.
Critério 5
Não.
Nome do artigo
Reducing wasted development time via continuous testing
Lista de autores
David Saff, Michael D. Ernst
Data de publicação
Novembro, 2003
Veículo de publicação
14th International Symposium on Software Reliability Engineering
Fonte
IEEE Xplore
Situação do artigo (incluído
excluído
ou excluído)
Critério 4
Não. O artigo possui uma abordagem teórica.
Critério 5
Não.
Nome do artigo
Breeding Software Test Cases for Complex Systems
Lista de autores
A. Watkins, D. Berndt, K. Aebischer, J. Fisher and L. Johnson
Data de publicação
Janeiro, 2004
Veículo de publicação
Proceedings of the 37th Annual Hawaii International Conference on System Sciences
Fonte
IEEE Xplore
Situação do artigo (incluído
excluído
ou excluído)
Critério 4
Sim.
Critério 5
Não. O artigo não utiliza a técnica TDD.
42
Nome do artigo
The Importance of Life Cycle Modeling to Defect Detection
and Prevention
Lista de autores
A. Watkins, D. Berndt, K. Aebischer, J. Fisher and L. Johnson
Data de publicação
Janeiro, 2004
Veículo de publicação
Proceedings of 10th International Workshop on Software
Technology and Engineering Practice
Fonte
IEEE Xplore
Situação do artigo (incluído
excluído
ou excluído)
Critério 4
Sim.
Critério 5
Não. O artigo não utiliza a técnica TDD.
Nome do artigo
Establishment of Automated Regression Testing at ABB:
Industrial Experience Report on "Avoiding the Pitfalls"
Lista de autores
Christer Persson, Nur Yilmaztürk
Data de publicação
Setembro, 2004
Veículo de publicação
Proceedings of 19th International Conference on Automated Software Engineering
Fonte
IEEE Xplore
Situação do artigo (incluído
excluído
ou excluído)
Critério 4
Sim.
Critério 5
Não. O artigo não utiliza a técnica TDD.
Nome do artigo
Using the Information: Incorporating Positive Feedback Information into the Testing Process
Lista de autores
Kwok Ping Chan, Dave Towey, Tsong Yueh Chen, FeiChing Kuo
Data de publicação
Setembro, 2003
Veículo de publicação
Eleventh Annual International Workshop on Software Technology and Engineering Practice
Fonte
IEEE Xplore
Situação do artigo (incluído
excluído
ou excluído)
Critério 4
Não. O artigo possui uma abordagem teórica.
43
Critério 5
Não.
Nome do artigo
A Control Approach for Agile Processes
Lista de autores
João W. Cangussu, Richard M. Karcich
Data de publicação
Julho, 2005
Veículo de publicação
29th Annual International Computer Software and Applications Conference
Fonte
IEEE Xplore
Situação do artigo (incluído
excluído
ou excluído)
Critério 4
Não. O artigo possui uma abordagem teórica.
Critério 5
Não.
Nome do artigo
Studying the Fault-Detection Effectiveness of GUI Test
Cases for Rapidly Evolving Software
Lista de autores
Atif M. Memon, Qing Xie
Data de publicação
Outubro, 2005
Veículo de publicação
IEEE Transactions on Software Engineering
Fonte
IEEE Xplore
Situação do artigo (incluído
excluído
ou excluído)
Critério 4
Sim.
Critério 5
Não. O artigo não utiliza a técnica TDD.
Nome do artigo
Model-based Testing Considering Cost, Reliability and
Software Quality
Lista de autores
Chaw Yupar Htoon, Ni Lar Thein
Data de publicação
Novembro, 2005
Veículo de publicação
Proceedings of 6th Asia-Pacific Symposium on Information
and Telecommunication Technologies
Fonte
IEEE Xplore
Situação do artigo (incluído
excluído
ou excluído)
Critério 4
Sim.
Critério 5
Não. O artigo não utiliza a técnica TDD.
44
Nome do artigo
Optimize Defect Detection Techiniques through Empirical
Software Engineering Method
Lista de autores
Hai Tao Sun
Data de publicação
Novembro, 2005
Veículo de publicação
IEEE International Conference on Electro Information
Technology
Fonte
IEEE Xplore
Situação do artigo (incluído
excluído
ou excluído)
Critério 4
Sim.
Critério 5
Não. O artigo analisa as técnicas de detecção de erros.
Nome do artigo
Agile Software Testing in a Large-Scale Project
Lista de autores
David Talby, Arie Keren, Orit Hazzan, Yael Dubinsky
Data de publicação
Julho/Agosto, 2006
Veículo de publicação
IEEE Computer Society
Fonte
IEEE Xplore
Situação do artigo (incluído
excluído
ou excluído)
Critério 4
Sim.
Critério 5
Não. O artigo foca no estudo com métodos Ágeis e adaptaram o TDD para suas necessidades.
Nome do artigo
Test-Driven Development in Large Projects
Lista de autores
Raghvinder S. Sangwan, Phillip A. Laplante
Data de publicação
Setembro/Outubro, 2006
Veículo de publicação
IT Professional
Fonte
IEEE Xplore
Situação do artigo (incluído
excluído
ou excluído)
Critério 4
Não. O artigo apresenta um estudo teórico.
Critério 5
Não.
Nome do artigo
Test Case Prioritization Using Relevant Slices
Lista de autores
Dennis Jeffrey, Neelam Gupta
Data de publicação
Setembro, 2006
45
Veículo de publicação
30th Annual International Computer Software and Applications Conference
Fonte
IEEE Xplore
Situação do artigo (incluído
excluído
ou excluído)
Critério 4
Sim.
Critério 5
Não. O artigo não aborda o uso da metodologia TDD.
Nome do artigo
An Empirical Study on the Relationship between Defective
Requirements and Test Failures
Lista de autores
Robert W. Ferguson, Giuseppe Lami
Data de publicação
Abril, 2006
Veículo de publicação
30th Annual IEEE/NASA Software Engineering Workshop
Fonte
IEEE Xplore
Situação do artigo (incluído
excluído
ou excluído)
Critério 4
Sim.
Critério 5
Não. O artigo faz uma análise sobre a relação entre a qualidade dos softwares e a qualidade dos requisitos usados para
criar os softwares.
Nome do artigo
Using Model-Driven Development in Time-Constrained
Course Projects
Lista de autores
Wilson Pádua
Data de publicação
Julho, 2007
Veículo de publicação
20th Conference on Software Engineering Education and
Training
Fonte
IEEE Xplore
Situação do artigo (incluído
excluído
ou excluído)
Critério 4
Sim.
Critério 5
Não. O artigo utiliza a técnica Model-Driven Development.
Nome do artigo
Experiences of Using Pair Programming in an Agile Project
Lista de autores
Jari Vanhanen and Harri Korpi
Data de publicação
Janeiro, 2007
46
Veículo de publicação
40th Annual Hawaii International Conference on System
Sciences
Fonte
IEEE Xplore
Situação do artigo (incluído
excluído
ou excluído)
Critério 4
Sim.
Critério 5
Apesar de alguns utilizarem TDD, o estudo foca na programação em par, por isso, esse artigo foi excluído.
Nome do artigo
Test-Driven Development as a Defect-Reduction Practice
Lista de autores
Williams, L. and Maximilien and E.M., Vouk, M.
Data de publicação
Novembro, 2003
Veículo de publicação
14th International Symposium on Software Reliability Engineering
Fonte
IEEE Xplore
Situação do artigo (incluído
incluído
ou excluído)
Critério 4
Sim.
Critério 5
Sim.
47
APÊNDICE C -- FORMULÁRIO DE EXTRAÇÃO
DE DADOS
Título
Evaluating the Efficacy of Test-Driven Development: Industrial Case Studies
Lista de autores
Thirumalesh Bhat, Nachiappan Nagappan
Data de publicação
Setembro, 2006
Veículo de publicação
Proceedings of the 2006 ACM/IEEE international symposium on International symposium on empirical software engineering
Fonte
Portal ACM
Abstract do artigo
This paper discusses software development using the Test
Driven Development (TDD) methodology in two different
environments (Windows and MSN divisions) at Microsoft.
In both these case studies we measure the various context,
product and outcome measures to compare and evaluate the
efficacy of TDD. We observed a significant increase in quality of the code (greater than two times) for projects developed using TDD compared to similar projects developed in
the same organization in a non-TDD fashion. The projects
also took at least 15extra upfront time for writing the tests.
Additionally, the unit tests have served as auto documentation for the code when libraries/APIs had to be used as well
as for code maintenance.
Objetivo do estudo
Discutir o desenvolvimento de software utilizando a
metodologia TDD em dois ambientes diferentes na Microsoft (divisões do Windows e MSN).
48
Descrição do estudo experi-
O estudo de caso foi realizado em duas diferentes divisões
mental
da Microsoft, Windows e MSN. Em cada divisão, dois projetos foram selecionados e desenvolvidos por gerentes com
níveis semelhantes de responsabilidades que reportavam
para um mesmo gerente com nível superior de responsabilidade. Em cada divisão, um dos projetos foi desenvolvido
utilizando TDD e o outro não. Os projetos foram analisados
após sua finalização e os desenvolvedores não sabiam que o
trabalho deles seria avaliado. Isso foi feito para minimizar
a influência na performance do desenvolvedor.
Resultados
Na divisão Windows, a quantidade de defeitos encontrados
no código da equipe que não utilizou TDD foi 2.6 vezes superior à outra equipe. Na divisão MSN, o código da equipe
que não utilizou TDD apresentou quantidade de defeitos 4.2
vezes superior à equipe que utilizou a metodologia.
Comentários
Para fazer a avaliação, o estudo definiu defeito como sendo
a ocorrência de uma anomalia externa visível.
As fal-
has foram normalizadas por milhares de linha de código
(KLOC).
Título
Test-Driven Development as a Defect-Reduction Practice
Lista de autores
Williams, L. and Maximilien and E.M., Vouk, M.
Data de publicação
Novembro, 2003
Veículo de publicação
14th International Symposium on Software Reliability Engineering
Fonte
IEEE Xplore
49
Abstract do artigo
Test-driven development is a software development practice
that has been used sporadically for decades. With this practice, test cases (preferably automated) are incrementally
written before production code is implemented. Test-driven
development has recently re-emerged as a critical enabling
practice of the Extreme Programming software development methodology. We ran a case study of this practice
at IBM. In the process, a thorough suite of automated test
cases was produced after UML design. In this case study,
we found that the code developed using a test-driven development practice showed, during functional verification and
regression tests, approximately 40traditional fashion. The
productivity of the team was not impacted by the additional
focus on producing automated test cases. This test suite will
aid in future enhancements and maintenance of this code.
The case study and the results are discussed in detail.
Objetivo do estudo
Examinar a eficácia de TDD como uma forma de diminuir
a quantidade de erros num software.
Descrição do estudo experi-
Um grupo de desenvolvedores da IBM desenvolve drivers
mental
de dispositivos há mais de uma década e um dos produtos produzidos por esse grupo, que já teve sete lançamentos
desde 1998 foi usado como base para o estudo. Em 2002,
uma parte do grupo desenvolveu drivers de dispositivos em
uma nova plataforma. O estudo compara o sétimo lançamento desse driver na antiga plataforma com o primeiro
lançamento na nova plataforma.
Resultados
Utilizando a metodologia TDD, houve uma redução de 40na
taxa de erro comparado ao driver de dispositivo desenvolvido com outra metodologia.
Comentários
Para verificar os erros, foi executado um teste de Verificação
Funcional (FVT) por um grupo de testes depois da produção
do código. Os erros foram normalizadas por milhares de
linha de código (KLOC).
50
REFERÊNCIAS BIBLIOGRÁFICAS
ASTELS, D. Test Driven Development: A Practical Guide. [S.l.]: Pearson, 2003.
BECK, K. EXtreme Programming Explained. [S.l.]: Addison-Wesley Professional, 2000.
BECK, K. Test Driven Development: By Example. [S.l.]: Addison-Wesley Professional, 2003.
BEEDLE, M. et al. Manifesto for Agile Software Development. 2001. Disponivel em
http://agilemanifesto.org/principles.html. Último acesso em 12/12/2007.
BHAT, T.; NAGAPPAN, N. Evaluating the efficacy of test-driven development: industrial case
studies. ACM, New York, NY, USA, p. 356–363, 2006. Disponível em http://portal.acm.org.
Último acesso em 12/12/2007.
FOWLER, M. Refactoring: Improving the Design of Existing Code. [S.l.]: Addison-Wesley,
2001.
JEFFRIES, R. XProgramming.com: an Agile Software Development Resource. 2007.
Disponível em http://www.xprogramming.com/. Último acesso em 12/12/2007.
KITCHENHAM, B. Procedures for performing systematic reviews. Keele University, UK,
Technical Report, p. 1353–7776, 2004. Disponível em http://portal.acm.org. Último acesso em
12/12/2007.
NAUR, P.; RANDELL, B. Software Engineering: A report on a Conference Sponsored by the
NATO Science Committee. [S.l.], 1969.
PRESSMAN, R. S. Engenharia de Software. [S.l.]: MAKRON Books, 2005.
SOMMERVILLE, I. Software Engineering. [S.l.]: Addison Wesley Professional, 2003.
VOUK, L. W. E. M. M. Test-driven development as a defect-reduction practice. Software
Reliability Engineering, 2003. ISSRE 2003. 14th International Symposium on, p. 34–45, 17–20
Nov. 2003. ISSN 1071-9458. Disponível em http://ieeexplore.ieee.org. Último acesso em
12/12/2007.

Documentos relacionados