tag:blogger.com,1999:blog-3694056467545073962024-03-13T10:58:12.615-03:00Daniel CastellaniDesenvolvimento de software de forma holística: pessoas, processos, ferramentas e comunicação.Daniel Castellanihttp://www.blogger.com/profile/06113568581630261061noreply@blogger.comBlogger25125tag:blogger.com,1999:blog-369405646754507396.post-11048118618500024612013-11-05T17:42:00.001-02:002013-11-05T17:42:33.675-02:00Por que os jovens profissionais da geração Y estão infelizes?Texto super interessante que aborda o assunto de maneira ilustada e explicativa.<br />
Altamente recomendado para todos!<br />
<br />
http://demografiaunicamp.wordpress.com/2013/10/30/porque-os-jovens-profissionais-da-geracao-y-estao-infelizes/#!Daniel Castellanihttp://www.blogger.com/profile/06113568581630261061noreply@blogger.com0tag:blogger.com,1999:blog-369405646754507396.post-28858313700433816332013-10-15T11:11:00.001-03:002013-10-15T11:11:48.429-03:00Jenkins e Jenkins Jr<div class="separator" style="clear: both; text-align: center;">
<a href="http://2.bp.blogspot.com/-HvdEYvEJt0c/Ul1M9_ScI6I/AAAAAAAAURY/NRUYKm4qpLc/s1600/JenkinsJr.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" src="http://2.bp.blogspot.com/-HvdEYvEJt0c/Ul1M9_ScI6I/AAAAAAAAURY/NRUYKm4qpLc/s1600/JenkinsJr.png" /></a></div>
Opa, nasceu o filho do <a href="http://jenkins-ci.org/">Jenkins</a>?<br />
heheh<br />
Mais ou menos isso. A pouco tempo comecei a usar o Mac, então busquei por alguns apps que pudessem me ajudar. Um deles, bem legal por sinal é o <a href="https://itunes.apple.com/br/app/jenkins-jr/id635551514?mt=12">Jenkins Jr</a>.<br />
<br />
Essa app se conecta ao <a href="http://jenkins-ci.org/">Jenkins</a> (um servidor de Integração Contínua) e coloca na barra de notificação do Mac um aviso sobre o <i>build</i>, quando ele falha ou tem sucesso. Bem legal pra aumentar ainda mais a comunicação!Daniel Castellanihttp://www.blogger.com/profile/06113568581630261061noreply@blogger.com0tag:blogger.com,1999:blog-369405646754507396.post-13334549362094277882013-10-15T10:42:00.001-03:002013-10-15T11:12:06.565-03:00Continuous Delivery - Entrega Contínua - TDC 2013Gente, o termo Entrega Contínua (em inglês Continuous Delivery) está em alta.<br />
<div>
Quem não entende ou quiser entender um pouco mais, o Edson Yanaga fez uma ótima apresentação no TDC 2013.</div>
<div>
<br /></div>
<div>
Este é um tema que me interessa muito. Quem quiser conversar sobre como implantar na sua empresa, desafios e tal, vamos conversar!</div>
<div>
<br /></div>
<div>
abraços</div>
<br />
Segue o link.<br />
<a href="http://www.infoq.com/br/presentations/entrega-continua#.Ul1F64hAYxw.blogger">Continuous Delivery - Entrega Contínua</a>Daniel Castellanihttp://www.blogger.com/profile/06113568581630261061noreply@blogger.com0tag:blogger.com,1999:blog-369405646754507396.post-18580953726929571342013-10-03T00:13:00.001-03:002013-10-03T00:13:59.634-03:00Hermes-message - Arquitetura e Estrutura<span style="background-color: white; color: #333333; font-family: 'lucida grande', tahoma, verdana, arial, sans-serif; font-size: 13px; line-height: 17px;">Acabei de colocar um vídeo explicando a estrutura e arquitetura do Hermes-Message, o primeiro projeto Opensource da STI-UFF.</span><br />
<span style="background-color: white; color: #333333; font-family: 'lucida grande', tahoma, verdana, arial, sans-serif; font-size: 13px; line-height: 17px;"><br />
</span> <iframe allowfullscreen="" frameborder="0" height="344" src="//www.youtube.com/embed/ocGeul-6PdA" width="459"></iframe><br />
<br />
Apresentação: <a href="http://www.slideshare.net/ddcastellani/hermesmessageoverview-architecturestructure">http://www.slideshare.net/ddcastellani/hermesmessageoverview-architecturestructure</a><br />
<div><br />
</div>Daniel Castellanihttp://www.blogger.com/profile/06113568581630261061noreply@blogger.com0tag:blogger.com,1999:blog-369405646754507396.post-24153831952684845132013-09-25T20:56:00.001-03:002013-09-25T20:56:09.548-03:00Google deixou o MySQL e foi para MariaDB<div class="separator" style="clear: both; text-align: center;">
<a href="https://mariadb.org/static/images/v2/ice_logo-5dcea9e47b780ff52f75c3c3304d54827f56211e.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" height="200" src="https://mariadb.org/static/images/v2/ice_logo-5dcea9e47b780ff52f75c3c3304d54827f56211e.png" width="200" /></a></div>
Wow! Mais um grande <i>player </i>saiu do MySQL e foi para o <a href="https://mariadb.org/pt-br/">MariaDB</a>. Dessa vez foi o Google.<br />
<br />
De acordo com Jeremy Cole, engenheiro senior do Google, essa mudança foi mais ideológica que técnica. Pois, a postura da Oracle com o MySQL não tem agradado muito a comunidade.<br />
<br />
Qual será o impacto disso para o LAMP nos próximos capítulos?<br />
<br />
Essa notícia foi publicada no <a href="http://www.fastcolabs.com/3018338/inside-googles-decision-to-stop-using-mysql">Fast Co Labs</a>, um site novo que tem diversas matérias interessantes. =)<br />
<br />
<br />Daniel Castellanihttp://www.blogger.com/profile/06113568581630261061noreply@blogger.com0tag:blogger.com,1999:blog-369405646754507396.post-47782886921736385982013-09-25T19:03:00.002-03:002013-09-25T21:08:51.565-03:00Open Source Report Card<div class="separator" style="clear: both; text-align: center;">
<a href="https://dl.dropboxusercontent.com/u/6080801/www.danielcastellani.com.br/osrc_dc.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="173" src="https://dl.dropboxusercontent.com/u/6080801/www.danielcastellani.com.br/osrc_dc.JPG" width="400" /></a></div>
<div style="text-align: center;">
Muito maneira a análise do Open Source Report Card do <a href="https://github.com/dancastellani">GitHub</a>. Vejam o meu: <a href="http://osrc.dfm.io/dancastellani">http://osrc.dfm.io/dancastellani</a>!</div>
<br />
<a name='more'></a><br />
<br />
Ele mostra gráficos e analisa as linguagens, horários e dias da semana dos commits do desenvolvedor. Basta colocar o usuário de alguém do GitHub que ele processa na hora e monta a página de acordo com o histórico de alterações do <i>dev</i>.<br />
<br />
Abaixo estão alguns dos meus dados, representados em gráficos bem interessantes.<br />
<a href="https://dl.dropboxusercontent.com/u/6080801/www.danielcastellani.com.br/osrc_g1.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em; text-align: center;"><img border="0" height="169" src="https://dl.dropboxusercontent.com/u/6080801/www.danielcastellani.com.br/osrc_g1.JPG" width="640" /></a><br />
<br />
Ele traz até uma análise das linguagens de programação utilizadas. Abaixo está uma parte do meu OSRC mostrando em quais linguagens eu já contribuí.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://dl.dropboxusercontent.com/u/6080801/www.danielcastellani.com.br/osrc_g2.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="344" src="https://dl.dropboxusercontent.com/u/6080801/www.danielcastellani.com.br/osrc_g2.JPG" width="640" /></a></div>
<br />
<br />Daniel Castellanihttp://www.blogger.com/profile/06113568581630261061noreply@blogger.com0tag:blogger.com,1999:blog-369405646754507396.post-54319844447990895362013-09-12T00:36:00.001-03:002013-09-12T00:36:04.312-03:00Google Testing Blog: Testing on the Toilet: Test Behavior, Not Implemen...<a href="http://googletesting.blogspot.com/2013/08/testing-on-toilet-test-behavior-not.html?spref=bl">Google Testing Blog: Testing on the Toilet: Test Behavior, Not Implemen...</a>: By Andrew Trenk This article was adapted from a Google Testing on the Toilet (TotT) episode. You can download a printer-friendly version ...Daniel Castellanihttp://www.blogger.com/profile/06113568581630261061noreply@blogger.com0tag:blogger.com,1999:blog-369405646754507396.post-48480705674961693592013-09-11T22:35:00.002-03:002013-09-11T22:36:44.317-03:00O que é Test Double?<div class="separator" style="clear: both; text-align: center;">
<a href="http://fc06.deviantart.net/fs70/f/2010/181/c/e/Test_Crash_Dummy_by_TheLittleReaper.jpg" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"><img border="0" height="200" src="http://fc06.deviantart.net/fs70/f/2010/181/c/e/Test_Crash_Dummy_by_TheLittleReaper.jpg" width="200" /></a></div>
Você sabe o que são Test Doubles?<br />
<br />
Vejo muita gente programar testes sem conhecer um conceito tão importante quando este. Consequentemente não sabem diferenciar: dummy, fake, stub, mock e spy.<br />
<br />
Vou seguir a apresentação destes conceitos como fez o <a href="http://martinfowler.com/">Martin Fowler</a> em seu <a href="http://www.martinfowler.com/bliki/TestDouble.html">blog</a>, citando Gerard Meszaros, que fez um ótimo trabalho em seu livro <a href="http://xunitpatterns.com/">xUnit Patterns</a>.<br />
<br />
<a name='more'></a><br />
Para diferenciar o que está no post de Martin Fowler dos meus comentários, o que eu disse sobre cada tipo está em <i>itálico</i>.<br />
<br />
<h4>
<b>O que é Test Double?</b></h4>
Test Double é um termo genérico para qualquer caso que se deseja substituir um objeto real por outro objeto com objetivos de teste. Existem os seguintes tipos:<br />
<br />
<h4>
<b>Dummy</b></h4>
Este tipo de objeto é passado mas nunca faz nada. Normalmente são usados para preencher parâmetros apenas.<br />
<br />
<i>Muitas vezes esses nem são objetos reais, o que pode ser implementado com proxy, por exemplo.</i><br />
<br />
<h4>
<b>Fake</b></h4>
Usualmente estes objetos possuem implementações funcionais, mas são criados outros a partir de atalhos que não permitiriam seu uso em produção. Um<a href="http://www.martinfowler.com/bliki/InMemoryTestDatabase.html"> banco de dados em memória para teste</a> é um bom exemplo.<br />
<br />
<i>Outro exemplo são objetos padrão, pré definidos e usados diversas vezes nos testes. Em um sistema acadêmico um aluno inscrito ou com matricula cancelada, pode ser criado dessa forma. É comum que um objeto Fake tenha apenas os atributos importantes para representar o estado necessário ao teste. Assim, um aluno inscrito provavelmente terá apenas o valor "inscrito" para o atributo "situação".</i><br />
<br />
<h4>
<b>Stub</b></h4>
Estes objetos são programados para fornecerem respostas previstas em teste, normalmente não respondem a nada além do programado para o teste.<br />
<br />
<i>Estes objetos são ótimos para simular apenas os comportamentos desejados em testes unitários. Eles são sempre usados quando deseja-se obter um objeto da base de dados ou retornar o resultado de um processamento que poderia ser demorado. </i><br />
<br />
<h4>
<b>Spy</b></h4>
Estes objetos são stubs que também gravam informações baseadas em como foram chamados. Uma forma disso pode ser um serviço de email que armazene quantos emails foram enviados.<br />
<br />
<i>Normalmente esses objetos são utilizados para verificar chamadas internas de objetos reais, parâmetros passados e quantidade de execuções. Mas eles também podem ser stubs apenas, dos quais se deseja verificar chamadas.</i><br />
<br />
<h4>
<b>Mocks</b></h4>
Estes objetos são pré-programados com expectativas que formam uma especificação das chamadas que é esperado que eles recebam. Eles podem lançar exceções se receberem chamadas não esperadas e são verficados se todas as chamadas esperadas foram realizadas.<br />
<br />
<h4>
<i>Quando usar?</i></h4>
<div>
<i>Test Doubles são interessantes quando se deseja isolar uma parte do sistema sendo testado (<a href="http://xunitpatterns.com/SUT.html">SUT</a>) para verificar se ela está se comportando como deveria. A parte que se deseja testar pode ser um método, uma classe, um componente, ou até toda a aplicação contra um banco de dados falso.</i></div>
<div>
<i><br /></i></div>
<i>Test Doubles são usados </i><i>principalmente </i><i>em Testes Unitários, entretanto, seu uso vai muito além disso. Eles também podem ser aplicados a testes de integração, nos quais deseja-se saber se dois componentes do sistema estão funcionando corretamente juntos. </i><br />
<br />
<br />Daniel Castellanihttp://www.blogger.com/profile/06113568581630261061noreply@blogger.com0tag:blogger.com,1999:blog-369405646754507396.post-25899284969131069222013-09-11T20:23:00.000-03:002013-09-11T20:25:20.248-03:00Seja Poliglota, saia do arroz com feijão!<div class="separator" style="clear: both; text-align: center;">
<a href="http://t3.gstatic.com/images?q=tbn:ANd9GcT9numhhOR7l_SCKaA2xZs22nIDijEXsW6lgnkRkrWsY7yVg3orIw" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" src="http://t3.gstatic.com/images?q=tbn:ANd9GcT9numhhOR7l_SCKaA2xZs22nIDijEXsW6lgnkRkrWsY7yVg3orIw" /></a></div>
<br />
<div style="text-align: justify;">
Ser um programador poliglota implica em saber várias linguagens de programação, não apenas para resolver problemas distintos, mas para resolver os mesmos problemas também. Saber pensar em uma solução em diferentes linguagens aumenta a capacidade de criação e de solução de um desenvolvedor, por isso é tão importante saber diversas linguagens.</div>
<br />
<a name='more'></a><br />
<br />
<br />
<div style="text-align: justify;">
É muito comum em um projeto usarmos mais de um linguagem de programação. Isso se torna evidente em projetos WEB, nos quais utilizamos HTML, Javascript e CSS para o frontend com Java, Ruby, <a href="http://www.python.org.br/wiki">Python</a>, etc para o backend, mas também é verdade em outros sistemas. Repare que em todos os sistemas empresariais, se não em todos os sistemas, são utilizados bancos de dados, os quais possuem uma DSL própria, como o SQL por exemplo.</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
Na STI temos duas linguagens de desenvolvimento para o backend: Java e Ruby. Inicialmente eu trabalhava em projetos Java e posteriormente comecei a dar um suporte para projetos em ambas as linguagens. Na maioria das vezes minha ajuda era em modelagem, levantamento de requisitos, gerência de configuração de forma geral, mas muitas vezes entravamos em discussões de implementação muito divertidas. Nesse tempo, fui aprendendo sobre o ecossistema Rails e vendo um monte de coisas bacanas que não tínhamos em Java, como migrations.</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
Saber como fazer as coisas de outra forma ou das capacidades de outra linguagem de programação me deixavam curioso sobre como fazer essas coisas em Java e como ter essas facilidades. Mais do que isso, me fazia questionar se minha forma de fazer algumas coisas era a mais adequada ou se eu podia fazer ainda melhor! Eu questionava não apenas como fazer em Java as coisas que eu via em Ruby, mas também o contrário. Isso também aconteceu quando aprendi LISP e PROLOG e oturas linguagens.</div>
<div style="text-align: justify;">
<br /></div>
<br />
<div style="text-align: justify;">
<a href="http://jornaldehoje.com.br/wp-content/uploads/2012/06/arros-e-feijao3.jpg" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em; text-align: justify;"><img border="0" height="157" src="http://jornaldehoje.com.br/wp-content/uploads/2012/06/arros-e-feijao3.jpg" width="200" /></a>Vou relatar uma das coisas que aprendi assim. Uma das coisas em Rails que mais me ajudou em Java foi a parte de testes com <a href="http://rspec.info/">Rspec </a>e <a href="http://cukes.info/">Cucumber</a>. Quando conheci o <a href="http://cukes.info/">Cucumber </a>achei surpreendente a forma de escrever testes mais legíveis, ainda mais, testes que poderiam ser usados como documentação do projeto. Isso me ajudou a pensar em como escrever meu código, em geral, de forma mais legível e organizada, sempre visando a manutenção (qualidade). Eu já fazia testes em Java usando JUnit, mas apenas isso não era mais suficiente, eu precisava de uma forma melhor de fazer isso! Busquei outras ferramentas para teste e fui estudar melhor como fazer testes melhores, para ir além do feijão com arroz que eu <strike>comia </strike> programava meus testes naquela época. </div>
<div style="text-align: justify;">
<br /></div>
<br />
<div style="text-align: justify;">
<a href="http://mdemulher.abril.com.br/imagem/dieta/interna-slideshow/dieta-emagrecer-arroz-feijao-ana-maria.jpg" imageanchor="1" style="clear: left; display: inline !important; float: left; margin-bottom: 1em; margin-right: 1em; text-align: center;"><img border="0" height="160" src="http://mdemulher.abril.com.br/imagem/dieta/interna-slideshow/dieta-emagrecer-arroz-feijao-ana-maria.jpg" width="320" /></a></div>
<div style="text-align: justify;">
Assim, eu fui estudar mais sobre testes e conheci os conceitos de Test Doubles, tipos de testes, o que automatizar e o que não automatizar, etc. Nessa época, encontrei o <a href="http://code.google.com/p/mockito/">Mockito</a>, uma ótima ferramenta em Java para trabalhar com <a href="http://www.martinfowler.com/bliki/TestDouble.html">Test Doubles</a>. Achei muito limpa sua forma de "mockar" esses objetos todos e facilitar imensamente a fazer Testes Unitários. Posso dizer que só depois do Mockito eu aprendi a fazer Testes Unitários de verdade. </div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
Acho interessante ver que tem tanta gente que trabalha com testes automatizados sem nem saber sobre Test Doubles ou tipos de teste corretamente. é Comum ouvir que se esta "mockando" tudo. Mas muitas vezes não sabe a diferença entre os tipos de Test Dubles, ou seja, chamam tudo de mock, pois no framework o método usado para criar stubs e mocks é o mesmo<i> mock(...)</i>. Algumas vezes um stub seria a melhor opção e o programador está usando um mock, ou ainda, ele está fazendo um spy e chamando de mock. Conhecer sobre a teoria por trás de uma ferramenta é a melhor forma de usá-la na hora certa e, apenas, sabendo usar na hora certa é que se usa corretamente uma ferramenta. <i>Sabe aquela história de que pra quem tem martelo tudo é prego? </i>Então... mas esse papo é pra outro post.</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
Concluindo, vamos aprender a programar em outras linguagens, não apenas úteis para o seu dia a dia, mas úteis para sua capacidade de solução! Alguém ai já fez algum programa em <a href="http://pt.wikipedia.org/wiki/Prolog">PROLOG </a>ou <a href="http://pt.wikipedia.org/wiki/Lisp">LISP</a>? Se sim, vocês sabem a dor de cabeça que é deixar de entender o mundo de forma estruturada e pensar de maneira funcional, lógica. Que desafio desgastante, mas prazeroso ao fazer o programa funcionar! =)</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
Vou deixar uma dica de leitura: <a href="http://pragprog.com/book/btlang/seven-languages-in-seven-weeks">Sevem languages in seven weeks</a>. Eu não li ainda, mas está na minha lista!</div>
<br />Daniel Castellanihttp://www.blogger.com/profile/06113568581630261061noreply@blogger.com0tag:blogger.com,1999:blog-369405646754507396.post-59876596821307408012013-09-05T14:41:00.004-03:002013-09-05T14:42:29.824-03:00API Design<div class="separator" style="clear: both; text-align: center;">
<a href="http://cdn2.infoq.com/styles/i/logo_bigger.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="http://cdn2.infoq.com/styles/i/logo_bigger.jpg" /></a> </div>
<div class="separator" style="clear: both; text-align: center;">
Acab<span style="font-family: inherit;">ei de ver uma entrevista muito boa sobre API com <span style="background-color: white; font-size: 14px; line-height: 21px;">Mike Amundsen da 7 Layers. Vale a pena ver!</span></span></div>
<br />
<a href="http://www.infoq.com/interviews/amundsen-api">http://www.infoq.com/interviews/amundsen-api</a>Daniel Castellanihttp://www.blogger.com/profile/06113568581630261061noreply@blogger.com0tag:blogger.com,1999:blog-369405646754507396.post-42553378758834905482013-07-17T21:08:00.000-03:002013-07-18T00:05:29.220-03:00KnockoutJs: Framework para Interfaces em Javascript<div class="separator" style="clear: both; text-align: center;">
<a href="http://knockoutjs.com/img/ko-logo.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="93" src="http://knockoutjs.com/img/ko-logo.png" style="background-color: #a80000; border-radius: 4px;" width="320" /></a></div>
<br />
O framework <a href="http://knockoutjs.com/index.html">Knockout </a>parece bem bacana para ajudar na produção das telas puramente com HTML + Javascript (JQuery) e CSS. Ele parece facilitar bastante na criação desse tipo de interfaces, pois agiliza com mt código pronto.<br />
<br />
Ultimamente, para ficar mais leves as aplicações, boa parte da interface tem sido feita na parte do cliente. Esse é um contraste com aplicações Java que eu fazia antigamente onde era tudo feito no servidor e apenas era enviado o HTML de resposta para o cliente. Apenas, quando necessário para melhorar a velocidade do site, eram feitas chamadas com AJAX assíncronas.<br />
<br />
Esse é o tipo de coisa que eu sentia falta quando pensava em sair do <a href="http://showcase.richfaces.org/">RichFaces</a>, <a href="http://www.primefaces.org/showcase/ui/home.jsf">PrimeFaces </a>ou qualquer outro UI desses para JSF. Eles aumentam muito sua produtividade com diversos componentes prontos. Mas como são presos ao JSF carregam todo o peso dessa solução.<br />
<br />
O código para gerar uma listaDaniel Castellanihttp://www.blogger.com/profile/06113568581630261061noreply@blogger.com0tag:blogger.com,1999:blog-369405646754507396.post-8545972017061026682013-07-11T13:41:00.000-03:002013-07-11T13:41:10.158-03:00Prêmio Arnaldo Dias Belchior - 2º lugar no CTD<div class="separator" style="clear: both; text-align: center;">
<a href="http://4.bp.blogspot.com/-077bFGG2mP4/Ud7f3acs7UI/AAAAAAAAS4I/aR3x0vSdH7Y/s1600/PremioCTD-Leo_Plastino.JPG" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" height="197" src="http://4.bp.blogspot.com/-077bFGG2mP4/Ud7f3acs7UI/AAAAAAAAS4I/aR3x0vSdH7Y/s320/PremioCTD-Leo_Plastino.JPG" width="320" /></a></div>
Saiu o resultado na semana passada, mas eu apenas tive tempo de dar uma parada hoje. Fiquei com o 2º lugar na categoria Dissertação de Mestrado. Esse resultado foi ótimo, pois me esforcei muito durante o mestrado, para ter uma pesquisa de qualidade e também uma dissertação bem escrita.<br />
<br />
<br />
<br />
<br />
<br />
O Concurso de Teses e Dissertações em Qualidade de Software (CTDQS) acontece anualmente junto ao SBQS. Na foto, estão Alexandre Plastino e Leonardo Murta, meus orientadores.<br />
<br />
Agora, energia para publicar o artigo!Daniel Castellanihttp://www.blogger.com/profile/06113568581630261061noreply@blogger.com0tag:blogger.com,1999:blog-369405646754507396.post-40567314165349177952013-07-02T19:59:00.000-03:002013-07-02T20:07:44.384-03:00Apresentação no SBQS 2013<div class="separator" style="clear: both; text-align: center;">
<a href="http://3.bp.blogspot.com/-BNXdOcbkZY4/UdNcoM0R-OI/AAAAAAAASvU/qZAIELFtUHA/s960/apresentacao_foto.jpg" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" height="150" src="http://3.bp.blogspot.com/-BNXdOcbkZY4/UdNcoM0R-OI/AAAAAAAASvU/qZAIELFtUHA/s200/apresentacao_foto.jpg" width="200" /></a></div>
<span id="goog_672899575"></span><span id="goog_672899576"></span><a href="http://www.blogger.com/"></a>Gente, acabei de apresentar o artigo sobre meu mestrado que está concorrendo no Concurso de Teses e Dissertações em Qualidade de Software 2013. Meu trabalho ficou entre os 3 melhores do Brasil e estou aguardando a divulgação (em alguns minutos) do resultado final.<br />
<br />
<a name='more'></a> Hoje a tarde fiz a apresentação na sessão técnica do <a href="http://sbqs.dcc.ufba.br/view/index.php">Simpósio Brasileiro de Qualidade de Software (SBQS 2013)</a> do meu artigo, que - apesar do nervosismo - foi muito boa. A apresentação já está no Slide Share e o link está no final do post. Após a apresentação recebi algumas perguntas interessantes que certamente me ajudarão a melhorar o trabalho. O melhor foi o feedback, pois diversas pessoas gostaram muito.<br />
<br />
<iframe allowfullscreen="" frameborder="0" height="356" marginheight="0" marginwidth="0" mozallowfullscreen="" scrolling="no" src="http://www.slideshare.net/slideshow/embed_code/23814169" style="border-width: 1px 1px 0; border: 1px solid #CCC; margin-bottom: 5px;" webkitallowfullscreen="" width="427"> </iframe> <br />
<div style="margin-bottom: 5px;">
<strong> <a href="http://www.slideshare.net/ddcastellani/sbqs-2013-apresentao-ctdqs-ostra" target="_blank" title="SBQS 2013 - Apresentação CTDQS - Ostra - Daniel Castellani">SBQS 2013 - Apresentação CTDQS - Ostra - Daniel Castellani</a> </strong> from <strong><a href="http://www.slideshare.net/ddcastellani" target="_blank">Daniel Castellani</a></strong> </div>
<br />
<a href="http://www.slideshare.net/ddcastellani/sbqs-2013-apresentao-ctdqs-ostra">http://www.slideshare.net/ddcastellani/sbqs-2013-apresentao-ctdqs-ostra</a>Daniel Castellanihttp://www.blogger.com/profile/06113568581630261061noreply@blogger.com0tag:blogger.com,1999:blog-369405646754507396.post-24450005965179546842013-03-21T12:36:00.000-03:002013-04-26T15:18:10.565-03:00Maven: propriedades no pom. Como definir a versão ou data de release na aplicação automaticamente?<div class="separator" style="clear: both; text-align: center;">
<a href="http://kuniga.files.wordpress.com/2011/09/maven-logo.png" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"><img border="0" height="68" src="http://kuniga.files.wordpress.com/2011/09/maven-logo.png" width="200" /></a></div>
É comum em muitas aplicações colocar a versão ou a hora do <i>release </i>na tela inicial (ou pagina se for um sistema web). Fazer isso automaticamente as vezes é complicado por causa do número da versão.<br />
<br />
O Maven é muito bom para fazer isso e simplifica o processo. Há muito tempo utilizo isso nos meus sistemas e o How-To está abaixo.<br />
<br />
<a name='more'></a><br />
Para configurar o maven para trocar propriedades da aplicação quando construir, como número de versão e horário do deploy, é necessário fazer 3 coisas:<br />
<br />
<br />
<div>
<b>1. Configurar a filtragem dos recursos</b></div>
<div>
<pre class="" style="background-color: #eeeeee; border: 0px; font-family: Consolas, Menlo, Monaco, 'Lucida Console', 'Liberation Mono', 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Courier New', monospace, serif; font-size: 14px; line-height: 18px; margin-bottom: 10px; max-height: 600px; overflow: auto; padding: 5px; vertical-align: baseline; width: auto;"><code style="border: 0px; font-family: Consolas, Menlo, Monaco, 'Lucida Console', 'Liberation Mono', 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Courier New', monospace, serif; margin: 0px; padding: 0px; vertical-align: baseline;"><span class="" style="background-color: transparent; border: 0px; color: maroon; margin: 0px; padding: 0px; vertical-align: baseline;"><project></span><span class="" style="background-color: transparent; border: 0px; margin: 0px; padding: 0px; vertical-align: baseline;">
...
</span><span class="" style="background-color: transparent; border: 0px; color: maroon; margin: 0px; padding: 0px; vertical-align: baseline;"><build></span><span class="" style="background-color: transparent; border: 0px; margin: 0px; padding: 0px; vertical-align: baseline;">
</span><span class="" style="background-color: transparent; border: 0px; color: maroon; margin: 0px; padding: 0px; vertical-align: baseline;"><resources></span><span class="" style="background-color: transparent; border: 0px; margin: 0px; padding: 0px; vertical-align: baseline;">
</span><span class="" style="background-color: transparent; border: 0px; color: maroon; margin: 0px; padding: 0px; vertical-align: baseline;"><resource></span><span class="" style="background-color: transparent; border: 0px; margin: 0px; padding: 0px; vertical-align: baseline;">
</span><span class="" style="background-color: transparent; border: 0px; color: maroon; margin: 0px; padding: 0px; vertical-align: baseline;"><directory></span><span class="" style="background-color: transparent; border: 0px; margin: 0px; padding: 0px; vertical-align: baseline;">src/main/resources</span><span class="" style="background-color: transparent; border: 0px; color: maroon; margin: 0px; padding: 0px; vertical-align: baseline;"></directory></span><span class="" style="background-color: transparent; border: 0px; margin: 0px; padding: 0px; vertical-align: baseline;">
</span><span class="" style="background-color: transparent; border: 0px; color: maroon; margin: 0px; padding: 0px; vertical-align: baseline;"><filtering></span><span class="" style="background-color: transparent; border: 0px; margin: 0px; padding: 0px; vertical-align: baseline;">true</span><span class="" style="background-color: transparent; border: 0px; color: maroon; margin: 0px; padding: 0px; vertical-align: baseline;"></filtering></span><span class="" style="background-color: transparent; border: 0px; margin: 0px; padding: 0px; vertical-align: baseline;">
</span><span class="" style="background-color: transparent; border: 0px; color: maroon; margin: 0px; padding: 0px; vertical-align: baseline;"></resource></span><span class="" style="background-color: transparent; border: 0px; margin: 0px; padding: 0px; vertical-align: baseline;">
</span><span class="" style="background-color: transparent; border: 0px; color: maroon; margin: 0px; padding: 0px; vertical-align: baseline;"></resources></span><span class="" style="background-color: transparent; border: 0px; margin: 0px; padding: 0px; vertical-align: baseline;">
...
</span><span class="" style="background-color: transparent; border: 0px; color: maroon; margin: 0px; padding: 0px; vertical-align: baseline;"></build></span><span class="" style="background-color: transparent; border: 0px; margin: 0px; padding: 0px; vertical-align: baseline;">
</span><span class="" style="background-color: transparent; border: 0px; color: maroon; margin: 0px; padding: 0px; vertical-align: baseline;"></project></span></code></pre>
</div>
<div>
<b>2. Declarar uma variável no arquivo</b></div>
<div>
<pre class="" style="background-color: #eeeeee; border: 0px; font-family: Consolas, Menlo, Monaco, 'Lucida Console', 'Liberation Mono', 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Courier New', monospace, serif; font-size: 14px; line-height: 18px; margin-bottom: 10px; max-height: 600px; overflow: auto; padding: 5px; vertical-align: baseline; width: auto;"><code style="border: 0px; font-family: Consolas, Menlo, Monaco, 'Lucida Console', 'Liberation Mono', 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Courier New', monospace, serif; margin: 0px; padding: 0px; vertical-align: baseline;"><span class="" style="background-color: transparent; border: 0px; margin: 0px; padding: 0px; vertical-align: baseline;">myprop1 </span><span class="" style="background-color: transparent; border: 0px; margin: 0px; padding: 0px; vertical-align: baseline;">=</span><span class="" style="background-color: transparent; border: 0px; margin: 0px; padding: 0px; vertical-align: baseline;"> somevalue
myprop2 </span><span class="" style="background-color: transparent; border: 0px; margin: 0px; padding: 0px; vertical-align: baseline;">=</span><span class="" style="background-color: transparent; border: 0px; margin: 0px; padding: 0px; vertical-align: baseline;"> $</span><span class="" style="background-color: transparent; border: 0px; margin: 0px; padding: 0px; vertical-align: baseline;">{</span><span class="" style="background-color: transparent; border: 0px; margin: 0px; padding: 0px; vertical-align: baseline;">foo</span><span class="" style="background-color: transparent; border: 0px; margin: 0px; padding: 0px; vertical-align: baseline;">.</span><span class="" style="background-color: transparent; border: 0px; margin: 0px; padding: 0px; vertical-align: baseline;">bar</span><span class="" style="background-color: transparent; border: 0px; margin: 0px; padding: 0px; vertical-align: baseline;">}</span></code></pre>
</div>
<div>
<b>3. Especificar no pom a propriedade desejada</b></div>
<div>
<pre class="" style="background-color: #eeeeee; border: 0px; font-family: Consolas, Menlo, Monaco, 'Lucida Console', 'Liberation Mono', 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Courier New', monospace, serif; font-size: 14px; line-height: 18px; margin-bottom: 10px; max-height: 600px; overflow: auto; padding: 5px; vertical-align: baseline; width: auto;"><code style="border: 0px; font-family: Consolas, Menlo, Monaco, 'Lucida Console', 'Liberation Mono', 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Courier New', monospace, serif; margin: 0px; padding: 0px; vertical-align: baseline;"><span class="" style="background-color: transparent; border: 0px; color: maroon; margin: 0px; padding: 0px; vertical-align: baseline;"><properties></span><span class="" style="background-color: transparent; border: 0px; margin: 0px; padding: 0px; vertical-align: baseline;">
</span><span class="" style="background-color: transparent; border: 0px; color: maroon; margin: 0px; padding: 0px; vertical-align: baseline;"><foo.bar></span><span class="" style="background-color: transparent; border: 0px; margin: 0px; padding: 0px; vertical-align: baseline;">othervalue</span><span class="" style="background-color: transparent; border: 0px; color: maroon; margin: 0px; padding: 0px; vertical-align: baseline;"></foo.bar></span><span class="" style="background-color: transparent; border: 0px; margin: 0px; padding: 0px; vertical-align: baseline;">
</span><span class="" style="background-color: transparent; border: 0px; color: maroon; margin: 0px; padding: 0px; vertical-align: baseline;"></properties></span></code></pre>
</div>
<div>
<b>Quando vc executar o maven irá trocar os valores.</b></div>
<div>
<pre style="background-color: #eeeeee; border: 0px; font-family: Consolas, Menlo, Monaco, 'Lucida Console', 'Liberation Mono', 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Courier New', monospace, serif; font-size: 14px; line-height: 18px; margin-bottom: 10px; max-height: 600px; overflow: auto; padding: 5px; vertical-align: baseline; width: auto;">$ mvn process-resources
[INFO] Scanning for projects...
...
$ cat target/classes/my_config.properties
myprop1 = somevalue
<b style="background-color: transparent; border: 0px; margin: 0px; padding: 0px; vertical-align: baseline;">myprop2 = othervalue</b></pre>
</div>
<h4>
<b>Hora e versão do deploy</b></h4>
<div>
Especificamente para trocar a hora do deploy e a versão da aplicação, as seguintes tags devem ser usadas dentro da definição da propriedade no pom:</div>
<div>
<ul>
<li>Hora: <build.timestamp>${maven.build.timestamp}</build.timestamp></li>
<li>Formato da Hora: <maven.build.timestamp.format>dd/MM/yyyy - HH:mm</maven.build.timestamp.format></li>
<li>Versão: <build.project.version><span style="background-color: #eeeeee; font-family: Consolas, Menlo, Monaco, 'Lucida Console', 'Liberation Mono', 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Courier New', monospace, serif; font-size: 14px; line-height: 18px;">${project.version}</span></build.project.version></li>
</ul>
</div>
<div>
<h3>
Além de data e hora</h3>
</div>
<div>
Essas propriedades são muito interessantes para se criar perfis. Com elas pode-se, por exemplo, colocar a senha de desenvolvimento em um perfil e a senha de produção em outro, sendo trocadas automaticamente durante a construção.</div>
<h3>
Referências</h3>
<div>
http://stackoverflow.com/questions/3868310/how-can-i-change-a-properties-file-in-maven-depending-on-my-profile</div>
Daniel Castellanihttp://www.blogger.com/profile/06113568581630261061noreply@blogger.com0tag:blogger.com,1999:blog-369405646754507396.post-19828051547575540702013-03-20T00:44:00.000-03:002013-03-20T02:18:07.204-03:00Nexus - Repositório Maven<a href="http://www.ow2.org/xwiki/bin/download/ITInfrastructure/Overview/logo-nexus.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em; text-align: justify;"><img border="0" src="http://www.ow2.org/xwiki/bin/download/ITInfrastructure/Overview/logo-nexus.png" /></a><br />
<div style="text-align: justify;">
<span lang="PT-BR"><span style="font-weight: normal;">Semana passada no CASNAV apresentamos o Nexus e outras ferramentas (Jenkins e Sonar) para a equipe do projeto SIOP. Essas apresentações envolveram as visões de desenvolvimento, gerencial e de administrador. Aí, decidi falar um pouco do Nexus aqui. </span></span><br />
<span lang="PT-BR"><span style="font-weight: normal;"><br /></span></span>
<span lang="PT-BR"><span style="font-weight: normal;">A seguir apresento um guia de administração dessa ferramenta. Nesse guia é abordada a instalação e backup do Nexus.</span></span><br />
<span lang="PT-BR"><span style="font-weight: normal;"></span></span><br />
<a name='more'></a></div>
<h2>
<div style="text-align: justify;">
<span style="font-size: small;">Nexus</span><span style="font-size: small; font-weight: normal;"> é o repositório padrão de artefatos
para aplicações Maven. Ele foi desenvolvido pela Sonatype e prove, principalmente, armazenamento de artefatos e
proxy para outros repositórios, facilitando e simplificando a configuração dos
projetos nos seus respectivos POMs</span>.</div>
</h2>
<div class="MsoBodyText">
<span lang="PT-BR"></span></div>
<h3 style="text-align: justify;">
<span lang="PT-BR">1.1<span style="font-size: 7pt; font-weight: normal;"> </span></span><!--[endif]--><span lang="PT-BR">Instalação</span></h3>
<div class="MsoNormal">
<div style="text-align: justify;">
<span lang="PT-BR">Para realizar a instalação do Nexus,
deve-se fazer o download do <i>war</i> no
site http://www.sonatype.org/nexus/ e colocá-lo na pasta <i>webapps</i> do Tomcat. Após ser realizado o deploy do Nexus, ele deverá
ser configurado, de acordo com a utilização necessária.</span></div>
</div>
<div class="MsoNormal">
<div style="text-align: justify;">
<span lang="PT-BR"><br /></span></div>
</div>
<div class="MsoNormal">
<span lang="PT-BR"></span></div>
<h3 style="text-align: justify;">
<span lang="PT-BR">1.2<span style="font-size: 7pt; font-weight: normal;"> </span></span><span lang="PT-BR">Configuração</span></h3>
<div class="MsoNormal">
<div style="text-align: justify;">
<span lang="PT-BR">O Nexus é uma ferramenta que já vem pronta para ser utilizada, necessitando apenas da inicialização do usuário de acordo com as necessidades dos projetos que o utilizarão, como: (1) armazenamento dos artefatos que serão providos por ele, ou (2) criação dos repositórios <i>proxy</i> que o Nexus refenciará.</span></div>
</div>
<div style="text-align: justify;">
<br /></div>
<h3 style="text-align: justify;">
<span lang="PT-BR">1.3<span style="font-size: 7pt; font-weight: normal;"> </span></span><!--[endif]--><span lang="PT-BR">Administração</span></h3>
<div class="MsoNormal">
<div style="text-align: justify;">
<span lang="PT-BR">As principais tarefas de administração do
Nexus são a criação de repositórios proxy e o armazenamento de artefatos de
terceiros ou desenvolvidos pela própria organização.</span></div>
</div>
<h3>
</h3>
<h3 style="text-align: justify;">
<span lang="PT-BR">1.3.1<span style="font-size: 7pt; font-weight: normal;"> </span></span><!--[endif]--><span lang="PT-BR">Criação de repositórios Proxy</span></h3>
<div class="MsoNormal">
<div style="text-align: justify;">
<span lang="PT-BR">Uma das utilidades do Nexus é servir de
proxy entre os repositórios externos e os desenvolvedores internos a uma rede. A
configuração de repositórios Proxy é interessante para que os projetos tenham
apenas que apontar para o servidor Maven local (Nexus) e não todos os repositórios
que o projeto utiliza. Para isso deve-se criar um repositório do tipo proxy e
indicar as seguintes configurações:</span></div>
</div>
<div class="MsoListParagraphCxSpFirst" style="margin-left: 74.2pt; mso-add-space: auto; mso-list: l3 level1 lfo2; text-indent: -.25in;">
<div style="text-align: justify;">
<!--[if !supportLists]--><span lang="PT-BR">1.<span style="font-size: 7pt;">
</span></span><!--[endif]--><b><span lang="PT-BR">Id do repositório</span></b><span lang="PT-BR">: forma como o Nexus
identifica os seus repositórios.</span></div>
</div>
<div class="MsoListParagraphCxSpMiddle" style="margin-left: 74.2pt; mso-add-space: auto; mso-list: l3 level1 lfo2; text-indent: -.25in;">
<div style="text-align: justify;">
<!--[if !supportLists]--><span lang="PT-BR">2.<span style="font-size: 7pt;">
</span></span><!--[endif]--><b><span lang="PT-BR">Nome do Repositório</span></b><span lang="PT-BR">: nome que será
exibido na listagem de repositórios.</span></div>
</div>
<div class="MsoListParagraphCxSpLast" style="margin-left: 74.2pt; mso-add-space: auto; mso-list: l3 level1 lfo2; text-indent: -.25in;">
<div style="text-align: justify;">
<!--[if !supportLists]--><span lang="PT-BR">3.<span style="font-size: 7pt;">
</span></span><!--[endif]--><b><span lang="PT-BR">Url do repositório remoto</span></b><span lang="PT-BR">: url do
repositório remoto que será referenciado pelo Nexus.</span></div>
</div>
<div class="MsoNormal">
<div style="text-align: justify;">
<span lang="PT-BR">Após criar o repositório é importante
adicioná-lo ao conjunto de repositórios que o repositório <i>public</i> (do Nexus) referencia. Isso se deve, pois os projetos devem
referenciar o repositório <i>pubilc</i>
apenas nas suas configurações (realizadas no POM).</span></div>
</div>
<h3 style="text-align: justify;">
<span lang="PT-BR">1.3.2<span style="font-size: 7pt; font-weight: normal;"> </span></span><!--[endif]--><span lang="PT-BR">Armazenamento de artefatos internos</span></h3>
<div class="MsoNormal">
<div style="text-align: justify;">
<span lang="PT-BR">Para armazenar no Nexus artefatos desenvolvidos
pela instituição ou artefatos de terceiros que não podem ser encontrados em outros
repositórios do Maven, deve-se fazer o seu upload. Existe um tipo de repositório
específico para isso que é o 3rd Party. Para fazer o uplouad dos artefatos
neste repositório deve-se fornecer ao menos as informações mínimas para se
definir uma dependência de projeto do Maven :</span></div>
</div>
<div class="MsoListParagraphCxSpFirst" style="margin-left: 74.2pt; mso-add-space: auto; mso-list: l4 level1 lfo3; text-indent: -.25in;">
<div style="text-align: justify;">
<!--[if !supportLists]--><span lang="PT-BR" style="font-family: Symbol; mso-bidi-font-family: Symbol; mso-fareast-font-family: Symbol;">·<span style="font-family: 'Times New Roman'; font-size: 7pt;">
</span></span><!--[endif]--><b><span lang="PT-BR">GroupId</span></b><span lang="PT-BR">: id do grupo responsável pelo
projeto. Exemplo: <i>net.sf.jasperreports.</i></span></div>
</div>
<div class="MsoListParagraphCxSpMiddle" style="margin-left: 74.2pt; mso-add-space: auto; mso-list: l4 level1 lfo3; text-indent: -.25in;">
<div style="text-align: justify;">
<!--[if !supportLists]--><span lang="PT-BR" style="font-family: Symbol; mso-bidi-font-family: Symbol; mso-fareast-font-family: Symbol;">·<span style="font-family: 'Times New Roman'; font-size: 7pt;">
</span></span><!--[endif]--><b><span lang="PT-BR">ArtifactId</span></b><span lang="PT-BR">: id do artefato. Exemplo: <i>jasperreports</i>.</span></div>
</div>
<div class="MsoListParagraphCxSpLast" style="margin-left: 74.2pt; mso-add-space: auto; mso-list: l4 level1 lfo3; text-indent: -.25in;">
<div style="text-align: justify;">
<!--[if !supportLists]--><span lang="PT-BR" style="font-family: Symbol; mso-bidi-font-family: Symbol; mso-fareast-font-family: Symbol;">·<span style="font-family: 'Times New Roman'; font-size: 7pt;">
</span></span><!--[endif]--><b><span lang="PT-BR">Version</span></b><span lang="PT-BR">: versão do artefato
referenciado. Exemplo: 4.1.2</span></div>
</div>
<div class="MsoNormal">
<div style="text-align: justify;">
<span lang="PT-BR">As informações fornecidas devem estar de
acordo com as indicadas no POM dos projetos. Para o exemplo citado acima, deve
colocar o seguinte no POM do projeto:</span></div>
</div>
<div class="MsoNormal">
<div style="text-align: justify;">
<br /></div>
</div>
<div class="MsoNormal">
<div style="text-align: justify;">
<br /></div>
</div>
<div class="MsoNormal" style="background-color: #eeeeee; background-position: initial initial; background-repeat: initial initial; line-height: 11.25pt; text-indent: 0in; vertical-align: baseline;">
<div style="text-align: justify;">
<span style="color: maroon; font-family: Consolas; font-size: 9.0pt; mso-ansi-language: EN-US; mso-bidi-font-size: 12.0pt; mso-bidi-language: AR-SA; mso-fareast-font-family: "Times New Roman"; mso-fareast-language: EN-US; mso-font-kerning: 0pt;"><dependency></span><span style="font-family: Consolas; font-size: 9pt;"><o:p></o:p></span></div>
</div>
<div class="MsoNormal" style="background-color: #eeeeee; background-position: initial initial; background-repeat: initial initial; line-height: 11.25pt; text-indent: 0in; vertical-align: baseline;">
<div style="text-align: justify;">
<span style="font-family: Consolas; font-size: 9pt;"> </span><span style="color: maroon; font-family: Consolas; font-size: 9.0pt; mso-ansi-language: EN-US; mso-bidi-font-size: 12.0pt; mso-bidi-language: AR-SA; mso-fareast-font-family: "Times New Roman"; mso-fareast-language: EN-US; mso-font-kerning: 0pt;"><groupId></span><span style="font-family: Consolas; font-size: 9pt;">net.sf.jasperreports</span><span style="color: maroon; font-family: Consolas; font-size: 9.0pt; mso-ansi-language: EN-US; mso-bidi-font-size: 12.0pt; mso-bidi-language: AR-SA; mso-fareast-font-family: "Times New Roman"; mso-fareast-language: EN-US; mso-font-kerning: 0pt;"></groupId></span><span style="font-family: Consolas; font-size: 9pt;"><o:p></o:p></span></div>
</div>
<div class="MsoNormal" style="background-color: #eeeeee; background-position: initial initial; background-repeat: initial initial; line-height: 11.25pt; text-indent: 0in; vertical-align: baseline;">
<div style="text-align: justify;">
<span style="font-family: Consolas; font-size: 9pt;"> </span><span style="color: maroon; font-family: Consolas; font-size: 9.0pt; mso-ansi-language: EN-US; mso-bidi-font-size: 12.0pt; mso-bidi-language: AR-SA; mso-fareast-font-family: "Times New Roman"; mso-fareast-language: EN-US; mso-font-kerning: 0pt;"><artifactId></span><span style="font-family: Consolas; font-size: 9pt;">jasperreports</span><span style="color: maroon; font-family: Consolas; font-size: 9.0pt; mso-ansi-language: EN-US; mso-bidi-font-size: 12.0pt; mso-bidi-language: AR-SA; mso-fareast-font-family: "Times New Roman"; mso-fareast-language: EN-US; mso-font-kerning: 0pt;"></artifactId></span><span style="font-family: Consolas; font-size: 9pt;"><o:p></o:p></span></div>
</div>
<div class="MsoNormal" style="background-color: #eeeeee; background-position: initial initial; background-repeat: initial initial; line-height: 11.25pt; text-indent: 0in; vertical-align: baseline;">
<div style="text-align: justify;">
<span style="font-family: Consolas; font-size: 9pt;"> </span><span style="color: maroon; font-family: Consolas; font-size: 9.0pt; mso-ansi-language: EN-US; mso-bidi-font-size: 12.0pt; mso-bidi-language: AR-SA; mso-fareast-font-family: "Times New Roman"; mso-fareast-language: EN-US; mso-font-kerning: 0pt;"><version></span><span style="font-family: Consolas; font-size: 9pt;">4.1.2</span><span style="color: maroon; font-family: Consolas; font-size: 9.0pt; mso-ansi-language: EN-US; mso-bidi-font-size: 12.0pt; mso-bidi-language: AR-SA; mso-fareast-font-family: "Times New Roman"; mso-fareast-language: EN-US; mso-font-kerning: 0pt;"></version></span><span style="font-family: Consolas; font-size: 9pt;"><o:p></o:p></span></div>
</div>
<div class="MsoNormal" style="background-color: #eeeeee; background-position: initial initial; background-repeat: initial initial; line-height: 11.25pt; text-indent: 0in; vertical-align: baseline;">
<div style="text-align: justify;">
<span style="color: maroon; font-family: Consolas; font-size: 9.0pt; mso-ansi-language: EN-US; mso-bidi-font-size: 12.0pt; mso-bidi-language: AR-SA; mso-fareast-font-family: "Times New Roman"; mso-fareast-language: EN-US; mso-font-kerning: 0pt;"></dependency></span><span style="font-family: Consolas; font-size: 9pt;"><o:p></o:p></span></div>
</div>
<h3 style="text-align: justify;">
<span lang="PT-BR">1.4<span style="font-size: 7pt; font-weight: normal;"> </span></span><!--[endif]--><span lang="PT-BR">Backup</span></h3>
<div class="MsoNormal">
<div style="text-align: justify;">
<span lang="PT-BR">O Nexus não armazena dados em um banco de
dados. Após a primeira execução do Nexus, tem-se duas pastas: </span></div>
</div>
<div class="MsoListParagraphCxSpFirst" style="margin-left: 88.9pt; mso-add-space: auto; mso-list: l1 level1 lfo4; text-indent: -.25in;">
<div style="text-align: justify;">
<!--[if !supportLists]--><span lang="PT-BR">1.<span style="font-size: 7pt;">
</span></span><!--[endif]--><b><span lang="PT-BR">nexus-webapp-1.3.1.1</span></b><span lang="PT-BR">: pasta da aplicação
descompactada dentro do servidor. Pode ter outro nome dependendo do nome do war
que foi descompactado. É comum que esse nome seja o mesmo da aplicação,
acessada pela url.</span></div>
</div>
<div class="MsoListParagraphCxSpLast" style="margin-left: 88.9pt; mso-add-space: auto; mso-list: l1 level1 lfo4; text-indent: -.25in;">
<div style="text-align: justify;">
<!--[if !supportLists]--><span lang="PT-BR">2.<span style="font-size: 7pt;">
</span></span><!--[endif]--><b><span lang="PT-BR">sonatype-work</span></b><span lang="PT-BR">: pasta para a configuração
e dados.</span></div>
</div>
<div class="MsoNormal">
<div style="text-align: justify;">
<span lang="PT-BR">O modo mais simples de se fazer backup do Nexus
é simplesmente fazer o backup dos arquivos que estão em <i>sonatype-work/nexus</i>. Esse backup pode ser feito inclusive num
repositório SVN para que seja guardado o histórico de versões do mesmo,
agregando todos os benefícios de se armazenar artefatos sob um Sistema de Controle
de Versão.</span></div>
</div>
<div class="MsoNormal">
<div style="text-align: justify;">
<span lang="PT-BR">O Backup do Nexus não precisa ser realizado
semanalmente ou diariamente, mas deve ser acionado pelas seguintes ações:</span></div>
</div>
<div class="MsoListParagraphCxSpFirst" style="margin-left: 71.3pt; mso-add-space: auto; mso-list: l2 level1 lfo5; text-indent: -.25in;">
<div style="text-align: justify;">
<!--[if !supportLists]--><span lang="PT-BR" style="font-family: Symbol; mso-bidi-font-family: Symbol; mso-fareast-font-family: Symbol;">·<span style="font-family: 'Times New Roman'; font-size: 7pt;">
</span></span><!--[endif]--><span lang="PT-BR">Criação de usuários ou alteração
de senha;</span></div>
</div>
<div class="MsoListParagraphCxSpMiddle" style="margin-left: 71.3pt; mso-add-space: auto; mso-list: l2 level1 lfo5; text-indent: -.25in;">
<div style="text-align: justify;">
<!--[if !supportLists]--><span lang="PT-BR" style="font-family: Symbol; mso-bidi-font-family: Symbol; mso-fareast-font-family: Symbol;">·<span style="font-family: 'Times New Roman'; font-size: 7pt;">
</span></span><!--[endif]--><span lang="PT-BR">Criação de novos repositórios <i>proxy</i>;</span></div>
</div>
<div class="MsoListParagraphCxSpMiddle" style="margin-left: 71.3pt; mso-add-space: auto; mso-list: l2 level1 lfo5; text-indent: -.25in;">
<div style="text-align: justify;">
<!--[if !supportLists]--><span lang="PT-BR" style="font-family: Symbol; mso-bidi-font-family: Symbol; mso-fareast-font-family: Symbol;">·<span style="font-family: 'Times New Roman'; font-size: 7pt;">
</span></span><!--[endif]--><span lang="PT-BR">Adição de novos artefatos no
repositório <i>3rd Party</i>;</span></div>
</div>
<div class="MsoListParagraphCxSpLast" style="margin-left: 71.3pt; mso-add-space: auto; mso-list: l2 level1 lfo5; text-indent: -.25in;">
<div style="text-align: justify;">
<!--[if !supportLists]--><span lang="PT-BR" style="font-family: Symbol; mso-bidi-font-family: Symbol; mso-fareast-font-family: Symbol;">·<span style="font-family: 'Times New Roman'; font-size: 7pt;">
</span></span><!--[endif]--><span lang="PT-BR">Qualquer mudança de configuração.</span></div>
</div>
Daniel Castellanihttp://www.blogger.com/profile/06113568581630261061noreply@blogger.com0tag:blogger.com,1999:blog-369405646754507396.post-75369570319535208102013-02-20T12:51:00.002-03:002013-02-20T12:55:08.129-03:00Numero de Versão<a href="http://3.bp.blogspot.com/-AKOSktyP78A/USTvEmLsRPI/AAAAAAAAMvM/MDZeclv9Y90/s1600/Versionamento-Geral.JPG" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"><img border="0" height="320" src="http://3.bp.blogspot.com/-AKOSktyP78A/USTvEmLsRPI/AAAAAAAAMvM/MDZeclv9Y90/s320/Versionamento-Geral.JPG" width="124" /></a><span style="font-family: inherit;"></span><br />
<div style="text-align: justify;">
<span style="font-family: inherit;"><span style="font-family: inherit;">Normalmente, quando se trabalha com controle de versões, usa-se um identificador para as versões criadas com o objetivo de diferenciá-las. Entretanto existem diversos padrões de nomenclatura para identificação de versão</span><span style="font-family: inherit;">. Um dos formatos mais utilizados é o com três números separados por pontos: <span style="color: red;"><b>13.4.2</b></span>. </span></span></div>
<br />
<div style="text-align: justify;">
<span style="font-family: inherit;"><span style="background-color: white; color: #222222;"><br /></span></span></div>
<div style="text-align: justify;">
<span style="font-family: inherit;"><span style="background-color: white; color: #222222;">Essa forma de identificação de versão é uma das mais conhecidas e utilizadas, e é a adotada no <a href="http://sistemas.uff.br/iduff">IDUFF </a>e em outros projetos da <a href="http://www.sti.uff.br/">CDS-STI</a>. </span>Considere um numero de versão no formato: <span style="color: red;"><b>A.B.C</b></span>, no qual os números seguem as descrições abaixo:</span></div>
<br />
<div style="text-align: justify;">
<a name='more'></a></div>
<span style="font-family: inherit;"></span><br />
<blockquote class="tr_bq">
<span style="font-family: inherit;"><span style="font-family: inherit;"><span style="color: red;"><b>A</b></span> - é o número mais importante da versão do software, alterada raramente, apenas quando é lançada uma nova versão do produto, com muitas novidades e que é conceitualmente nova e diferente das outras. É comum que nessas versões, a compatibilidade com versões anteriores (A menos 1, A menos 2) seja quebrada em diversos pontos. </span><span style="font-family: inherit;"> </span></span></blockquote>
<span style="font-family: inherit;">
<blockquote class="tr_bq">
<span style="font-family: inherit;"></span><span style="color: red; font-family: inherit;"><b>B</b></span><span style="font-family: inherit;"> - este número indica atualizações no produto que trazem novas funcionalidades. Vale ressaltar que se o número A não mudar, mudar apenas o B, a compatibilidade com versões anteriores deve ser mantida. Assim, aumentar o número B apenas adiciona as funcionalidades, não altera nem remove elas.</span><span style="font-family: inherit;"> </span></blockquote>
<blockquote class="tr_bq">
<span style="font-family: inherit;"></span><span style="font-family: inherit;"><span style="color: red;"><b>C</b></span> - este número indica uma atualização de correção de <i>bug </i>ou melhoria para otimização na forma de refatoração - lembrem-se que uma refatoração nunca altera o funcionamento, ou seja, o que é feito não é alterado, mas sim como é feito. </span></blockquote>
<span style="font-family: inherit;">Alteração nesse numero não altera o funcionamento do sistema, pois ele continua seguindo sua especificação. O que pode acontecer é em caso de correção de erro, a funcionalidade que estava tendo comportamento indevido passar a se comportar de outra forma, seguindo o que foi previamente especificado.</span><br />
<blockquote class="tr_bq">
<span style="font-family: inherit;"></span></blockquote>
</span><br />
<div>
<div class="separator" style="clear: both; text-align: center;">
<a href="http://1.bp.blogspot.com/-zMb1i38zOYU/USTviOULb9I/AAAAAAAAMvU/8RoYAJU-nYg/s1600/versionamento_numeracao.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="160" src="http://1.bp.blogspot.com/-zMb1i38zOYU/USTviOULb9I/AAAAAAAAMvU/8RoYAJU-nYg/s400/versionamento_numeracao.jpg" width="400" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div style="text-align: justify;">
<span style="font-family: inherit;"> </span><span style="font-family: inherit;">É importante lembrar que em um controle de versões correto, não se deve quebrar a compatibilidade (remove métodos, por exemplo) entre sub-versões do produto, ou seja, sem alterar esse numero. Por exemplo, alguém que utiliza a versão 1.2 de um determinado produto, poderá utilizar qualquer versão 1.x desse produto sem comprometer a compatibilidade e funcionamento do seu sistema. Isso é muito importante quando se planeja reutilizar um software, como no caso de utilização de bibliotecas e APIs.</span><br />
<span style="font-family: inherit;"><br /></span>
<span style="font-family: inherit;">Agora me digam, qual modelo de identificação de versão vocês usam?</span></div>
</div>
<div>
<span style="font-family: inherit;"><br /></span>
<span style="font-family: inherit;">Abraços e até a próxima.</span></div>
Daniel Castellanihttp://www.blogger.com/profile/06113568581630261061noreply@blogger.com0Niterói - Rio de Janeiro, Brazil-22.8807655 -43.104334999999992-22.997766499999997 -43.26569649999999 -22.7637645 -42.942973499999994tag:blogger.com,1999:blog-369405646754507396.post-44167939977651590082013-02-01T15:18:00.003-02:002013-02-01T15:33:46.332-02:00Treinamento de Gerentes - Parte 1<div class="separator" style="clear: both; text-align: center;">
</div>
<div class="separator" style="clear: both; text-align: center;">
<a href="http://t3.gstatic.com/images?q=tbn:ANd9GcT9SKikSGxZpvC6tpHica5tae3zbcIi92tEK7Rk2ZjuWBvfe2Vo" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"><img border="0" height="200" src="http://t3.gstatic.com/images?q=tbn:ANd9GcT9SKikSGxZpvC6tpHica5tae3zbcIi92tEK7Rk2ZjuWBvfe2Vo" width="200" /></a></div>
Foi realizado essa semana na STI-UFF o 1º Treinamento de Gerentes da CDS. Na verdade o encontro do dia 29/01 foi apenas o início, pois em breve virão outros encontros que tem como objetivo capacitar devidamente os gerentes da CDS.<br />
<br />
O encontro foi ministrado por min (Gerente do Escritório de Projetos), e Bruno Olímpio (membro do Escritório de Projetos) durante a tarde da terça-feira. Nele, estiveram presentes 25 membros da CDS com diferentes níveis de conhecimento.<br />
<a name='more'></a>Alguns gerentes já fizeram MBA em Gerenciamento de Projetos e outros ainda são alunos de graduação, por isso o foco do primeiro encontro foi nivelamento, apresentando conceitos utilizados no dia-a-dia, como: projeto, programa, portfólio, etc.<br />
<br />
A aula foi preparada com base no PMBOK, SCRUM (e princípios ágeis) e utilizamos sempre exemplos do cotidiano da CDS para facilitar o entendimento.<br />
<br />
Confira a notícia no site da STI: <a href="http://www.sti.uff.br/Noticias/sti-realiza-o-i-treinamento-de-gerentes">http://www.sti.uff.br/Noticias/sti-realiza-o-i-treinamento-de-gerentes</a> e as fotos do treinamento no <a href="http://www.facebook.com/media/set/?set=a.332111136894391.65159.100002865212891&type=1">facebook</a>.Daniel Castellanihttp://www.blogger.com/profile/06113568581630261061noreply@blogger.com0tag:blogger.com,1999:blog-369405646754507396.post-7474938843518054092012-09-18T22:49:00.001-03:002012-09-19T00:24:20.997-03:00Avaliação do Workshop de qualidade<div class="separator" style="clear: both; text-align: center;">
<a href="http://2.bp.blogspot.com/-vcRBQKXoJpY/UFkkia_urKI/AAAAAAAAIKQ/ddVz00jvYYk/s1600/sucessoAlvo.jpg" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"><img border="0" height="151" src="http://2.bp.blogspot.com/-vcRBQKXoJpY/UFkkia_urKI/AAAAAAAAIKQ/ddVz00jvYYk/s200/sucessoAlvo.jpg" width="200" /></a></div>
No dia 1º de Setembro fizemos o <a href="http://www.danielcastellani.com.br/2012/09/workshop-de-desenvolvimento-de-software.html">Workshop de Qualidade na STI</a>. Nele, passamos um dia inteiro falando de problemas do desenvolvimento de software causados pela negligência com a qualidade do produto sendo desenvolvido.<br />
<br />
Hoje venho trazer a opinião dos que assistiram ao workshop: eles o avaliaram muito bem!<br />
<div>
<a name='more'></a><br />
<div>
Além dos problemas causados pela falta de qualidade, no Workshop, falamos também de testes automatizados, uma prática que pode ser utilizada para auxiliar na manutenção da qualidade e na transferência de conhecimento em dois eixos: no tempo e entre e a equipe.</div>
<div>
<br /></div>
<div>
Hoje, foi divulgada a <a href="http://www.sti.uff.br/Noticias/avalia%C3%A7%C3%A3o-do-i-workshop-de-qualidade-de-software">notícia com o resultado da avaliação</a> dos participantes do workshop. Os colaboradores da STI que participaram avaliaram positivamente o que foi apresentado, disseram que o conhecimento é aplicável ao dia a dia e que foi apresentado de forma clara.</div>
</div>
<div>
<br /></div>
<div>
Para melhorar a notícia, já ouvi repercussões positivas sobre o workshop. No acompanhamento dos projetos, executado pelo Escritório de Projetos da STI, o qual sou o gerente, ouvimos dos gerentes cujos projetos tinham colaboradores no workshop dizendo que eles já estão colocando em prática os conceitos abordados e que as equipes estão muito motivadas. </div>
<div>
<br /></div>
<div>
Os resultados vão além. O pessoal dos projetos <i>Ruby on Rails</i> também querem um workshop para eles, já que o do dia 1º foi focado em Java. O que eu digo? Estamos planejando isso!</div>
Daniel Castellanihttp://www.blogger.com/profile/06113568581630261061noreply@blogger.com0tag:blogger.com,1999:blog-369405646754507396.post-85141051084062278762012-09-01T16:31:00.001-03:002012-09-04T23:59:35.745-03:00Maven, mais que um gerenciador de libs!<div class="separator" style="clear: both; text-align: center;">
<a href="http://2.bp.blogspot.com/-Mi0CceL1EMc/UEJatborvsI/AAAAAAAAHtk/8py3YdvwH1U/s1600/apache-maven-project-2.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="http://2.bp.blogspot.com/-Mi0CceL1EMc/UEJatborvsI/AAAAAAAAHtk/8py3YdvwH1U/s1600/apache-maven-project-2.png" /></a></div>
<h3 style="text-align: justify;">
<span style="font-size: small; font-weight: normal;">Ultimamente temos conversado com muita gente sobre qualidade, ferramentas e boas práticas de desenvolvimento de software. Nessas conversas, percebemos que muita gente já ouviu falar do Maven, mas tenho notado uma visão muito minimalista sobre ele. É comum que saibam apenas que ele serve para gerenciar dependências (libs, jars, etc), mas ele serve para muito mais que isso!<a name='more'></a></span></h3>
<br />
<h4>
Maven pela Apache</h4>
<div style="text-align: justify;">
Segundo a Apache e o site oficial, o Maven é uma ferramenta de entendimento e gerenciamento de projeto. Ela se baseia no conceito de Project Object Model (POM), com o qual o Maven gerencia a construção, reporte, documentação e entrega de projetos a partir de um único arquivo.</div>
<div style="text-align: justify;">
Segundo a sua própria documentação, os principais objetivos do Maven são:</div>
<div style="text-align: justify;">
<ul>
<li>Tornar o processo de construção fácil</li>
<li>Prover sistemas de construção uniformes</li>
<li>Prover informações sobre o projeto com qualidade</li>
<li>Prover guias para melhores práticas de desenvolvimento</li>
<li>Permitir migração transparente para novas funcionalidades</li>
</ul>
</div>
<div style="text-align: justify;">
<br /></div>
<h4>
Gerenciar dependências</h4>
<div style="text-align: justify;">
A utilização mais básica do Maven é para o gerenciamento de dependências, ou seja, gerenciar as bibliotecas que uma aplicação utiliza. Normalmente, a utilização do Maven é motivada pela facilidade de gerenciar os <i>jars </i>que uma aplicação utiliza (Java). </div>
<div style="text-align: justify;">
<br />
<h3>
<b>Como fazer?</b></h3>
</div>
<div style="text-align: justify;">
No POM, o arquivo de configuração do Maven, são definidas as dependências do projeto. Para isso, devem ser utilizadas, basicamente, as tags <b><dependencies> </b>e <b><dependency></b>. A primeira, encapsula as dependências de seu projeto, indicando que elas serão declaradas dentro desse objeto no arquivo XML. A Segunda tag, é utilizada para declarar cada uma das dependências do projeto. Essa tag pode possuir as seguintes informações: <i>groupId, artifactIdversion, type, scope, opitional</i>.</div>
<div style="text-align: justify;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="http://3.bp.blogspot.com/--snToPd-Bro/UEJeVyz-L-I/AAAAAAAAHt0/OjY6OCxWZOM/s1600/Maven_tag_dependency.JPG" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" height="179" src="http://3.bp.blogspot.com/--snToPd-Bro/UEJeVyz-L-I/AAAAAAAAHt0/OjY6OCxWZOM/s320/Maven_tag_dependency.JPG" width="320" /></a></div>
<div style="text-align: justify;">
Para exemplificar, na figura ao lado, é mostrada a configuração da dependência TestNG no POM. Na tag dependency, é definida que o artefato <i>testng </i>é da <i>org.testng</i> e que deve ser utilizada a versão <i>6.3.1</i>. Além disso, é indicado o escopo <i>test</i>, que indica que o <i>testng </i>é disponível apenas durante a execução de testes e pode apenas ser utilizado por classes no pacote de teste.</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
<br /></div>
<h4>
O Maven vai além disso</h4>
<div style="text-align: justify;">
Apesar dessa utilização básica, essa ferramenta auxilia o desenvolvimento de várias outras formas, dentre elas, algumas que eu utilizei são:</div>
<div>
<ul>
<li style="text-align: justify;"><b>Configuração da aplicação</b>: definindo parâmetros como quantidade de conexões com o banco de dados ou timeout de seção.</li>
<li style="text-align: justify;"><b>Definição de perfis</b>: desenvolvimento, teste, homologação, produção, etc.</li>
<li style="text-align: justify;"><b>Parametrização das configurações</b>: definição de quais libs cada perfil deve utilizar, por exemplo, de acordo com o servidor que irá executar a aplicação web (GlassFish, JBoss, Jetty, etc).</li>
<li style="text-align: justify;"><b>Distribuição da aplicação para outros projetos</b>: por exemplo, empacotado como jar e fazendo upload para o Nexus, servidor de dependências do Maven.</li>
<li style="text-align: justify;"><b>Substituição de arquivos</b>: na troca de arquivos que devem ser considerados apenas em desenvolvimento, teste ou produção.</li>
<li style="text-align: justify;"><b>Configuração de execução de testes</b>: quais testes devem ser executados e, se receberem, quais devem ser seus parâmetros de configuração</li>
<li style="text-align: justify;"><b>Definição de sub-projetos ou módulos</b>: dividir dependências ou agrupar informações sobre a construção de diversos projetos em vários POMs.</li>
</ul>
<div style="text-align: justify;">
Essa ferramenta é muito poderosa e gerencia desde a compilação até a distribuição e deploy de uma aplicação. Eu a utiliza a 5 anos e não tenho dúvidas de que ela auxilia na organização e manutenção de um projeto de software.<br />
Colocarei em próximos posts mais aplicações sobre ela e como fazer algumas coisas interessantes.</div>
</div>
Daniel Castellanihttp://www.blogger.com/profile/06113568581630261061noreply@blogger.com0tag:blogger.com,1999:blog-369405646754507396.post-17147511081275633242012-09-01T15:01:00.003-03:002012-09-03T10:07:16.929-03:00Workshop de Qualidade na STI<div class="separator" style="clear: both; text-align: center;">
</div>
<div class="separator" style="clear: both; text-align: center;">
<a href="http://1.bp.blogspot.com/-wuYRGTZJ1Ko/UEJHOJWtHoI/AAAAAAAAHs8/4ZKApYs-ets/s1600/Workshop1.jpg" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em; text-align: justify;"><img border="0" height="173" src="http://1.bp.blogspot.com/-wuYRGTZJ1Ko/UEJHOJWtHoI/AAAAAAAAHs8/4ZKApYs-ets/s200/Workshop1.jpg" width="200" /></a></div>
<div style="text-align: justify;">
Ontem na <a href="http://sti.uff.br/">STI/UFF</a> realizamos um Workshop de Desenvolvimento de Software com Qualidade. Ele teve foco em testes automatizados e boas práticas de desenvolvimento, aconteceu na Valonguinho/<a href="http://www.uff.br/">UFF </a>e teve duração de 7 horas.</div>
<div style="text-align: justify;">
O Workshop foi organizado pelo Escritório de Projetos e executado pelo <a href="http://thiagodiogo.blogspot.com.br/">Thiago Diogo</a> e por <a href="http://www.danielcastellani.com.br/">mim</a>. Tivemos a participação de <a href="http://www.brunoolimpio.com/">Bruno Olímpio</a> e <a href="http://www.linkedin.com/pub/everton-moreth/11/679/3b5">Everton Moreth</a>, além, é claro, dos desenvolvedores que estavam presentes.<br />
<a name='more'></a></div>
<div style="text-align: justify;">
<br />
<br />
Inicialmente, fizemos uma apresentação geral, abordando todo o desenvolvimento de software. Nessa apresentação foram mostrados os principais problemas relacionados a qualidade que ocorrem durante o desenvolvimento, principalmente de aplicações grandes, que duram muito tempo. Causas comuns desses problemas, como deixar de lado a qualidade quando aperta a relação prazo-custo-escopo, dificuldades na definição do escopo ou problemas arquiteturais também foram abordados.</div>
<div style="text-align: justify;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="http://1.bp.blogspot.com/-1CVV2YqW0B4/UEJNT0TDssI/AAAAAAAAHtU/PFO0h5mlP_c/s1600/java.jpg" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"><img border="0" height="200" src="http://1.bp.blogspot.com/-1CVV2YqW0B4/UEJNT0TDssI/AAAAAAAAHtU/PFO0h5mlP_c/s200/java.jpg" width="200" /></a></div>
<div style="text-align: justify;">
Após uma motivação inicial, foi apresentado como a utilização de testes automatizados pode auxiliar na redução de erros da aplicação em produção, na melhoria e facilitação da manutenção e na transferência de conhecimento para novos membros. Houve uma dinâmica de levantamento de requisitos voltados a teste, uma apresentação prática e um dojo ao final para fixar os conceitos aprendidos. </div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
Na parte prática foi utilizado Java, com <a href="http://testng.org/doc/index.html">TestNG</a>, <a href="http://code.google.com/p/mockito/">Mockito </a>e <a href="http://maven.apache.org/">Maven</a>. Participaram do workshop cerca de 20 desenvolvedores da Coordenação de Desenvolvimento de Sistemas (CDS) da <a href="http://sti.uff.br/">STI</a>. O evento teve cobertura da equipe de comunicação do PMO e teremos uma notícia no site da <a href="http://sti.uff.br/">STI </a>em breve.</div>
Daniel Castellanihttp://www.blogger.com/profile/06113568581630261061noreply@blogger.com2R. Quinze de Novembro, 2-74 - Morro do Estado, Niterói - RJ, 24020-125, Brasil-22.896200690147083 -43.124041557312012-22.898029190147081 -43.126509057312013 -22.894372190147084 -43.12157405731201tag:blogger.com,1999:blog-369405646754507396.post-81448089592721280402012-09-01T10:33:00.001-03:002012-09-01T15:21:53.399-03:00Ostra: Mineração de Dados, Gerência de Configuração e Métricas de Software<h3>
Mestre <strike>Jedi</strike></h3>
<div style="text-align: justify;">
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="http://2.bp.blogspot.com/-R63xuc2YBYA/UEIVUEnbs-I/AAAAAAAAHro/wK6zm72HiA0/s1600/250px-Yoda-CVD.jpg" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" height="200" src="http://2.bp.blogspot.com/-R63xuc2YBYA/UEIVUEnbs-I/AAAAAAAAHro/wK6zm72HiA0/s200/250px-Yoda-CVD.jpg" width="144" /></a></div>
Finalmente, após 3 longos anos, terminei meu mestrado em computação na UFF. Minha pesquisa foi na área de Engenharia de Software, envolvendo as disciplinas de Métricas de Software, Mineração de Dados e Gerência de Configuração. O título do trabalho foi "<a href="http://www.ic.uff.br/PosGraduacao/Dissertacoes/542.pdf">OSTRA: UM ESTUDO DO HISTÓRICO DA QUALIDADE DO SOFTWARE ATRAVÉS DE REGRAS DE ASSOCIAÇÃO DE MÉTRICAS</a>". Meu orientador foi o Leonardo Murta e o Alexandre Plastino foi meu co-orientador.</div>
<div style="text-align: justify;">
A defesa foi no dia 15 de Junho e fizeram parte da banca os professores Leonardo Murta, Alexandre Plastino e Viviane Torres da UFF e o professor Alessandro Garcia da PUC-Rio. Após duas horas de apresentação e perguntas o resultado foi a aprovação!<br />
<a name='more'></a><br />
<br />
<h3>
Resumo</h3>
</div>
<div style="text-align: justify;">
<span style="font-family: inherit;">O ciclo de vida de um software pode ser dividido em três fases: definição, desenvolvimento e manutenção. Dessas três, a manutenção consome cerca de 60% do tempo e 90% do custo do projeto. Porém, os atributos de qualidade flexibilidade e manutenibilidade, que avaliam a capacidade de manutenções evolutivas e corretivas, são definidos desde a fase de desenvolvimento. Consequentemente, deve-se monitorar os atributos de qualidade desde a fase de desenvolvimento para garantir a qualidade do produto. Dessa forma, para controlar a qualidade do software e não apenas reagir à sua variação, deve-se entender sobre quais fatores influenciam os atributos de qualidade e como eles variam entre si. </span></div>
<div style="text-align: justify;">
<span style="font-family: inherit;">Neste trabalho, é proposta a abordagem Ostra, que permite a análise do histórico de um software, armazenado no sistema de controle de versão, através da variação de métricas de software. Os objetivos da Ostra são: (1) fornecer informações ao processo de tomada de decisões, (2) monitorar a qualidade do software e (3) buscar padrões entre métricas presentes em um ou vários projetos. Para alcançar esses objetivos, a Ostra se baseia em três disciplinas: métricas de software, gerência de configuração e mineração de dados. Para apresentar as informações encontradas, são utilizados: gráficos de controle, histogramas, regras de associação e uma tabela de comportamentos. </span></div>
<div style="text-align: justify;">
<span style="font-family: inherit;">Para avaliar a abordagem, foram utilizados 16 projetos em três experimentos distintos, com os quais foi possível obter indícios de que os objetivos da abordagem são alcançados para projetos de diferentes tamanhos e finalidades. </span></div>
<div style="text-align: justify;">
<span style="font-family: inherit;">As contribuições deste trabalho são: (1) uma abordagem que considera as alterações realizadas ao longo da evolução do software como elemento básico de análise, as quais são descritas como a variação de métricas, (2) experimentos avaliando as questões de pesquisa, (3) uma infraestrutura para futuras pesquisas sobre mineração de repositórios de software e (4) uma base de dados com a medição de cerca de 30 métricas sobre 150 projetos.</span></div>
<div style="text-align: justify;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
</div>
<div style="text-align: justify;">
<div class="separator" style="clear: both; text-align: center;">
</div>
<div class="separator" style="clear: both; text-align: center;">
</div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="http://2.bp.blogspot.com/-bi86zguK4lA/UEIVUgGOptI/AAAAAAAAHrw/1bJhxvOCx8o/s1600/ostra.jpg" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" height="170" src="http://2.bp.blogspot.com/-bi86zguK4lA/UEIVUgGOptI/AAAAAAAAHrw/1bJhxvOCx8o/s200/ostra.jpg" width="200" /></a></div>
Para quem se interessou, <a href="http://www.ic.uff.br/PosGraduacao/Dissertacoes/542.pdf">minha dissertação</a> pode ser encontrada no site do Instituto de Computação da UFF. A idéia desse post era apenas apresentar a idéia. Em breve vou apresentar algumas das utilizações e resultados da pesquisa que agora estamos aplicando na <a href="http://sti.uff.br/">STI/UFF</a>. </div>
Daniel Castellanihttp://www.blogger.com/profile/06113568581630261061noreply@blogger.com0tag:blogger.com,1999:blog-369405646754507396.post-51849821147132854042012-08-30T22:14:00.001-03:002012-09-01T15:22:09.604-03:00Workshop Brasileiro de Visualização de Software - WBVS 2012<div class="separator" style="clear: both; text-align: center;">
</div>
<div class="separator" style="clear: both; text-align: center;">
<a href="http://1.bp.blogspot.com/-27ufArlANK0/UEAOV-ZyTwI/AAAAAAAAHow/bNC5whTIgTg/s1600/logo_CBSoft_WBVS_2012.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="223" src="http://1.bp.blogspot.com/-27ufArlANK0/UEAOV-ZyTwI/AAAAAAAAHow/bNC5whTIgTg/s400/logo_CBSoft_WBVS_2012.JPG" width="400" /></a></div>
<br />
<div style="text-align: justify;">
<span style="font-family: inherit;">Esse ano eu estou participando da organização de um evento muito legal, o Workshop Brasileiro de Visualização de Software (WBVS). Esse evento é um workshop do CBSoft 2012, o Congresso Brasileiro de Teoria e Prática. Foi um convite realizado pelo meu orientador do mestrado, o professor <a href="http://www.ic.uff.br/~leomurta/">Leonardo Murta</a>, e que eu não poderia recusar. </span></div>
<div style="text-align: justify;">
<span style="font-family: inherit;">Minha participação neste evento está me proporcionando um grande aprendizado. Já participei do CBSoft em 2009 e estou ansioso para a chegada do evento.</span><br />
<a name='more'></a></div>
<h3>
<span style="font-family: inherit;"><a href="http://reuse.cos.ufrj.br/wbvs2012/index.pt.html">WBVS 2012</a></span></h3>
<div style="text-align: justify;">
</div>
<span style="font-family: inherit;">Em sua segunda edição, o WBVS ocorrerá em Natal, RN, co-alocado ao <a href="http://www.cbsoft.dimap.ufrn.br/" style="color: #a13538; text-decoration: none;" target="_new">CBSoft 2012</a>. </span><span style="font-family: inherit;">Como na edição anterior, os pesquisadores da academia e da indústria são convidados a submeterem artigos completos e curtos. A edição 2012 do WBVS traz como novidade a inclusão de uma categoria de submissão:</span><em style="font-family: inherit;">artigos de desafio</em><span style="font-family: inherit;">. A chamada de artigos contém informações a respeito desta nova categoria.</span><br />
<span style="font-family: inherit;"><br /></span>
<br />
<h3>
<a href="http://www.cbsoft.dimap.ufrn.br/" style="background-color: transparent; font-family: inherit;">CBSoft 2012</a></h3>
<div>
<span style="font-family: inherit;">O CBSoft irá ocorrer em Natal, entre os dias 23 a 28 de Setembro. Esse evento é o principal congresso da Sociedade Brasileira de Computação (SBC) com o objetido de trocar experiências entre as comunidades acadêmicas, científicas e profissional sobre as mais recentes pesquisas, tendências e inovações - práticas e teóricas na área de software.</span></div>
<br />
<div style="text-align: justify;">
<br /></div>
<br />Daniel Castellanihttp://www.blogger.com/profile/06113568581630261061noreply@blogger.com0tag:blogger.com,1999:blog-369405646754507396.post-83088736360849297702012-08-30T21:44:00.001-03:002012-09-01T15:22:56.548-03:00Testes Automatizados: verificação ou design?<div style="text-align: justify;">
Uma observação que deve ser feita a respeito de testes automatizados é a respeito dos objetivos que se tem com eles. Esses objetivos definem diretamente a abordagem que deve ser utilizada para a utilização de testes: antes ou depois da implementação.</div>
<div style="text-align: justify;">
<br />
<a name='more'></a><br /></div>
<h3>
<a href="http://b2bmanagedservices.com.br/images/checklist_visual.jpg" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"><img border="0" height="200" src="http://b2bmanagedservices.com.br/images/checklist_visual.jpg" width="200" /></a>
Sua abordagem condiz com seu objetivo?</h3>
<div style="text-align: justify;">
A abordagem de fazer os testes depois da implementação tem o objetivo de verificação, pois, nesse caso, os testes servem para garantir que o software continue funcionando da maneira implementada.</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
Por outro lado, a abordagem de fazer os testes antes da implementação tem como objetivo auxiliar no design da solução. Ver essa diferença é trivial, à medida que quando os testes são criados antes do código da funcionalidade ser criado, não há o que garantir que continue funcionando. </div>
<div style="text-align: justify;">
<br /></div>
<h3>
Tipos de testadores</h3>
<div style="text-align: justify;">
De acordo com esses dois objetivos, existem também dois tipos de testadores: verificadores e designers. Esses dois grupos divergem basicamente na forma de encarar a relação testes-código.</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
<a href="https://encrypted-tbn2.google.com/images?q=tbn:ANd9GcRDXTnyup-rUEbcAvMXi6LWHUE4PUdJzkYSxvdjj5VPycG3xplF9A" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" src="https://encrypted-tbn2.google.com/images?q=tbn:ANd9GcRDXTnyup-rUEbcAvMXi6LWHUE4PUdJzkYSxvdjj5VPycG3xplF9A" /></a>O primeiro grupo escreve testes para garantir que seu código continue funcionando da forma que está, ou seja, os testes servem para indicar quando alterações funcionais são realizadas no código. Alterações funcionais são aquelas que alteram a funcionalidade do código, fazendo com que para as entradas anteriormente definidas, hajam saídas diferentes das anteriores. Isso, causa a quebra dos testes, indicando assim, que o código agora funciona de outra forma. Normalmente, os verificadores criam testes independente da solução implementada (código a ser testado) estar elegante. Nesse caso, os testes nada implicam numa melhora da qualidade do código, mas, apenas, na continuidade do seu cumprimento.</div>
<div style="text-align: justify;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="http://paulooliveira.files.wordpress.com/2010/11/graphic_design.jpg" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"><img border="0" height="258" src="http://paulooliveira.files.wordpress.com/2010/11/graphic_design.jpg" width="320" /></a></div>
<div style="text-align: justify;">
O segundo grupo, os designers, se preocupam muito com a qualidade do código sendo desenvolvido. Para eles, o código deve ser elegante, simples e legível. Durante a codificação dos testes, quando um teste se torna muito complexo, é normal que sejam feitas refatorações no código principal, para que seja mais fácil testar. Isso acontece, pois quanto mais complexo, acoplado e menos coeso for um código mais complexo e maior serão os testes associados a ele. É comum para esse grupo, implementar testes antes ou, pelo menos, pensar nos testes e cenários antes, já que isso facilita a criação de um bom design.</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
É comum que não sejamos de um grupo ou de outro unicamente, mas parte de cada um dos dois. Afinal, os testes automatizados são ferramentas como várias outras e devem ser utilizadas da forma correta no momento oportuno para que se obtenha o melhor resultado.</div>
Daniel Castellanihttp://www.blogger.com/profile/06113568581630261061noreply@blogger.com2tag:blogger.com,1999:blog-369405646754507396.post-17762795533933196652012-08-30T21:21:00.002-03:002012-09-01T15:24:42.761-03:00Practical Unit Testing<div class="separator" style="clear: both; text-align: center;">
<a href="http://practicalunittesting.com/img/cover.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" height="320" src="http://practicalunittesting.com/img/cover.png" width="232" /></a></div>
Essa semana comprei dois novos livros na <a href="http://www.amazon.com/">Amazon</a>. Um deles é o <i><a href="http://practicalunittesting.com/">Practical Unit Testing with TestNG and Mockito</a></i>. Já comecei a leitura e parece muito bom.<br />
Nos próximos dias vou escrever um pouco sobre isso à medida que for lendo.<br />
De cara ele aborda questões básicas como:<br />
<ul>
<li> O que é um teste?</li>
<li>Quais os tipos de teste?</li>
<li>A diferença da abordagem de testes, para verificação ou design</li>
<li>Algumas ferramentas que serão abordadas ao longo do livro</li>
</ul>
<div>
Parece ser bastante interessante: direto e rico de conhecimento. O escritor é um desenvolvedor experiente e preocupado com reutilização e qualidade do código, assim como eu. Acho que vou me dar bem com o livro!</div>
<div>
<br />
<a name='more'></a></div>
<div>
Uma das primeiras coisas que ele fala e que eu concordo muito se resume a seguinte frase: "Stay sharp". No português pode ser traduzido como se mantenha afiado. Falando isso, ele quer dizer que não se deve acreditar em tudo que se lê, nem mesmo no livro dele. Concordo com isso, sempre devemos avaliar as informações que nos chegam a fim de não termos um conhecimento superficial e frágil.</div>
<div>
<br /></div>
<div>
Bom, por agora é isso!</div>
Daniel Castellanihttp://www.blogger.com/profile/06113568581630261061noreply@blogger.com2tag:blogger.com,1999:blog-369405646754507396.post-5769013202358367062009-10-09T13:12:00.000-03:002012-09-01T15:25:22.036-03:00The Developers Conference 2009<div class="separator" style="clear: both; text-align: center;">
<a href="http://3.bp.blogspot.com/-lBP8HTF75d8/UEAKypsGd-I/AAAAAAAAHoY/LFwlcxqjP54/s1600/TDC_2009.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="http://3.bp.blogspot.com/-lBP8HTF75d8/UEAKypsGd-I/AAAAAAAAHoY/LFwlcxqjP54/s1600/TDC_2009.JPG" /></a></div>
<div class="" style="clear: both; text-align: center;">
</div>
<div style="text-align: justify;">
Acontecerá na UFF, no dia 11 de Novembro o evento The Developers Conference! </div>
<div style="text-align: justify;">
<span style="text-align: justify;">Eu integro a equipe do NTP da UFF que é responsável </span>junto à Global Code por trazer esse evento para o Rio de Janeiro, mais especificamente para Niterói.<br />
<a name='more'></a></div>
<br />
<div class="" style="clear: both; text-align: center;">
<a href="http://3.bp.blogspot.com/-YczX-R5W4Tk/UEI2vkifzbI/AAAAAAAAHsU/P16Wtfmk__0/s1600/uff.png" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"></a></div>
<div style="text-align: justify;">
</div>
<div class="separator" style="clear: both; text-align: center;">
<a href="http://4.bp.blogspot.com/-Y3BQ_JiJC90/UEI37YCEo_I/AAAAAAAAHsc/eefW7RyPpxA/s1600/museu_arte_contemporanea_rio.jpg" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"><img border="0" height="236" src="http://4.bp.blogspot.com/-Y3BQ_JiJC90/UEI37YCEo_I/AAAAAAAAHsc/eefW7RyPpxA/s320/museu_arte_contemporanea_rio.jpg" width="320" /></a></div>
<div style="text-align: justify;">
Haver um evento desses dentro de uma universidade é muito importante, pois possibilita um contato entre a comunidade acadêmica e profissinal, criando uma série de oportunidades para ambos. Os principais ganhadores desse evento acontecer dentro da UFF são os alunos de computação que poderão sem custo nenhum assistir ao evento. Para os alunos, essa oportunidade é senscional, já que permite conhecer sobre ferramentas e práticas que são utilizadas na prática do dia-a-dia de desenvolvedores de software e fazer uma relação com os conhecimentos adquiridos em sala de aula.</div>
<div style="text-align: justify;">
<br /></div>
<br />
<div class="" style="clear: both; text-align: justify;">
</div>
<div class="" style="clear: both; text-align: justify;">
Este evento contará com personalidades mundiais do Java, como <b>Chris Shalk</b> do Google,<b> Ed Burns</b> da Sun, <b>Rod Johnson</b> da SpringSource e <b>Mike Keith</b> da Oracle.</div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="http://4.bp.blogspot.com/-cluPQMm66t0/UEALJeKP-pI/AAAAAAAAHog/QsBTuAhlhto/s1600/TDC_2009_Palestrantes.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="95" src="http://4.bp.blogspot.com/-cluPQMm66t0/UEALJeKP-pI/AAAAAAAAHog/QsBTuAhlhto/s400/TDC_2009_Palestrantes.JPG" width="400" /></a></div>
<br />Daniel Castellanihttp://www.blogger.com/profile/06113568581630261061noreply@blogger.com0