{"id":3806,"date":"2022-11-30T22:01:22","date_gmt":"2022-11-30T21:01:22","guid":{"rendered":"https:\/\/gdksoftware.com\/?post_type=knowledge&#038;p=3806"},"modified":"2023-03-31T20:15:43","modified_gmt":"2023-03-31T19:15:43","slug":"desenvolvimento-orientado-a-testes","status":"publish","type":"knowledge","link":"https:\/\/gdksoftware.com\/pt-br\/base-de-conhecimento\/desenvolvimento-orientado-a-testes","title":{"rendered":"Desenvolvimento Orientado a Testes"},"content":{"rendered":"<h2>O que \u00e9 Desenvolvimento Orientado por Testes?<\/h2>\n<p>O Desenvolvimento Orientado por Testes (TDD) \u00e9 um processo de desenvolvimento de software introduzido por Kent Beck como parte da metodologia de programa\u00e7\u00e3o extrema. No TDD, os testes unit\u00e1rios s\u00e3o escritos primeiro antes de quaisquer implementa\u00e7\u00f5es serem desenvolvidas.<\/p>\n<p>Os requisitos s\u00e3o capturados como casos de teste. Como novos requisitos s\u00e3o acrescentados ao software, o mesmo acontece com os novos casos de teste. \u00c0 medida que o sistema \u00e9 desenvolvido, constru\u00edmos uma imagem maior dos requisitos e aumentamos a cobertura dos testes unit\u00e1rios.<\/p>\n<h2>O processo TDD<\/h2>\n<p>O processo recomendado pela TDD \u00e9 o seguinte:<\/p>\n<ol>\n<li>Escrever um teste de reprova\u00e7\u00e3o.<\/li>\n<li>Execute os testes, que devem ser reprovados.<\/li>\n<li>Escreva o c\u00f3digo mais simples poss\u00edvel para que o novo teste seja aprovado.<\/li>\n<li>Execute os testes, assegurando que eles agora passem.<\/li>\n<li>Refatorar conforme necess\u00e1rio, executando os testes posteriormente para garantir que a funcionalidade seja preservada.<\/li>\n<li>Repita o processo para novos requisitos.<\/li>\n<\/ol>\n<p>Um ponto-chave aqui \u00e9 que os testes s\u00e3o adicionados <strong>primeiro<\/strong> antes de qualquer desenvolvimento ser feito para implementar a funcionalidade. Escrever a solu\u00e7\u00e3o mais simples permite que o teste seja aprovado, depois isto pode ser refinado por refatora\u00e7\u00e3o. Os testes ent\u00e3o garantem que qualquer refatora\u00e7\u00e3o n\u00e3o tenha introduzido nenhum defeito.<\/p>\n<h2>Benef\u00edcios<\/h2>\n<p>O desenvolvimento orientado por testes geralmente produz c\u00f3digos de melhor qualidade e reduz a margem para defeitos. Ele encoraja o uso de pequenas itera\u00e7\u00f5es ao desenvolver software.<\/p>\n<p>Um efeito colateral \u00fatil \u00e9 que os testes servem como uma forma de documenta\u00e7\u00e3o para as exig\u00eancias do software.<\/p>\n<p>O c\u00f3digo desenvolvido sob TDD pode levar a um c\u00f3digo flex\u00edvel e extens\u00edvel. Isto porque os desenvolvedores muitas vezes t\u00eam que pensar em termos de unidades menores que podem ser testadas isoladamente e integradas em conjunto. Como apenas a quantidade m\u00ednima de c\u00f3digo \u00e9 adicionada para que os testes sejam aprovados, \u00e9 mais prov\u00e1vel que os pr\u00f3prios testes cubram todos os caminhos do c\u00f3digo no software.<\/p>\n<p>Quando usado em conjunto com um sistema de controle de fonte, em caso de falha nos testes, o c\u00f3digo pode ser revertido para a \u00faltima vers\u00e3o que teve um conjunto completo de testes que passaram.<\/p>\n<h2>Limita\u00e7\u00f5es<\/h2>\n<p>Embora seja f\u00e1cil de usar o TDD com novos projetos, \u00e9 dif\u00edcil de aplicar aos sistemas existentes ou herdados. Se um novo c\u00f3digo for adicionado ao software antigo, ent\u00e3o claramente estas novas partes podem ser desenvolvidas com TDD, mas adicionar testes ao c\u00f3digo antigo pode ser dif\u00edcil e demorado.<\/p>\n<p>Alguns processos s\u00e3o dif\u00edceis de testar, tais como processos de Interface de Usu\u00e1rio ou conectividade com banco de dados.<\/p>\n<p>Um grande n\u00famero de testes de aprova\u00e7\u00e3o pode oferecer uma falsa sensa\u00e7\u00e3o de seguran\u00e7a, levando a testes insuficientes de outras atividades.<\/p>\n<p>Desenvolver e manter uma grande quantidade de testes pode ser um processo demorado.<\/p>\n<h2>Implementando o TDD com Delphi<\/h2>\n<p>O desenvolvimento orientado a testes pode ser facilmente realizado usando DUnitX, a estrutura de teste da unidade que \u00e9 fornecida com Delphi. Usando o assistente integrado no Delphi, \u00e9 f\u00e1cil criar um projeto de teste DUnitX, completo com uma unidade de teste e alguns testes de amostra.<\/p>\n<p>Escrever um teste de falha pode ser t\u00e3o simples quanto escrever um teste vazio que n\u00e3o chama nenhuma funcionalidade:<\/p>\n<pre style=\"background: #ffffff; overflow: auto; width: auto; border: solid gray; border-width: .1em .1em .1em .8em; padding: .2em .6em;\">unit Tests.VATCalculator;\r\n\r\ninterface\r\n\r\nuses\r\n  DUnitX.TestFramework;\r\n\r\ntype\r\n  [TestFixture]\r\n  TTestVATCalculator = class\r\n  public\r\n    [Test]\r\n    [TestCase ('100_Pounds', '100,20')]\r\n    procedure TestGetVATAmount(const NetAmount: Currency; const ExpectedAmount: Currency);\r\n  end;\r\n\r\nimplementation\r\n\r\nprocedure TTestVATCalculator.TestGetVATAmount(const NetAmount: Currency; const ExpectedAmount: Currency);\r\nbegin\r\n  var ReturnValue: Currency;\r\n  \/\/ No implementation\r\n  Assert.AreEqual(ExpectedAmount, ReturnValue);\r\nend;\r\n\r\ninitialization\r\n\r\n  TDUnitX.RegisterTestFixture(TTestVATCalculator);\r\n\r\nend.\r\n\r\n<\/pre>\n<pre style=\"margin: 0; line-height: 125%;\"><\/pre>\n<p>A execu\u00e7\u00e3o deste teste resultar\u00e1 na falha do teste. Implementar a funcionalidade para o teste com o c\u00f3digo mais simples poss\u00edvel:<\/p>\n<div style=\"background: #ffffff; overflow: auto; width: auto; border: solid gray; border-width: .1em .1em .1em .8em; padding: .2em .6em;\">\n<pre>unit VAT.Calculator.Interfaces;\r\n\r\ninterface\r\n\r\ntype\r\n  IVATCalculator = interface\r\n    ['{1576AC66-A116-47EB-9C6A-23D4E2C21B2C}']\r\n    function GetVAT(const NetAmount: Currency): Currency;\r\n  end;\r\n\r\nimplementation\r\n\r\nend.<\/pre>\n<pre style=\"margin: 0; line-height: 125%;\"><\/pre>\n<\/div>\n<p>&nbsp;<\/p>\n<div style=\"background: #ffffff; overflow: auto; width: auto; border: solid gray; border-width: .1em .1em .1em .8em; padding: .2em .6em;\">\n<pre>unit VAT.Calculator;\r\n\r\ninterface\r\n\r\nuses\r\n  VAT.Calculator.Interfaces;\r\n\r\ntype\r\n  TVATCalculator = class(TInterfacedObject, IVATCalculator)\r\n  public\r\n    function GetVAT(const NetAmount: Currency): Currency;\r\n  end;\r\n\r\nimplementation\r\n\r\nfunction TVATCalculator.GetVAT(const NetAmount: Currency): Currency;\r\nbegin\r\n  Result := NetAmount * 20 \/ 100;\r\nend;\r\n\r\nend.<\/pre>\n<pre style=\"margin: 0; line-height: 125%;\"><\/pre>\n<\/div>\n<p>&nbsp;<\/p>\n<div style=\"background: #ffffff; overflow: auto; width: auto; border: solid gray; border-width: .1em .1em .1em .8em; padding: .2em .6em;\">\n<pre>unit Tests.VATCalculator;\r\n\r\ninterface\r\n\r\nuses\r\n  DUnitX.TestFramework,\r\n  VAT.Calculator.Interfaces;\r\n\r\ntype\r\n  [TestFixture]\r\n  TTestVATCalculator = class\r\n  private\r\n    FVATCalculator: IVATCalculator;\r\n  public\r\n    [Setup]\r\n    procedure Setup;\r\n\r\n    [Test]\r\n    [TestCase ('100_Pounds', '100,20')]\r\n    procedure TestGetVATAmount(const NetAmount: Currency; const ExpectedAmount: Currency);\r\n  end;\r\n\r\nimplementation\r\n\r\nuses\r\n  VAT.Calculator;\r\n\r\nprocedure TTestVATCalculator.Setup;\r\nbegin\r\n  FVATCalculator := TVATCalculator.Create;\r\nend;\r\n\r\nprocedure TTestVATCalculator.TestGetVATAmount(const NetAmount: Currency; const ExpectedAmount: Currency);\r\nvar\r\n  ReturnValue: Currency;\r\nbegin\r\n  ReturnValue := FVATCalculator.GetVAT(NetAmount);\r\n\r\n  Assert.AreEqual(ExpectedAmount, ReturnValue);\r\nend;\r\n\r\ninitialization\r\n\r\n  TDUnitX.RegisterTestFixture(TTestVATCalculator);\r\n\r\nend.<\/pre>\n<pre style=\"margin: 0; line-height: 125%;\"><\/pre>\n<\/div>\n<p>Os testes agora ser\u00e3o aprovados e o processo pode ser continuado para acrescentar mais requisitos e refatorar conforme necess\u00e1rio.<\/p>\n<h2>Conclus\u00e3o<\/h2>\n<p>O desenvolvimento orientado a testes \u00e9 uma ferramenta poderosa para capturar os requisitos e garantir que os testes sejam desenvolvidos ao mesmo tempo que o software. \u00c9 melhor utilizado para novos projetos ou para adicionar novos m\u00f3dulos a projetos existentes. Embora possa ser demorado, os testes fornecem um mecanismo valioso para garantir que qualquer nova adi\u00e7\u00e3o ao software n\u00e3o quebre nenhuma funcionalidade existente. Ele continua sendo uma ferramenta muito \u00fatil na caixa de ferramentas de um desenvolvedor de software.<\/p>\n<p>&nbsp;<\/p>\n","protected":false},"featured_media":0,"parent":0,"template":"","class_list":["post-3806","knowledge","type-knowledge","status-publish","hentry","knowledge-category-arquivo-delphi","knowledge-category-desenvolvimento-de-software"],"acf":{"author":2919,"type_hero":"compact","hero_image":3803,"hero_image_position":"Desenvolvimento Orientado a Testes","hero_title":"","hero_content":"","hero_link":null,"hero_show_h1":false},"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v26.8 (Yoast SEO v27.4) - https:\/\/yoast.com\/product\/yoast-seo-premium-wordpress\/ -->\n<title>Desenvolvimento Orientado a Testes - GDK Software<\/title>\n<meta name=\"description\" content=\"O que \u00e9 Desenvolvimento Orientado por Testes? O Desenvolvimento Orientado por Testes (TDD) \u00e9 um processo de desenvolvimento de software introduzido... saiba mais!\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/gdksoftware.com\/pt-br\/base-de-conhecimento\/desenvolvimento-orientado-a-testes\" \/>\n<meta property=\"og:locale\" content=\"pt_BR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Desenvolvimento Orientado a Testes\" \/>\n<meta property=\"og:description\" content=\"O que \u00e9 Desenvolvimento Orientado por Testes? O Desenvolvimento Orientado por Testes (TDD) \u00e9 um processo de desenvolvimento de software introduzido... saiba mais!\" \/>\n<meta property=\"og:url\" content=\"https:\/\/gdksoftware.com\/pt-br\/base-de-conhecimento\/desenvolvimento-orientado-a-testes\" \/>\n<meta property=\"og:site_name\" content=\"GDK Software\" \/>\n<meta property=\"article:modified_time\" content=\"2023-03-31T19:15:43+00:00\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Est. tempo de leitura\" \/>\n\t<meta name=\"twitter:data1\" content=\"5 minutos\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/gdksoftware.com\\\/pt-br\\\/base-de-conhecimento\\\/desenvolvimento-orientado-a-testes\",\"url\":\"https:\\\/\\\/gdksoftware.com\\\/pt-br\\\/base-de-conhecimento\\\/desenvolvimento-orientado-a-testes\",\"name\":\"Desenvolvimento Orientado a Testes - GDK Software\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/gdksoftware.com\\\/pt-br#website\"},\"datePublished\":\"2022-11-30T21:01:22+00:00\",\"dateModified\":\"2023-03-31T19:15:43+00:00\",\"description\":\"O que \u00e9 Desenvolvimento Orientado por Testes? O Desenvolvimento Orientado por Testes (TDD) \u00e9 um processo de desenvolvimento de software introduzido... saiba mais!\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/gdksoftware.com\\\/pt-br\\\/base-de-conhecimento\\\/desenvolvimento-orientado-a-testes#breadcrumb\"},\"inLanguage\":\"pt-BR\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/gdksoftware.com\\\/pt-br\\\/base-de-conhecimento\\\/desenvolvimento-orientado-a-testes\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/gdksoftware.com\\\/pt-br\\\/base-de-conhecimento\\\/desenvolvimento-orientado-a-testes#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/gdksoftware.com\\\/pt-br\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Knowledgebase\",\"item\":\"https:\\\/\\\/gdksoftware.com\\\/pt-br\\\/base-de-conhecimento\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Desenvolvimento de software\",\"item\":\"https:\\\/\\\/gdksoftware.com\\\/pt-br\\\/knowledgebase-category\\\/desenvolvimento-de-software\"},{\"@type\":\"ListItem\",\"position\":4,\"name\":\"Desenvolvimento Orientado a Testes\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/gdksoftware.com\\\/pt-br#website\",\"url\":\"https:\\\/\\\/gdksoftware.com\\\/pt-br\",\"name\":\"GDK Software\",\"description\":\"Zet de stip op je horizon\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/gdksoftware.com\\\/pt-br?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"pt-BR\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Desenvolvimento Orientado a Testes - GDK Software","description":"O que \u00e9 Desenvolvimento Orientado por Testes? O Desenvolvimento Orientado por Testes (TDD) \u00e9 um processo de desenvolvimento de software introduzido... saiba mais!","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/gdksoftware.com\/pt-br\/base-de-conhecimento\/desenvolvimento-orientado-a-testes","og_locale":"pt_BR","og_type":"article","og_title":"Desenvolvimento Orientado a Testes","og_description":"O que \u00e9 Desenvolvimento Orientado por Testes? O Desenvolvimento Orientado por Testes (TDD) \u00e9 um processo de desenvolvimento de software introduzido... saiba mais!","og_url":"https:\/\/gdksoftware.com\/pt-br\/base-de-conhecimento\/desenvolvimento-orientado-a-testes","og_site_name":"GDK Software","article_modified_time":"2023-03-31T19:15:43+00:00","twitter_card":"summary_large_image","twitter_misc":{"Est. tempo de leitura":"5 minutos"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/gdksoftware.com\/pt-br\/base-de-conhecimento\/desenvolvimento-orientado-a-testes","url":"https:\/\/gdksoftware.com\/pt-br\/base-de-conhecimento\/desenvolvimento-orientado-a-testes","name":"Desenvolvimento Orientado a Testes - GDK Software","isPartOf":{"@id":"https:\/\/gdksoftware.com\/pt-br#website"},"datePublished":"2022-11-30T21:01:22+00:00","dateModified":"2023-03-31T19:15:43+00:00","description":"O que \u00e9 Desenvolvimento Orientado por Testes? O Desenvolvimento Orientado por Testes (TDD) \u00e9 um processo de desenvolvimento de software introduzido... saiba mais!","breadcrumb":{"@id":"https:\/\/gdksoftware.com\/pt-br\/base-de-conhecimento\/desenvolvimento-orientado-a-testes#breadcrumb"},"inLanguage":"pt-BR","potentialAction":[{"@type":"ReadAction","target":["https:\/\/gdksoftware.com\/pt-br\/base-de-conhecimento\/desenvolvimento-orientado-a-testes"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/gdksoftware.com\/pt-br\/base-de-conhecimento\/desenvolvimento-orientado-a-testes#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/gdksoftware.com\/pt-br"},{"@type":"ListItem","position":2,"name":"Knowledgebase","item":"https:\/\/gdksoftware.com\/pt-br\/base-de-conhecimento"},{"@type":"ListItem","position":3,"name":"Desenvolvimento de software","item":"https:\/\/gdksoftware.com\/pt-br\/knowledgebase-category\/desenvolvimento-de-software"},{"@type":"ListItem","position":4,"name":"Desenvolvimento Orientado a Testes"}]},{"@type":"WebSite","@id":"https:\/\/gdksoftware.com\/pt-br#website","url":"https:\/\/gdksoftware.com\/pt-br","name":"GDK Software","description":"Zet de stip op je horizon","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/gdksoftware.com\/pt-br?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"pt-BR"}]}},"_links":{"self":[{"href":"https:\/\/gdksoftware.com\/pt-br\/wp-json\/wp\/v2\/knowledge\/3806","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/gdksoftware.com\/pt-br\/wp-json\/wp\/v2\/knowledge"}],"about":[{"href":"https:\/\/gdksoftware.com\/pt-br\/wp-json\/wp\/v2\/types\/knowledge"}],"acf:post":[{"embeddable":true,"href":"https:\/\/gdksoftware.com\/pt-br\/wp-json\/wp\/v2\/team\/2919"}],"wp:attachment":[{"href":"https:\/\/gdksoftware.com\/pt-br\/wp-json\/wp\/v2\/media?parent=3806"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}