Desafios do Profissionalismo Ágil

117
Desafios do Profissionalismo Ágil Victor Hugo Germano

description

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.

Transcript of Desafios do Profissionalismo Ágil

Page 1: Desafios do Profissionalismo Ágil

Desafios do Profissionalismo Ágil

Victor Hugo Germano

Page 2: Desafios do Profissionalismo Ágil
Page 3: Desafios do Profissionalismo Ágil

Eu ? Quem??

Page 4: Desafios do Profissionalismo Ágil

Victor Hugo Germano

http://malditacomedia.blogspot.com

Page 5: Desafios do Profissionalismo Ágil
Page 6: Desafios do Profissionalismo Ágil

Test all the Fucking time!

Page 7: Desafios do Profissionalismo Ágil

Qual o nosso papel?

Page 8: Desafios do Profissionalismo Ágil
Page 9: Desafios do Profissionalismo Ágil
Page 10: Desafios do Profissionalismo Ágil

Tempos realmente modernos?

Page 11: Desafios do Profissionalismo Ágil

Nos tempos da Brilhantina

Integração

Page 13: Desafios do Profissionalismo Ágil
Page 14: Desafios do Profissionalismo Ágil

Ciclo Vicioso do Desenvolvimento de

Software

Page 17: Desafios do Profissionalismo Ágil
Page 19: Desafios do Profissionalismo Ágil

?

Page 20: Desafios do Profissionalismo Ágil
Page 24: Desafios do Profissionalismo Ágil
Page 26: Desafios do Profissionalismo Ágil

?

Page 27: Desafios do Profissionalismo Ágil
Page 29: Desafios do Profissionalismo Ágil
Page 30: Desafios do Profissionalismo Ágil
Page 31: Desafios do Profissionalismo Ágil

Desenvolvimento Ágil

Page 32: Desafios do Profissionalismo Ágil

AgileTDD

Integração Contínua

BDD

Reunião Diária

Escopo Negociável

Cliente PresenteRetrospectiva

Agile Modeling

SimplicidadePair Programming

Page 33: Desafios do Profissionalismo Ágil
Page 34: Desafios do Profissionalismo Ágil

Agile BUT

Page 35: Desafios do Profissionalismo Ágil
Page 36: Desafios do Profissionalismo Ágil
Page 37: Desafios do Profissionalismo Ágil
Page 39: Desafios do Profissionalismo Ágil
Page 40: Desafios do Profissionalismo Ágil
Page 41: Desafios do Profissionalismo Ágil
Page 42: Desafios do Profissionalismo Ágil

Test all the fucking time?

Page 43: Desafios do Profissionalismo Ágil
Page 44: Desafios do Profissionalismo Ágil

QUALIDADE

Page 45: Desafios do Profissionalismo Ágil

Test all the Fucking time!

Page 46: Desafios do Profissionalismo Ágil

“Nos dias de hoje, entregar um linha de código sem que ela seja testada é

Irresponsabilidade Profissional”Robert Uncle Bob

Page 47: Desafios do Profissionalismo Ágil

Uncle Bob

Page 48: Desafios do Profissionalismo Ágil

Test all the Fucking time!

Page 49: Desafios do Profissionalismo Ágil

Qualidade

Page 50: Desafios do Profissionalismo Ágil

TESTTEST

TESTTEST

TEST

TEST

TEST

TESTTEST

TEST

TESTTEST TEST

TEST

Page 51: Desafios do Profissionalismo Ágil

O que você faz quando a pressão cresce?

Page 52: Desafios do Profissionalismo Ágil
Page 53: Desafios do Profissionalismo Ágil

Salvem os bebês foca!

Page 54: Desafios do Profissionalismo Ágil

Test all the Fucking time!

Page 55: Desafios do Profissionalismo Ágil
Page 56: Desafios do Profissionalismo Ágil
Page 57: Desafios do Profissionalismo Ágil

Keep it Simple!!

Page 58: Desafios do Profissionalismo Ágil
Page 59: Desafios do Profissionalismo Ágil
Page 60: Desafios do Profissionalismo Ágil

Debugging sucks! Testing Rules!

Page 61: Desafios do Profissionalismo Ágil

TDD

Page 62: Desafios do Profissionalismo Ágil
Page 63: Desafios do Profissionalismo Ágil

Profissionalismo

Page 64: Desafios do Profissionalismo Ágil

PREGUIÇA

Page 65: Desafios do Profissionalismo Ágil
Page 66: Desafios do Profissionalismo Ágil
Page 67: Desafios do Profissionalismo Ágil
Page 68: Desafios do Profissionalismo Ágil
Page 69: Desafios do Profissionalismo Ágil
Page 70: Desafios do Profissionalismo Ágil

Por que seria diferente?

Page 71: Desafios do Profissionalismo Ágil

Quão Sexy é o seu código?

Page 72: Desafios do Profissionalismo Ágil

O código

Page 73: Desafios do Profissionalismo Ágil

// create some properties and get the default SessionProperties props = new Properties();props.put("mail.smtp.host", _smtpHost);Session session = Session.getDefaultInstance(props, null); // create a messageAddress replyToList[] = { new InternetAddress(replyTo) };Message newMessage = new MimeMessage(session);if (_fromName != null) newMessage.setFrom(new InternetAddress(from, _fromName + " on behalf of " + replyTo));else newMessage.setFrom(new InternetAddress(from)); newMessage.setReplyTo(replyToList); newMessage.setRecipients(Message.RecipientType.BCC, _toList); newMessage.setSubject(subject); newMessage.setSentDate(sentDate); // send newMessageTransport transport = session.getTransport(SMTP_MAIL);transport.connect(_smtpHost, _user, _password);transport.sendMessage(newMessage, _toList);

