Desafios do Profissionalismo Ágil
Upcoming SlideShare
Loading in...5
×
 

Like this? Share it with your network

Share

Desafios do Profissionalismo Ágil

on

  • 2,836 views

Victor Hugo Germano apresenta sua visão sobre profissionalismo e os desafios na adoção de metodologias ágies....

Victor Hugo Germano apresenta sua visão sobre profissionalismo e os desafios na adoção de metodologias ágies.

Através de uma linguagem lúdica, conceitos relacionados a Qualidade, Teste de Software e comprometimento.

Statistics

Views

Total Views
2,836
Views on SlideShare
2,822
Embed Views
14

Actions

Likes
0
Downloads
73
Comments
0

2 Embeds 14

http://www.slideshare.net 12
http://www.linkedin.com 2

Accessibility

Categories

Upload Details

Uploaded via as Adobe PDF

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

Desafios do Profissionalismo Ágil Presentation Transcript

  • 1. Desafios do Profissionalismo Ágil Victor Hugo Germano
  • 2. Eu ? Quem??
  • 3. Victor Hugo Germano http://malditacomedia.blogspot.com
  • 4. Test all the Fucking time!
  • 5. Qual o nosso papel?
  • 6. Tempos realmente modernos?
  • 7. Nos tempos da Brilhantina Integração
  • 8. http://flickr.com/photos/fairytalecinema/1813597118/
  • 9. Ciclo Vicioso do Desenvolvimento de Software
  • 10. http://www.flickr.com/photos/orangeacid/272510395/
  • 11. http://www.flickr.com/photos/fulbert05/2403344636/
  • 12. http://www.flickr.com/photos/danielankers/2639889958/
  • 13. ?
  • 14. http://www.flickr.com/photos/mfakheri/2978493478/
  • 15. http://www.flickr.com/photos/orangeacid/272510395/
  • 16. http://www.flickr.com/photos/fulbert05/2403344636/
  • 17. http://www.flickr.com/photos/danielankers/2639889958/
  • 18. ?
  • 19. http://www.flickr.com/photos/jurvetson/3097134746/
  • 20. Desenvolvimento Ágil
  • 21. Escopo Negociável BDD Agile Cliente Presente Modeling Agile Retrospectiva Integração Contínua Pair Programming Simplicidade Reunião Diária TDD
  • 22. Agile BUT
  • 23. http://www.flickr.com/photos/orangeacid/272510395/
  • 24. Test all the fucking time?
  • 25. QUALIDADE
  • 26. Test all the Fucking time!
  • 27. “Nos dias de hoje, entregar um linha de código sem que ela seja testada é Irresponsabilidade Profissional” Robert Uncle Bob
  • 28. Uncle Bob
  • 29. Test all the Fucking time!
  • 30. Qualidade
  • 31. TEST TEST TEST TEST TEST TEST TEST TEST TEST TEST TEST TEST TEST TEST
  • 32. O que você faz quando a pressão cresce?
  • 33. Salvem os bebês foca!
  • 34. Test all the Fucking time!
  • 35. Keep it Simple!!
  • 36. Debugging sucks! Testing Rules!
  • 37. TDD
  • 38. Profissionalismo
  • 39. P R E G U I Ç A
  • 40. Por que seria diferente?
  • 41. Quão Sexy é o seu código?
  • 42. O código
  • 43. // create some properties and get the default Session Properties props = new Properties(); props.put(quot;mail.smtp.hostquot;, _smtpHost); Session session = Session.getDefaultInstance(props, null);   // create a message Address replyToList[] = { new InternetAddress(replyTo) }; Message newMessage = new MimeMessage(session); if (_fromName != null) newMessage.setFrom(new InternetAddress(from, _fromName + quot; on behalf of quot; + replyTo)); else newMessage.setFrom(new InternetAddress(from)); newMessage.setReplyTo(replyToList); newMessage.setRecipients(Message.RecipientType.BCC, _toList); newMessage.setSubject(subject); newMessage.setSentDate(sentDate);   // send newMessage Transport transport = session.getTransport(SMTP_MAIL); transport.connect(_smtpHost, _user, _password); transport.sendMessage(newMessage, _toList);
  • 44. Session session = this.loadDefaultConfiguration();   Address replyToList[] = { new InternetAddress(replyTo)}; Message email = this.createEmailMessage( fromName, replyToList, subject, message );   this.sendMessage(session, email); http://guilherme.pro/2009/04/05/why-i-dont-write-code-comments/
  • 45. A API
  • 46. class Email { public Email() { ... } public void setFrom(String from) { ... } public void setTo(String to) { ... } public void send() { // YOUR HOT CODE HERE } } http://guilherme.pro/2009/04/05/why-i-dont-write-code-comments/
  • 47. Email email = new Email ( ); email.setFrom( “test@localhost.net”); email.setTo (“destino@localhost.net”); email.setSubject (“Teste email”); email.setMessage (“Mensagem”); email.send(); http://guilherme.pro/2009/04/05/why-i-dont-write-code-comments/
  • 48. new EmailMessage( ) .from(quot;teste@localhost.netquot;) .to(quot;destination@address.comquot;) .withSubject(quot;Fluent Mail Examplequot;) .withBody(quot;What a nice code!quot;) .send(); http://guilherme.pro/2009/04/05/why-i-dont-write-code-comments/
  • 49. Quão Sexy é o seu código?
  • 50. What is a Clean Code? “Quando você olha para o código, percebe que ele faz exatamente o que você esperava” Howard Cunningham http://railsconf.blip.tv/file/2089545/
  • 51. Como medir? cleanCode = WTF / sec
  • 52. // create some properties and get the default Session Properties props = new Properties(); props.put(quot;mail.smtp.hostquot;, _smtpHost); WTF?! Session session = Session.getDefaultInstance(props, null);   // create a message Address replyToList[] = { new InternetAddress(replyTo) }; Message newMessage = new MimeMessage(session); if (_fromName != null) newMessage.setFrom(new InternetAddress(from, else _fromName + quot; on behalf of quot; + replyTo)); WTF?! newMessage.setFrom(new InternetAddress(from)); newMessage.setReplyTo(replyToList); newMessage.setRecipients(Message.RecipientType.BCC, _toList); newMessage.setSubject(subject); newMessage.setSentDate(sentDate);   // send newMessage WTF?! Transport transport = session.getTransport(SMTP_MAIL); transport.connect(_smtpHost, _user, _password); transport.sendMessage(newMessage, _toList);
  • 53. new EmailMessage( ) .from(quot;teste@localhost.netquot;) .to(quot;destination@address.comquot;) .withSubject(quot;Fluent Mail Examplequot;) .withBody(quot;What a nice code!quot;) .send(); http://guilherme.pro/2009/04/05/why-i-dont-write-code-comments/
  • 54. boy scout rule
  • 55. Parece fácil?
  • 56. Integração Contínua http://malditacomedia.blogspot.com/search/label/IntegraçãoContínua
  • 57. Tester
  • 58. Testes
  • 59. Unitários EJB3Unit DBUnit JUnit JSUnit xUnit http://c2.com/cgi/wiki?TestingFramework
  • 60. Test all the Fucking time!
  • 61. Aceitação Selenium Fitnesse AutoIt Concordion Cucumber
  • 62. Selenium
  • 63. Fitnesse
  • 64. http://fitnesse.org
  • 65. Inspeção
  • 66. Duplicação de Codigo
  • 67. CPD <target name=quot;cpdquot;> <taskdef name=quot;cpdquot; classname=quot;net.sourceforge.pmd.cpd.CPDTaskquot; /> <cpd minimumTokenCount=quot;100quot; outputFile=quot;/home/tom/cpd.txtquot;> <fileset dir=quot;/home/tom/tmp/antquot;> <include name=quot;**/*.javaquot;/> </fileset> </cpd> </target> http://pmd.sourceforge.net/cpd.html
  • 68. Análise Estática
  • 69. Complexidade JDepend
  • 70. Complexidade • Complexidade Ciclomática • Instabilidade e Abstratividade http://en.wikipedia.org/wiki/Software_metric
  • 71. Análise FindBugs PMD
  • 72. Findbugs DE_MIGHT_IGNORE: Method might ignore exception MS_SHOULD_BE_FINAL: Field isn't final but should be SBSC_USE_STRINGBUFFER_CONCATENATION: Method concatenates strings using + in a loop NP_NULL_ON_SOME_PATH: Possible null pointer dereference in method NM_CLASS_NAMING_CONVENTION: Class names should start with an upper case letter
  • 73. Feedback
  • 74. Documentação doxygen Diagramas de Classes javadoc Documentação de Código
  • 75. Doxygen Collaboration Call Hierarchy Dot Representation Documentation http://www.stack.nl/~dimitri/doxygen
  • 76. Servidor de Build Hudson CruiseControl Luntbuild Anthill
  • 77. Só mais um Teste!
  • 78. Obrigado! victorhg@gmail.com Qual o nosso papel?