• Nenhum resultado encontrado

TÍTULO: UMA REVISÃO DA LITERATURA PARA AVALIAÇÃO DO USO DE TÉCNICAS DE TEST DRIVEN DEVELOPMENT NA MELHORIA DO PROCESSO DE DESENVOLVIMENTO DE SOFTWARE

N/A
N/A
Protected

Academic year: 2021

Share "TÍTULO: UMA REVISÃO DA LITERATURA PARA AVALIAÇÃO DO USO DE TÉCNICAS DE TEST DRIVEN DEVELOPMENT NA MELHORIA DO PROCESSO DE DESENVOLVIMENTO DE SOFTWARE"

Copied!
18
0
0

Texto

(1)

TÍTULO: UMA REVISÃO DA LITERATURA PARA AVALIAÇÃO DO USO DE TÉCNICAS DE “TEST DRIVEN DEVELOPMENT” NA MELHORIA DO PROCESSO DE DESENVOLVIMENTO DE SOFTWARE TÍTULO:

CATEGORIA: EM ANDAMENTO CATEGORIA:

ÁREA: CIÊNCIAS EXATAS E DA TERRA ÁREA:

SUBÁREA: Computação e Informática SUBÁREA:

INSTITUIÇÃO(ÕES): UNIVERSIDADE SÃO JUDAS TADEU - USJT INSTITUIÇÃO(ÕES):

AUTOR(ES): CAROLINE FERREIRA DO NASCIMENTO SANTOS AUTOR(ES):

ORIENTADOR(ES): EDSON SARAIVA DE ALMEIDA ORIENTADOR(ES):

(2)

UNIVERSIDADE SÃO JUDAS TADEU Centro de Pesquisa

Programa Voluntário de Iniciação Científica Caroline Ferreira do Nascimento Santos

Uma revisão da literatura para avaliação do uso de técnicas de

“Test Driven Development” na melhoria do processo de

desenvolvimento de software

(3)

UNIVERSIDADE SÃO JUDAS TADEU Centro de Pesquisa

Programa Voluntário de Iniciação Científica Caroline Ferreira do Nascimento Santos

Um estudo experimental para avaliação do uso

de técnicas de Test Driven Development na

melhoria do processo de desenvolvimento de

software

Projeto de pesquisa apresentado ao Programa Voluntário de Iniciação Científica do Centro de Pesquisa da Universidade São Judas Tadeu, como requisito parcial das Atividades de Pesquisa.

Orientador: Prof. Edson Saraiva de Almeida

(4)

Sumário

1. Introdução 4 1.1 Objetivos do trabalho 4 1.2. Justificativa 4 2. Metodologia 4 3. Referencial Teórico 6 3.1 Metodologias Ágeis 6 3.2 Teste Unitário 6

3.3 Desenvolvimento Dirigido a Teste 7

3.3.1 Etapas do Desenvolvimento Dirigido a Testes 7 3.3.2 Vantagens do TDD 8

3.3.3 Desvantagens do TDD 9

3.3.4 Diferentes visões sobre o TDD 9 4. Resultados 14 5. Considerações Finais 14 Referências Bibliográficas 14

(5)

​1. Introdução

O primeiro passo, para organizar as atividades que devem ser realizadas em uma empresa na produção de software, é estabelecer o Processo de Desenvolvimento de Software (PDS). Para o sucesso na definição e na evolução do PDS, além de conhecer os métodos e processos de engenharia de software, é fundamental que outros aspectos sejam considerados. Por exemplo, as características do produto, do projeto, a cultura organizacional, as necessidades estabelecidas pelo cliente, o ambiente de desenvolvimento, as tecnologias utilizadas devem ser consideradas na seleção do processo.

Um PDS estabelece um conjunto de atividades que devem ser seguidas na construção do software. Um requisito básico de qualidade relacionado ao PDS é que a atividade deve ser sistemática e passível de repetição, independentemente de quem a execute. Quanto ao produto de software, é também fundamental que sua qualidade seja independente de quem a produziu (Rocha, 2001).