Page 74: Desafios do Profissionalismo Ágil

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/

Page 75: Desafios do Profissionalismo Ágil

A API

Page 76: Desafios do Profissionalismo Ágil

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/

Page 77: Desafios do Profissionalismo Ágil

Email email = new Email ( );email.setFrom( “[email protected]”);email.setTo (“[email protected]”);email.setSubject (“Teste email”);email.setMessage (“Mensagem”);email.send();

http://guilherme.pro/2009/04/05/why-i-dont-write-code-comments/

Page 78: Desafios do Profissionalismo Ágil

new EmailMessage( ) .from("[email protected]") .to("[email protected]") .withSubject("Fluent Mail Example") .withBody("What a nice code!") .send();

http://guilherme.pro/2009/04/05/why-i-dont-write-code-comments/

Page 79: Desafios do Profissionalismo Ágil

Quão Sexy é o seu código?

Page 80: Desafios do Profissionalismo Ágil

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/

Page 81: Desafios do Profissionalismo Ágil

Como medir?

cleanCode = WTF / sec

Page 82: Desafios do Profissionalismo Ágil

// create some properties and get the default SessionProperties props = new Properties();props.put("mail.smtp.host", _smtpHost);Session session = Session.getDefaultInstance(props, null); // create a messageAddress replyToList[] = { new InternetAddress(replyTo) };Message newMessage = new MimeMessage(session);if (_fromName != null) newMessage.setFrom(new InternetAddress(from, _fromName + " on behalf of " + replyTo));else newMessage.setFrom(new InternetAddress(from)); newMessage.setReplyTo(replyToList); newMessage.setRecipients(Message.RecipientType.BCC, _toList); newMessage.setSubject(subject); newMessage.setSentDate(sentDate); // send newMessageTransport transport = session.getTransport(SMTP_MAIL);transport.connect(_smtpHost, _user, _password);transport.sendMessage(newMessage, _toList);

WTF?!

WTF?!

WTF?!

Page 83: Desafios do Profissionalismo Ágil

new EmailMessage( ) .from("[email protected]") .to("[email protected]") .withSubject("Fluent Mail Example") .withBody("What a nice code!") .send();

http://guilherme.pro/2009/04/05/why-i-dont-write-code-comments/

Page 84: Desafios do Profissionalismo Ágil

boy scout rule

Page 85: Desafios do Profissionalismo Ágil

Parece fácil?

Page 86: Desafios do Profissionalismo Ágil
Page 87: Desafios do Profissionalismo Ágil
Page 88: Desafios do Profissionalismo Ágil
Page 89: Desafios do Profissionalismo Ágil
Page 90: Desafios do Profissionalismo Ágil

Integração Contínua

http://malditacomedia.blogspot.com/search/label/IntegraçãoContínua

Page 91: Desafios do Profissionalismo Ágil
Page 92: Desafios do Profissionalismo Ágil

Tester

Page 93: Desafios do Profissionalismo Ágil
Page 94: Desafios do Profissionalismo Ágil

Testes

Page 95: Desafios do Profissionalismo Ágil

Unitários

xUnit

JUnit

DBUnitEJB3Unit

JSUnit

http://c2.com/cgi/wiki?TestingFramework

Page 96: Desafios do Profissionalismo Ágil

Test all the Fucking time!

Page 97: Desafios do Profissionalismo Ágil

Aceitação

Selenium

Fitnesse

AutoIt

Concordion

Cucumber

Page 98: Desafios do Profissionalismo Ágil

Selenium

Page 99: Desafios do Profissionalismo Ágil

Fitnesse

Page 100: Desafios do Profissionalismo Ágil

http://fitnesse.org

Page 101: Desafios do Profissionalismo Ágil

Inspeção

Page 102: Desafios do Profissionalismo Ágil

Duplicação de Codigo

Page 103: Desafios do Profissionalismo Ágil

<target name="cpd"> <taskdef name="cpd" classname="net.sourceforge.pmd.cpd.CPDTask" /> <cpd minimumTokenCount="100"

outputFile="/home/tom/cpd.txt"> <fileset dir="/home/tom/tmp/ant"> <include name="**/*.java"/> </fileset> </cpd></target>

CPD

http://pmd.sourceforge.net/cpd.html

Page 104: Desafios do Profissionalismo Ágil

Análise Estática

Page 105: Desafios do Profissionalismo Ágil
Page 106: Desafios do Profissionalismo Ágil

Complexidade

JDepend

Page 107: Desafios do Profissionalismo Ágil

Complexidade

• Complexidade Ciclomática

• Instabilidade e Abstratividade

http://en.wikipedia.org/wiki/Software_metric

Page 108: Desafios do Profissionalismo Ágil

Análise

FindBugsPMD

Page 109: Desafios do Profissionalismo Ágil

FindbugsDE_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

Page 110: Desafios do Profissionalismo Ágil

Feedback

Page 111: Desafios do Profissionalismo Ágil

Documentação

Diagramas de Classesdoxygen

Documentação de Códigojavadoc

Page 112: Desafios do Profissionalismo Ágil

Doxygen

Collaboration

Call Hierarchy

Dot Representation

Documentation

http://www.stack.nl/~dimitri/doxygen

Page 113: Desafios do Profissionalismo Ágil
Page 114: Desafios do Profissionalismo Ágil

Servidor de Build

HudsonCruiseControl

LuntbuildAnthill

Page 115: Desafios do Profissionalismo Ágil

Só mais um Teste!

Page 117: Desafios do Profissionalismo Ágil