Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
e Qualidade de Software
Cssio L. Ribeiro1
1
Instituto de Informtica Pontifcia Universidade Catlica de Gois (PUC Gois)
Goinia GO Brasil
cassio.landim@gmail.com
Abstract. This paper shows how the consequences of the use of test-driven de-
velopment affect the quality of software. It lists some situations that negatively
affect the quality of software, such as the lack of unit testing and presence of
disorganized code. It demonstrates how the use of test-driven development miti-
gates or eliminates the occurrence of these situations. Finally, it highlights other
important quality factors that the test-driven development does not resolve pro-
perly.
1. Introduo
A natureza ubqua da computao moderna, software e infraestrutura de informao e,
ainda, a demanda crescente por automao e convenincia pela sociedade moderna tem
gerado constante aumento de tamanho e complexidade dos sistemas de software moder-
nos. Este incremento em tamanho e complexidade acaba por causar consequncias no-
intencionais em termos de gerar problemas de qualidade [Tian 2005].
A alta complexidade e o amplo escopo dificultam a preveno ou eliminao de
problemas de software e seus impactos negativos relacionados; consequentemente, vrias
atividades de garantia da qualidade so realizadas para prevenir e/ou eliminar certas clas-
ses de problemas, ou ainda, para reduzir a probabilidade ou severidade de tais impactos
quando no se pode evit-los [Tian 2005].
As metodologias geis emergiram da necessidade de se minimizar os riscos do
desenvolvimento de softwares. Essas metodologias evoluram como parte de uma rea-
o contrria aos processos de desenvolvimento utilizados na poca, caracterizados como
pesados, burocrticos, micro-gerenciados e com uma alta tendncia a se produzir docu-
mentos formais [Langr 2005].
Como o desenvolvimento orientado a testes (Test-Driven Development - TDD)
uma prtica fundamental da Programao Extrema (eXtreme Programming - XP), que est
comeando a ganhar uma ampla aceitao entre as entidades desenvolvedoras de software,
este estudo visa evidenciar de que maneira o emprego do TDD afeta a qualidade de um
software.
TDD uma tcnica de desenho e desenvolvimento que nos ajuda a construir um sistema
de forma incremental, com a conscincia de que nunca nos afastamos de uma baseline
funcional e entregvel. O ciclo Teste-Codificao-Refatorao quem dita o ritmo do
desenvolvimento atravs de pequenos e controlados passos. A sequncia clssica que nos
foi ensinada, onde primeiramente produzimos o desenho, implementamos o desenho, e
s ento testamos o software em busca dos defeitos, totalmente invertida quando com-
parada ao ciclo Teste-Codificao-Refatorao.
Primeiramente escrevemos o teste, depois escrevemos o cdigo para fazer este
teste passar e ento passamos para a fase de desenho. Esta fase de desenho diferente da
fase de desenho tradicional. No TDD ela chamada de refatorao, onde o desenho atual
do cdigo transformado em um desenho melhor.
O ciclo Teste-Codificao-Refatorao tambm pode ser chamado de ciclo
Vermelho-Verde-Refatorao [Astels 2003]. O vermelho simboliza a fase inicial do ci-
clo TDD onde o teste escrito falha. Ele falha porque o sistema no est funcional; ele
no possui as funcionalidades que desejamos que ele tenha. Em alguns ambientes de
desenvolvimento, essa falha evidenciada atravs da exibio de uma barra vermelha.
Na segunda fase implementamos as funcionalidades que faltavam para fazer todos
os testes passarem, ou seja, os testes que j existiam e o novo teste recm-introduzido.
Neste momento, a barra visual deve se tornar verde. Somente se passa para a prxima
etapa quando nenhum teste estiver falho.
Na ltima parte do ciclo feita a refatorao. Refinamos o desenho do cdigo
sem alterarmos seu comportamento externo, mantendo todos os testes passando e a com
a barra visual exibindo a cor verde.
3.2. Refatorao
Os testes lhe do a confiana de que grandes refatoraes no mudaro o comportamento
do sistema, o que se conclui que, quanto maior a confiana, mais agressivamente voc
poder conduzir refatoraes em larga escala que estendero a vida de seu sistema. A
refatorao torna a elaborao dos prximos testes muito mais fcil [Beck 2002].
Custos so reduzidos porque a refatorao contnua evita que o desenho se degrade
com o passar do tempo, assegurando que o cdigo continue fcil de ser entendido, mantido
e modificado.
4. Concluses
Esta tcnica de desenvolvimento produz desenhos menos acoplados que so mais fceis
de manter, reduz altamente a quantidade de defeitos, e refora a construo e manuteno
apenas do que realmente necessrio. Finalmente, testes bem escrito atuam como um
tipo de requisitos executveis que ajudam a manter o entendimento compartilhado da
equipe de desenvolvimento, sobre como o sistema de software representa os problemas
do mundo real.
Por outro lado, o fato de se ter um grande nmero de testes unitrios passando
com sucesso, pode passar uma falsa sensao de segurana, resultando na implementa-
o de menos atividades de garantia de qualidade, como testes de integrao e testes de
conformidade.
importante ressaltar tambm que, esta tcnica no garante a obteno de nveis
aceitveis em certos aspectos do software final, como usabilidade e desempenho. Alm
disso, TDD no consegue mitigar riscos relacionados com a falta de requisitos ou com
requisitos erroneamente definidos.
Referncias
Astels, D. (2003). Test-Driven Development: A Practical Guide. Prentice Hall PTR.
Beck, K. (1999). Extreme Programming Explained: Embrace Change. Addison Wesley.
Beck, K. (2002). Test-Driven Development By Example. Addison Wesley.
Bellware, S. (2009). http://www.tvagile.com/2009/08/13/good-test-better-code-from-
unit-testing-to-behavior-driven-development/. Good Test, Better Code - From Unit
Testing to Behavior-Driven Development (10:40).
Fowler, M. (2006). Continuous integration.
Friedman, L. (2009). Quality - an agile point of view. TE: Testing Experience, Setem-
bro:16 17.
2
Segundo [Fowler 2006], integrao contnua uma pratica de desenvolvimento de software onde os
membros de um time integram seu trabalho frequentemente, geralmente cada pessoa integra pelo menos
diariamente, podendo haver mltiplas integraes por dia. Cada integrao verificada por um build auto-
matizado (incluindo testes) para detectar erros de integrao o mais rpido possvel. Muitos times acham
que essa abordagem leva a uma significante reduo nos problemas de integrao e permite que um time
desenvolva um software coeso mais rapidamente.
Hawley, M. (2004). http://weblogs.asp.net/mhawley/archive/2004/04/15/114005.aspx.
TDD Research Findings.
James P. Womack, Daniel T. Jones, D. R. (1990). The machine that changed the world.
Koskela, L. (2008). Test Driven: Pratical TDD and Acceptance TDD for Java Developers.
Manning.
Langr, J. (2005). Agile Java Crafting Code with Test-Driven Development. Prentice Hall
PTR.
Lewis, W. E. (2004). Software Testing and Continuous Quality Improvement. Auerbach,
2 edition.
Schwaber, K. (2004). Agile Project Management with Scrum. Microsoft Press.
Tian, J. (2005). Software Quality Engineering: Testing, Quality Assurance, and Quantifi-
able Improvement. John Wiley & Sons.