Um outro aspecto fundamental, está relacionado a avaliação do processo para propiciar uma base sólida à sua evolução. A complexidade do desenvolvimento e do entendimento do processo dificulta a sua otimização ou mesmo a escolha de um bom processo para uma determinada empresa. A disponibilidade de uma base histórica de dados abrangendo as diversas perspectivas e os fatores que afetam o desenvolvimento de software é um elemento indispensável nesse cenário. Uma base histórica permite analisar o PDS com objetivos de se identificar oportunidades de melhorias, de modo que essa evolução seja sistemática e disciplinada.

O processo de desenvolvimento de software envolve uma série de atividades nas quais, apesar das técnicas, métodos e ferramentas empregados, erros no produto ainda podem ocorrer. Com o uso crescente de software nos mais diversos setores da sociedade, a demanda e a preocupação com a produção de software de alta qualidade a baixo custo é importante se estabelecer atividades de garantia da qualidade durante todo o processo de desenvolvimento (ROCHA, 2001). Dentre as atividades de garantia da qualidade de software estão as de VV&T (Verificação, Validação e Teste) com objetivo de minimizar a ocorrência de erros e riscos associados.

(6)

O “Test Driven Development” (TDD) é uma abordagem para desenvolvimento de software, onde testes automatizados são escritos antes do código de produção. Esta abordagem tem atraído a atenção de muitos profissionais. Contudo é necessário se obter evidências empíricas da superioridade de seu efeito na qualidade do código e do teste quando comparados ao desenvolvimento tradicional. A busca pela melhoria da qualidade no desenvolvimento de software é uma atividade constante em organizações de desenvolvimento de software. Para atingir esse fim, um programa de melhoria em uma organização geralmente visa à implantação de processos aderentes a modelos de maturidade, como o CMMI e o MR-MPS ou pela adoção de novas tecnologias que frequentemente surgem no mercado.

1.1 Objetivos do trabalho

O objetivo deste trabalho é realizar um mapeamento sistemático para identificar e classificar estudos primários, disponíveis na literatura, para se obter evidências das características do processo de desenvolvimento de software, que podem ser melhorados quando se utiliza a técnica de TDD.

1.2 Justificativa

Obter evidências das características do processo de desenvolvimento de software, que podem ser melhorados quando se utiliza a técnica de TDD validando as características.

2. Metodologia

O processo para a avaliação e adoção de novas tecnologias em organizações de desenvolvimento de software segue a abordagem proposta por Kitchenham (2004), Engenharia de Software Baseada em Evidências (ESBE), que tem como objetivo melhorar as decisões, na adoção de novas tecnologias, relacionadas ao processo

(7)

de desenvolvimento e manutenção de software por integração das evidências de pesquisas com a experiência prática. A ESBE envolve 5 passos:

1. Converter um problema ou informação relevante em uma pergunta

2. Pesquisar na literatura as melhores evidências disponíveis para responder à questão.

3. Avaliar criticamente as evidências em relação a sua validade, impacto e aplicabilidade.

4. Integrar as evidências avaliadas com experiência prática, os valores do cliente e as circunstâncias para tomar decisões

5. Avaliar o desempenho e buscar formas de melhoria

No passo 1 para converter um problema ou informação relevante em uma pergunta, Dyba (2005) sugere a utilização do método Goal-Question-Metrics (Basili, 1992) para definir o problema considerando os seguintes aspectos: Analisar <objeto de estudo>; Com o propósito de <objetivo>; Com respeito à <foco de qualidade>; Do ponto de vista <perspectiva>; No contexto de <contexto onde o problema está sendo analisado>.

No passo 1 do processo de ESBE o método Goal-Question-Metrics foi utilizado: <Analisar> o TDD para obter evidências da sua utilização na melhoria do processo de desenvolvimento de software; <Com o propósito de> se obter evidências de melhoria da qualidade; <Com respeito às> características e subcaracterísticas de qualidade; <Do ponto de vista> do processo de desenvolvimento de software; <No contexto da> pesquisa em ESBE. As questões que nortearam a pesquisa foram:(Q1) Quais são os benefícios identificados na utilização da técnica TDD no processo de desenvolvimento de software? (Métrica) Número de citações da característica identificada. (Q2) Quais são as ferramentas que dão suporte ao desenvolvimento de sistemas utilizando técnicas de TDD? (Métrica) Lista de ferramentas que apoiam o uso de TDD.

