{"id":5,"date":"2006-04-24T05:02:38","date_gmt":"2006-04-24T04:02:38","guid":{"rendered":"http:\/\/www.dtsato.com\/blog\/default\/Agile\/XP\/?permalink=Design-Incremental-em-XP.wiki"},"modified":"2006-04-24T05:02:38","modified_gmt":"2006-04-24T04:02:38","slug":"design-incremental-em-xp","status":"publish","type":"post","link":"http:\/\/www.dtsato.com\/blog\/2006\/04\/24\/design-incremental-em-xp\/","title":{"rendered":"Design Incremental em XP"},"content":{"rendered":"<p>Nesse post falaremos um pouco sobre alguns dos mitos relacionados ao design em XP e sobre a nova abordagem de Kent Beck para garantir a qualidade e a simplicidade do design de um sistema.<\/p>\n<p class=\"paragraph\"\/>Na primeira edi\u00e7\u00e3o do livro <span class=\"nobr\"><a href=\"http:\/\/www.amazon.com\/exec\/obidos\/redirect?link_code=as2&#38;path=ASIN\/0201616416&#38;tag=danilosato-20&#38;camp=1789&#38;creative=9325\">Extreme Programming Explained<\/a><\/span>, Kent Beck prop\u00f4s 3 pr\u00e1ticas que estavam diretamente relacionadas ao design do sistema: <span class=\"nobr\"><a href=\"http:\/\/www.extremeprogramming.org\/rules\/simple.html\">Design Simples<\/a><\/span>, <span class=\"nobr\"><a href=\"http:\/\/www.extremeprogramming.org\/rules\/refactor.html\">Refatora\u00e7\u00e3o<\/a><\/span> e <span class=\"nobr\"><a href=\"http:\/\/www.extremeprogramming.org\/rules\/metaphor.html\">Met\u00e1fora<\/a><\/span>. Dessas tr\u00eas, a \u00faltima \u00e9 a que mais gerou confus\u00e3o nos praticantes de XP, sendo uma das menos utilizadas na pr\u00e1tica. Com rela\u00e7\u00e3o \u00e0s outras duas, j\u00e1 ouvi diversas cr\u00edticas e d\u00favidas:<\/p>\n<ul class=\"star\">\n<li>Como garantir que estou sempre <span class=\"nobr\"><a href=\"http:\/\/www.c2.com\/cgi\/wiki?DoTheSimplestThingThatCouldPossiblyWork\">implementando a id\u00e9ia mais simples para resolver meu  problema<\/a><\/span>?<\/li>\n<li>Quais os fatores para determinar a  <span class=\"nobr\"><a href=\"http:\/\/www.c2.com\/cgi\/wiki?WhatIsSimplest\">simplicidade<\/a><\/span> do meu c\u00f3digo?<\/li>\n<li>Evitar <span class=\"nobr\"><a href=\"http:\/\/c2.com\/cgi\/wiki?BigDesignUpFront\">BDUF<\/a><\/span> (<i class=\"italic\">Big Design Up-Front<\/i>) significa nunca pensar no design?<\/li>\n<\/ul>\n<p>Algumas dessas d\u00favidas est\u00e3o relacionadas \u00e0 forma como elas foram apresentadas na primeira edi\u00e7\u00e3o, enquanto outras se baseiam numa interpreta\u00e7\u00e3o err\u00f4nea da pr\u00e1tica no contexto de XP. A resposta para essas perguntas est\u00e1 melhor estruturada numa nova pr\u00e1tica da segunda edi\u00e7\u00e3o do livro: o <b class=\"bold\">Design Incremental<\/b>. Invista no design do sistema um pouco a cada dia e se esforce para que o design seja excelente para resolver as necessidades atuais do sistema.<\/p>\n<ul class=\"star\">\n<li><i class=\"italic\">Quando?<\/i>: Ao contr\u00e1rio de pensar pouco ou nunca pensar no design, a estrat\u00e9gia de XP \u00e9 pensar <b class=\"bold\">sempre<\/b> no design.<\/li>\n<li><i class=\"italic\">Como?<\/i>: Fa\u00e7a mudan\u00e7as em passos seguros e pequenos. A disciplina que facilita a evolu\u00e7\u00e3o constante do design em XP \u00e9 a <span class=\"nobr\"><a href=\"http:\/\/www.refactoring.com\/\">refatora\u00e7\u00e3o<\/a><\/span>, que melhora a qualidade do c\u00f3digo sem alterar o comportamento do sistema.<\/li>\n<li><i class=\"italic\">Onde?<\/i>: A heur\u00edstica mais simples e eficaz \u00e9 eliminar c\u00f3digo duplicado. Adicionar uma <i class=\"italic\">feature<\/i> num \u00fanico lugar \u00e9 muito mais simples e r\u00e1pido do que ter que mexer em c\u00f3digo espalhado por diversas classes.<\/li>\n<li><i class=\"italic\">Por qu\u00ea?<\/i>: Um design simples \u00e9 mais comunicativo e mais f\u00e1cil de ser entendido e alterado. Se o objetivo de XP \u00e9 manter o custo da mudan\u00e7a constante, a facilidade de alterar o design a qualquer momento \u00e9 fundamental.<\/li>\n<\/ul>\n<p>Os novos crit\u00e9rios propostos por Kent Beck para avaliar a simplicidade s\u00e3o, em ordem de prioridade:<\/p>\n<ol>\n<li><i class=\"italic\">Apropriado para o p\u00fablico-alvo<\/i>: O c\u00f3digo deve ser facilmente entendido pelas pessoas que v\u00e3o trabalhar com ele.<\/li>\n<li><i class=\"italic\">Comunicativo<\/i>: Todas as id\u00e9ias e inten\u00e7\u00f5es devem estar presentes no c\u00f3digo, facilitando o entendimento do time e de um futuro leitor.<\/li>\n<li><i class=\"italic\">Fatorado<\/i>: A exist\u00eancia de c\u00f3digo duplicado dificulta as altera\u00e7\u00f5es e o entendimento.<\/li>\n<li><i class=\"italic\">M\u00ednimo<\/i>: Cumprindo as tr\u00eas restri\u00e7\u00f5es acima, um sistema deve ter o menor n\u00famero de elementos poss\u00edvel. Menos classes implicam em menos c\u00f3digo para testar, documentar e comunicar.<\/li>\n<\/ol>\n<p>Para auxiliar o entendimento dos crit\u00e9rios de XP para avaliar e produzir c\u00f3digo de qualidade, uma outra pr\u00e1tica &#8211; que a princ\u00edpio n\u00e3o parece ter rela\u00e7\u00e3o direta com o design &#8211; se mostra muito importante: o <b class=\"bold\">Desenvolvimento Orientado a Testes<\/b> (TDD &#8211; <i class=\"italic\">Test Driven Development<\/i>). Ela ser\u00e1 o tema dos pr\u00f3ximos posts e, ao contr\u00e1rio do que possa parecer, est\u00e1 t\u00e3o relacionada \u00e0 produ\u00e7\u00e3o de testes automatizados quanto \u00e0 produ\u00e7\u00e3o de c\u00f3digo mais simples, comunicativo, fatorado e m\u00ednimo.<\/p>\n<p class=\"paragraph\"\/>\n","protected":false},"excerpt":{"rendered":"<p>Nesse post falaremos um pouco sobre alguns dos mitos relacionados ao design em XP e sobre a nova abordagem de Kent Beck para garantir a qualidade e a simplicidade do design de um sistema. Na primeira edi\u00e7\u00e3o do livro Extreme Programming Explained, Kent Beck prop\u00f4s 3 pr\u00e1ticas que estavam diretamente relacionadas ao design do sistema: [&hellip;]<\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[21,36,64,82,94],"class_list":["post-5","post","type-post","status-publish","format-standard","hentry","category-uncategorized","tag-design","tag-incremental","tag-refactoring","tag-tdd","tag-xp"],"_links":{"self":[{"href":"http:\/\/www.dtsato.com\/blog\/wp-json\/wp\/v2\/posts\/5","targetHints":{"allow":["GET"]}}],"collection":[{"href":"http:\/\/www.dtsato.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/www.dtsato.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/www.dtsato.com\/blog\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"http:\/\/www.dtsato.com\/blog\/wp-json\/wp\/v2\/comments?post=5"}],"version-history":[{"count":0,"href":"http:\/\/www.dtsato.com\/blog\/wp-json\/wp\/v2\/posts\/5\/revisions"}],"wp:attachment":[{"href":"http:\/\/www.dtsato.com\/blog\/wp-json\/wp\/v2\/media?parent=5"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/www.dtsato.com\/blog\/wp-json\/wp\/v2\/categories?post=5"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/www.dtsato.com\/blog\/wp-json\/wp\/v2\/tags?post=5"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}