Voce Tem Orgulho Do Seu Codigo
-
Upload
victor-hugo-germano -
Category
Technology
-
view
1.322 -
download
2
description
Transcript of Voce Tem Orgulho Do Seu Codigo
Samuel Crescêncio e Victor Hugo Germano
Você tem orgulho do seu código?
http://www.flickr.com/photos/caravinagre/1364614919/
Samuel Crescêncio
Victor Hugo Germano
/ victorhg
/* I realize that this program is a messy compilation of inefficient coding, and perhaps even stands as something blasphemous in your eyes. Coming midterms forced me to write the program as is because this format required the least amount of thinking as well as the least amount of time. Therefore, I only ask one thing of you: Be gentle. */
http://www.thedailywtf.com
Public static int getTestcell() { int i, neighbor, male, female, empty, value, num; male = 0; female = 0; empty = 0; value = 0; num = 0; if (spotvalue[n] == 0) { neighbor = n; if (n == 0) { if (spotvalue[neighbor + 1] == 0) empty = empty + 1; else { if (spotvalue[neighbor + 1] == 1) male = male + 1; if (spotvalue[neighbor + 1] == 2) female = female + 1; } if (spotvalue[neighbor + 20] == 0) empty = empty + 1; else {
if (spotvalue[neighbor + 20] == 1) male = male + 1; if (spotvalue[neighbor + 20] == 2) female = female + 1; } if (spotvalue[neighbor + 21] == 0) empty = empty + 1; else { if (spotvalue[neighbor + 21] == 1) male = male + 1; if (spotvalue[neighbor + 21] == 2) female = female + 1; } if (male >= 1 && male <=2) { if (male == female) { num = rand.nextInt(2); value = num + 1; return value; } else { value = 0; return value; } } else { value = 0; return value; } } if (n == 19) { if (spotvalue[neighbor - 1] == 0) empty = empty + 1; else { if (spotvalue[neighbor - 1] == 1) male = male + 1; if (spotvalue[neighbor - 1] == 2) female = female + 1; } if (spotvalue[neighbor + 20] == 0) empty = empty + 1; else { if (spotvalue[neighbor + 20] == 1) male = male + 1; if (spotvalue[neighbor + 20] == 2) female = female + 1; } if (spotvalue[neighbor + 19] == 0) empty = empty + 1; else { if (spotvalue[neighbor + 19] == 1) male = male + 1; if (spotvalue[neighbor + 19] == 2) female = female + 1; } if (male >= 1 && male <=2) { if (male == female) { num = rand.nextInt(2); value = num + 1; return value; } else { value = 0; return value; } } else { value = 0; return value; } } if (n == 380) { if (spotvalue[neighbor + 1] == 0) empty = empty + 1; else { if (spotvalue[neighbor + 1] == 1) male = male + 1; if (spotvalue[neighbor + 1] == 2) female = female + 1; } if (spotvalue[neighbor - 20] == 0) empty = empty + 1; else { if (spotvalue[neighbor - 20] == 1) male = male + 1; if (spotvalue[neighbor - 20] == 2) female = female + 1; } if (spotvalue[neighbor - 19] == 0) empty = empty + 1;
if (spotvalue[neighbor + 20] == 1) male = male + 1; if (spotvalue[neighbor + 20] == 2) female = female + 1; } if (spotvalue[neighbor + 21] == 0) empty = empty + 1; else { if (spotvalue[neighbor + 21] == 1) male = male + 1; if (spotvalue[neighbor + 21] == 2) female = female + 1; } if (male >= 1 && male <=2) { if (male == female) { num = rand.nextInt(2); value = num + 1; return value; } else { value = 0; return value; } } else { value = 0; return value; } } if (n == 19) { if (spotvalue[neighbor - 1] == 0) empty = empty + 1; else { if (spotvalue[neighbor - 1] == 1) male = male + 1; if (spotvalue[neighbor - 1] == 2) female = female + 1; } if (spotvalue[neighbor + 20] == 0) empty = empty + 1; else { if (spotvalue[neighbor + 20] == 1) male = male + 1; if (spotvalue[neighbor + 20] == 2) female = female + 1; } if (spotvalue[neighbor + 19] == 0) empty = empty + 1; else { if (spotvalue[neighbor + 19] == 1) male = male + 1; if (spotvalue[neighbor + 19] == 2) female = female + 1; } if (male >= 1 && male <=2) { if (male == female) { num = rand.nextInt(2); value = num + 1; return value; } else { value = 0; return value; } } else { value = 0; return value; } } if (n == 380) { if (spotvalue[neighbor + 1] == 0) empty = empty + 1; else { if (spotvalue[neighbor + 1] == 1) male = male + 1; if (spotvalue[neighbor + 1] == 2) female = female + 1; } if (spotvalue[neighbor - 20] == 0) empty = empty + 1; else { if (spotvalue[neighbor - 20] == 1) male = male + 1; if (spotvalue[neighbor - 20] == 2) female = female + 1; } if (spotvalue[neighbor - 19] == 0) empty = empty + 1;
} } else { value = 0; return value; } } if (n == 19) { if (spotvalue[neighbor - 1] == 0) empty = empty + 1; else { if (spotvalue[neighbor - 1] == 1) male = male + 1; if (spotvalue[neighbor - 1] == 2) female = female + 1; } if (spotvalue[neighbor + 20] == 0) empty = empty + 1; else { if (spotvalue[neighbor + 20] == 1) male = male + 1; if (spotvalue[neighbor + 20] == 2) female = female + 1; } if (spotvalue[neighbor + 19] == 0) empty = empty + 1; else { if (spotvalue[neighbor + 19] == 1) male = male + 1; if (spotvalue[neighbor + 19] == 2) female = female + 1; } if (male >= 1 && male <=2) { if (male == female) { num = rand.nextInt(2); value = num + 1; return value; } else { value = 0; return value; } } else { value = 0; return value; } } if (n == 380) { if (spotvalue[neighbor + 1] == 0) empty = empty + 1; else { if (spotvalue[neighbor + 1] == 1) male = male + 1; if (spotvalue[neighbor + 1] == 2) female = female + 1; } if (spotvalue[neighbor - 20] == 0) empty = empty + 1; else { if (spotvalue[neighbor - 20] == 1) male = male + 1; if (spotvalue[neighbor - 20] == 2) female = female + 1; } if (spotvalue[neighbor - 19] == 0) empty = empty + 1;
female = female + 1; } if (spotvalue[neighbor + 19] == 0) empty = empty + 1; else { if (spotvalue[neighbor + 19] == 1) male = male + 1; if (spotvalue[neighbor + 19] == 2) female = female + 1; } if (male >= 1 && male <=2) { if (male == female) { num = rand.nextInt(2); value = num + 1; return value; } else { value = 0; return value; } } else { value = 0; return value; } } if (n == 380) { if (spotvalue[neighbor + 1] == 0) empty = empty + 1; else { if (spotvalue[neighbor + 1] == 1) male = male + 1; if (spotvalue[neighbor + 1] == 2) female = female + 1; } if (spotvalue[neighbor - 20] == 0) empty = empty + 1; else { if (spotvalue[neighbor - 20] == 1) male = male + 1; if (spotvalue[neighbor - 20] == 2) female = female + 1; } if (spotvalue[neighbor - 19] == 0) empty = empty + 1;
{ value = 0; return value; } } if (n == 380) { if (spotvalue[neighbor + 1] == 0) empty = empty + 1; else { if (spotvalue[neighbor + 1] == 1) male = male + 1; if (spotvalue[neighbor + 1] == 2) female = female + 1; } if (spotvalue[neighbor - 20] == 0) empty = empty + 1; else { if (spotvalue[neighbor - 20] == 1) male = male + 1; if (spotvalue[neighbor - 20] == 2) female = female + 1; } if (spotvalue[neighbor - 19] == 0) empty = empty + 1;
!!!!!!!!!!!!!
Qual o nosso papel?
Qualidade?
Qualidade? Pra quem?
E nós?
http://www.flickr.com/photos/danielankers/2639889958/
Até quando?
Até quando?
Mas não é fácil!
http://www.mypix.com.br/site/pixpocketmag/super-geek-cinto-de-utilidades-ou-quase-isso/
Por que seria diferente?
Seu código fede?
“Nos dias de hoje, entregar uma linha de código sem que ela seja
testada é Irresponsabilidade Profissional”
Robert Uncle Bob
Fábrica de Elásticos
Debugging sucks! Testing Rules!
Testes
TestesJUnit
TestesJUnit
dbUnit
TestesJUnit
dbUnit
SQLUnit
TestesJUnit
dbUnit
SQLUnit CppUnit
TestesJUnit
dbUnit
NUnit
SQLUnit CppUnit
TestesJUnit
dbUnit
NUnit
Fitnesse
SQLUnit CppUnit
TestesJUnit
dbUnit
NUnit
Fitnesse
Selenium
SQLUnit CppUnit
TestesJUnit
dbUnit
NUnit
Fitnesse
Selenium
SQLUnit CppUnit
JMeter
Quão Sexy é o seu código?
Quão Sexy é o seu código?
O código
// 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);
Session session = this.loadDefaultConfiguration();
Message email = this.createEmailMessage( fromName, replyTo, subject, message );
this.sendMessage(session, email);
http://guilherme.pro/2009/04/05/why-i-dont-write-code-comments/
A API
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/
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/
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/
Quão Sexy é o seu código?
O que este código faz?
java.util.Calendar c =
java.util.Calendar.getInstance();
c.set(2005, java.util.Calendar.NOVEMBER, 20);
long time = c.getTime();
http://www.slideshare.net/gvespucci/refactoring-an-introduction
long time = october(20, 2008);
http://www.slideshare.net/gvespucci/refactoring-an-introductionhttp://www.flickr.com/photos/schoeband/3861094589/sizes/l/
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/
Como medir Clean Code??
Como medir Clean Code??
cleanCode = WTF / sec
// 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);
// 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?!
// 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?!
// 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?!
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/
TDD
Test all the Fucking time!
Automatização!
Ant / Gant / PythonAutomatização!
Ant / Gant / Python
Maven / Javagems
Automatização!
Ant / Gant / Python
Maven / Javagems
JUnit / Selenium
Automatização!
Ant / Gant / Python
Maven / Javagems
Cuise Control
JUnit / Selenium
Automatização!
Ant / Gant / Python
Maven / Javagems
Cuise Control
Findbugs
JUnit / Selenium
Automatização!
Doxygen
Collaboration
Call Hierarchy
Dot Representation
Documentation
http://www.stack.nl/~dimitri/doxygen
pair programming
http://www.flickr.com/photos/menlopics/3928252097/in/set-72157607305293501/
Código Coletivo
Estude! Atualize-se!
Integração Contínua
Integração Contínua
Injeção de Dependência
Integração Contínua
Injeção de Dependência
DSLs
Integração Contínua
Injeção de Dependência
DSLs
Design Patterns
Integração Contínua
Injeção de Dependência
DSLs
Design Patterns
Design by Contract
Integração Contínua
Injeção de Dependência
DSLs
Design Patterns
Design by Contract
Orientação a Ojetos
Integração Contínua
Injeção de Dependência
DSLs
Design Patterns
Design by Contract
Orientação a OjetosTDD
Integração Contínua
Injeção de Dependência
DSLs
Design Patterns
Design by Contract
Orientação a OjetosTDD
Uma linguagem nova por ano
Scrum MasterTrabalhe em Equipe!!!
Dúvidas?