No passo 2 foi realizado o processo de mapeamento sistemático (Nakagawa, 2017). No processo de busca as bases de dados utilizadas nesta pesquisa foram a ISI Web of Knowledge (Web of Science) pois são bases indexadas que permitem a exportação de metadados para análises das publicações. A chave de busca utilizada foi “Test Driven Development” resultando em uma amostra de 404

(8)

publicações de áreas temáticas relacionados principalmente a Ciência da Computação, Engenharia Elétrica, e Sistemas de Informação. Foram aplicados dois filtros de seleção. No primeiro foi selecionado o tipo de documento, somente artigos, uma vez que esses passam por processos de avaliação por pares. Após a aplicação deste filtro a amostra foi reduzida para 123 artigos. Os artigos estão sendo avaliados através do critério de inclusão, que compreende a leitura do título, do resumo e das palavras chave. A primeira análise foi a de publicações por ano, a qual permitiu identificar os periódicos com maior número de publicações, bem como a tendência das publicações ao longo dos anos. A análise de citações está sendo realizada para identificar as características de melhoria da qualidade com maior número de publicações.

3. Referencial Teórico 3.1 Metodologias Ágeis

Por conta do mercado competitivo e em contínua mudança, muitas empresas têm dificuldade de estabelecer procedimentos de melhoria da qualidade, principalmente organizações pequenas, que têm recursos limitados para sustentar suas operações de negócio. E sem a utilização de um processo, pode causar efeitos desastrosos, principalmente na qualidade do software. Uma alternativa que vem ganhando espaço para solução deste problema é o processo de desenvolvimento ágil, que pode dar uma resposta ágil suficiente em um ambiente de negócios, e assim ganhando vantagem no mercado.

Metodologias ágeis são processos de desenvolvimento de software que valorizam: as pessoas acimas de processos e ferramentas; o software acima de documentação completa; colaboração dos clientes acima de negociação contratual; e resposta a mudanças acima de um plano estabelecido. E este último citado é um dos valores mais importantes do desenvolvimento ágil, pois apoia o negócio e é vantajoso quando utilizado em sistemas de constante mudanças no mercado ou do cliente.

(9)

Uma outra vantagem do desenvolvimento ágil é a redução do custo da mudança de dos requisitos de software considerando uma economia com rápidas e constantes mudanças de mercado.

3.2 Teste Unitário

Um teste de software mostra que um programa faz o que foi proposto, e assim descobrir os efeitos antes do uso, o que é muito importante, pois aumenta a qualidade do software já que defeitos é um dos fatores de qualidade, e ainda diminui futuros custos elevados com manutenção, pois quanto mais tarde se descobre um defeito no sistema, maior é o seu custo para manutenção.

O teste unitário é o processo de testar as unidades de um de software como métodos ou classes de objeto. O teste unitário foca na lógica interna de processamento e as estruturas de dados dentro dos limites do componente.

Os métodos dos testes unitários devem ser testados de forma isolada, porém em alguns casos uma sequência de testes é necessária. E é necessário também testar uma operação herdada em todos os contextos do sistema, pois não se pode assumir que se a operação foi testada na classe funcionará também em todas as subclasses, já que em algum momento ela pode ser sobrescrita.

Para fazer casos de testes unitários, o teste deve mostrar por exemplo que um registro foi efetivado no banco de dados e que os campos foram criados conforme especificado. Mas também pode ser fazer testes para validar problemas mais comuns, simulando entradas erradas para poder verificar se não faz o componente falhar e se o programa estará preparado para validar o erro.

3.3 Desenvolvimento Dirigido a Teste

O desenvolvimento dirigido a testes (TDD, do inglês Test Driven Development) é uma abordagem para o desenvolvimento de softwares em que é desenvolvido um código de forma incremental em conjunto com um teste para esse incremento. Você não caminha para o próximo incremento até que o código desenvolvido passe no

(10)

teste que foi projetado visando os possíveis defeitos, validando em testes unitários ou de componentes.

O Desenvolvimento Dirigido a testes foi apresentado como parte dos métodos ágeis, por exemplo o Extreme Programming. O TDD se revelou uma abordagem de sucesso para projetos de pequenas e médias empresas, e pode ser uma maneira mais produtiva de desenvolver softwares. O TDD pode gerar também melhorias na qualidade do software.

