<?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>Profissionais TI - Pra quem respira informação &#187; Engenharia de Software</title>
	<atom:link href="http://www.profissionaisti.com.br/category/engenharia-de-software/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.profissionaisti.com.br</link>
	<description>Pra quem respira informação</description>
	<lastBuildDate>Thu, 29 Jul 2010 19:37:00 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Experiência de OCR: Quebrando captcha com 26 linhas de código Python!</title>
		<link>http://www.profissionaisti.com.br/2010/07/experiencia-de-ocr-quebrando-captcha-com-26-linhas-de-codigo-python/</link>
		<comments>http://www.profissionaisti.com.br/2010/07/experiencia-de-ocr-quebrando-captcha-com-26-linhas-de-codigo-python/#comments</comments>
		<pubDate>Thu, 15 Jul 2010 11:23:51 +0000</pubDate>
		<dc:creator>Bruno Rocha</dc:creator>
				<category><![CDATA[Desenvolvimento]]></category>
		<category><![CDATA[Engenharia de Software]]></category>
		<category><![CDATA[GED]]></category>
		<category><![CDATA[Python]]></category>
		<category><![CDATA[Segurança]]></category>

		<guid isPermaLink="false">http://www.profissionaisti.com.br/?p=11682</guid>
		<description><![CDATA[Durante este último mês, estive desenvolvendo uma solução GED utilizando a biblioteca de OCR Pytesser aliada à já conhecida e poderosa biblioteca de manipulação de imagens do Python, a PIL, que é utilizada em larga escala em soluções como Google Maps, Yahoo Maps e até mesmo no Youtube.  Originalmente inspirado por um post[0] da Bonsai [...]]]></description>
			<content:encoded><![CDATA[<p>Durante este último mês, estive desenvolvendo uma solução GED utilizando a biblioteca de OCR <a href="http://code.google.com/p/pytesser/" target="_blank">Pytesser</a> aliada à já conhecida e poderosa biblioteca de manipulação de imagens do <a href="http://www.python.org" target="_blank">Python</a>, a <a href="http://www.pythonware.com/products/pil/" target="_blank">PIL</a>, que é utilizada em larga escala em soluções como <a href="http://maps.google.com" target="_blank">Google Maps</a>, <a href="http://maps.yahoo.com" target="_blank">Yahoo Maps</a> e até mesmo no <a href="http://youtube.com" target="_blank">Youtube</a>.  Originalmente inspirado por um post[0] da Bonsai Security resolvi tentar a quebra de um captcha simples utilizando <a href="http://code.google.com/p/pytesser/" target="_blank">Pytesser</a> e <a href="http://www.pythonware.com/products/pil/" target="_blank">PIL</a>.</p>
<blockquote><p><strong>CAPTCHA</strong> é um <a title="Acrônimo" href="/wiki/Acr%C3%B4nimo">acrônimo</a> da expressão &#8220;<em>Completely Automated Public Turing test to tell Computers and Humans Apart</em>&#8221; (<a title="Teste de Turing" href="/wiki/Teste_de_Turing">teste de Turing</a> público completamente automatizado para diferenciação entre computadores e humanos): um teste de desafio cognitivo, utilizado como ferramenta anti-spam, desenvolvido pioneiramente na universidade de Carnegie-Mellon. Como o teste é administrado por um computador, em contraste ao teste de Turing padrão que é administrado por um ser humano, este teste é na realidade corretamente descrito como um <a title="Teste de Turing" href="/wiki/Teste_de_Turing">teste de Turing</a> <em>reverso</em>.</p>
</blockquote>
<p>O consenso geral é que isso seria fácil, mas o problema é conseguir uma solução de quebra de captcha que qualquer um possa fazer download e rodar em seu computador; Então o pessoal da Bonsai criou em alguns minutos um simples script Python que eu testei com vários exemplos de imagens e acabei utilizando o mesmo conceito para outras aplicações.  A grande sacada está em utilizar <a href="http://www.chilkatsoft.com/python-http.asp" target="_blank">httplib</a> ou <a href="http://docs.python.org/library/urllib.html" target="_blank">urllib</a> para fazer a chamada aos arquivos de imagem. Antes de qualquer coisa tenha em mente: Isso é uma experiência didática. Geralmente não encontramos captchas fracos por ai e neste exemplo trabalharemos exclusivamente com este tipo de catpcha:</p>
<p><a href="http://rochacbruno.com.br/blog/wp-content/uploads/2010/07/e4ya.gif"><img class="alignnone size-full wp-image-104" title="e4ya" src="http://rochacbruno.com.br/blog/wp-content/uploads/2010/07/e4ya.gif" alt="" width="58" height="28" /></a> <a href="http://rochacbruno.com.br/blog/wp-content/uploads/2010/07/jxt9.gif"><img class="alignnone size-full wp-image-105" title="jxt9" src="http://rochacbruno.com.br/blog/wp-content/uploads/2010/07/jxt9.gif" alt="" width="58" height="28" /></a></p>
<ul>
<li>As letras não são rotacionadas</li>
<li>As letras possuem a mesma largura</li>
<li>As imagens são do mesmo tamanho</li>
<li>Não sofrem deformações</li>
<li>Plano de fundo é o mesmo para toda a imagem</li>
</ul>
<p><strong> Agora, vamos entender o código que quebra este captcha:</strong></p>
<pre class="brush:py">from PIL import Image
#Imagem a ser quebrada, neste ponto você poderia usar urlib, httplib ou curl para carregar esta imagem.
img = Image.open('input.gif')
#convertemos para o padrão RGB
img = img.convert("RGBA")
#damos bind da imagem para a variável pixdata
pixdata = img.load()

# Limpando a sujeira do background, se a cor for != black, então transformamos em branco.
for y in xrange(img.size[1]):
    for x in xrange(img.size[0]):
        if pixdata[x, y] != (0, 0, 0, 255):
            pixdata[x, y] = (255, 255, 255, 255)

#Salvamos a nova imagem com fundo branco
img.save("input-black.gif", "GIF")

#   Aumentamos as dimensões da imagem (requerido pelo OCR)
im_orig = Image.open('input-black.gif')
big = im_orig.resize((116, 56), Image.NEAREST)

#Salvamos a imagem com tamanho maior
ext = ".tif"
big.save("input-NEAREST" + ext)

#   Yeah! Fazemos OCR da imagem usando o Pytesser
from pytesser import *
image = Image.open('input-NEAREST.tif')
#simplesmente imprimimos a imagem em formato de string OCRizado
print image_to_string(image)
</pre>
<p>resultado:</p>
<pre class="brush:shell">python ocrcaptcha.py
&gt;&gt;&gt; e4ya
&gt;&gt;&gt; jxt9
</pre>
<p>Esta simples código, quebra 90% de qualquer captcha que utilize esta implementação. Aconselho fortemente aos programadores Pythonistas, para ficarem de olho no <a href="http://code.google.com/p/pytesser/" target="_blank">Pytesser</a>, uma biblioteca excelente para OCR, com a qual tenho tido muito sucesso ultimamente! <img src='http://www.profissionaisti.com.br/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>[0] <a href="http://www.bonsai-sec.com/blog/index.php/__breaking-weak-captcha-in-26-lines-of-code__/" target="_blank">Bonsai</a></p>
<p>Aconselho a leitura deste post -&gt; <a href="http://under-linux.org/blogs/magnun/brincando-com-python-e-pil-392/" target="_blank">http://under-linux.org/blogs/magnun/brincando-com-python-e-pil-392/</a></p>
<p>Abraços</p>
]]></content:encoded>
			<wfw:commentRss>http://www.profissionaisti.com.br/2010/07/experiencia-de-ocr-quebrando-captcha-com-26-linhas-de-codigo-python/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Introdução à Construção de Software &#8211; Parte 1</title>
		<link>http://www.profissionaisti.com.br/2010/06/introducao-a-construcao-de-software-parte-1/</link>
		<comments>http://www.profissionaisti.com.br/2010/06/introducao-a-construcao-de-software-parte-1/#comments</comments>
		<pubDate>Thu, 24 Jun 2010 18:38:04 +0000</pubDate>
		<dc:creator>Flávio Lisboa</dc:creator>
				<category><![CDATA[Desenvolvimento]]></category>
		<category><![CDATA[Engenharia de Software]]></category>
		<category><![CDATA[Arquitetura]]></category>
		<category><![CDATA[Construção]]></category>
		<category><![CDATA[Manutenção]]></category>
		<category><![CDATA[Software]]></category>

		<guid isPermaLink="false">http://www.profissionaisti.com.br/?p=11447</guid>
		<description><![CDATA[Este artigo é o primeiro de uma série sobre construção de software. Ele introduz os aspectos que tornam seu estudo de vital importância para os desenvolvedores.]]></description>
			<content:encoded><![CDATA[<p>Este é o primeiro de uma série de artigos sobre a parte mais extensa do desenvolvimento de software: a construção. A construção enfoca mais a codificação e a depuração, mas também inclui outras atividades (ou, mais precisamente, depende delas).</p>
<p><em>O que importa é o código-fonte!</em></p>
<p>A construção de software é a única coisa que com certeza será feita. Ou seja, o código executável é a única coisa que irá certamente ser produzida, juntamente com os testes para garantir que ele funcione como esperado.</p>
<p><em>Pronto, terminamos o projeto! Agora é só fazer manutenção!</em></p>
<p>A construção é uma atividade muito complexa. Ela já toma a maior parte do desenvolvimento de um projeto de software. Segundo McConnel [1], ela pode tomar até 80% de um projeto. Isso é muito, e pode significar que outras atividades serão negligenciadas. Qualquer atividade negligenciada em um projeto de software resulta em problemas futuros de manutenção. E a manutenção é a fase mais longa do ciclo de vida de um software&#8230; longa o bastante para durar mais que a vida dos criadores do software. E quando atividades como documentação são negligenciadas para priorizar codificação, o conhecimento acaba ficando na cabeça das pessoas&#8230; das pessoas que saem da empresa.</p>
<p><em>Mais uma noite em claro&#8230;</em></p>
<p>O objetivo desta série de artigos é levantar vários problemas envolvendo a construção de software e quais as melhores práticas que podem ser adotadas para resolvê-los.</p>
<p><em>Na teoria tudo é bonito&#8230;</em></p>
<p>A ideia não é ficar somente no discurso, mas mostrar, inclusive, exemplos de código, ilustrando soluções arquiteturais e abordagens de reuso de software, que ofereçam maior controle aos projetos e tornem a manutenção mais fácil.</p>
<p>O próximo artigo tratará sobre as tarefas específicas da construção de software e de que outras atividades elas dependem. E como os problemas nessas atividades podem afetar (de forma negativa) a construção. E, finalmente, como os construtores podem se proteger e evitar noites e finais de semana perdidos.</p>
<p><em>[1] McConnell, Steve. Code Complete: Um guia prático para a construção de software.</em></p>
]]></content:encoded>
			<wfw:commentRss>http://www.profissionaisti.com.br/2010/06/introducao-a-construcao-de-software-parte-1/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Seminário Engenharia de Software 2010</title>
		<link>http://www.profissionaisti.com.br/2010/06/seminario-engenharia-de-software-2010/</link>
		<comments>http://www.profissionaisti.com.br/2010/06/seminario-engenharia-de-software-2010/#comments</comments>
		<pubDate>Thu, 17 Jun 2010 11:27:04 +0000</pubDate>
		<dc:creator>Tempo Real Eventos</dc:creator>
				<category><![CDATA[Cursos Patrocinados]]></category>
		<category><![CDATA[Engenharia de Software]]></category>
		<category><![CDATA[Seminário]]></category>

		<guid isPermaLink="false">http://www.profissionaisti.com.br/?p=11357</guid>
		<description><![CDATA[Objetivos

Discutir os objetivos e importância de temas da Engenharia de Software.
Possibilitar a seleção e aplicação de técnicas de engenharia e princípios de gestão no contexto de Engenharia de Software adequadamente em ambientes específicos de construção de software.
Desenvolver um olhar crítico sobre as diversas técnicas e estratégias gerenciais empregadas em Engenharia de Software.

Público Alvo
 Desenvolvedores em [...]]]></description>
			<content:encoded><![CDATA[<p><strong>Objetivos</strong></p>
<ul>
<li>Discutir os objetivos e importância de temas da Engenharia de Software.</li>
<li>Possibilitar a seleção e aplicação de técnicas de engenharia e princípios de gestão no contexto de Engenharia de Software adequadamente em ambientes específicos de construção de software.</li>
<li>Desenvolver um olhar crítico sobre as diversas técnicas e estratégias gerenciais empregadas em Engenharia de Software.</li>
</ul>
<p><strong>Público Alvo<br />
 </strong>Desenvolvedores em geral, Gerentes e Coordenadores de Projetos.</p>
<p><strong>Conteúdo</strong></p>
<ul>
<li>Modelos e Métodos de Gestão da Qualidade de Software por Renato de la Volpe</li>
<li>Engenharia de Requisitos por Márcia Ito</li>
<li>Implantação de Processo de Desenvolvimento de Software por Alvaro D´Alessandro</li>
<li>Gerenciamento de Projetos no Desenvolvimento de Software por Aldo Andrade</li>
<li>Gestão de Processos de Negócio (BPM), SOA e Arquitetura Corporativa por Eduardo Endo</li>
</ul>
<p><strong>Data: </strong>17 de Julho - Sábado: 9h00 às 18h00<br />
 <strong>Local:</strong> Century Flat Paulista - R. Teixeira da Silva, 647 &#8211; Paraíso &#8211; São Paulo &#8211; SP<br />
 <strong>Mais informações: </strong><a href="http://www.temporealeventos.com.br/?area=172" target="_blank">http://www.temporealeventos.com.br/?area=172</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.profissionaisti.com.br/2010/06/seminario-engenharia-de-software-2010/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Engenharia de Software na Prática</title>
		<link>http://www.profissionaisti.com.br/2010/05/livro-engenharia-de-software-na-pratica/</link>
		<comments>http://www.profissionaisti.com.br/2010/05/livro-engenharia-de-software-na-pratica/#comments</comments>
		<pubDate>Fri, 21 May 2010 20:48:26 +0000</pubDate>
		<dc:creator>Profissionais TI</dc:creator>
				<category><![CDATA[Engenharia de Software]]></category>
		<category><![CDATA[Livros]]></category>
		<category><![CDATA[Engenharia]]></category>

		<guid isPermaLink="false">http://www.profissionaisti.com.br/?p=10363</guid>
		<description><![CDATA[Autor: Hélio Engholm Jr.
ISBN: 978-85-7522-217-1
Páginas: 440
Ano: 2010
Compre este livro!
Descrição
A cada dia, mais profissionais e empresas estão interessados em desenvolver softwares com qualidade, menores custos de manutenção e dentro dos prazos previstos. Com essa intenção, tais profissionais e empresas necessitam adquirir maturidade no ciclo de desenvolvimento do software e utilizar Engenharia de Software.
Este livro ensina como utilizar [...]]]></description>
			<content:encoded><![CDATA[<p><img class="alignleft size-full wp-image-10364" style="margin-left: 4px; margin-right: 4px;" title="Engenharia de Software na Prática" src="http://www.profissionaisti.com.br/wp-content/uploads/2010/05/9788575222171.gif" alt="" width="135" height="190" />Autor: Hélio Engholm Jr.<br />
ISBN: 978-85-7522-217-1<br />
Páginas: 440<br />
Ano: 2010</p>
<p><a href="http://bit.ly/drojyk" target="_blank">Compre este livro!</a></p>
<p><strong>Descrição</strong></p>
<p>A cada dia, mais profissionais e empresas estão interessados em desenvolver softwares com qualidade, menores custos de manutenção e dentro dos prazos previstos. Com essa intenção, tais profissionais e empresas necessitam adquirir maturidade no ciclo de desenvolvimento do software e utilizar Engenharia de Software.</p>
<p>Este livro ensina como utilizar disciplinas do CMMi integrado a Engenharia de Software em todo o ciclo de desenvolvimento de software. Por meio de estudo de caso de comércio eletrônico e partindo de solicitação da área de negócio, o leitor será levado por todo o ciclo de vida do projeto, percorrendo vários processos necessários para certificação CMMi. No estudo de caso, apresenta uma série de templates que podem ser utilizados em projetos da vida real.</p>
<p>Destina-se a profissionais, estudantes e professores interessados em aumentar sua competência como profissionais da área de Tecnologia da Informação relacionada ao desenvolvimento de software, aprendendo na prática conceitos prescritos na Engenharia de Software, para produzir soluções elegantes, compartilhar ideias e tomar decisões por meio de um ciclo completo de projeto e desenvolvimento. Pode ser de utilidade às empresas interessadas em implementar em sua metodologia de desenvolvimento de software processos e melhores práticas de mercado, alinhados ao modelo de maturidade CMMi desenvolvido pelo SEI.</p>
<p>O que este livro aborda:</p>
<ul>
<li>Processos de desenvolvimento de software</li>
<li>Gerenciamento e engenharia de requisitos</li>
<li>Gerenciamento de mudanças</li>
<li>Gerenciamento de riscos</li>
<li>Gerenciamento de qualidade</li>
<li>Gerenciamento de configuração</li>
<li>Processos de análise, arquitetura e design de software</li>
<li>Processos de construção, testes de software e implantação</li>
<li>Tecnologia orientada a objetos</li>
<li>Templates para utilização em projetos</li>
<li>Análise e design orientado a objetos com UML</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://www.profissionaisti.com.br/2010/05/livro-engenharia-de-software-na-pratica/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Práticas ágeis são o caminho para a qualidade de software?</title>
		<link>http://www.profissionaisti.com.br/2010/04/praticas-ageis-sao-o-caminho-para-a-qualidade-de-software/</link>
		<comments>http://www.profissionaisti.com.br/2010/04/praticas-ageis-sao-o-caminho-para-a-qualidade-de-software/#comments</comments>
		<pubDate>Fri, 30 Apr 2010 12:00:49 +0000</pubDate>
		<dc:creator>Denis Ferrari</dc:creator>
				<category><![CDATA[Engenharia de Software]]></category>
		<category><![CDATA[Metodologias]]></category>
		<category><![CDATA[Agile]]></category>
		<category><![CDATA[Qualidade]]></category>
		<category><![CDATA[TDD]]></category>
		<category><![CDATA[XP]]></category>

		<guid isPermaLink="false">http://www.profissionaisti.com.br/?p=9327</guid>
		<description><![CDATA[Nossa área de desenvolvimento de software é muito nova, e como consequência disso, ainda estamos aprendendo quais são as técnicas que funcionam e quais só atrapalham o dia-a-dia dos nossos projetos. É dever de todo profissional da área buscar meios para melhorar o nosso objetivo principal: Construir softwares que atendam aos clientes, aos usuários e [...]]]></description>
			<content:encoded><![CDATA[<div id="attachment_170" class="wp-caption alignleft" style="width: 291px"><img class="size-full wp-image-170" title="Pense nisso" src="http://hidrotec-es.com.br/denisferrari/wiki/wp-content/uploads/2010/02/albert_einstein.jpg" alt="Albert Einstein" width="281" height="291" /><p class="wp-caption-text">Albert Einstein</p></div>
<p>Nossa área de desenvolvimento de software é muito nova, e como consequência disso, ainda estamos aprendendo quais são as técnicas que funcionam e quais só atrapalham o dia-a-dia dos nossos projetos. É dever de todo profissional da área buscar meios para melhorar o nosso objetivo principal: Construir softwares que atendam aos clientes, aos usuários e às equipes de desenvolvimento.</p>
<p>Práticas ágeis são um meio e não um fim, não deve-se utilizar as técnias se não é evidente quais problemas elas tentam resolver, usar por usar não melhora em nada o resultado final do seu projeto. Você só deve usar essas práticas se realmente entender porquê elas são necessárias, e não porquê  estão na moda.</p>
<p>Vamos observar os benefícios de algumas técnicas utilizadas no meio ágil:</p>
<p>Com <strong> <acronym title="Test-Driven Development">TDD </acronym> </strong>o programador cria o hábito de planejar suas tarefas antes de executá-las, isso se deve ao fato de que nessa técnica você começa pela elaboração de uma lista de testes para o artefato que será desenvolvido, e só depois começa a codificá-lo. Outro benefício do <strong><acronym title="Test-Driven Development">TDD </acronym></strong>é que o programador deve usar o seu código antes de implementá-lo, apesar de parecer estranho é uma quebra de paradigma excelente começar a codificação pelo teste e tomar as decisões de design do código antes de implementá-lo, isso reduz o retrabalho pois o programador percebe no início da codificação como ficará seu código ao final dela.</p>
<p>Muitos gestores ainda não acreditam nos benefícios da <strong>programação em par,</strong> sendo um dos motivos a sensação de perda de produtividade quando dois programadores são alocados para a mesma tarefa, essa sensação é falsa, pois existem uma série de fatores que devem ser levados em consideração quando falamos de produtividade. O ritmo de desenvolvimento da dupla é garantido pela  falta de distrações que um programador sozinho teria, dificilmente durante o desenvolvimento em par o &#8220;piloto&#8221; irá desviar do foco. Outro benefício da <strong>programação em par</strong> é a revisão que o &#8220;co-piloto&#8221; faz observando a codificação do piloto, muitos problemas podem ser identificados em tempo de codificação. A comunicação constante entre os programadores faz com que cada decisão seja mais bem pensada, e ainda traz um grande benefício: Dois membros da equipe vão conhecer aquele trecho do código, isso é essencial para contornar problemas de comunicação e troca de membros da equipe durante o desenvolvimento dos projetos.  A programação em par protege o investimento do projeto pois reduz a taxa de retrabalho da equipe e gera um código de qualidade superior, afinal, duas cabeças pensam melhor do que uma.</p>
<p>Desenvolver um software de forma <strong>iterativa e incremental</strong> traz uma série de benefícios, porém, também traz uma série de problemas. Desenvolver software em ciclos de tempo fechados faz com que cada minuto seja precioso, por isso, vários impedimentos são identificados ao longo do desenvolvimento e resolvidos a medida que as entregas são realizadas no final de cada ciclo. Como o desenvolvimento acontece em ciclos, a equipe de desenvolvimento pode aprender com os problemas enfrentados no ciclo anterior, isso permite que o processo de cada equipe possa ser melhorado continuamente, e essas melhorias sempre atacam um grande impedimento do clico anterior, ou seja, não são apenas melhorias por melhorias. Processos iterativos e incrementais também auxiliam a contornar o grande vilão dos projetos de software que é a mudânça de escopo, caso o cliente descubra uma nova necessidade  a mesma poderá ser implementada no próximo ciclo, já que o ciclo em desenvolvimento não deve ter seu objetivo alterado. Caso a necessidade do cliente mude (ou melhor, quando a necessidade do cliente mudar) e o ciclo desenvolvido não for mais necessário, o cliente só &#8220;perde&#8221; aquele ciclo, ou seja, o custo da alteração de escopo fica sendo o custo do desenvolvimento do novo ciclo. Outra característica interessante é que nessa forma de desenvolvimento os feedbacks dos usuários chegam muito mais cedo do que no modelo tradicional, já que no final do ciclo a equipe entrega um parte funcional do software, e já que o software entra em produção mais cedo o cliente também começa a usufruir dos benefícios do sistema mais cedo.</p>
<p>As técnicas ágeis são um meio para solucionar alguns dos problemas mais comuns dos ambientes de desenvolvimento como conhecemos (falta de comunicação, retrabalho, escopos rígidos, custos altos, falta de testes, etc.), elas propõem uma nova forma de trabalho, que tem se mostrado muito eficiente para equipes com o perfil adequado. Essas técnicas influenciam positivamente em todas as vertentes de avaliação da qualidade de um software desde que sejam aplicadas de forma correta.</p>
<p>Quer saber mais sobre as técnicas citadas? Seguem algumas referências:</p>
<p>Sobre TDD:</p>
<ul>
<li><a href="http://pt.wikipedia.org/wiki/Test_Driven_Development" target="_blank">TDD no Wikipédia</a></li>
<li><a href="http://improveit.com.br/xp/praticas/tdd" target="_blank">Desenvolvimento orientado a teste</a> &#8211; Por <a href="http://twitter.com/viniciusteles" target="_blank">@viniciusteles</a></li>
<li><a href="http://www.testdriven.com/" target="_blank">Portal TDD</a></li>
<li><a href="http://dojofloripa.wordpress.com/2007/09/10/tudo-sobre-tdd/" target="_blank">Tudo sobre TDD</a> &#8211; Por <a href="http://twitter.com/victorhg" target="_blank">@victorhg</a></li>
<li><a href="http://www.slideshare.net/denisnferrari/tdd-completo" target="_blank">Apresentação que utilizo em treinamentos</a> &#8211; Por Fabrício Mattos</li>
<li><a href="http://podcast.dotnetarchitects.net/2010/01/tdd-nao-existe/" target="_blank">Podcast TDD não existe</a></li>
</ul>
<p>Sobre Programação em Par:</p>
<ul>
<li><a href="http://lucianofelix.wordpress.com/2009/01/21/dicas-sobre-pair-programming/" target="_blank">Dicas sobre Programação em Par</a> &#8211; Por <a href="http://twitter.com/lucianofelix" target="_blank">@lucianofelix</a></li>
<li><a href="http://en.wikipedia.org/wiki/Pair_programming" target="_blank">Par Programming no Wikipédia</a></li>
<li><a href="http://improveit.com.br/xp/praticas/programacao_par" target="_blank">Programação em Par</a> &#8211; Por <a href="http://twitter.com/viniciusteles" target="_blank">@viniciusteles</a></li>
</ul>
<p>Sobre desenvolvimento iterativo e incremental:</p>
<ul>
<li><a href="http://pt.wikipedia.org/wiki/Desenvolvimento_iterativo_e_incremental" target="_blank">Desenvolvimento iterativo e incremental no Wikipédia</a></li>
<li><a href="http://visaoagil.wordpress.com/2009/02/05/escopo-iterativo-e-incremental-para-o-gerenciamento-agil-de-requisitos/" target="_blank">Escopo Iterativo e Incremental para o gerenciamento Ágil de requisitos</a> &#8211; Por <a href="http://twitter.com/visaoagil" target="_blank">@visaoagil</a></li>
<li><a href="http://pt.wikipedia.org/wiki/Scrum" target="_blank">Scrum no Wikipédia</a></li>
<li><a href="http://improveit.com.br/scrum" target="_blank">Scrum </a>- Por <a href="http://twitter.com/viniciusteles" target="_blank">@viniciusteles</a></li>
<li><a href="http://www.scrumalliance.org/" target="_blank">Scrum Alliance</a></li>
<li><a href="http://www.scrum.org/" target="_blank">Scrum.org</a></li>
</ul>
<p>Qual a sua experiência sobre as técnicas ágeis? Você acha que elas são o caminho para aumentarmos a qualidade dos softwares que desenvolvemos?</p>
<p>Aguardo feedbacks!</p>
<p>Texto originalmente publicado em <a href="http://www.heroisdati.com" target="_blank">www.heroisdati.com</a>.</p>
<div id="_mcePaste" style="overflow: hidden; position: absolute; left: -10000px; top: 0px; width: 1px; height: 1px;"><img src="file:///C:/Users/DENISF%7E1/AppData/Local/Temp/moz-screenshot.png" alt="" /></div>
]]></content:encoded>
			<wfw:commentRss>http://www.profissionaisti.com.br/2010/04/praticas-ageis-sao-o-caminho-para-a-qualidade-de-software/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Aprenda UML: leve na faixa um curso e um livro, participe!</title>
		<link>http://www.profissionaisti.com.br/2010/04/aprenda-uml-leve-na-faixa-um-curso-e-um-livro-participe/</link>
		<comments>http://www.profissionaisti.com.br/2010/04/aprenda-uml-leve-na-faixa-um-curso-e-um-livro-participe/#comments</comments>
		<pubDate>Tue, 20 Apr 2010 19:04:04 +0000</pubDate>
		<dc:creator>Profissionais TI</dc:creator>
				<category><![CDATA[Engenharia de Software]]></category>
		<category><![CDATA[Promoções]]></category>
		<category><![CDATA[Curso]]></category>
		<category><![CDATA[Livro]]></category>
		<category><![CDATA[Sorteio]]></category>
		<category><![CDATA[UML]]></category>

		<guid isPermaLink="false">http://www.profissionaisti.com.br/?p=8852</guid>
		<description><![CDATA[A grande parceira do PTI, Tempo Real Eventos, está oferecendo para vocês um curso e um livro de UML na faixa. O curso acontecerá no dia 8 de maio em São Paulo e o livro é &#8220;UML 2 &#8211; Uma Abordagem Prática&#8221; da Novatec Editora.
Segundo Gilleanes Guedes, o especialista, o treinamento iniciará com uma breve introdução [...]]]></description>
			<content:encoded><![CDATA[<p>A grande parceira do PTI, <a title="Twitter Tempo Real Eventos" href="http://twitter.com/treventos" target="_blank">Tempo Real Eventos</a>, está oferecendo para vocês <strong>um curso e um livro de UML na faixa</strong>. O curso acontecerá no dia 8 de maio em São Paulo e o livro é <strong>&#8220;<a href="http://novatec.com.br/livros/uml2abordagempratica/?idA=182" target="_blank"><span style="font-weight: normal;">UML 2 &#8211; Uma Abordagem Prática</span></a>&#8221; </strong>da Novatec Editora.</p>
<p>Segundo Gilleanes Guedes, o especialista, o treinamento iniciará com uma breve introdução sobre a UML, explanando rapidamente os objetivos de cada um de seus diagramas. Em seguida será feita uma rápida revisão sobre orientação a objetos, conhecimento imprescindível para a real compreensão da UML.</p>
<p>Para participar é baba, basta tuitar/retuitar a mensagem abaixo:</p>
<blockquote><p>http://migre.me/yffS Quero ganhar curso e livro de #UML da @treventos e @profissionaisti. RT para participar!</p></blockquote>
<p>Sorteio acontecerá na quinta (22/04) às 16hrs entre os que tuitaram a mensagem acima. O ganhador será avisado via Twitter e deverá confirmar sua presença no curso para poder ganhar o livro também.</p>
<p>Desejo sorte a todos! <img src='http://www.profissionaisti.com.br/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> </p>
<p><a name="res"></a></p>
<h3>Resultado</h3>
<p><del datetime="2010-04-26T20:02:46+00:00">E quem vai aprender UML com a <strong>Tempo Real Eventos</strong> di grátis é: @<a href="http://twitter.com/techlivre" target="_blank">techlivre</a> &#8211; <a href="http://sorteie.me/faP" target="_blank">http://sorteie.me/faP</a></del></p>
<p><del datetime="2010-04-29T20:27:23+00:00">E quem vai aprender UML com a <strong>Tempo Real Eventos</strong> di grátis é: @<a href="http://twitter.com/tonapraia" target="_blank">tonapraia</a> &#8211; <a href="http://sorteie.me/fXi">http://sorteie.me/fXi</a></del></p>
<p><del datetime="2010-04-30T20:50:16+00:00">E quem vai aprender UML com a <strong>Tempo Real Eventos</strong> di grátis é: @<a href="http://twitter.com/diogomds" target="_blank">diogomds</a> &#8211; <a href="http://sorteie.me/gK9">http://sorteie.me/gK9</a></del></p>
<p><del datetime="2010-05-04T13:04:09+00:00">E quem vai aprender UML com a <strong>Tempo Real Eventos</strong> di grátis é: @<a href="http://twitter.com/tin13" target="_blank">tin13</a> &#8211; <a href="http://sorteie.me/h6r">http://sorteie.me/h6r</a></del></p>
<p>E quem vai aprender UML com a <strong>Tempo Real Eventos</strong> di grátis é: @<a href="http://twitter.com/lucas_lra" target="_blank">lucas_lra</a> &#8211; <a href="http://sorteie.me/hqy" target="_blank">http://sorteie.me/hqy</a></p>
<p>O ganhador deve confirmar sua presença no curso até quarta (04/05) às 14hrs. Lembrando que só ganha o livro se comparecer ao curso que acontecerá no dia 8 de maio em SP, por isso, é necessário confirmar presença. Caso não tenhamos retorno até a data estabelecida acima, um novo sorteio será realizado.</p>
<p>________________________________________</p>
<p>Mais informações sobre o curso: <a href="http://www.profissionaisti.com.br/2010/04/curso-uml-2-uma-abordagem-pratica-de-conhecimentos-essenciais-e-inovadores/" target="_blank">http://www.profissionaisti.com.br/2010/04/curso-uml-2-uma-abordagem-pratica-de-conhecimentos-essenciais-e-inovadores/</a></p>
<h3 style="text-align: center;"><a href="http://www.profissionaisti.com.br/2010/04/promocao-ganhe-uma-camiseta-e-buttons-da-redbug/">Participe de outras promoções do PTI, aproveite!</a></h3>
]]></content:encoded>
			<wfw:commentRss>http://www.profissionaisti.com.br/2010/04/aprenda-uml-leve-na-faixa-um-curso-e-um-livro-participe/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Windows Client: User Interface (UI) vs. User Experience (UX)</title>
		<link>http://www.profissionaisti.com.br/2010/02/windows-client-user-interface-ui-vs-user-experience-ux/</link>
		<comments>http://www.profissionaisti.com.br/2010/02/windows-client-user-interface-ui-vs-user-experience-ux/#comments</comments>
		<pubDate>Fri, 12 Feb 2010 09:00:22 +0000</pubDate>
		<dc:creator>Waldemir Cambiucci</dc:creator>
				<category><![CDATA[Desenvolvimento]]></category>
		<category><![CDATA[Engenharia de Software]]></category>
		<category><![CDATA[Microsoft]]></category>
		<category><![CDATA[User Experience (UX)]]></category>
		<category><![CDATA[User Interface (UI)]]></category>
		<category><![CDATA[Windows 7]]></category>

		<guid isPermaLink="false">http://www.profissionaisti.com.br/?p=5795</guid>
		<description><![CDATA[Quando pensamos em User Interface (UI) e User Experience (UX) observamos os diversos recursos que agora estão disponíveis no próprio sistema operacional, facilitando a construção de aplicações e interfaces que atendem as novas demandas por usabilidade e experiência de usuário em aplicações desktop.]]></description>
			<content:encoded><![CDATA[<p>Olá pessoal, tudo certo?</p>
<p>A semana continua quente com as discussões sobre usabilidade, interfaces, Windows Client, Silverlight, Win32, experiência do usuário e recursos presentes na plataforma cliente.</p>
<p>Um tempo atrás, vi uma sessão conduzida pelo arquiteto Simon Guest da Microsoft. Ele fez um discurso muito interessante sobre <strong>User Interfeace (UI) versus User Experience (UX).</strong> Se preferir, UI vs. UX <img src='http://www.profissionaisti.com.br/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>Imagine que você é chamado para ajudar na arquitetura de uma aplicação, que possui grandes demandas para a interface do usuário. Porém, você é chamado para questões como atualização de dados em certos componentes de tela, melhor comunicação entre projetos da interface, mais animação ou menos animação, tipos de protocolos para tráfego de imagens, streaming de vídeos, etc. Na defesa do Simon, esse tipo de questionamento está mais ligado ao<strong> USER INTERFACE</strong> e não ao <strong>USER EXPERIENCE</strong>.</p>
<p>Assim, posicionamos no <strong>USER INTERFACE</strong> os diversos aspectos de controles gráficos, tipos visuais, imagens, renderização, etc, que formam o resultado final da interface. Quando falamos em UX ou <strong>USER EXPERIENCE</strong> estamos preocupados com a abordagem escolhida para a interação do usuário com nossa aplicação. Colocar animações diversas no canto superior esquerdo em formulários de dados é bem diferente de escolher uma abordagem MULTI-TOQUE para a navegação pelo menu de opções da aplicação, por exemplo.</p>
<p>Até hoje, vimos muito exemplos de abordagens inovativas e <strong>USER EXPERIENCE</strong> na Web 2.0, com sites e Web Designers abusando da criatividade e da ousadia, encantando milhares de usuários pela Web. Porém, assim como vimos o conceito de mashup migrar para o mashup corporativo, abordagens criativas e <strong>USER EXPERIENCE</strong> de fato começa a descer com mais força para o cenário enterprise.</p>
<p>Pensando em plataforma Microsoft, hoje estamos falando de Windows 7, .NET 4.0, WPF 4, mas como desenvolvedores e arquitetos já vimos uma infinidade de tecnologias na plataforma Windows Client. Com certeza você já utilizou ou ainda utiliza uma dessas tecnologias. Alguns exemplos são:</p>
<p>para a User Interface:</p>
<ul>
<li>Accessibility</li>
<li>Gadgets</li>
<li>International Support</li>
<li>Microsoft Agent</li>
<li>Text Services Framework</li>
<li>Windows Animation Manager</li>
<li>Windows Controls</li>
<li>Windows Ribbon Framework</li>
<li>Windows Shell</li>
<li>Windows Touch</li>
<li>Windows User Interface</li>
<li>Desktop Window Manager</li>
<li>Resource Compiler</li>
<li>Windows Help</li>
</ul>
<p>para Graphics e Multimedia</p>
<ul>
<li>Audio e Video</li>
<li>Direct2D</li>
<li>DirectWrite</li>
<li>DirectX</li>
<li>GDI+</li>
<li>Monitor Configuration</li>
<li>OpenGL</li>
<li>Print Schema</li>
<li>Picture Acquisition</li>
<li>Windows Color System</li>
<li>Windows GDI</li>
<li>Windows Image Acquisition (WIA)</li>
<li>Windows Imaging Component (WIC)</li>
<li>Windows Media Center Software Development Kit</li>
<li>WPF Bitmap Effects</li>
</ul>
<p>Sem falar de outros componentes como Data Access, System Services, Storage, Devices, Diagnostics, Messaging e Collaboration, Security, COM+, Transactions, etc. Todas essas tecnologias são nativas do sistema operacional, presentes como recursos do Windows Client. Portanto, são exemplos de funcionalidades que sairam do escopo da aplicação e passaram para o sistema operacional, facilitando o desenvolvimento de aplicações Desktop com grande USER EXPERIENCE e USER INTERFACE.</p>
<p>Entre os vários anúncios feitos durante o último PDC09, vimos que o Visual Studio 2010 seria construído sobre o WPF – Windows Presentation Foundation. Em adição, o VS estaria usando agora o MEF como mecanismo de extensibilidade.</p>
<p>O que é o <strong>MEF</strong>?</p>
<p>O <strong>Managed Extensibility Framework (MEF)</strong> é uma biblioteca nova do .NET 4.0 que torna fácil a extensão e o reuso de componentes. Em linhas gerais, o MEF fornece padrões para o host de aplicações, discover, exposição e consumo de componentes de extensão, sem a necessidade de acomplamento entre eles. No coração do MEF encontramos o ComposablePart, que exporta serviços ou consome serviços fornecidos externamente. Isso é feito usando um Contrato, que é referenciado de forma simples, através de Import (para consumo) ou Export (para exposição).</p>
<p>O MEF ainda está em desenvolvimento, mas você encontrará mais material no site do CodePlex, aqui:</p>
<p><strong>Managed Extensibility Framework (MEF)</strong><br />
Ref.: <a href="http://www.codeplex.com/MEF">http://www.codeplex.com/MEF</a></p>
<p>Tem sido interessante resgatar as várias tecnologias presentes no Windows Client e seus recursos. Na velocidade das coisas, nossos usuários corporativos já são tão exigentes em relação a usabilidade quanto nossos usuários de internet mais conectados. Por isso, vale conhecer o SO que você está utilizando no mundo cliente.</p>
<p>Por enquanto é só!</p>
<p>Referência: <a href="http://blogs.msdn.com/wcamb/archive/2010/02/11/user-interface-vs-user-experience.aspx" target="_blank">Blog Waldemir</a></p>
<p>Um abraço!</p>
<p>Waldemir Cambiucci<br />
Blog: <a href="http://blogs.msdn.com/wcamb/">http://blogs.msdn.com/wcamb/</a><br />
Twitter: <a href="http://twitter.com/wcamb/">http://twitter.com/wcamb/</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.profissionaisti.com.br/2010/02/windows-client-user-interface-ui-vs-user-experience-ux/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Exemplos de projetos de Missão Crítica</title>
		<link>http://www.profissionaisti.com.br/2009/11/exemplos-de-projetos-de-missao-critica/</link>
		<comments>http://www.profissionaisti.com.br/2009/11/exemplos-de-projetos-de-missao-critica/#comments</comments>
		<pubDate>Sat, 07 Nov 2009 11:29:32 +0000</pubDate>
		<dc:creator>Waldemir Cambiucci</dc:creator>
				<category><![CDATA[Computação em nuvem]]></category>
		<category><![CDATA[Engenharia de Software]]></category>
		<category><![CDATA[Missão Crítica]]></category>
		<category><![CDATA[WCF]]></category>
		<category><![CDATA[WF]]></category>
		<category><![CDATA[windows azure]]></category>

		<guid isPermaLink="false">http://www.profissionaisti.com.br/?p=4747</guid>
		<description><![CDATA[Alguns aspectos envolvidos em projetos de Missão Crítica.]]></description>
			<content:encoded><![CDATA[<p>Olá pessoal, tudo certo?</p>
<p>Um assunto que de tempos em tempos aparece em conversas com arquitetos e empresas do mercado é a Missão Crítica em projetos.  Mas o que você entende por um projeto de Missão Crítica?</p>
<p>Do wikipedia temos que o termo Missão Crítica refere-se a qualquer fator (equipamento, processo, procedimento, software, etc.) que seja crucial para o sucesso ou completude de uma atividade ou projeto. Também pode se referir a um projeto cujo o sucesso é vital para a missão da organização ou negócio da empresa.</p>
<p>Falando em projetos, vejamos alguns exemplos que considero de Missão Crítica:</p>
<p>- Um sistema de controle e coleta de dados de um projeto em Física Experimental para criação de estado de plasma, rodando sobre sistema operacional Debian/Linux, com processos em C, usando pilha TCP, pode ser considerado de missão crítica para o laboratório, devido as restrições e riscos envolvidos na monitoração e controle de equipamentos;</p>
<p>- Um núcleo de negociação para o mercado financeiro, tratando milhões de operações/dia, envolvendo mensageria em banco de dados, cache distribuído, gerenciamento de recursos em memória, etc., com requisitos rígidos de baixa latência, também é um exemplo de missão crítica;</p>
<p>- Um SDCD – Sistema Digital de Controle Distribuído – para monitoração e atuação de bicos de óleo em caldeiras para a geração de vapor num planta industrial, também é um belo exemplo. Vapor é um elemento chave em diversos processos industriais, de petroquímicas a processamento de atum em lata!</p>
<p>- Um monitor transacional de alto desempenho, aplicando conceitos como ACID, MUTEX, CRITICAL SESSIONS, SEMÁFOROS, árvores de falhas, etc, é outro exemplo. Uma leitura obrigatória sobre o assunto é o livro Transaction Processing, confira aqui!</p>
<p>- Um sistema SaaS – Software as a Service – sobre algum provedor em nuvem, para uma solução multi-inquilino com interfaces Web, responsável pelo núcleo de faturamento da empresa, é de missão crítica, com requisitos de disponibilidade, responsividade e desempenho. Imagine um sistema SaaS para a venda de ingressos do show de Eric Clapton ou B.B. King!</p>
<p>- Um sistema de automação para controle de caixas margem de via, por exemplo, para determinação de presença de trens de metrô e vagões em trechos da via, abertura de portas, desvios de ramais, movimento, etc. O próprio controle do carrossel de composições na via também é crítico. Qual é o trem mais seguro? Um trem parado ou um trem na oficinal, fora da via?</p>
<p>- Um sistema para contabilidade e bilhetagem de chamadas em telefonia celular, também é crítico; &#8211; Em muitos cenários, até mesmo um sistema de emails é um sistema de missão crítica para a empresa. Algumas corporações simplesmente param ou perdem negócios em casos de falha em suas caixas postais, por mais commodities que possam parecer. Impacto financeiro a vista!;</p>
<p>- Um sistema de controle de equipamentos médicos, como scanners, tomógrafos, dispositivos de ultra-som, leitores dopplers em tempo real (opa!), entre outros mais sofisticados em medicina, são extremamente críticos em seus resultados.</p>
<p>Considero todos os exemplos acima como sistemas de Missão Crítica em diferentes níveis, pois envolvem riscos para o negócio da empresa. Assim, podemos destacar três tipos de riscos envolvidos:</p>
<ul>
<li>Riscos Materiais;</li>
<li>Riscos Financeiros;</li>
<li>Riscos envolvendo Vidas Humanas;</li>
</ul>
<p>Alguns sistemas de Missão Crítica podem envolver requisitos de Tempo Real (Real Time), isto é, janelas de atuação e tempos resposta bem definidos, que devem ser respeitados. Nesses casos, o número de processos envolvidos, o volume ou o número de chamadas disparadas não deve interferir no tempo de resposta do sistema.</p>
<p>Qual é o tempo de resposta envolvido no tempo real (em milisegundos, por exemplo)? Dependerá do cenário que estamos tratando, seja um canal de feeders de notícias com filtros sobre política ou mensagens para a abertura de cofres em sistemas de segurança bancário. Normalmente, condições de tempo real estão envolvidas em cenários de missão crítica, mas não são obrigatórias.</p>
<p>Meu ponto aqui é que não podemos considerar como Missão Crítica apenas o aspecto de desempenho e tempo de resposta envolvidos. Para algumas indústrias, outros atributos são tão importantes quanto, como o impacto financeiro, disponibilidade e riscos diversos.</p>
<p>Quão crítico é o sistema em que você está trabalhando hoje? Ele envolve riscos financeiros, riscos humanos ou riscos materiais? Qual é o impacto de uma falha em seu sistema para a execução do negócio de sua empresa? Aspectos como recuperação de falhas, tratamento de exceções, árvore de falhas, etc., tornam-se importantes em muitos casos.</p>
<p>Mais recentemente, tenho acompanhado a plataforma Microsoft e seu suporte para aplicações de missão crítica em diferentes níveis.</p>
<p>Existem diversos recursos que atendem esses cenários, seja sobre a plataforma .NET ou mesmo sobre código não gerenciado, com processos em C++ sobre Windows Server. No ambiente gerenciado, recursos como interfaces de serviços em WCF – Windows Communication Foundation, mensageria com MSMQ, paralelismo, sincronização e sistemas de integração com baixa latência são alguns exemplos. Em todos os casos, o impacto para o negócio da empresa está presente.</p>
<p>Em breve, teremos ainda novos recursos disponíveis na plataforma, como o Dublin (para hospedagem de serviços e processos sobre o Windows Server), o Velocity (para cache distribuído e aplicações de alto desempenho), os novos WCF 4 e WF 4, além da integração com a plataforma de alta escalabilidade e disponibilidade do Windows Azure, que já está em contagem regressiva para seu lançamento, agora em novembro de 2009.</p>
<p>Finalizando, procure identificar em quais cenários de Missão Crítica você está pessoalmente envolvido e como será a evolução destes nos próximos meses. Você vai perceber que sua TI tem um impacto direto para o sucesso de sua empresa!</p>
<p>Um abraço!</p>
<p>Waldemir Cambiucci<br />
Blog: <a href="http://blogs.msdn.com/wcamb/">http://blogs.msdn.com/wcamb/</a><br />
Twitter: <a href="http://twitter.com/wcamb/">http://twitter.com/wcamb/</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.profissionaisti.com.br/2009/11/exemplos-de-projetos-de-missao-critica/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>TDD &#8211; Test-driven Development + C# &#8211; Parte III</title>
		<link>http://www.profissionaisti.com.br/2009/11/tdd-test-driven-development-c-parte-iii/</link>
		<comments>http://www.profissionaisti.com.br/2009/11/tdd-test-driven-development-c-parte-iii/#comments</comments>
		<pubDate>Thu, 05 Nov 2009 09:00:51 +0000</pubDate>
		<dc:creator>Vinicius Quaiato</dc:creator>
				<category><![CDATA[Engenharia de Software]]></category>
		<category><![CDATA[Metodologias]]></category>
		<category><![CDATA[C#]]></category>
		<category><![CDATA[TDD]]></category>
		<category><![CDATA[Testes]]></category>

		<guid isPermaLink="false">http://www.profissionaisti.com.br/?p=4656</guid>
		<description><![CDATA[Vamos lá galera, vamos continuar nossa série sobre TDD + C#.
Para conferir os outros posts da série:
Parte I - http://viniciusquaiato.com/blog/index.php/tdd-test-driven-development-c/
Parte II - http://viniciusquaiato.com/blog/index.php/tdd-test-driven-development-c-parte-ii/
Neste artigo abordaremos depósitos.
A primeira coisa que precisamos fazer para realizar nosso depósito é escrever um teste:
[TestMethod]
public void Deve_Realizar_Deposito()

{

    var conta = new ContaBancaria(10);

    conta.Depositar(10);

}
Este método ainda nem compila, afinal [...]]]></description>
			<content:encoded><![CDATA[<p>Vamos lá galera, vamos continuar nossa série sobre <a href="http://dojofloripa.wordpress.com/2007/09/10/tudo-sobre-tdd/">TDD</a> + C#.</p>
<p>Para conferir os outros posts da série:<br />
Parte I - <a href="http://viniciusquaiato.com/blog/index.php/tdd-test-driven-development-c/">http://viniciusquaiato.com/blog/index.php/tdd-test-driven-development-c/</a><br />
Parte II - <a href="http://viniciusquaiato.com/blog/index.php/tdd-test-driven-development-c-parte-ii/">http://viniciusquaiato.com/blog/index.php/tdd-test-driven-development-c-parte-ii/</a></p>
<p><strong>Neste artigo abordaremos depósitos.</strong></p>
<p>A primeira coisa que precisamos fazer para realizar nosso depósito é escrever um teste:</p>
<pre class="brush: csharp;">[TestMethod]
public void Deve_Realizar_Deposito()

{

    var conta = new ContaBancaria(10);

    conta.Depositar(10);

}</pre>
<p>Este método ainda nem compila, afinal precisamos implementar o método Depositar na classe ContaBancaria.<br />
E o resultado deve ser este (lembrando que fazemos o mínimo para o programa compilar e rodarmos o teste):</p>
<pre class="brush: csharp;">public void Depositar(decimal valorDoDeposito)

{

}</pre>
<p>Agora vamos executar todos os nossos testes. É importante executarmos todos os testes para garantir que tudo funciona:</p>
<p style="text-align: center;"><img class="aligncenter" style="margin-top: 0px; margin-bottom: 0px; padding: 0px;" src="http://viniciusquaiato.com/blog/wp-content/uploads/2009/11/TDD_Realizando_testes.jpg" alt="TDD Realizando testes" width="398" height="130" /></p>
<p>Percebam também a importância de um nome descritivo para os testes. Desta forma podemos saber exatamente o que está sendo garantido com aquele teste.</p>
<p>Agora conseguimos um verde, afinal nosso teste apenas garante um depósito. Vamos prosseguir criando um teste para verificar se o valor depositado foi somado ao saldo:</p>
<pre class="brush: csharp;">[TestMethod]
public void Deve_Realizar_Deposito_de_5_Em_Conta_Com_Saldo_10_E_Saldo_Deve_Ficar_15()

{

    var conta = new ContaBancaria(10);

    conta.Depositar(5);

    Assert.AreEqual(15, conta.SaldoAtual);

}</pre>
<p>E ao rodarmos nossos testes temos:</p>
<p style="text-align: center;"><img class="aligncenter" style="margin-top: 0px; margin-bottom: 0px; padding: 0px;" src="http://viniciusquaiato.com/blog/wp-content/uploads/2009/11/TDD_realizando_tetses_obtendo_erro.jpg" alt="TDD realizando tetses obtendo erro" width="425" height="130" /></p>
<p>O erro é bem claro: diz que estávamos esperando 15 e o resultado foi 10. Isso por que nosso método de depósito não possui nenhuma implementação.<br />
Agora vamos alterar o código para que consigamos um verde nos testes:</p>
<pre class="brush: csharp;">public void Depositar(decimal valorDoDeposito)

{

    this.SaldoAtual = 15;

}</pre>
<p>E executando nossos testes:</p>
<p style="text-align: center;"><img class="aligncenter" style="margin-top: 0px; margin-bottom: 0px; padding: 0px;" src="http://viniciusquaiato.com/blog/wp-content/uploads/2009/11/TDD_obtendo_um_verde_nos_testes.jpg" alt="TDD obtendo um verde nos testes" width="425" height="130" /></p>
<p>Agora que conseguimos um verde, devemos escrever mais testes para garantir que tudo funciona:</p>
<pre class="brush: csharp;">[TestMethod]
public void Deve_Realizar_Deposito_de_10_Em_Conta_Com_Saldo_10_E_Saldo_Deve_Ficar_20()

{

    var conta = new ContaBancaria(10);

    conta.Depositar(10);

    Assert.AreEqual(20, conta.SaldoAtual);

}</pre>
<p>E rodando nossos testes temos:</p>
<p style="text-align: center;"><img class="aligncenter" style="margin-top: 0px; margin-bottom: 0px; padding: 0px;" src="http://viniciusquaiato.com/blog/wp-content/uploads/2009/11/TDD_obtendo_erro_em_segundo_teste.jpg" alt="TDD obtendo erro em segundo teste" width="425" height="130" /></p>
<p>Isso mostra que o código que escrevemos para o teste anterior passar deve ser alterado para que todos os testes passem. Desta forma obtemos o seguinte código no método Depositar:</p>
<pre class="brush: csharp;">public void Depositar(decimal valorDoDeposito)

{

    this.SaldoAtual += valorDoDeposito;

}</pre>
<p>Agora precisamos executar todos nossos testes para ver se tudo está ok:</p>
<p style="text-align: center;"><img class="aligncenter" style="margin-top: 0px; margin-bottom: 0px; padding: 0px;" src="http://viniciusquaiato.com/blog/wp-content/uploads/2009/11/TDD_todos_testes_verdes.jpg" alt="TDD todos testes verdes" width="425" height="130" /></p>
<p>Bom galera, espero ter mostrado mais um pouco de TDD para vocês.</p>
<p>Na próxima parte do artigo abordaremos como testar a interação com um repositório de contas.</p>
<p>Abraços e até a próxima.</p>
<p>Original em: <a href="http://www.viniciusquaiato.com" target="_blank">http://www.viniciusquaiato.com</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.profissionaisti.com.br/2009/11/tdd-test-driven-development-c-parte-iii/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Quanto vale o software que você produz? Boa pergunta, hein?!</title>
		<link>http://www.profissionaisti.com.br/2009/06/quanto-vale-o-software-que-voce-produz-boa-pergunta-hein/</link>
		<comments>http://www.profissionaisti.com.br/2009/06/quanto-vale-o-software-que-voce-produz-boa-pergunta-hein/#comments</comments>
		<pubDate>Wed, 10 Jun 2009 09:00:17 +0000</pubDate>
		<dc:creator>Jackson Caset</dc:creator>
				<category><![CDATA[Desenvolvimento]]></category>
		<category><![CDATA[Dia-a-Dia]]></category>
		<category><![CDATA[Dinheiro]]></category>
		<category><![CDATA[Engenharia de Software]]></category>
		<category><![CDATA[Metodologia]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[Valor]]></category>

		<guid isPermaLink="false">http://www.profissionaisti.com.br/?p=2657</guid>
		<description><![CDATA[Estive na semana passada discutindo com meus sócios algo que, eu creio, já tenha sido discutido no mínimo uma vez em qualquer empresa de desenvolvimento de software: quanto vale nosso software?
Buscando na web, encontrei um artigo bacana escrito por José Carlos Macoratti no qual estarei abaixo compartilhando com vocês com o consentimento do próprio autor.
Se [...]]]></description>
			<content:encoded><![CDATA[<p>Estive na semana passada discutindo com meus sócios algo que, eu creio, já tenha sido discutido no mínimo uma vez em qualquer empresa de desenvolvimento de software: quanto vale nosso software?</p>
<p>Buscando na web, encontrei um artigo bacana escrito por <strong><a href="http://www.macoratti.net/eng_qvs.htm" target="_blank">José Carlos Macoratti</a></strong> no qual estarei abaixo compartilhando com vocês com o consentimento do próprio autor.</p>
<p>Se você é um desenvolvedor de software , quer como consultor independente quer trabalhando em uma empresa de desenvolvimento de software , com certeza já ouviu muitas vezes as seguintes indagações:</p>
<h3>Quanto custa o desenvolvimento deste sistema?  ou Quanto você cobra para desenvolver este sistema? </h3>
<h3>Qual o prazo de entrega do sistema? ou Quanto tempo você leva para desenvolver este sistema?</h3>
<p align="left">Isto é perfeitamente normal e previsível , afinal um cliente tem o direito de saber quanto vai custar e em quanto tempo vai ficar pronto o produto que ele deseja receber.</p>
<p align="left">O que não é normal é o fato de que mesmo convivendo com estas indagações no seu dia dia a tanto tempo , você , quer como gerente de projeto ou desenvolvedor , não ter condições de responder com segurança a nenhuma delas.</p>
<p align="left">Quando você contrata o serviço de um pedreiro , ele , após saber exatamente o que tem que fazer faz alguns cálculos e lhe da o preço final do seu trabalho. O mesmo ocorre nas áreas de engenharia civil , mecânica , etc.</p>
<p align="left">Por que é tão difícil estimar o valor de um projeto de software ? Por que é tão complexo fazer estimativas nesta área ?</p>
<p align="left">Seria porque software não têm peso , nem cheiro ? ou seria o fato de que não vemos e nem sentimos um software ?</p>
<p align="left">Creio que as respostas a estas indagações seriam feitas se você soubesse responder a seguinte pergunta:</p>
<h3>Qual o tamanho do sistema?</h3>
<p align="left">Para saber o tamanho do sistema é necessário realizar medições ou medidas. Certo ?</p>
<p align="left">Certo, pois, &#8220;não se consegue controlar o que não se consegue medir&#8221;. (Tom DeMarco)</p>
<p align="left">A métrica é o número que você vincula a uma idéia. Para o projeto de software comum , os aspectos quantitativos onde mais precisamos usar a métrica são:  <span style="color: #0000ff;">escopo, tamanho, custo, risco e tempo empregado.[1]</span></p>
<p align="left">Para que a métrica usada seja útil ela deve possuir as seguintes características: <span style="color: #0000ff;">ser mensurável , ser independente, ser explicável e precisa.</span></p>
<p align="left">Creio que agora você concorda em que há fortes motivos para medir o seu sistema , dentre estes motivos temos:</p>
<ul>
<li>
<div>Fornecer subsídios para determinar o esforço, os recursos, a duração e os custos de desenvolvimento</div>
</li>
<li>
<div>Avaliar a produtividade do processo de desenvolvimento adotado</div>
</li>
<li>
<div>Formar uma base histórica para embasar estimativas futuras</div>
</li>
<li>
<p align="left">Indicar a qualidade do produto</p>
</li>
</ul>
<p align="left">Então qual a medida que você deve usar para determinar o tamanho do seu sistema ?</p>
<h3>Tipos de medidas de tamanho de software</h3>
<p align="left"><strong>1- SLOC &#8211; linhas de código</strong></p>
<p align="left">Medir software contando as linhas de código (SLOC) é uma das medidas mais antigas para determinar o tamanho, esforço e produtividade no desenvolvimento de software.</p>
<p align="left">È muito fácil de usar e aplicar; basta contar a quantidade do número de linhas de código de um programa.</p>
<p align="left">A medida de SLOC é considerada uma medida física do tamanho de software por medir o volume de código-fonte de um programa.</p>
<p align="left">Ela tem no entanto as seguintes desvantagens :</p>
<ul>
<li>Depende da linguagem de programação usada (o número de linhas de um programa Cobol é totalmente diferente de um em Java)</li>
<li>Ausência de padrões de contagem. (Cada linguagem possui suas características de sintaxe e semântica)</li>
<li>
<p align="left">Não pode ser aplicada nas fases iniciais de desenvolvimento (No início o programa ainda não esta escrito)</p>
</li>
</ul>
<p align="left">Nota: No site <a href="http://sunset.usc.edu/research/COCOMOII/" target="_blank">http://sunset.usc.edu/research/COCOMOII/</a> você pode fazer o download de um aplicativo demo da Softstar para realizar estimativas de tamanho usando SLOC.</p>
<p align="left"><strong>2- APF &#8211; Análise de Pontos por função</strong></p>
<p align="left">Podemos dizer que atualmente á a técnica mais usada para medir o tamanho de projetos de software. Foi criada por Alan Albrecht na IBM na década de 70 e consiste em determinar o tamanho funcional (o que é entregue) do sistema através da visão do usuário.</p>
<p align="left">Ela possui as seguintes vantagens:</p>
<ul>
<li>Independe da tecnologia utilizada</li>
<li>É simples de usar e ser entendida pelo usuário e desenvolvedores</li>
<li>é consistente e intercambiável</li>
<li>Pode ser utilizada desde o início do sistema.</li>
</ul>
<p align="left">A APF (Análise de Pontos por Função) pode ser vista como um técnica que permite dimensionar o tamanho de um software a ser desenvolvido , melhorado ou adquirido; e também um técnica para realizar estimativas de custo e recursos para o desenvolvimento e manutenção de software.</p>
<p align="left">A utilização da APF esta normalizada em um manual de contagem de pontos de função da IFPUG (<a href="http://www.ifpug.org/">International Function Point Users Group</a>) constituída em 1996.</p>
<p align="left">Obs: O chapter do IFPUG no Brasil é o BFPUG &#8211; <a href="http://www.bfpug.com.br/" target="_blank">Brazilian Function Point Users Group</a>. (Constituído em 1998)</p>
<p align="left">O esquema do processo de contagem de pontos por função é dado na figura abaixo:</p>
<p style="text-align: center;" align="left"><span style="font-family: Verdana; font-size: x-small;"><a href="http://www.profissionaisti.com.br/wp-content/uploads/2009/06/apf_pc1.jpg"><img class="aligncenter size-medium wp-image-2658" title="Esquema do processo de contagem de pontos por função!" src="http://www.profissionaisti.com.br/wp-content/uploads/2009/06/apf_pc1-300x108.jpg" alt="Esquema do processo de contagem de pontos por função!" width="300" height="108" /></a></span></p>
<p align="justify">Para que você tenha uma idéia dos PF como medida de volume de software abaixo é apresentada uma tabela que mostra o tamanho aproximado de algumas aplicações tipos em pontos por função.[2]</p>
<table border="1" cellspacing="2" cellpadding="5" width="542">
<tbody>
<tr>
<td width="40%" valign="top" bgcolor="#ffff00">
<p align="center">Aplicação</p>
</td>
<td width="10%" valign="top" bgcolor="#ffff00">
<p align="right">PF</p>
</td>
<td width="35%" valign="top" bgcolor="#ffff00">
<p align="center">Aplicação</p>
</td>
<td width="10%" valign="top" bgcolor="#ffff00">
<p align="right">PF</p>
</td>
</tr>
<tr>
<td width="40%" valign="top"><strong>1. Produtos de Software</strong></td>
<td width="10%" valign="top"> </td>
<td width="35%" valign="top"><strong>2. Sist. Comerciais Diversos</strong></td>
<td width="10%" valign="top"> </td>
</tr>
<tr>
<td width="40%" valign="top">
<p align="justify">Ferramenta CASE IEF (Texas)</p>
</td>
<td width="10%" valign="top">
<p align="right">20.000</p>
</td>
<td width="35%" valign="top">
<p align="justify">Imposto de Renda Pessoal</p>
</td>
<td width="10%" valign="top">
<p align="right">2.000</p>
</td>
</tr>
<tr>
<td width="41%" valign="top">
<p align="justify">Compilador Visual Basic (Microsoft)</p>
</td>
<td width="10%" valign="top">
<p align="right">3.000</p>
</td>
<td width="38%" valign="top">
<p align="justify">Contabilidade Geral</p>
</td>
<td width="10%" valign="top">
<p align="right">1.500</p>
</td>
</tr>
<tr>
<td width="41%" valign="top">
<p align="justify">SGBD IMS (IBM)</p>
</td>
<td width="10%" valign="top">
<p align="right">3.500</p>
</td>
<td width="38%" valign="top">
<p align="justify">Processamento de Pedidos</p>
</td>
<td width="10%" valign="top">
<p align="right">1.250</p>
</td>
</tr>
<tr>
<td width="41%" valign="top">
<p align="justify">Gerenciador de TP CICS (IBM)</p>
</td>
<td width="10%" valign="top">
<p align="right">2.000</p>
</td>
<td width="38%" valign="top">
<p align="justify">Recursos Humanos</p>
</td>
<td width="10%" valign="top">
<p align="right">1.200</p>
</td>
</tr>
<tr>
<td width="41%" valign="top">
<p align="justify">Word 7.0 (Microsoft)</p>
</td>
<td width="10%" valign="top">
<p align="right">2.500</p>
</td>
<td width="38%" valign="top">
<p align="justify">Suporte a Vendas</p>
</td>
<td width="10%" valign="top">
<p align="right">975</p>
</td>
</tr>
<tr>
<td width="41%" valign="top">
<p align="justify">Excel 6.0 (Microsoft)</p>
</td>
<td width="10%" valign="top">
<p align="right">2.500</p>
</td>
<td width="38%" valign="top">
<p align="justify">Preparação de Orçamento</p>
</td>
<td width="10%" valign="top">
<p align="right">750</p>
</td>
</tr>
<tr>
<td width="41%" valign="top">
<p align="justify">MS Project (Microsoft)</p>
</td>
<td width="10%" valign="top">
<p align="right">3.000</p>
</td>
<td width="38%" valign="top"> </td>
<td width="10%" valign="top"> </td>
</tr>
</tbody>
</table>
<p align="left">Eu não vou dar detalhes sobre como usar o manual de contagem mas vou dar um exemplo de como você pode usar o resultado obtido usando a APF para estimar esforço , prazo e custo de um software.</p>
<p align="left">Vamos supor que você foi consultado sobre o desenvolvimento de um sistema <strong>cadastro de clientes</strong> onde é possível realizar as seguintes tarefas:</p>
<ul>
<li>Listagem por ordem alfabética</li>
<li>exportar o cadastro para outro sistema via arquivo texto</li>
</ul>
<p align="left">Usando o manual de contagem da APF teríamos:</p>
<p align="left"><strong>ALI &#8211; 01 ( o arquivo de clientes )<br />
AIE &#8211;  0<br />
EE &#8211;  01 ( inclusão de cliente )<br />
SE &#8211;  01 ( listagem por ordem alfabética )<br />
CE &#8211;  01 ( exportar arquivo texto)</strong>
</p>
<p align="left">Se considerarmos todos os tipos de função como de complexidade <strong>Baixa</strong> teremos:</p>
<p align="left">Pontos de função Brutos não ajustados :</p>
<p align="left"><span style="color: #ff0000;">PFB = ALI x 7 + AIE x 5 + EE x 3 + SE x 4 + CE x 3 = 1 x 7 + 0 x 5 + 1 x 3 + 1 x 4 + 1 x 3 = 17</span></p>
<p align="left">Contando os fatores de ajustes  teremos um total igual a 45.</p>
<p align="left">Valor de fator de ajuste :</p>
<p align="left"><span style="color: #ff0000;">VFA =  0,65  + (0,001 x 45 ) = 1.1 </span></p>
<p align="left">Valor dos pontos de função Ajustados:</p>
<p align="left"><span style="color: #ff0000;">PFA = VFA  x  PFB =  1,1 x  17  = 18,7</span></p>
<p align="left">Pronto!</p>
<p align="left">Usando APF chegamos ao tamanho do sistema.</p>
<p align="left"><span style="color: #ff0000;">O seu tamanho é 18,7 pontos por função.</span></p>
<p align="left"><strong>E agora ?</strong></p>
<p align="left"><strong>Nota:</strong>  <em>Dizer que o tamanho de um projeto é de 1000 PF nada significa.  Quando podemos comparar medidas feitas em APF é que as coisas começam a fazer sentido. Assim se temos dois projetos , um com 1000 PF e outro com 2000 PF, podemos concluir que o segundo temo o dobro do tamanho do primeiro.</em></p>
<p align="left"><em>Assim como dizer que uma construção possui 400 metros quadrados de área construída não nos permite estimar , apenas levando em conta esta medida , valor da mesma;  dizer que um projeto possui 3000 PF também não nos dá a idéia do custo do projeto.</em></p>
<p align="left">Agora podemos estimar <strong>esforço , prazo e custo</strong>. Para isto iremos usar as seguintes considerações:</p>
<p align="left">1- Considerando que uma produtividade média de 10 hs / PF.</p>
<p align="left">2- Considerando que a média de jornada de trabalho é de 6 horas.</p>
<p align="left">3- Considerando que o valor de uma hora de trabalho é de R$ 25,00.</p>
<p align="left">Concluímos que :</p>
<p align="left"><strong>Esforço =  10hs / PF  =   10 x 18,7 =  187 horas<br />
Prazo =   187 h / ( 4 x 6 ) =  7,8 dias<br />
Custo =  187 h x R$ 25,00 = R$ 4.675,00</strong>
</p>
<p align="left">Foram usadas as seguintes fórmulas:</p>
<p align="left"><span style="color: #ff0000;">Produtividade no desenvolvimento = Horas por PF<br />
Esforço de desenvolvimento = Produtividade(H/PF) * Tamanho(PF)<br />
Custo de software = Tamanho (PF) * Custo(R$/PF)</span>
</p>
<p align="left">Neste artigo procurei abordar de forma simples e objetiva a importância da utilização de métricas no desenvolvimento de projetos software com a finalidade de realizar estimativas.</p>
<p align="left">A métrica de software e suas implicações é um assunto muito vasto que você poderá pesquisar nos links dos sites indicados e também em:</p>
<p align="left">NESMA &#8211; <a href="http://www.nesma.nl/english/nesma&amp;ifpug.htm" target="_blank">http://www.nesma.nl/english/nesma&amp;ifpug.htm</a><br />
COCOMO &#8211; <a href="http://www1.jsc.nasa.gov/bu2/COCOMO.html" target="_blank">http://www1.jsc.nasa.gov/bu2/COCOMO.html</a><br />
FATHO &#8211; <a href="http://www.fattocs.com.br/" target="_blank">http://www.fattocs.com.br/</a><br />
Aplicativo para auxiliar na contagem APF &#8211; <a href="http://www.bsb.netium.com.br/mecenas/apf.htm" target="_blank">http://www.bsb.netium.com.br/mecenas/apf.htm</a>
</p>
<p align="left">Por enquanto lembre-se sempre que :</p>
<p align="left"><em>&#8220;Se você não sabe para onde deseja ir , um mapa não vai lhe ajudar.&#8221;</em></p>
<p align="left">Referências</p>
<p align="left">[1] &#8211; DeMarco, Tom &#8211; Controle de projetos de Software &#8211; Editora Campus, 1991.<br />
[2] &#8211; Jones, Capers &#8211; Estimating Sofware Costs &#8211; McGraw-Hill, 1998. Veja também <a href="http://www.spr.com/">www.spr.com</a> site da empresa do autor.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.profissionaisti.com.br/2009/06/quanto-vale-o-software-que-voce-produz-boa-pergunta-hein/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
	</channel>
</rss>
