Escolar Documentos
Profissional Documentos
Cultura Documentos
Técnicas Ágeis
Martin Fowler
Conhecido autor britânico, tendo publicado vários livros nas áreas de Arquitetura de
computadores, UML, NoSql, Refatoração e Desenvolvimento Ágil.
1.2.1 Automação
Juntamente com a técnica TDD na área de testes de software, a automação mudou
radicalmente o papel da área no contexto do processo de desenvolvimento como um
todo. Assim como assistimos os ambientes de desenvolvimento (IDE’s) incorporarem o
processo de compilação automática do código ao se salvar um arquivo, estamos
assistindo o mesmo em relação aos testes. Já são populares ferramentas e frameworks
que executam novamente os testes a cada vez que se salva o código, dando feedback
quase instantâneo sobre o resultado das últimas alterações. É quase como se os editores
pudessem sublinhar o trecho de código defeituoso, como já fazem com erros de
compilação, só que dessa vez detectando defeitos de lógica.
1.2.2 Definição
A técnica consiste em criar o código seguindo as seguintes etapas:
● Escreva um teste automatizado, antes de escrever qualquer código de produção;
● Remova duplicações.
Escrita do Teste
def test_unitary_list
original = [1] # declara uma lista com valor 1
ordered = Sorting.sort(original) # invoca o método sort da classe Sorting
assert_equal(original, ordered) # Compara os parâmetros
end
Métodos Assert
Os métodos Assert (afirmações) estão presentes em frameworks de testes de várias
linguagens. O método, que possui várias variações, permite comparar os resultados
esperados de um teste.
Código do programa:
class Sorting
def self.sort(list)
return nil
end
end
Desta vez, o erro passa a nos ser reportado pelo framework de testes, e não mais pelo
compilador:
Nossa tarefa ainda é bem clara: precisamos fazer o teste passar. Nesse ponto, o
conselho da prática é para que se escreva o código mais simples possível que faça o
teste passar. E apenas ele!
Nenhuma complexidade desnecessária deve ser incluída no código, a menos que
esteja sendo explicitamente requisitada pelo teste. Nesse caso, sendo esse nosso
primeiro teste, o código mais simples é retornar apenas a lista que o teste espera.
Teste:
class SortingTest < Test::Unit::TestCase
def test_single_list
original = [1]
ordered = Sorting.sort(original)
assert_equal(original, ordered)
end
end
Código do programa:
class Sorting
def self.sort(list)
return [1]
end
end
Tal solução pode ser um tanto simplista para quem não está acostumado, afinal
isso não parece um algoritmo de ordenação ainda. Contudo, é uma solução interessante
aqui, por ser bastante emblemática. Sendo levemente exagerada, ela ilustra muito bem o
princípio de design que a justifica: simplicidade e pragmatismo.
Seria possível, nesse ponto, em vez de escrever um programa simplista, escrever
logo todo o algoritmo de ordenação que se tem em mente. Isso satisfaria o teste da
mesma forma. No entanto, nesse caso, chegaríamos a um código desproporcionalmente
mais complexo do que a suite correspondente – uma anomalia, do ponto de vista do TDD.
Nosso código vai chegar lá, mas aos poucos e em sincronia com a suite que o
sustenta.
O princípio conhecido como YAGNI (“You Ain’t Gonna Need It”) defende que não se
deve adicionar hoje código de uma funcionalidade que só será útil amanhã.
2 Referências
AGILE MANIFESTO. Disponível em http://agilemanifesto.org/. Acessado em 21 de julho
de 2018.
DUARTE, Luiz. Scrum e Métodos Ágeis: Um Guia Prático. Editora LuizTools. Edição do
Kindle. 2016.