{"id":848,"date":"2019-04-30T08:58:21","date_gmt":"2019-04-30T08:58:21","guid":{"rendered":"https:\/\/devlooper.blog.br\/?p=848"},"modified":"2019-04-30T08:58:21","modified_gmt":"2019-04-30T08:58:21","slug":"entenda-o-que-e-tdd-e-quais-sao-as-suas-vantagens","status":"publish","type":"post","link":"https:\/\/www.locaweb.com.br\/blog\/temas\/codigo-aberto\/entenda-o-que-e-tdd-e-quais-sao-as-suas-vantagens\/","title":{"rendered":"Entenda o que \u00e9 TDD e quais s\u00e3o as suas vantagens"},"content":{"rendered":"<p><span>J\u00e1 parou para pensar na quantidade de vari\u00e1veis que determinam a qualidade do trabalho de um desenvolvedor? O mercado est\u00e1 o tempo inteiro exigindo de voc\u00ea agilidade com prazos, efici\u00eancia de c\u00f3digo, <\/span><a href=\"https:\/\/devlooper.blog.br\/materiais\/artigos\/qual-e-o-impacto-da-inovacao-disruptiva-no-trabalho-do-desenvolvedor\/\"><span>itera\u00e7\u00f5es constantes<\/span><\/a><span> e novas funcionalidades.<\/span><\/p>\n<p><span>Contudo, h\u00e1 maneiras de adequar o seu estilo de desenvolvimento a essas demandas que surgem o tempo todo? Tem sim, e se chama TDD.<\/span><\/p>\n<p><span>Veja o que \u00e9 essa abordagem de programa\u00e7\u00e3o e como ela pode ajudar voc\u00ea a conquistar clientes ou ganhar posi\u00e7\u00f5es de mais destaque na empresa. Vamos come\u00e7ar!<\/span><\/p>\n<h2><span>O que \u00e9 TDD (Test-Driven Development)?<\/span><\/h2>\n<p><span>TDD \u00e9 a sigla em ingl\u00eas para Test-Driven Development, o que se traduz como Desenvolvimento Orientado por Testes. O conceito j\u00e1 mais conhecido no meio \u00e9 mais como uma abordagem pr\u00e1tica na busca por modelos otimizados de trabalho.<\/span><\/p>\n<p><span>\u00c9 por isso que o TDD \u00e9 muito utilizado dentro da ideia de desenvolvimento com metodologias \u00e1geis, pois foca nos processos e em um fluxo c\u00edclico e constante de programa\u00e7\u00e3o.<\/span><\/p>\n<p><span>O seu pr\u00f3prio nome j\u00e1 d\u00e1 uma boa ideia do que exatamente \u00e9 um TDD. Desenvolver orientando-se por testes significa definir as barreiras a serem superadas (um teste em que voc\u00ea precisa passar) antes de come\u00e7ar a primeira linha de c\u00f3digo.<\/span><\/p>\n<p><span>Assim, voc\u00ea constr\u00f3i um software ou servi\u00e7o mirando para o lado certo, com o escopo personalizado em busca da <\/span><a href=\"https:\/\/devlooper.blog.br\/materiais\/artigos\/desenvolvedor-freelancer-aprenda-como-conseguir-mais-clientes\/\"><span>solu\u00e7\u00e3o que voc\u00ea procura<\/span><\/a><span>.<\/span><\/p>\n<h2><span>Como funciona esse processo?<\/span><\/h2>\n<p><span>Vamos destrinchar melhor o que envolve um processo de Test-Driven Development. A ideia principal aqui \u00e9 inverter a l\u00f3gica da programa\u00e7\u00e3o e assim definir com mais precis\u00e3o seus objetivos.<\/span><\/p>\n<p><span>Funciona assim: quando voc\u00ea vai criar um software novo ou vai adicionar uma funcionalidade a um produto j\u00e1 em funcionamento, geralmente parte direto para construir aquele c\u00f3digo \u2014 e, com o tempo, ver se est\u00e1 no caminho certo.<\/span><\/p>\n<p><span>No TDD, essa ordem \u00e9 trocada para que voc\u00ea enxergue a linha de chegada antes de come\u00e7ar a corrida. Imagine que voc\u00ea queira adicionar a funcionalidade de imprimir documentos em um sistema. Em vez de partir para o c\u00f3digo, voc\u00ea primeiro cria um teste para ver se a impress\u00e3o est\u00e1 funcionando.<\/span><\/p>\n<p><span>De primeira, claro, seu software vai falhar. Essa \u00e9 a ideia.\u00a0Agora, voc\u00ea tem um objetivo claro: desenvolver a solu\u00e7\u00e3o que vai passar naquele teste.<\/span><\/p>\n<p><span>Assim, h\u00e1 muito mais foco no desenvolvimento e voc\u00ea pode aproveitar essa agilidade para aprimorar e polir cada nova funcionalidade. Sim, at\u00e9 porque ficar feliz com uma nota 6 s\u00f3 vale para aquela mat\u00e9ria chata da faculdade que voc\u00ea queria muito passar de vez.<\/span><\/p>\n<p><span>A partir do momento em que voc\u00ea consegue superar o teste que criou, j\u00e1 tem uma base \u00f3tima para trabalhar na chamada refatora\u00e7\u00e3o (refactoring): reescrever a partir da solu\u00e7\u00e3o encontrada para ter coes\u00e3o e simplicidade no c\u00f3digo.<\/span><\/p>\n<h3><span>As etapas do TDD<\/span><\/h3>\n<p><span>D\u00e1 para resumir a pr\u00e1tica do desenvolvimento orientado por testes em 5 etapas fundamentais:<\/span><\/p>\n<ol>\n<li>\n<p><span>cria-se o c\u00f3digo que testar\u00e1 o resultado da nova funcionalidade, o seu teste guia;<\/span><\/p>\n<\/li>\n<li>\n<p><span>aplica-se esse teste ao produto em desenvolvimento para conhecer a falha e criar um objetivo de codifica\u00e7\u00e3o para alcan\u00e7ar aquele sucesso;<\/span><\/p>\n<\/li>\n<li>\n<p><span>desenvolve-se a funcionalidade, software ou itera\u00e7\u00e3o com foco absoluto em passar na avalia\u00e7\u00e3o, sem se preocupar com boas pr\u00e1ticas ou polimento;<\/span><\/p>\n<\/li>\n<li>\n<p><span>testa-se de novo a solu\u00e7\u00e3o at\u00e9 que ela seja aprovada no teste (sem, claro, atrapalhar o resultado em outras \u00e1reas do c\u00f3digo);<\/span><\/p>\n<\/li>\n<li>\n<p><span>refatora-se a nova funcionalidade, ou seja, escreve-se a vers\u00e3o final da solu\u00e7\u00e3o levando em conta a otimiza\u00e7\u00e3o e <\/span><a href=\"https:\/\/devlooper.blog.br\/materiais\/artigos\/gems-para-melhorar-a-qualidade-do-seu-codigo\/\"><span>qualidade<\/span><\/a><span> (como passar um rascunho a limpo).<\/span><\/p>\n<\/li>\n<\/ol>\n<p><span>Esse ciclo \u00e9 conhecido como Red, Green and Refactor. A ideia \u00e9 exatamente esta: falhar para entender o que \u00e9 preciso fazer, para ent\u00e3o ter sucesso e finalizar o seu c\u00f3digo.<\/span><\/p>\n<h2><span>Quais os tipos de testes que devem ser feitos?<\/span><\/h2>\n<p><span>O ideal no TDD \u00e9 que os testes sejam o mais espec\u00edficos poss\u00edveis para que voc\u00ea feche bem seu escopo em cada nova funcionalidade. Portanto, a maioria deles ser\u00e1 unit\u00e1ria \u2014 focar nas menores fra\u00e7\u00f5es do c\u00f3digo.<\/span><\/p>\n<p><span>Mas voc\u00ea sabe muito bem que o desenvolvimento \u00e9 um processo org\u00e2nico: muitas vari\u00e1veis t\u00eam influ\u00eancia umas sobre as outras e uma mudan\u00e7a em algo pequeno pode criar uma cadeia de bugs.<\/span><\/p>\n<p><span>Por isso, \u00e9 sempre bom contar tamb\u00e9m com os testes de integra\u00e7\u00e3o (que analisam como essas fra\u00e7\u00f5es se relacionam) e de sistema (que garantam que cada nova funcionalidade fa\u00e7a o papel esperado por ela no todo).<\/span><\/p>\n<p><span>Esse equil\u00edbrio s\u00f3 se encontra com experi\u00eancia, baseado no seu estilo de desenvolvimento, natureza e complexidade do projeto.<\/span><\/p>\n<h2><span>Como automatizar esses testes?<\/span><\/h2>\n<p><span>Voc\u00ea pode por conta pr\u00f3pria gastar um tempinho a mais para automatizar seus testes, principalmente os unit\u00e1rios \u2014 e, em retorno, economizar horas de trabalho no futuro.<\/span><\/p>\n<p><span>O ideal aqui \u00e9 priorizar aquelas avalia\u00e7\u00f5es mais comuns, que se repetem com frequ\u00eancia sempre que voc\u00ea vai adicionar algo novo ao c\u00f3digo. Inclusive \u00e9 uma boa ideia at\u00e9 criar um GUI para otimizar seu trabalho.<\/span><\/p>\n<h2><span>Quais as vantagens de utilizar o TDD no dia a dia?<\/span><\/h2>\n<p><span>S\u00f3 de entender como esse processo funciona, j\u00e1 ficam claras as vantagens que ele tr\u00e1s para um desenvolvedor, principalmente se ele trabalha por conta pr\u00f3pria com seu produto.<\/span><\/p>\n<p><span>Mesmo assim, \u00e9 bom listar todos esses benef\u00edcios para te inspirar a come\u00e7ar uma abordagem TDD o quanto antes. Veja:<\/span><\/p>\n<ul>\n<li>\n<p><span>uma vis\u00e3o mais objetiva de problemas e oportunidades a serem atacados e o que fazer para alcan\u00e7\u00e1-los;<\/span><\/p>\n<\/li>\n<li>\n<p><span>c\u00f3digo limpo e bem escrito, resultado da simplicidade na hora de cri\u00e1-lo e o tempo para refatorar;<\/span><\/p>\n<\/li>\n<li>\n<p><span>facilidade e <\/span><a href=\"https:\/\/devlooper.blog.br\/materiais\/artigos\/como-superar-os-desafios-atuais-de-seguranca-da-informacao\/\"><span>seguran\u00e7a<\/span><\/a><span> para corrigir bugs, j\u00e1 que voc\u00ea trabalha com o c\u00f3digo fra\u00e7\u00e3o por fra\u00e7\u00e3o;<\/span><\/p>\n<\/li>\n<li>\n<p><span>modularidade e flexibilidade no seu c\u00f3digo, proporcionados por essa quebra em pequenos objetivos;<\/span><\/p>\n<\/li>\n<li>\n<p><span>maior produtividade pelo foco na resolu\u00e7\u00e3o de problemas;<\/span><\/p>\n<\/li>\n<li>\n<p><span>economia de tempo sem perder qualidade de desenvolvimento, com menos bugs para corrigir e menos retrabalho.<\/span><\/p>\n<\/li>\n<\/ul>\n<p><span>Resumindo tudo isso, o Test-Driven Development \u00e9 um conceito de programa\u00e7\u00e3o organiza melhor o seu trabalho e permite que voc\u00ea ofere\u00e7a produtos com muito mais qualidade em muito menos tempo.<\/span><\/p>\n<p><span>Otimiza\u00e7\u00e3o, automa\u00e7\u00e3o, foco em resultados: qual profissional n\u00e3o se beneficia desse tipo de caracter\u00edstica na sua carreira? Adotar o TDD \u00e9 um passo incr\u00edvel nessa dire\u00e7\u00e3o.<\/span><\/p>\n<p><span>Curtiu a dica? Quer se atualizar mais ainda em ferramentas e t\u00e9cnicas de desenvolvimento? Ent\u00e3o, assine a nossa newsletter!<\/span><\/p>\n","protected":false},"excerpt":{"rendered":"<p>J\u00e1 parou para pensar na quantidade de vari\u00e1veis que determinam a qualidade do trabalho de um desenvolvedor? O mercado est\u00e1 o tempo inteiro exigindo de voc\u00ea agilidade com prazos, efici\u00eancia de c\u00f3digo, itera\u00e7\u00f5es constantes e novas funcionalidades. Contudo, h\u00e1 maneiras de adequar o seu estilo de desenvolvimento a essas demandas que surgem o tempo todo? [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":33294,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[5],"tags":[],"class_list":["post-848","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-codigo-aberto"],"acf":[],"_links":{"self":[{"href":"https:\/\/www.locaweb.com.br\/blog\/wp-json\/wp\/v2\/posts\/848","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.locaweb.com.br\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.locaweb.com.br\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.locaweb.com.br\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.locaweb.com.br\/blog\/wp-json\/wp\/v2\/comments?post=848"}],"version-history":[{"count":0,"href":"https:\/\/www.locaweb.com.br\/blog\/wp-json\/wp\/v2\/posts\/848\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.locaweb.com.br\/blog\/wp-json\/wp\/v2\/media\/33294"}],"wp:attachment":[{"href":"https:\/\/www.locaweb.com.br\/blog\/wp-json\/wp\/v2\/media?parent=848"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.locaweb.com.br\/blog\/wp-json\/wp\/v2\/categories?post=848"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.locaweb.com.br\/blog\/wp-json\/wp\/v2\/tags?post=848"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}