ebook img

Test-Driven Development: Teste e Design no Mundo Real PDF

165 Pages·2014·9.29 MB·Portuguese
Save to my drive
Quick download
Download
Most books are stored in the elastic cloud where traffic is expensive. For this reason, we have a limit on daily download.

Preview Test-Driven Development: Teste e Design no Mundo Real

© 2012,CasadoCódigo TodososdireitosreservadoseprotegidospelaLeinº9.610,de10/02/1998. Nenhuma parte deste livro poderá ser reproduzida, nem transmitida, sem auto- rização prévia por escrito da editora, sejam quais forem os meios: fotográficos, eletrônicos,mecânicos,gravaçãoouquaisqueroutros. CasadoCódigo Livrosparaoprogramador RuaVergueiro,3185-8ºandar 04101-300–VilaMariana–SãoPaulo–SP–Brasil Agradecimentos Essatalvezsejaaseçãomaisdifícildeseescrever,poisaquantidadedepessoasque participaramdiretaouindiretamentedolivroémuitogrande. Vou começar agradecimento meu pai, mãe e irmão, que a todo momento me apoiaram na decisão de fazer um mestrado, entender como ciência deve ser feita, e que sofreram junto comigo nos momentos de grande stress (que todo mestrado proporciona!). Agradeçotambémaomeuorientadordemestradoedoutorado,prof.Dr.Marco Aurelio Gerosa, que me ensinou como as coisas funcionam “do lado de lá”. Sem ele,achoqueesselivroseriamuitodiferente;seriamaisapaixonado,porémmenos verdadeiro.SemeutextoolhaTDDdemaneirafriaeimparcial,aculpaédele. Os srs. Paulo Silveira e Adriano Almeida também merecem uma lembrança. MesmonaépocaemqueaCasadoCódigonãoexistiadefato,elesjáhaviamaceitado aideiadolivrodeTDD.Obrigadopelaconfiança. Todasaspessoasdasúltimasempresasemqueatueitambémmeajudarammuito comasincontáveisconversasdecorredorsobreoassunto.Issocomcertezaenrique- ceumuitootexto. AgradeçotambémaosamigosJoséDonizetti,GuilhermeMoreiraeRafaelFer- reira,quegastaramtempolendoolivroemedandosugestõesdecomomelhorar. Porfim,obrigadoavocêqueestálendoesselivro.Esperoqueeleajude. Quem sou eu? MeunomeéMauricioAniche,etrabalhocomdesenvolvimentodesoftwarehápor voltade10anos. Emboapartedesses10anos,atueicomoconsultorparadiferentes empresas do mercado brasileiro e internacional. Com certeza, as linguagens mais utilizadaspormimaolongodaminhacarreiraforamJava,C#eC. Como sempre pulei de projeto em projeto (e, por consequência, de tecnologia emtecnologia),nuncafuiafundoemnenhumdelas. Pelocontrário,semprefoquei ementenderprincípiosquepudessemser levadosdeumaparaoutra, paraqueno fim,ocódigosaíssecomqualidade,independentedatecnologia. Em meu último ano da graduação, 2007, comecei a ler mais sobre a ideia de testes automatizados e TDD. Achei muito interessante e útil a ideia de se escrever um programa para testar seu programa, e decidi praticar TDD, por conta própria, paraentendermelhorcomoelafuncionava. Gosteimuitodoquevi.De2007emdiante,resolvipraticar,pesquisaredivulgar melhor minhas ideias sobre o assunto. Comecei devagar, apenas blogando o que estavanaminhacabeçaequegostariadefeedbackdeoutrosdesenvolvedores. Mas parafazerissodemaneiramaisdecente,resolviingressarnoprogramadeMestrado daUniversidadedeSãoPaulo. Lá,pesquiseisobreosefeitosdapráticadeTDDno designdeclasses. Ao longo desse tempo participei da grande maioria dos eventos relacionados ao assunto. Palestrei nos principais eventos de métodos ágeis do país (como Agile Brazil,EncontroÁgil),dedesenvolvimentodesoftware(QCONSPeDNAD),entre outrosmenores.Chegueiaparticipardeeventosinternacionaistambém;fuioúnico palestrantebrasileironoPrimeiroWorkshopInternacionalsobreTDD,em2010,na cidadedeParis.Issomostratambémquetenhoparticipadodoseventosacadêmicos. Em2011,apresenteiumestudosobreTDDnoWBMA(WorkshopBrasileirodeMé- todosÁgeis),eem2012,nomaiorsimpósiobrasileirosobreengenhariadesoftware, oSBES. Atualmente trabalho pela Caelum, como consultor e instrutor. Também sou alunodedoutoradopelaUniversidadedeSãoPaulo,ondecontinuoapesquisarsobre arelaçãodostestesdeunidadeequalidadedocódigo. CasadoCódigo Portanto,esseémeurelacionamentocomTDD.Nosúltimosanostenhoolhado eledetodosospontosdevistapossíveis:depraticante,deacadêmico,depesquisador, deapaixonado,defrio.Esselivroéorelatodetudoqueaprendinessesúltimosanos. iv Prefácio TDDéumadaspráticasdedesenvolvimentodesoftwaresugeridaspordiversasme- todologias ágeis, como XP. A ideia é fazer com que o desenvolvedor escreva testes automatizados de maneira constante ao longo do desenvolvimento. Mas, diferen- tementedoqueestamosacostumados, TDDsugerequeodesenvolvedorescrevao testeantesmesmodaimplementação. Essasimplesinversãonociclotrazdiversosbenefíciosparaoprojeto.Bateriasde testestendemasermaiores,cobrindomaiscasos,egarantindoumamaiorqualidade externa. Alémdisso, escrevertestesdeunidadeforcaráodesenvolvedoraescrever umcódigodemaiorqualidadepois,comoveremosaolongodolivro,paraescrever bonstestesdeunidade,odesenvolvedoréobrigadoafazerbomusodeorientaçãoa objetos. Apráticanosajudaaescreverumsoftwaremelhor, commaisqualidade, eum códigomelhor, maisfácildesermantidoeevoluído. Essesdoispontossãoimpor- tantíssimosemqualquersoftware,eTDDnosajudaaalcançá-los. Todapráticaque ajudaaaumentaraqualidadedosoftwareproduzidodeveserestudada. Neste livro, tentei colocar toda a experiência e tudo que aprendi ao longo des- sesúltimosanospraticandoepesquisandosobreoassunto.Mostreitambémooutro ladodaprática,seusefeitosnodesigndeclasses,queémuitofaladamaspoucodiscu- tidaeexplicada.ApráticadeTDD,quandobemusada,podeserbastanteprodutiva. Mas,comoveráaolongodolivro,ospraticantesdevemestarsemprealertasasdicas queotestedarásobrenossocódigo. Aqui,passaremosporeleseoleitoraofinaldo livroteráemmãosumanovaeexcelenteferramentadedesenvolvimento. Aquemsedestinaesselivro? Esselivroédestinadoadesenvolvedoresquequeremaprenderaescrevertestes demaneiraeficiente,equedesejamaprenderacomomelhoraraindamaisocódigo que produzem. Neste livro, utilizamos Java para demonstrar os conceitos discuti- dos,masvocêpodefacilmentelevarasdiscussõesfeitasaquiparaasualinguagem deprogramaçãofavorita.MesmoquevocêjápratiqueTDD,tenhocertezaqueaqui CasadoCódigo encontrarádiscussõesinteressantessobrecomoapráticadáfeedbacksobreproble- mas de acoplamento e coesão, bem como técnicas para escrever testes melhores e maisfáceisdeseremmantidos. Testadorestambémpodemsebeneficiardestelivro,entendendocomoescrever códigosdetestedequalidade,quandoounãousarTDD,ecomoreportarproblemas decódigoparaosdesenvolvedores. Comodevoestudar? Aolongodolivro,trabalhamosemdiversosexemplos,muitosimilaresaomundo real. Todocapítulopossuisuapartepráticaeparteteórica. Naparteprática,muito códigodetesteéescrito.Naparteteórica,refletimossobreocódigoqueproduzimos atéaquelemomento,oquefoifeitodebom,oquefoifeitoderuim,emelhoramos deacordo. Oleitorpoderefazertodososcódigosproduzidosnoscapítulos. PraticarTDD éessencialparaqueasideiasfiquemnaturais. Boaleitura! vi Sumário 1 Introdução 1 1.1 Eraumavezumprojetosemtestes... . . . . . . . . . . . . . . . . . . . 1 1.2 Porquedevemostestar? . . . . . . . . . . . . . . . . . . . . . . . . . . 2 1.3 Porquenãotestamos?. . . . . . . . . . . . . . . . . . . . . . . . . . . . 3 1.4 TestesautomatizadoseTDD . . . . . . . . . . . . . . . . . . . . . . . . 3 1.5 Conclusão. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4 2 TestesdeUnidade 5 2.1 Oqueéumtestedeunidade? . . . . . . . . . . . . . . . . . . . . . . . 5 2.2 Precisomesmoescrevê-los? . . . . . . . . . . . . . . . . . . . . . . . . 6 2.3 OPrimeiroTestedeUnidade. . . . . . . . . . . . . . . . . . . . . . . . 8 2.4 Continuandoatestar . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14 2.5 Conclusão. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16 3 IntroduçãoaoTest-DrivenDevelopment 17 3.1 Oproblemadosnúmerosromanos . . . . . . . . . . . . . . . . . . . . 18 3.2 Oprimeiroteste . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18 3.3 Refletindosobreoassunto . . . . . . . . . . . . . . . . . . . . . . . . . 25 3.4 Quaisasvantagens? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26 3.5 UmpoucodahistóriadeTDD . . . . . . . . . . . . . . . . . . . . . . . 28 3.6 Conclusão. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29 4 SimplicidadeeBabySteps 31 4.1 OProblemadoCálculodeSalário . . . . . . . . . . . . . . . . . . . . . 31 4.2 Implementandodamaneiramaissimplespossível . . . . . . . . . . . 33 4.3 PassosdeBebê(ouBabySteps) . . . . . . . . . . . . . . . . . . . . . . 35 4.4 Usandobabystepsdemaneiraconsciente . . . . . . . . . . . . . . . . 41 4.5 Conclusão. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44 Sumário CasadoCódigo 5 TDDeDesigndeClasses 45 5.1 OProblemadoCarrinhodeCompras . . . . . . . . . . . . . . . . . . 45 5.2 Testesqueinfluenciamnodesigndeclasses . . . . . . . . . . . . . . . 50 5.3 DiferençasentreTDDetestesdamaneiratradicional . . . . . . . . . 51 5.4 Testescomorascunho . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53 5.5 Conclusão. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54 6 QualidadenoCódigodoTeste 55 6.1 Repetiçãodecódigoentretestes . . . . . . . . . . . . . . . . . . . . . . 56 6.2 Nomenclaturadostestes . . . . . . . . . . . . . . . . . . . . . . . . . . 59 6.3 TestDataBuilders . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 60 6.4 TestesRepetidos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62 6.5 Escrevendoboasasserções . . . . . . . . . . . . . . . . . . . . . . . . . 65 6.6 Testandolistas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67 6.7 SeparandoasClassesdeTeste . . . . . . . . . . . . . . . . . . . . . . . 68 6.8 Conclusão. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 69 7 TDDeaCoesão 71 7.1 NovamenteoProblemadoCálculodeSalário . . . . . . . . . . . . . . 71 7.2 Ouvindoofeedbackdostestes . . . . . . . . . . . . . . . . . . . . . . . 75 7.3 Testesemmétodosprivados?. . . . . . . . . . . . . . . . . . . . . . . . 77 7.4 ResolvendooProblemadaCalculadoradeSalário . . . . . . . . . . . 78 7.5 Oqueolharnotesteemrelaçãoacoesão? . . . . . . . . . . . . . . . . 82 7.6 Conclusão. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 83 8 TDDeoAcoplamento 85 8.1 OProblemadaNotaFiscal . . . . . . . . . . . . . . . . . . . . . . . . . 85 8.2 MockObjects. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 89 8.3 Dependênciasexplícitas. . . . . . . . . . . . . . . . . . . . . . . . . . . 92 8.4 Ouvindoofeedbackdostestes . . . . . . . . . . . . . . . . . . . . . . . 93 8.5 Classesestáveis . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 94 8.6 ResolvendooProblemadaNotaFiscal . . . . . . . . . . . . . . . . . . 97 8.7 Testandométodosestáticos. . . . . . . . . . . . . . . . . . . . . . . . . 100 8.8 TDDeaconstantecriaçãodeinterfaces . . . . . . . . . . . . . . . . . 101 8.9 Oqueolharnotesteemrelaçãoaoacoplamento? . . . . . . . . . . . . 104 8.10 Conclusão. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 105 viii

Description:
Por que não testamos software? Porque é caro? Porque é demorado? Porque é chato? Testes automatizados são a solução para todos esses problemas. Aprenda a escrever um programa que testa seu programa de forma rápida, barata e produtiva, e aumente a qualidade do seu produto final. Neste livro,
See more

The list of books you might like

Most books are stored in the elastic cloud where traffic is expensive. For this reason, we have a limit on daily download.