3.3.1 Etapas do Desenvolvimento Dirigido a Testes

Há algumas etapas no processo fundamental do TDD:

1 – Identificar um incremento de funcionalidade necessário que normalmente é pequeno e tem poucas linhas de código;

2 – É escrito um teste para essa funcionalidade e é implementado como teste automatizado, que ao rodar relata se o teste falhou ou passou;

3 – É executado o teste juntos com ou outros testes implementados. Inicialmente, não terá sido implementado a funcionalidade, logo o teste irá falhar.

4 – É Implementado então a funcionalidade e executado novamente o teste. Nesta etapa também envolve a refatoração do código existente para melhorá-lo e adicionar um novo código sobre o que foi feito, mas sempre rodando os testes para verificar se todos continuam a passar. E quando todos os testes forem executados com sucesso pode-se se caminha para próxima parte da funcionalidade.

Como o código é desenvolvido em incrementos muito pequenos, deve ser capaz de executar todos os testes cada vez que adicionar uma funcionalidade ou refatorar o programa. E estes testes são mantidos em um programa separado que os executa e chama o sistema que está sendo testado.

Na utilização do desenvolvimento dirigido a testes é preciso também de um processo de teste de sistema para validar o sistema, verificando se ele atende os requisitos de todos os stakeholders. Esse teste também pode testar o desempenho, a confiabilidade e verifica se o sistema faz coisas que não deveria, produzindo resultados indesejados.

(11)

3.3.2 Vantagens do TDD

1 - O TDD ajuda os programadores a clarear as ideias sobre o que um segmento

de código deve fazer, já que para escrever um teste precisa entender ao que ele se destina, e esse entendimento ainda faz com que seja mais fácil entender o código necessário.

2 - Defeitos podem ser descobertos no início do processo de desenvolvimento, já que precisa se ter certeza que todo o código foi realmente executado, pois cada código é testado enquanto está sendo escrito, e como dito anteriormente isso diminui futuros custos com manutenção com defeitos, e ainda aumenta a qualidade do software.

3 – Pode ser realizado testes de regressão, pois sempre se pode executar os testes desenvolvidos juntamente com o novo código introduzido, e verificar se o que foi desenvolvido não afetou o sistema e introduziu novos bugs, fazendo falhar os outros testes.

4 – Raramente será necessário a utilização de ferramentas de depuração, tornando mais fácil a identificação do problema, tornando óbvio a sua localização na execução do teste.

5 – Os testes funcionam como uma forma de documentação do sistema que descreve o que o código está fazendo. Ou seja, ler os testes pode tornar mais fácil a compreensão do sistema.

Um dos mais importantes benefícios do desenvolvimento dirigidos por testes é a redução com custos de testes de regressão, que são muito caros e que se efetuado manualmente o custo é muito alto com tempo e esforço, e ainda corre o risco de se esquecer algum teste importante. Teste de regressão verifica se mudanças e alterações realizadas no sistema interage bem com o código já antes existente e se não foi introduzido novos bugs e defeitos no sistema. Com o TDD, basta escolher os testes relevantes ou todos e executar e verificar se todos continuam executando com sucesso, de forma rápida e barata. Mas é importante a execução dos testes anteriores antes de a nova funcionalidade ou mudança ser implementada.

(12)

1 - O desenvolvimento dirigido a testes é de maior utilidade no desenvolvimento de software novos. E em projetos grandes é necessário ser escrito testes para o sistema como um todo.

2 - O TDD também pode ser ineficaz em sistemas multi-threaded, pois threads diferentes podem ser intercalados em tempos diferentes, em execução diferente e isso pode produzir resultados diferentes.

3 – O TDD é visto como um aumento de trabalho para a equipe de desenvolvimento, que precisa gastar tempo desenvolvendo os testes para assim poder desenvolver o código.

3.3.4 Diferentes visões sobre o TDD

Segundo Borges (2015), o uso da prática de TDD no desenvolvimento de software aumenta o nível de compreensão do código gerado economizando tempo de manutenção, sendo possível reduzir a complexidade do software. Além disso, conclui que falhas são facilmente identificadas ainda na etapa de desenvolvimento graças ao contínuo feedback dado ao programador e permite identificar novos defeitos que foram introduzidos no s​oftware. Em sua pesquisa Borges (2015) citou três experimentos para avaliar o uso do TDD:

- O primeiro foi de ​Müller and Hagner (2002) comparando o TDD com a programação tradicional. Neste experimento mostrou que o grupo que utilizou TDD teve menos erros significativos e concluíram que a abordagem ​test-first aumenta substancialmente a qualidade do software e proporciona maior entendimento do código.

- O segundo experimento citado é realizado por ​George and Willians (2004) medindo a qualidade do software através do número de casos de teste de caixa preta. A dupla que utilizou a prática TDD forneceu código com qualidade superior quando comparada à prática de desenvolvimento tradicional, e que os que utilizaram o TDD desenvolveram cerca de 16% mais rápido.

(13)

- O terceiro experimento citado foi realizado com um grupo de desenvolvimento da IBM responsável pela construção de drivers que implantou o TDD como padrão no desenvolvimento. Segundo Willians et al (2003), o grupo que utilizou a técnica TDD realizou cerca de 40% de redução de tempo na verificação de defeitos em funções e métodos quando comparado a outros grupos que não utilizam a prática de TDD. Concluiu-se assim que a implantação comprovou o grande impacto de produtividade proporcionado pelo TDD.

No trabalho de Daniela Soares Feitosa (2005), a mesma selecionou dois artigos de acordo com os critérios estabelecidos no protocolo de sua pesquisa:

- Em um dos artigos foi realizado o estudo em duas diferentes divisões da Microsoft: Windows e MSN. E em cada uma das divisões uma utilizou TDD e a outra não. Foi verificado que na divisão de Windows a quantidade de defeitos no código da equipe que não utilizou TDD foi 2.6 superior à outra equipe, e 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. Contudo, o estudo mostrou que com o uso do TDD a qualidade do código nos dois sistemas foi pelo menos duas vezes superior em comparação dos sistemas desenvolvidos com outras técnicas, sugerindo que ao utilizar o TDD o desenvolvedor perceberá um aumento na qualidade do código e um acréscimo no tempo de desenvolvimento, provavelmente aumentando os custos do software. - O segundo artigo citado por daniela foi o experimento realizado em um

