<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>codificando.com &#187; engenharia</title>
	<atom:link href="http://codificando.com/tag/engenharia/feed/" rel="self" type="application/rss+xml" />
	<link>http://codificando.com</link>
	<description>Desenvolvimento de Software com qualidade</description>
	<lastBuildDate>Tue, 31 Jan 2012 09:49:46 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.1.3</generator>
		<item>
		<title>Seu software também deve comunicar-se corretamente</title>
		<link>http://codificando.com/2010/06/seu-software-tambem-deve-comunicar-se-corretamente/</link>
		<comments>http://codificando.com/2010/06/seu-software-tambem-deve-comunicar-se-corretamente/#comments</comments>
		<pubDate>Wed, 16 Jun 2010 18:43:11 +0000</pubDate>
		<dc:creator>Emerson Macedo</dc:creator>
				<category><![CDATA[engenharia]]></category>
		<category><![CDATA[pensamentos]]></category>
		<category><![CDATA[interface]]></category>
		<category><![CDATA[ui]]></category>
		<category><![CDATA[ux]]></category>

		<guid isPermaLink="false">http://codificando.com/?p=369</guid>
		<description><![CDATA[Alguns estudos apontam que o maior problema da maioria das empresas é a comunicação. Esforços incansáveis são feitos para melhorar isso e todos sabemos que é um grande desafio. Mas e o Software? Será que este também não deveria comunicar-se &#8230; <a href="http://codificando.com/2010/06/seu-software-tambem-deve-comunicar-se-corretamente/">Continue lendo <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.versatilcomunicacao.com.br/versa/release_detalhe.asp?id=308" target="_blank">Alguns estudos apontam que o maior problema da maioria das empresas é a comunicação</a>. Esforços incansáveis são feitos para melhorar isso e todos sabemos que é um grande desafio. Mas e o Software? Será que este também não deveria comunicar-se de forma mais clara com seus usuários?</p>
<p><strong>Exemplo triste &#8211; Aconteceu comigo <img src='http://codificando.com/wp-includes/images/smilies/icon_sad.gif' alt=':(' class='wp-smiley' /> </strong></p>
<p>Ontem a tarde me aconteceu uma situação pouco comum. Após terminar o jogo do Brasil pela Copa 2010, fui com minha esposa ao supermercado fazer algumas compras. Compramos um bocado de coisas. Diria que fiquei mais de 1 hora no mercado. Na hora de pagar, eis que surge um problema. O cartão Alimentação Pass da <a href="http://br.sodexo.com" target="_blank">Sodexo</a> não funcionou. A máquina informou a seguinte mensagem: <strong>&#8220;FALHA NA COMUNICAÇÃO&#8221;</strong> (que imagino ser um problema de rede ou algo do tipo). A caixa do mercado repetiu o processo em outra máquina e o problema permaneceu. Até ai tudo bem. Afinal, indisponibilidade é algo que pode acontecer.</p>
<p>Passado alguns minutos, a caixa chamou o fiscal do mercado que nos atendeu de forma simpática e pegou uma outra máquina para tentar novamente fazer o pagamento (nesse momento eu já estava pensando em usar o cartão do banco de deixar pra lá o sodexo). Eis que a máquina informa que o saldo estava zerado, ou seja, teoricamente em alguma das passagens a compra foi paga. Percebi então que uma simples ida ao mercado ia me dar uma dor de cabeça sem tamanho.</p>
<p>O simpático fiscal, ao verificar o problema, foi a gerência da loja para tirar relatórios e verificar o que aconteceu. Voltando, a única coisa que saiu no relatório foram transações não concluídas. Nesse momento eu perguntei ao fiscal: O sistema não informa qual foi o problema? Ele me disse: Não, o sistema só informa que não foi relalizada. Acabei ficando sem saber o que estava acontecendo de fato, já que meu saldo estava zerado. A minha única certeza é que em algum lugar foi debitado a compra do meu cartão sodexo.</p>
<p>O próximo passo foi tentar verificar na sodexo. Abri meu iphone e entrei no site para verificar o saldo. Digitando o número do cartão e cpf, recebi a mensagem <strong>&#8220;Não foi encontrado um cartão para os dados informados&#8221;</strong>. Achei um pouco estranho e liguei para um amigo, passei meus dados e pedi para ele verificar, pois poderia ser que o site não oferecesse um comportamento correto no browser do iphone. Ele verificou e a mesma mensagem apareceu. Caiu a ficha. Estava acontecendo algum problema grave na Sodexo.</p>
<p>Liguei então para central de atendimento. O atendimento eletrônico me pediu o número de cartão e senha e em seguida me informou o saldo. Para minha surpresa, o saldo era o dobro do saldo que deveria ser, ou seja, nem estava zerado, nem estava correto. Comecei a falar com o atendente e pedi meu saldo novamente. Ele me disse: Seu saldo é zero. Retruquei: Como zero se o atendimento eletrônico me disse o saldo X? Ele respondeu: Houve uma queda geral nos sistemas e estamos dando o prazo de até as 00:00 de hoje para tudo voltar ao normal.</p>
<p>No fim das contas paguei com cartão de débito do banco.</p>
<p><strong>Análise do problema.</strong></p>
<p>Após esse incidente, pensei um pouco sobre esse sistema de pagamentos.</p>
<p>Sobre a compra, provavelmente o que aconteceu é que o Sodexo debitou o valor e como a máquina não respondeu e o sistema caiu, a transação deve ter ficado pendente, prendendo meu saldo. Nesse momento, fazia sentido não ter saldo até que o sistema fosse restabelecido por completo. Mesmo assim, alguma coisa me incomodou. <strong>Por que a mensagem de retorno não poderia informar o que estava acontecendo? </strong>Não poderia informar alguma coisa melhor que &#8220;FALHA NA COMUNICAÇÃO&#8221;? Naquela hora, eu não sabia se o problema era da Sodexo, que não informava um código/retorno de erro adequado, ou se a máquina não tratava os retornos de erros corretamente.</p>
<p>Enviar mensagens de erro corretamente e fazer tratamento de forma adequada são fundamentais na comunicação com o usuário, quando o sistema apresenta comportamentos inesperados. A falta de atenção nisso é mais comum do que parece e vou exemplificar. Existem diversos sistemas que ignoram mensagens, como por exemplo situações onde um dos lados (ou ambos) em uma comunicação  <a href="http://formassembly.com/blog/treating-the-http-status-code-right/" target="_blank">ignoram os status code http</a>. Ex:</p>
<pre class="brush: plain; title: ;">
HTTP/1.1 200 OK
Content-Type: text/xml

&lt;error&gt;
  &lt;code&gt;123&lt;/code&gt;
  &lt;message&gt;Ocorreu um erro&lt;/message&gt;
&lt;/error&gt;
</pre>
<p>Percebeu o problema?</p>
<p>Outro caso bem comum acontece quando quem envia uma mensagem para um objeto trata todos os retornos de erros de forma igual e não mostra claramente a mensagem. Ex:</p>
<pre class="brush: java; title: ;">
try {
  objeto.fazAlgumaCoisa();
catch (Exception e) {
  log.error(&quot;Deu algum erro&quot;);
}
</pre>
<p>Já vi muito código assim e isso dificulta bastante pra quem está tentando entender o que está acontecendo.</p>
<p>Pior que isso foi o sistema web me dizer que não achou meu cartão, quando na verdade algum outro sistema que esse se comunica estava fora do ar. Não podia simplesmente informar algo como <strong>&#8220;Nosso sistema está em manutenção, previsão de retorno para X horas&#8221;</strong>? Cartão inexistente é inadmissível, pois certamente o cliente ficará confuso sobre o que está acontecendo.</p>
<p>E o saldo no atendimento eletrônico que estava dobrado? Eu aprendi certa vez que esse tipo de informação deveria vir de <a href="http://www.c2.com/cgi/wiki?DontRepeatYourself" target="_blank">somente um lugar</a>. No caso eu obtive 3 valores diferentes para meu saldo, o que me indica que esse principio não foi respeitado.</p>
<p>E sobre a indisponibilidade do sistema? Que tal enviar automaticamente um SMS/twitter/email ou qualquer outra coisa para que os clientes possam se preparar para esse tipo de situação? Ser pego de surpresa é sempre ruim.</p>
<p><strong>Conclusão</strong></p>
<p>Comunicação não é só importante entre pessoas. Nossos Softwares precisam comunicar-se adequadamente com seus usuários. Muitos ignoram isso completamente. Tenho certeza que podemos melhorar isso.
<p><font color="#B4B4B4" size="-2">Post Footer automatically generated by <a href="http://www.freetimefoto.com/add_post_footer_plugin_wordpress" style="color: #B4B4B4; text-decoration:underline;">Add Post Footer Plugin</a> for wordpress.</font></p>
]]></content:encoded>
			<wfw:commentRss>http://codificando.com/2010/06/seu-software-tambem-deve-comunicar-se-corretamente/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>JBehave Brasil &#8211; BDD em Java no nosso idioma</title>
		<link>http://codificando.com/2009/04/jbehave-brasil-bdd-em-java-no-nosso-idioma/</link>
		<comments>http://codificando.com/2009/04/jbehave-brasil-bdd-em-java-no-nosso-idioma/#comments</comments>
		<pubDate>Wed, 15 Apr 2009 19:00:52 +0000</pubDate>
		<dc:creator>Emerson Macedo</dc:creator>
				<category><![CDATA[agile]]></category>
		<category><![CDATA[bdd]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[jruby]]></category>
		<category><![CDATA[pragmatic]]></category>
		<category><![CDATA[tdd]]></category>
		<category><![CDATA[testes]]></category>
		<category><![CDATA[tools]]></category>
		<category><![CDATA[engenharia]]></category>
		<category><![CDATA[xp]]></category>

		<guid isPermaLink="false">http://codificando.com/?p=67</guid>
		<description><![CDATA[No mês passado, resolvi aplicar BDD em um projeto Java que estava desenvolvendo. Atualmente, existem ferramentas em outras linguagens que podem ser usadas para esse fim. Por uma série de razões, resolvi usar o JBehave para resolver o meu problema &#8230; <a href="http://codificando.com/2009/04/jbehave-brasil-bdd-em-java-no-nosso-idioma/">Continue lendo <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>No mês passado, resolvi aplicar <a href="http://en.wikipedia.org/wiki/Behavior_Driven_Development" target="_blank">BDD</a> em um projeto Java que estava desenvolvendo. Atualmente, existem <a href="http://wiki.github.com/aslakhellesoy/cucumber/jruby-and-java" target="_blank">ferramentas</a> em <a href="http://jtestr.codehaus.org/" target="_blank">outras linguagens</a> que podem ser usadas para esse fim. Por uma série de razões, resolvi usar o <a href="http://jbehave.org/" target="_blank">JBehave</a> para resolver o meu problema nesse projeto em específico (lembre-se, não existe bala de prata). Acontece que o JBehave é todo em Inglês e não dá suporte a i18n.</p>
<p>Quando comecei a usa-lo no meu projeto, logo percebi que usar em inglês não seria legal, pois o projeto só fazia sentido no Brasil e portanto o interessante era escrever os cenários em português. A partir desse momento, comecei a escrever algumas classes pra fornecer esse suporte. Felizmente, as classes <a href="http://jbehave.org/javadoc/latest/core/org/jbehave/scenario/Scenario.html">Scenario</a> e <a href="http://jbehave.org/javadoc/latest/core/org/jbehave/scenario/steps/Steps.html" target="_blank">Steps</a> permitem fácil extensão para resolver esse problema. Após as modificações necessárias, o arquivo de cenário passou a se chamar <strong>nome.cenario</strong> e o texto no arquivo ficou da seguinte forma:</p>
<pre class="brush: xml; title: ;">

Como um Bom testador
Eu quero testar todo meu sistema
Para garantir a qualidade

Cenário: Nome em português do Brasil

Dado que eu quero rodar o Jbehave em português do Brasil
Quando eu usar o meu idioma
E estiver testando
Então tudo deve funcionar
E eu sou feliz
</pre>
<p>Feito isso, achei legal disponibilizar uma biblioteca para que outros desenvolvedores que precisem usar o <a href="http://jbehave.org/" target="_blank">JBehave</a> no nosso idioma possam faze-lo de forma trivial. Nesse momento nasceu o projeto <a href="http://github.com/emerleite/jbehave-br" target="_blank">jbehave-br</a>, extraido desse projeto e disponibilizado no GitHub <a href="http://github.com/emerleite/jbehave-br" target="_blank">aqui</a>. O projeto é muito simples e pequeno, com o objetivo de resolver especificamente esse problema e nada mais.</p>
<p>[UPDATE] O Jbehave agora suporta internacionalização e refatorei essa biblioteca para se aproveitar disso. Está totalmente compatível com a versão 2.5[/UPDATE]
<p><font color="#B4B4B4" size="-2">Post Footer automatically generated by <a href="http://www.freetimefoto.com/add_post_footer_plugin_wordpress" style="color: #B4B4B4; text-decoration:underline;">Add Post Footer Plugin</a> for wordpress.</font></p>
]]></content:encoded>
			<wfw:commentRss>http://codificando.com/2009/04/jbehave-brasil-bdd-em-java-no-nosso-idioma/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>BBB9 e o brother que você não gosta &#8211; NO AR !!!</title>
		<link>http://codificando.com/2009/02/bbb9-e-o-brother-que-voce-nao-gosta-no-ar/</link>
		<comments>http://codificando.com/2009/02/bbb9-e-o-brother-que-voce-nao-gosta-no-ar/#comments</comments>
		<pubDate>Fri, 20 Feb 2009 19:14:23 +0000</pubDate>
		<dc:creator>Emerson Macedo</dc:creator>
				<category><![CDATA[agile]]></category>
		<category><![CDATA[design]]></category>
		<category><![CDATA[engenharia]]></category>
		<category><![CDATA[eventos]]></category>
		<category><![CDATA[gestão]]></category>
		<category><![CDATA[scrum]]></category>
		<category><![CDATA[bbb]]></category>
		<category><![CDATA[pensamentos]]></category>

		<guid isPermaLink="false">http://codificando.com/?p=59</guid>
		<description><![CDATA[Entrou hoje, exatamente as 08:34 da manhã, o aplicativo oficial do Big Brother Brasil 9 para orkut na plataforma Open Social, desenvolvido pelo time o qual faço parte aqui na globo.com. Esse aplicativo tem por objetivo alfinetar o brother que &#8230; <a href="http://codificando.com/2009/02/bbb9-e-o-brother-que-voce-nao-gosta-no-ar/">Continue lendo <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Entrou hoje, exatamente as 08:34 da manhã, o aplicativo oficial do <a href="http://bbb.globo.com/" target="_blank">Big Brother Brasil 9</a> para <a href="http://www.orkut.com" target="_blank">orkut</a> na plataforma <a href="http://code.google.com/apis/opensocial/" target="_blank">Open Social</a>, desenvolvido pelo time o qual faço parte aqui na <a href="http://globo.com" target="_blank">globo.com</a>. Esse aplicativo tem por objetivo alfinetar o brother que o usuário não gosta e comentar sobre o assunto.</p>
<p><img class="aligncenter" src="http://codificando.com/wp-content/uploads/2009/02/alfinetando_brother.jpg" alt="" width="517" height="392" /></p>
<p>Aplicativos Open Social parecem algo como uma brincadeirinha de criança, coisa que qualquer pessoa faz. Mas na verdade, desenvolver esse tipo de aplicação para um programa como o Big Brother Brasil não é tão simples. Aplicações de grande volume geralmente usam arquiteturas recheadas de <a href="http://www.danga.com/memcached/">cache</a>, <a href="http://en.wikipedia.org/wiki/Message_Oriented_Middleware" target="_blank">processamento assíncrono usando fila</a>, criptografia, alguns servidores e um bocado de outras coisas que o torna tão complexo quanto qualquer outro sistema.</p>
<p>Quero aproveitar também e destacar, que <strong>conseguimos desenvolver o produto completo &#8220;do zero&#8221;, em pouco mais de 1 mês</strong>. Isso inclui configuração de todos os servidores (inclusive produção que são várias máquinas), ambiente interno de desenvolvimento, servidor de <a href="http://martinfowler.com/articles/continuousIntegration.html" target="_blank">integração contínua</a>, desenho dos bonecos dos brothers de forma personalizada, vários testes de carga em ambientes que simulam produção e muita comunicação. Estou falando disso, pois usamos metodologias ágeis e acredito fortemente que se não fosse assim, não teria sido possível entregar o aplicativo nesse tempo (e não trabalhamos nenhum fim de semana). No caso específico aqui da globo.com, <a href="http://pt.wikipedia.org/wiki/Scrum" target="_blank">SCRUM</a> é a metodologia usada, mas poderia ser <a href="http://www.extremeprogramming.org/" target="_blank">Extreme Programming</a> ou alguma outra qualquer. Um detalhe também importante é que nosso time tem apenas 10 pessoas, o que contraria um pouco o modelo tradicional que diz que com mais gente o trabalho anda mais rápido.</p>
<p><strong>Se você gosta de Big Brother Brasil e deseja expressar sua opinião sobre algum brother, entre na seção de aplicativos do orkut e procure por: </strong><span class="status-body"><span class="entry-content"><strong>BBB &#8211; Voodoo Brother.</strong></span></span>
<p><font color="#B4B4B4" size="-2">Post Footer automatically generated by <a href="http://www.freetimefoto.com/add_post_footer_plugin_wordpress" style="color: #B4B4B4; text-decoration:underline;">Add Post Footer Plugin</a> for wordpress.</font></p>
]]></content:encoded>
			<wfw:commentRss>http://codificando.com/2009/02/bbb9-e-o-brother-que-voce-nao-gosta-no-ar/feed/</wfw:commentRss>
		<slash:comments>8</slash:comments>
		</item>
		<item>
		<title>Assine seus códigos</title>
		<link>http://codificando.com/2009/02/assine-seus-codigos/</link>
		<comments>http://codificando.com/2009/02/assine-seus-codigos/#comments</comments>
		<pubDate>Tue, 10 Feb 2009 19:26:21 +0000</pubDate>
		<dc:creator>Emerson Macedo</dc:creator>
				<category><![CDATA[agile]]></category>
		<category><![CDATA[design]]></category>
		<category><![CDATA[engenharia]]></category>
		<category><![CDATA[tdd]]></category>
		<category><![CDATA[testes]]></category>

		<guid isPermaLink="false">http://codificando.com/?p=58</guid>
		<description><![CDATA[Quem nunca chegou numa empresa ou projeto, deu de cara com um código horroroso e logo disse: Que droga, quem foi o infeliz que fez esse código tosco? Ou o contrário: Quem foi o cara que fez esse código maneiro? &#8230; <a href="http://codificando.com/2009/02/assine-seus-codigos/">Continue lendo <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Quem nunca chegou numa empresa ou projeto, deu de cara com um código horroroso e logo disse: Que droga, quem foi o infeliz que fez esse código tosco? Ou o contrário: Quem foi o cara que fez esse código maneiro?</p>
<p>Essas situações são muito frequentes, principalmente a primeira, com códigos fedorentos. Por isso, eu adoto uma postura: Sempre assino meus códigos.</p>
<p>O que seria assinar o código? Bem, assinar o código é aquela simples documentação que vem logo acima do arquivo, como por exemplo em Java, usando o famoso javadoc:</p>
<pre class="brush: java; title: ;">
package xpto;
import x;
/**
* @author Emerson Macedo
*/
public class Abc {
// ...
}
</pre>
<p>Assinar o código pode parecer meio arrogante mas o objetivo não é esse. O propósito de <a href="http://codificando.com/2009/01/15/os-5-niveis-do-desenvolvedor-nos-testes-automatizados/"><img class="alignright" src="http://codificando.com/wp-content/uploads/2009/02/assinando.jpg" alt="" /></a>assinar o código e se expor. Quando você assina alguma coisa, explicitamente está colocando a sua autoria naquilo, ficando sujeito tanto a críticas, quanto a elogios.</p>
<p>Quando algum pintor faz um quadro, ele sempre vem assinado em alguma parte. Dificilmente o autor dessa obra de arte vai terminar esse quadro antes que ele tenha certeza que está com ótima qualidade (pelo menos na visão dele).</p>
<p>E no que isso implica? Isso implica que você (1) vai pensar 2 vezes antes de colocar aquela habitual gambiarra no seu código, (2) vai pensar bem antes de <a href="http://codificando.com/2009/01/15/os-5-niveis-do-desenvolvedor-nos-testes-automatizados/">concluir alguma coisa sem devidos testes automatizado</a>s e (3) vai ser muito mais responsável com o código que você está desenvolvendo.</p>
<p><strong>Conclusão</strong></p>
<p>Como qualquer desenvolvedor, já desenvolvi códigos ruins em diversos projetos pelos quais passei. Aquele que nunca desenvolveu código fedorento que atire a primeira pedra. Hoje em dia, <a href="http://codificando.com/2008/09/11/codigo-do-panico/">não desprezo a qualidade daquilo que desenvolvo</a>. Acredito muito que quando assinamos nossos códigos e nos damos conta que outro desenvolvedor/programador irá utiliza-lo futuramente, isso gera um maior cuidado com a qualidade.
<p><font color="#B4B4B4" size="-2">Post Footer automatically generated by <a href="http://www.freetimefoto.com/add_post_footer_plugin_wordpress" style="color: #B4B4B4; text-decoration:underline;">Add Post Footer Plugin</a> for wordpress.</font></p>
]]></content:encoded>
			<wfw:commentRss>http://codificando.com/2009/02/assine-seus-codigos/feed/</wfw:commentRss>
		<slash:comments>11</slash:comments>
		</item>
	</channel>
</rss>

