Desafios do Profissionalismo Ágil

2,665 views

Published on

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.

Published in: Technology, Business
0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
2,665
On SlideShare
0
From Embeds
0
Number of Embeds
18
Actions
Shares
0
Downloads
82
Comments
0
Likes
1
Embeds 0
No embeds

No notes for slide

Desafios do Profissionalismo Ágil

  1. 1. Desafios do Profissionalismo Ágil Victor Hugo Germano
  2. 2. Eu ? Quem??
  3. 3. Victor Hugo Germano http://malditacomedia.blogspot.com
  4. 4. Test all the Fucking time!
  5. 5. Qual o nosso papel?
  6. 6. Tempos realmente modernos?
  7. 7. Nos tempos da Brilhantina Integração
  8. 8. http://flickr.com/photos/fairytalecinema/1813597118/
  9. 9. Ciclo Vicioso do Desenvolvimento de Software
  10. 10. http://www.flickr.com/photos/orangeacid/272510395/
  11. 11. http://www.flickr.com/photos/fulbert05/2403344636/
  12. 12. http://www.flickr.com/photos/danielankers/2639889958/
  13. 13. ?
  14. 14. http://www.flickr.com/photos/mfakheri/2978493478/
  15. 15. http://www.flickr.com/photos/orangeacid/272510395/
  16. 16. http://www.flickr.com/photos/fulbert05/2403344636/
  17. 17. http://www.flickr.com/photos/danielankers/2639889958/
  18. 18. ?
  19. 19. http://www.flickr.com/photos/jurvetson/3097134746/
  20. 20. Desenvolvimento Ágil
  21. 21. Escopo Negociável BDD Agile Cliente Presente Modeling Agile Retrospectiva Integração Contínua Pair Programming Simplicidade Reunião Diária TDD
  22. 22. Agile BUT
  23. 23. http://www.flickr.com/photos/orangeacid/272510395/
  24. 24. Test all the fucking time?
  25. 25. QUALIDADE
  26. 26. Test all the Fucking time!
  27. 27. “Nos dias de hoje, entregar um linha de código sem que ela seja testada é Irresponsabilidade Profissional” Robert Uncle Bob
  28. 28. Uncle Bob
  29. 29. Test all the Fucking time!
  30. 30. Qualidade
  31. 31. TEST TEST TEST TEST TEST TEST TEST TEST TEST TEST TEST TEST TEST TEST
  32. 32. O que você faz quando a pressão cresce?
  33. 33. Salvem os bebês foca!
  34. 34. Test all the Fucking time!
  35. 35. Keep it Simple!!
  36. 36. Debugging sucks! Testing Rules!
  37. 37. TDD
  38. 38. Profissionalismo
  39. 39. P R E G U I Ç A
  40. 40. Por que seria diferente?
  41. 41. Quão Sexy é o seu código?
  42. 42. O código
  43. 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. 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. 45. A API
  46. 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. 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. 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. 49. Quão Sexy é o seu código?
  50. 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. 51. Como medir? cleanCode = WTF / sec
  52. 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. 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. 54. boy scout rule
  55. 55. Parece fácil?
  56. 56. Integração Contínua http://malditacomedia.blogspot.com/search/label/IntegraçãoContínua
  57. 57. Tester
  58. 58. Testes
  59. 59. Unitários EJB3Unit DBUnit JUnit JSUnit xUnit http://c2.com/cgi/wiki?TestingFramework
  60. 60. Test all the Fucking time!
  61. 61. Aceitação Selenium Fitnesse AutoIt Concordion Cucumber
  62. 62. Selenium
  63. 63. Fitnesse
  64. 64. http://fitnesse.org
  65. 65. Inspeção
  66. 66. Duplicação de Codigo
  67. 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. 68. Análise Estática
  69. 69. Complexidade JDepend
  70. 70. Complexidade • Complexidade Ciclomática • Instabilidade e Abstratividade http://en.wikipedia.org/wiki/Software_metric
  71. 71. Análise FindBugs PMD
  72. 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. 73. Feedback
  74. 74. Documentação doxygen Diagramas de Classes javadoc Documentação de Código
  75. 75. Doxygen Collaboration Call Hierarchy Dot Representation Documentation http://www.stack.nl/~dimitri/doxygen
  76. 76. Servidor de Build Hudson CruiseControl Luntbuild Anthill
  77. 77. Só mais um Teste!
  78. 78. Obrigado! victorhg@gmail.com Qual o nosso papel?

×