grupo de desenvolvimento da IBM de drivers de dispositivos(2003, verificando redução de 40% na taxa de defeito comparado ao desenvolvimento com outra técnica.

Contudo, a pesquisa realizada pela Daniela concluiu que não foi possível afirmar que a utilização da técnica de TDD diminui a quantidade de defeitos na aplicação pois há carência de estudos e experimentos. Mas sugere que a utilização dessa

(14)

técnica resultará em um software de maior qualidade, e que ocorre uma tendência à diminuição da quantidade de defeitos com a utilização do TDD.

David Janzen (2005, Hossein Saiedian - University of Kansas ) , escreveu o artigo “Test-Driven Development: Concepts, Taxonomy, and Future Direction”, relata que com o TDD, é possível reduzir um grande esforço de testes para um clique de um botão para execução dos testes automatizados.

Característica Artigos Número de

Citações Aumento da Qualidade do software

Müller and Hagner. ​Experiment about

test-first programming​. 2002 7 Boby George a*, Laurie Williamsb,1. ​A

structured experiment of test-driven development​. 2004

Feitosa, Daniela Soares. ​Um estudo

sobre o impacto do uso de desenvolvimento orientado por testes na melhoria da qualidade de software​.

2005

Erdogmus et al. ​On the effectiveness of the test-first approach to programming​. 2005

Rafique, Yahya; Misic, Vojislav B. T​he

Effects of Test-Driven Development on External Quality and Productivity: A Meta-Analysis​. 2003

(15)

Crispin, Isa. Driving software quality:

How test-driven development impacts software quality​. 2006

Grenning, James. ​Applying test driven

development to embedded software​.

2007 Facilidade e redução de tempo na identificação de defeitos / Menor quantidade de defeitos / menos erros significativos

Borges, Eduardo N. ​Conceitos e

Benefícios do Test Driven Development​. 2015 6 Müller and Hagner. ​Experiment about

test-first programming​. 2002

Willians et al. ​Assessing test-driven

development at IBM​. 2003

Filho et al. ​Um Estudo de Caso sobre o Aumento de Qualidade de Software em Projetos de Sistemas de Informação que Utilizam Test Driven Development​. 2012

Nagappan et al. ​Realizing quality

improvement through test driven development: results and experiences of four industrial teams​. 2008

Damm, Lars-Orla; Lundberg, Lars.

Results from introducing component-level test automation and Test-Driven Development​. 2006

(16)

Aumento do nível de compreensão do código / Redução de complexidade do código

Borges, Eduardo N. ​Conceitos e

Benefícios do Test Driven Development​. 2015

3 Müller and Hagner. ​Experiment about

test-first programming​. 2002

Crispin, Isa. ​Driving software quality:

How test-driven development impacts software quality​. 2006

Economia de manutenção / facilidade de manutenção

Borges, Eduardo N. ​Conceitos e

Benefícios do Test Driven Development​. 2015

2 Nagappan et al. ​Realizing quality

improvement through test driven development: results and experiences of four industrial teams​. 2008

Aumento da produtividade

Ling (Angela) Li. ​Understanding the

Efficacy of Test Driven Development​.

2009

3 Willians et al. ​Assessing test-driven

development at IBM​. 2003

Erdogmus et al. ​On the effectiveness of the test-first approach to programming​. 2005

Aumento no

tempo de

desenvolvimento

Nagappan et al. ​Realizing quality

improvement through test driven development: results and experiences of four industrial teams​. 2008

1

(17)

Codificação mais rápida

Boby George a*, Laurie Williamsb,1. ​A

structured experiment of test-driven development​. 2004

1

4. Resultados

Os resultados identificaram seis características mais citadas: (i) aumento da qualidade do software (7 citações); (ii) redução do tempo na identificação de defeitos (6 citações); (iii) melhora do nível de compreensão do código (3 citações); (iv) facilidade de manutenção (2 citações); (v) aumento da produtividade (2 citações) (vi) aumento do tempo de desenvolvimento (1 citação).

Próximos passos concluir a análise dos artigos, identificar o uso de ferramentas, avaliar criticamente as evidências em relação a sua validade, impacto e aplicabilidade e integrar as evidências avaliadas com experiência prática.

5.

Considerações Finais

Podemos concluir que o TDD traz benefícios na sua utilização, e dentre os principais que foram mais identificados por autores e pesquisadores, está o aumento da qualidade de software e também que a utilização desta técnica diminui os defeitos do software.

6. Referências Bibliográficas

PRESSMAN, Roger S; MAXIM, Bruce R. Engenharia de software: uma abordagem profissional. 8. ed. Porto Alegre: AMGH, 2016. xxviii, 940 p. ISBN 9788580555332 (broch.).

SOMMERVILLE, Ian. Engenharia de software. 6. ed. São Paulo, SP: Addison Wesley, 2003. xiv, 592 p. ISBN 8588639076 (broch.).

TELES, Vinícius Manhães. Extreme Programming. 2. Ed. Novatec. Maio, 2017. ISBN: 978-85- 7522-400- 7.

(18)

Referências

Documentos relacionados

É importante esclarecer que, com a divulgação dos resultados do desempenho educacional do estado do Rio de Janeiro em 2010, referente ao ano de 2009, no IDEB, no qual

O fortalecimento da escola pública requer a criação de uma cultura de participação para todos os seus segmentos, e a melhoria das condições efetivas para

Neste capítulo foram descritas: a composição e a abrangência da Rede Estadual de Ensino do Estado do Rio de Janeiro; o Programa Estadual de Educação e em especial as

de professores, contudo, os resultados encontrados dão conta de que este aspecto constitui-se em preocupação para gestores de escola e da sede da SEduc/AM, em

Por fim, na terceira parte, o artigo se propõe a apresentar uma perspectiva para o ensino de agroecologia, com aporte no marco teórico e epistemológico da abordagem

O estudo foi realizado de novembro de 2005 a abril de 2006, no Centro de Reabilitação Lar Escola São Francisco, pela Disciplina de Fisiatria do Departamento de Ortopedia

No Estado do Pará as seguintes potencialidades são observadas a partir do processo de descentralização da gestão florestal: i desenvolvimento da política florestal estadual; ii

The ultimate objectives of this work are to obtain the Failure, Mode, Effects, and Criticality Analysis (FMECA), with application of the Reliability Centered