<?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>Fri, 10 Feb 2012 16:02:41 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
		<item>
		<title>Processos de Software &#8211; Produtividade e Padronização no Desenvolvimento</title>
		<link>http://www.profissionaisti.com.br/2012/01/processos-de-software-produtividade-e-padronizacao-no-desenvolvimento/</link>
		<comments>http://www.profissionaisti.com.br/2012/01/processos-de-software-produtividade-e-padronizacao-no-desenvolvimento/#comments</comments>
		<pubDate>Tue, 24 Jan 2012 11:43:41 +0000</pubDate>
		<dc:creator>Rafael Amaral</dc:creator>
				<category><![CDATA[Desenvolvimento]]></category>
		<category><![CDATA[Engenharia de Software]]></category>
		<category><![CDATA[Metodologias]]></category>
		<category><![CDATA[Produtividade]]></category>
		<category><![CDATA[programação]]></category>
		<category><![CDATA[Software]]></category>

		<guid isPermaLink="false">http://www.profissionaisti.com.br/?p=20783</guid>
		<description><![CDATA[No artigo anterior sobre Processos de Software e a Qualidade do Produto, foi dito que ter grandes experiências, excelentes conhecimentos técnicos em programação, modelagem de banco de dados, tendências, etc., não são suficientes para gerar um produto de software de qualidade. Tendo em vista todo este otimismo, muitos projetos falham na entrega de suas funcionalidades [...]]]></description>
			<content:encoded><![CDATA[<p style="text-align: justify;">No artigo anterior sobre <a title="Processo de Software e a Qualidade de Produto" href="http://www.profissionaisti.com.br/2011/11/processo-de-software-e-a-qualidade-de-produto/" target="_blank">Processos de Software e a Qualidade do Produto</a>, foi dito que ter grandes experiências, excelentes conhecimentos técnicos em programação, modelagem de banco de dados, tendências, etc., não são suficientes para gerar um produto de software de qualidade. Tendo em vista todo este otimismo, muitos projetos falham na entrega de suas funcionalidades e até mesmo são interrompidos antes de sua conclusão. Pois extrapolam prazos de entrega, geram custos bem acima do previsto ou cobrado, desmotivação da equipe de desenvolvimento recorrente as correções constantes de falhas, alteração de membros da equipe,  o cliente muda frequentemente de opinião e o principal, a insatisfação dele por ter um produto fora de conformidade.</p>
<p style="text-align: justify;"><strong>Então, o que fazer?</strong></p>
<p style="text-align: justify;">A solução estaria então em adotar um <strong>Processo de Software</strong> bem definido. Muitos são os tipos de <strong>processos</strong> e muitas são as necessidades de equipes e das empresas em ter e utilizar um bom <strong>Processo de Software</strong> a fim de adquirir organização e qualidade em seus produtos, respeitando prazos de cronograma, administrando esforços de equipe, obtendo mais produtividade e padronização de desenvolvimento.</p>
<p style="text-align: justify;">Porém, não acredito que exista um único <strong>processo</strong> perfeito para o desenvolvimento de software, ou seja, para adquirir um bom <strong>processo</strong>, deve ser levado em consideração fatores como:</p>
<ul style="text-align: justify;">
<li>Tipo de software que está desenvolvendo;</li>
<li>Tamanho de equipe (desenvolvedor único, dois desenvolvedores, equipe pequena, equipe com mais de 100 membros);</li>
<li>Infraestrutura;</li>
<li>Capital investido;</li>
<li>Entre outros.</li>
</ul>
<p style="text-align: justify;">Entre diversos tipos de <strong>Processos de Softwares</strong>, destacam-se os modelos em Cascata (CMMI), Espiral, Iterativos (PU – Processo Unificado) e os <strong>modelos Ágeis</strong> (XP, Scrum).</p>
<p style="text-align: justify;">Mas por que utilizar um <strong>Processo de Software</strong>?</p>
<p style="text-align: justify;"><img class="aligncenter" title="Rafael Amaral - Processos de Software" src="http://www.rafaelamaral.com.br/images_gerente/image/rafael-amaral-processos-de-software.jpg" alt="Rafael Amaral - Processos de Software" width="452" height="247" /></p>
<p style="text-align: justify;">Dentre alguns fatores, podemos definir que o <strong>Processo de Software</strong> visa à qualidade do produto como um todo, onde é estabelecida a lógica do domínio da aplicação para o projeto decidindo seu scopo e comprometimento do Patrocinador, levantamento dos requisitos, riscos de projeto, padronização de desenvolvimento, construção do modelo e prototipagem, implementação sistemática de testes, feedback do cliente, revisões técnicas, gerência de configuração, etc. Porém, todo este conjunto (o <strong>Processo</strong>) não basta apenas ser implementado, ou seja, deve-se ter o gerenciamento do <strong>processo</strong> como um todo a fim de garantir que ele esteja sendo executado corretamente por seus envolvidos.</p>
<p style="text-align: justify;">Em outras palavras, o <strong>Processo de Software</strong> não é uma tarefa simples de implementar numa organização. Ele “afeta” diretamente seus envolvidos, no qual em alguns casos, são obrigados a saírem de suas zonas de conforto. O <strong>processo</strong> também confronta a cultura de uma empresa, e todo este conjunto gera uma certa resistência dos envolvidos em colaborar para o sucesso do mesmo.</p>
<p style="text-align: justify;">Meu artigo não é de forma alguma induzir o leitor a optar para um <strong>processo</strong> X ou Y, mas sim avaliar o nível caótico de não se utilizar um <strong>processo</strong> e os benefícios conquistados com sua aplicação.</p>
<p style="text-align: justify;">Particularmente, um dos <strong>modelos</strong> que mais me apego são os <strong>modelos Ágeis</strong>, devido a suas práticas, valores e por serem iterativos.</p>
<p style="text-align: justify;">Os modelos iterativo e evolutivo envolvem a imediata programação e teste de um sistema e considera que o desenvolvimento começa antes que os requisitos tenham sido definidos em detalhes. Evitando assim grandes desgastes e desmotivação na fase inicial.</p>
<p style="text-align: justify;">Nesta abordagem de ciclo de vida, o desenvolvimento é organizado em uma série de mini projetos curtos, de duração fixa chamadas de iterações. O produto de cada um é um sistema parcial, executável, testável e integrável. Cada iteração inclui suas próprias atividades de <a title="A análise de sistemas na construção de softwares" href="http://www.profissionaisti.com.br/2011/10/a-analise-de-sistemas-na-construcao-de-softwares/" target="_blank">análise</a> de requisitos, projeto, implementação e teste. No <strong>modelo Ágil</strong>, os detalhes de requisitos são acrescentados no decorrer do <strong>processo</strong>, utilizando assim, a modelagem na perspectiva de principalmente entender o que foi pedido e não documentar.</p>
<p style="text-align: justify;">Ao contrário, nos <strong>modelos</strong> em cascatas (ou sequencial), há uma tentativa de definir em detalhes todos ou a maioria dos requisitos antes da programação e também de criar um projeto abrangente, antes da programação. Igualmente, há uma tentativa de definir um plano ou cronograma confiável logo no início. Outro ponto a ser avaliado, é que neste <strong>modelo</strong>, modificações tardias de requisitos não são bem vindas. Deve levar-se em conta que custos de operações aqui são bem mais altos e é um modelo muito burocrático.</p>
<p style="text-align: justify;">Apesar do meu apego ao <strong>modelo Ágil</strong>, o ideal é que as equipes criem seu próprio <strong>Processo de Software</strong>, olhando na perspectiva de não diminuir o valor de outros métodos e sim, agregando as boas práticas mais comuns que atendam as suas necessidades dentro da sua realidade, não se esquecendo de manter um contínuo amadurecimento do <strong>processo</strong> como um todo.</p>
<p style="text-align: justify;">Fonte: <a href="http://www.rafaelamaral.com.br/" target="_blank">Blog Rafael Amaral</a><br />
Twitter: <a href="http://twitter.com/#%21/rafaelamaralll" target="_blank">@rafaelamaralll</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.profissionaisti.com.br/2012/01/processos-de-software-produtividade-e-padronizacao-no-desenvolvimento/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Análise de Sistemas &#8211; Casos de Uso</title>
		<link>http://www.profissionaisti.com.br/2012/01/analise-de-sistemas-casos-de-uso/</link>
		<comments>http://www.profissionaisti.com.br/2012/01/analise-de-sistemas-casos-de-uso/#comments</comments>
		<pubDate>Mon, 09 Jan 2012 10:40:36 +0000</pubDate>
		<dc:creator>Rafael Amaral</dc:creator>
				<category><![CDATA[Desenvolvimento]]></category>
		<category><![CDATA[Engenharia de Software]]></category>
		<category><![CDATA[Gestão]]></category>
		<category><![CDATA[programação]]></category>
		<category><![CDATA[Software]]></category>

		<guid isPermaLink="false">http://www.profissionaisti.com.br/?p=20648</guid>
		<description><![CDATA[Desde que iniciei meus estudos em Análise de Sistemas, não consigo imaginar uma situação ao qual não usaria Casos de Uso na construção de software. Pois sem dúvida, podemos defini-los como uma ferramenta essencial na captura de requisitos, no planejamento e no controle de um projeto. Um assunto sempre polêmico, mesmo ainda iniciante nesta área, [...]]]></description>
			<content:encoded><![CDATA[<p style="text-align: justify;">Desde que iniciei meus estudos em <a title="Análise de Sistema na Construção de Software" href="http://www.profissionaisti.com.br/2011/10/a-analise-de-sistemas-na-construcao-de-softwares/" target="_blank"><strong>Análise de Sistemas</strong></a>, não consigo imaginar uma situação ao qual não usaria <strong>Casos de Uso</strong> na construção de software. Pois sem dúvida, podemos defini-los como uma ferramenta essencial na captura de <strong>requisitos</strong>, no planejamento e no controle de um projeto.</p>
<p style="text-align: justify;">Um assunto sempre polêmico, mesmo ainda iniciante nesta área, tenho visto algumas definições diversificadas de profissionais (especialistas ou não) sobre o tema.</p>
<p style="text-align: justify;">Alguns definem <strong>Casos de Uso</strong> apenas em sua notação gráfica (os diagramas), porém, <strong>Casos de Uso</strong> vão muito além. <strong>Casos de Uso</strong> são elementos primários no <a href="http://www.profissionaisti.com.br/category/desenvolvimento/">desenvolvimento</a> e planejamento do projeto. Ele facilita o entendimento e a comunicação com o stakeholder, pois <strong>Casos de Uso</strong> representam uma visão externa do sistema e aplicando uma boa técnica na sua utilização, eles são com certeza uma melhor maneira de levantar bons <a href="http://www.profissionaisti.com.br/2011/06/levantamento-de-requisitos-voce-sabe-o-que-e/"><strong>requisitos de sistema</strong></a>. Em outras palavras, <strong>Casos de Uso</strong> descrevem o comportamento do sistema sob diversas condições conforme o sistema responde a uma requisição de um ator primário, no qual este (ator primário) inicia uma interação com o sistema para atingir algum objetivo.</p>
<p style="text-align: justify;">Um formato simples para captura de um <strong>Caso de Uso</strong> consiste na descrição de seu cenário primário como uma sequência de passos numerados e as alternativas como variações naquela sequência.</p>
<p style="text-align: justify;">Existe muita variação no modo como você pode descrever os conteúdos de um <strong>Caso de Uso</strong>, porém, a UML não especifica padrão algum. Mas, acrescente informações sempre que julgar necessárias, principalmente, vendo isto pela perspectiva do risco, ou seja, acrescente detalhes de acordo com o grau de risco, quanto maior o risco, mais detalhes você precisa. Mas, não se desespere em detalhes, ou seja, entre neles aos poucos durante sua elaboração e durante as iterações, vá acrescentando mais detalhes à medida do necessário. Porém, chamo sua atenção para a simplicidade, pois um <strong>Caso de Uso</strong> bem escrito é fácil de ler, porém, aprender a escrever um bom caso de uso é difícil.</p>
<p style="text-align: justify;">Mas, o que é realmente, um<strong> Caso de Uso</strong>?</p>
<p style="text-align: center;"><a href="http://www.rafaelamaral.com.br//images_gerente/image/rafael-amaral-casos-de-uso.jpg"><img class="aligncenter" title="Rafael Amaral - Casos de Uso" src="http://www.rafaelamaral.com.br//images_gerente/image/rafael-amaral-casos-de-uso.jpg" alt="Rafael Amaral - Casos de Uso" width="522" height="314" /></a></p>
<p style="text-align: justify;">Um <strong>Caso de Uso</strong> captura um contrato entre os stakeholders de um sistema sobre o seu comportamento. Um <strong>Caso de Uso</strong> descreve o comportamento do sistema sob diversas condições conforme o sistema responde a uma requisição de um ator primário.</p>
<p style="text-align: right;"><em>Alistair Cockburn</em></p>
<p style="text-align: justify;">Uma outra definição mais compreensiva, explico primeiro o que é um cenário.<br />
<strong>Cenário:</strong> é uma sequência de passos que descreve uma interação entre um usuário e um sistema.</p>
<p style="text-align: justify;"><strong>Caso de Uso</strong>, então, é um conjunto de cenários amarrados por um objetivo comum de um usuário.</p>
<p style="text-align: right;"><em>Martin Folwer</em></p>
<p style="text-align: justify;">Finalizando, <strong>Casos de Uso</strong> têm uma grande importância na construção de projeto e é um assunto para mais de &#8220;Gigas&#8221;. Sobre diversos aspectos, eles são essenciais em uma infinidade de coisas desde o início ao fim das iterações do projeto. Para iniciantes na área, dedicar-se na leitura de <a href="http://www.linuxmall.com.br/categoria/livros_programacao?afl=pti" target="_blank">bons livros</a> sobre o assunto irá fazer toda a diferença na hora de analisar e/ou dirigir um projeto.</p>
<p style="text-align: justify;">Fonte: <a href="http://www.rafaelamaral.com.br/" target="_blank">Blog Rafael Amaral</a><br />
Twitter: <a title="Rafael Amaral no Twitter" href="http://twitter.com/#!/rafaelamaralll" target="_blank">@rafaelamaralll</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.profissionaisti.com.br/2012/01/analise-de-sistemas-casos-de-uso/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Testes de software &#8211; As principais técnicas e porque realizar</title>
		<link>http://www.profissionaisti.com.br/2011/11/testes-de-software-as-principais-tecnicas-e-porque-realizar/</link>
		<comments>http://www.profissionaisti.com.br/2011/11/testes-de-software-as-principais-tecnicas-e-porque-realizar/#comments</comments>
		<pubDate>Tue, 29 Nov 2011 20:57:54 +0000</pubDate>
		<dc:creator>gabiifonseca</dc:creator>
				<category><![CDATA[Desenvolvimento]]></category>
		<category><![CDATA[Engenharia de Software]]></category>
		<category><![CDATA[programação]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[Testes]]></category>

		<guid isPermaLink="false">http://www.profissionaisti.com.br/?p=20215</guid>
		<description><![CDATA[A etapa de testes no processo de desenvolvimento de software ainda é vista com olhos ruins por muita gente. Na verdade, isso existe pelo conflito de interesses: os desenvolvedores de um lado, querendo mostrar que o seu programa é isento de falhas, e a equipe de QA do outro, buscando a qualquer custo encontrar falhas [...]]]></description>
			<content:encoded><![CDATA[<p style="text-align: justify;">A etapa de testes no processo de <a href="http://www.profissionaisti.com.br/category/desenvolvimento/">desenvolvimento</a> de software ainda é vista com olhos ruins por muita gente. Na verdade, isso existe pelo conflito de interesses: os desenvolvedores de um lado, querendo mostrar que o seu programa é isento de falhas, e a equipe de QA do outro, buscando a qualquer custo encontrar falhas no sistema.</p>
<p style="text-align: justify;">Mesmo que de certa forma tenhamos que trabalhar esses conflitos, é importante ter outra equipe que teste o que foi desenvolvido. Como já disseram por aí, &#8220;não existe filho feio para a mãe&#8221;, e o programador tem um tendência natural a achar que tudo que desenvolveu está perfeito.</p>
<p style="text-align: justify;">Contudo trabalhar com somente com uma equipe pode não resolver todos os problemas. Ainda que essa seja boa o suficiente para cumprir o seu papel, o usuário é o verdadeiro <em>tester</em>, já que é quem usará o programa no dia-a-dia. Com a ideia do usuário como <em>tester</em> surgem dois conceitos, chamados de <em>Teste Alfa</em> e <em>Teste Beta</em>.</p>
<p style="text-align: justify;">O<strong><em> Teste Alfa</em>  </strong>é aquele realizado no ambiente do desenvolvedor, mas pelo usuário final do programa. Já o <em><strong>Teste Beta </strong></em>é realizado no ambiente do cliente, sem a presença do desenvolvedor, aonde o próprio cliente relata quais são erros observados que serão posteriormente corrigidos.</p>
<p style="text-align: justify;">Os testes de software podem ainda ser classificados quanto a  técnica utilizada. Dentre eles os principais são:</p>
<ul>
<li style="text-align: justify;"><em><strong>Teste Caixa Branca: </strong></em>São os testes estruturais, baseando-se na estrutura e procedimentos utilizados no programa, analisando os laços, condições de <em>if/else. </em>Através do código (ou algoritmo) são analisados casos a busca de erros.<em><strong><br />
</strong></em></li>
<li style="text-align: justify;"><strong><em>Teste Caixa Preta</em></strong>: O teste caixa preta baseia na especificação de interface do programa, observando-se entradas e saídas, ou seja, se a saída produzida realmente condiz com a saída esperada, em relação ao que foi inserido como dado de entrada.</li>
</ul>
<p style="text-align: justify;">Existe ainda a <em><strong>Técnica Baseada em Erros</strong></em>, que se baseiam na inclusão de erros propositais (artificiais) como forma de revelar erros existentes previamente (naturais).</p>
<p style="text-align: justify;">Por fim, lembre-se: bons testes de <a href="http://www.profissionaisti.com.br/tag/software">software</a> são aqueles que apresentam maior probabilidade de revelar erros ainda não descobertos!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.profissionaisti.com.br/2011/11/testes-de-software-as-principais-tecnicas-e-porque-realizar/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Processo de Software e a Qualidade de Produto</title>
		<link>http://www.profissionaisti.com.br/2011/11/processo-de-software-e-a-qualidade-de-produto/</link>
		<comments>http://www.profissionaisti.com.br/2011/11/processo-de-software-e-a-qualidade-de-produto/#comments</comments>
		<pubDate>Tue, 29 Nov 2011 11:01:01 +0000</pubDate>
		<dc:creator>Rafael Amaral</dc:creator>
				<category><![CDATA[Desenvolvimento]]></category>
		<category><![CDATA[Engenharia de Software]]></category>
		<category><![CDATA[Qualidade]]></category>
		<category><![CDATA[Software]]></category>

		<guid isPermaLink="false">http://www.profissionaisti.com.br/?p=20332</guid>
		<description><![CDATA[Quando aprendemos a programar, tão pouco imaginamos o quanto é extenso o mundo de Processo de Software ou tão pouco sabemos que ele existe. Em alguns casos, quando somos apenas &#8220;meros&#8221; programadores, o fato de dominar uma linguagem em si e ter uma excelente lógica de programação, nos passa uma falsa segurança de achar que [...]]]></description>
			<content:encoded><![CDATA[<p style="text-align: justify;">Quando aprendemos a programar, tão pouco imaginamos o quanto é extenso o mundo de <strong>Processo de Software</strong> ou tão pouco sabemos que ele existe. Em alguns casos, quando somos apenas &#8220;meros&#8221; programadores, o fato de dominar uma linguagem em si e ter uma excelente lógica de programação, nos passa uma falsa segurança de achar que são suficientemente únicos para gerar um <strong>produto de “qualidade”</strong>.</p>
<p style="text-align: justify;">Acredito que todo bom programador já deve ter tido sua fase de modo “REC”, no qual já inicia o <a href="http://www.profissionaisti.com.br/category/desenvolvimento/">desenvolvimento</a> do código enquanto o cliente “expõe” suas ideias.</p>
<p style="text-align: justify;">No final, os resultados são sempre os mesmos. Frustrações! Produto gerado sem conformidades com o que realmente o cliente precisa, gastos excessivos com manutenções e correções, etc. Contudo, isso não quer dizer que o programador é ruim. Apenas faltou o emprego de um <strong>Processo de Software</strong>.</p>
<p style="text-align: justify;">Mas o que é afinal, um <strong>Processo de Software</strong>?</p>
<p style="text-align: justify;">Um <strong>Processo Software</strong> é um conjunto de atividades, parcialmente ordenadas com a finalidade de obter um <strong>produto de software</strong> e é considerado um dos principais mecanismos para se obter um <strong>software de qualidade</strong>. <em>(Wikipédia)</em></p>
<p style="text-align: justify;">Então, tudo que precisamos para gerar um <strong>produto de software</strong> <strong>de <a href="http://www.profissionaisti.com.br/category/qualidade/">qualidade</a></strong> é um bom <strong>Processo de Software</strong> que se adapte a realidade de uma empresa. Porém, não basta “apenas” implementá-lo, ou seja, deve-se ter o gerenciamento do processo como um todo a fim de garantir que ele seja executado corretamente entre os envolvidos, ou caso contrário, o caos tomará conta de tudo trazendo o resultado inverso do que se esperava.</p>
<p style="text-align: justify;">Ao implementar o processo, você poderá encontrar algumas pedras pelo caminho. Implementar um processo confronta diretamente a cultura da empresa, resistência e falta de cooperação dos envolvidos, falta de estrutura, de pessoal qualificado, etc. Porém, é como a maioria das coisas, que no início, é muito complicado e trabalhoso.</p>
<p style="text-align: justify;">Como vimos na definição, o <strong>Processo de Software</strong> visa à qualidade do <strong>produto de software</strong>. Mas como podemos definir esta qualidade?</p>
<p style="text-align: justify;">Este conceito pode ser considerado como um processo sistemático que focaliza todas as etapas e artefatos produzidos com o objetivo de garantir a conformidade de processos e produtos especificados, prevenindo e eliminando defeitos.</p>
<p style="text-align: justify;">Em outras palavras, a <strong>qualidade de software</strong> é estar em conformidade com requisitos funcionais e de desempenho explicitamente declarados de desenvolvimento, que devem ser claramente documentados e as características implícitas que são esperadas de todo o software desenvolvido.</p>
<p style="text-align: justify;">Para que isso seja possível, as fases do processo devem ser bem elaboradas e trabalhadas, efetuando devidas revisões para uma contínua melhoria e amadurecimento do processo e de seus artefatos. Um exemplo de modelo, podemos citar como fases: Concepção, Elaboração, Construção e Transição, no qual é feito um estudo de viabilidade, coletas de casos de uso, <a href="http://www.profissionaisti.com.br/2011/10/a-analise-de-sistemas-na-construcao-de-softwares/" target="_blank">análise de requisitos</a>, modelagem, desenvolvimento, revisões, etc.</p>
<p style="text-align: justify;">Outra característica importante de um <strong>Processo de Software</strong> é que ele visa à diminuição de falhas, ou seja, elaborar de forma sistemática Casos de Teste a fim de identificar e corrigir erros já na fase inicial do projeto. Corrigir erros no início do projeto é bem mais barato do que depois de entregue. Em outras palavras, entregar um<strong> produto de software</strong> sem falhas garante a confiabilidade, eficiência e integridade do produto.</p>
<p style="text-align: justify;">Mas, por que utilizar um <strong>Processo de Software</strong>?</p>
<p style="text-align: justify;">Dentre os fatos acima e muitos outros, posso citar também que:</p>
<ul style="text-align: justify;">
<li>Mais de 30% dos projetos são cancelados antes de serem finalizados.</li>
<li>Mais de 70% dos projetos falham nas entregas das funcionalidades.</li>
<li>Os custos extrapolam em mais de 180% do orçamento inicial.</li>
<li>Os prazos excedem em mais de 200% os cronogramas originais.</li>
</ul>
<p style="text-align: justify;">
<p style="text-align: justify;">Existem alguns modelos de <strong>Processos de Software</strong>, como os modelos em Cascata (CMMI), Espiral, Ciclo de Vida, Ágeis (SCRUM, XP), etc.</p>
<p style="text-align: justify;">Para escolher o modelo ideal, é preciso conhecer um pouco sobre cada um deles e ver qual se adapta melhor à realidade da empresa, levando em consideração fatores como: investimento, tamanho de equipe, pessoal qualificado, entre outros.</p>
<p style="text-align: justify;">Sem dúvidas, podemos definir que o <strong>Processo de Software</strong> amadurece a equipe e a visão sobre o desenvolvimento como um todo, garantindo um <strong>produto de software</strong> com qualidade e de consequência, a satisfação do cliente.</p>
<p style="text-align: justify;">Fonte: <a href="http://www.rafaelamaral.com.br/" target="_blank">Blog Rafael Amaral</a><br />
Twitter: @rafaelamaralll</p>
]]></content:encoded>
			<wfw:commentRss>http://www.profissionaisti.com.br/2011/11/processo-de-software-e-a-qualidade-de-produto/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Desenvolvimento de Software: Custo da Qualidade</title>
		<link>http://www.profissionaisti.com.br/2011/11/desenvolvimento-de-software-custo-da-qualidade/</link>
		<comments>http://www.profissionaisti.com.br/2011/11/desenvolvimento-de-software-custo-da-qualidade/#comments</comments>
		<pubDate>Thu, 10 Nov 2011 18:39:17 +0000</pubDate>
		<dc:creator>Tocchetto</dc:creator>
				<category><![CDATA[Desenvolvimento]]></category>
		<category><![CDATA[Engenharia de Software]]></category>
		<category><![CDATA[Qualidade]]></category>
		<category><![CDATA[Custo]]></category>
		<category><![CDATA[Software]]></category>

		<guid isPermaLink="false">http://www.profissionaisti.com.br/?p=20092</guid>
		<description><![CDATA[Segundo a American Society for Quality a qualidade é o &#8220;grau até o qual um conjunto de características inerentes satisfaz as necessidades&#8221;. No contexto de qualidade temos duas visões: Visão do Produtor: a qualidade do produto está totalmente relacionada com os requisitos estabelecidos. Visão do Cliente: a qualidade está relacionada a “adequação ao uso” ou [...]]]></description>
			<content:encoded><![CDATA[<p style="text-align: justify;">Segundo a <em>American Society for Quality</em> a qualidade é o &#8220;grau até o qual um conjunto de características inerentes satisfaz as necessidades&#8221;. No contexto de qualidade temos duas visões:</p>
<ul>
<li><strong>Visão do Produtor:</strong> a qualidade do produto está totalmente relacionada com os requisitos estabelecidos.</li>
<li><strong>Visão do Cliente:</strong> a qualidade está relacionada a “adequação ao uso” ou as necessidades do usuário.</li>
</ul>
<p style="text-align: justify;">Os times destinados a trabalhar neste meio devem encurtar o <em>gap</em> existente nestas duas visões. Para tal objetivo trabalha-se na Garantia da Qualidade e o Controle da Qualidade.</p>
<p style="text-align: justify;">A Garantia da Qualidade são todas as atividades com o intuito de prover uma confiança adequada para os produtos e serviços de acordo com os requisitos especificados. O time da Garantia da Qualidade deve definir políticas e seguir modelos para desenvolver de forma contínua melhorias no processo de desenvolvimento. <a href="http://www.profissionaisti.com.br/category/metodologias/">Metodologias de desenvolvimento</a>, estimativa do processo, processos de manutenção, processos de definição de requisitos, processos de teste, padrões de desenvolvimento, treinamentos, documentação são exemplos de ações que um time de garantia pode realizar. Lembre-se que a qualidade do produto está relacionada a qualidade do processo.</p>
<p style="text-align: justify;">Todo o trabalho e/ou ações que são produzidos na Garantia da Qualidade devem ser controlados. Com este objetivo definimos atividades para o processo de Controle da Qualidade. O foco do Controle da Qualidade é identificar defeitos nos produtos ou artefatos produzidos. <a href="http://www.treinaweb.com.br/curso/teste-de-software-basico" target="_blank">Teste de software</a> é uma atividade do Controle da Qualidade. A atividade de teste pode ser incluída em todas as fases do desenvolvimento de <a href="http://www.profissionaisti.com.br/2011/10/o-que-e-e-como-funciona-uma-fabrica-de-software/">software</a>, através de inspeções, revisões e execução de casos de teste.</p>
<p style="text-align: justify;">Todas estas atividades têm um custo associado, sendo que, para que possamos calcular o custo da qualidade devemos considerar três elementos: o custo da falha, o custo da prevenção e o custo da avaliação, sendo cada um deles apresentados abaixo:</p>
<ul>
<li><strong>Custo da falha:</strong> custos associados com produtos defeituosos entregues ao cliente. Podemos associar a este custo os reparos, a utilização da equipe de help desk, bem como, os danos causados por um defeito.</li>
<li><strong>Custos da prevenção:</strong> são todos os custos associados com atividades que objetivam evitar defeitos. Podemos citar treinamentos, definição de métodos e procedimentos e aquisição de ferramentas. Observe que praticamente todas as atividades do time de Garantia da Qualidade estão associadas a este custo.</li>
<li><strong>Custo da avaliação:</strong> por fim, são todos os custos associados com a detecção de defeitos. Neste elemento podemos citar as atividades de teste de software, tempo gasto na automação de scripts de teste, revisões e inspeções.</li>
</ul>
<p style="text-align: justify;">Obviamente que o custo irá variar de uma organização para outra considerando a atividade que cada uma delas está disposta a fazer. A equipe de Garantia da Qualidade deve ser a responsável por identificar os custos destes três elementos, bem como, prover ações para minimizar o custo da falha.</p>
<p style="text-align: justify;">Normalmente as organizações focam no custo de avaliação, porém, se o investimento for maior na prevenção ao longo do tempo o custo da falha e da avaliação tende a diminuir.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.profissionaisti.com.br/2011/11/desenvolvimento-de-software-custo-da-qualidade/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>A análise de sistemas na construção de softwares</title>
		<link>http://www.profissionaisti.com.br/2011/10/a-analise-de-sistemas-na-construcao-de-softwares/</link>
		<comments>http://www.profissionaisti.com.br/2011/10/a-analise-de-sistemas-na-construcao-de-softwares/#comments</comments>
		<pubDate>Wed, 26 Oct 2011 10:55:49 +0000</pubDate>
		<dc:creator>Rafael Amaral</dc:creator>
				<category><![CDATA[Carreira]]></category>
		<category><![CDATA[Desenvolvimento]]></category>
		<category><![CDATA[Engenharia de Software]]></category>
		<category><![CDATA[programação]]></category>
		<category><![CDATA[Software]]></category>

		<guid isPermaLink="false">http://www.profissionaisti.com.br/?p=19893</guid>
		<description><![CDATA[Quando se fala em desenvolvimento de softwares, para quem tem bons conhecimentos de programação (ou não), é simples dizer a palavra &#8220;mágica&#8221; que quase sempre já está na ponta da língua: &#8220;Eu tenho a solução!&#8221;, afirmam. Contudo, isso é um grande equívoco que profissionais/empresas cometem. O que alguns profissionais não entendem é que nem sempre [...]]]></description>
			<content:encoded><![CDATA[<p style="text-align: justify;">Quando se fala em desenvolvimento de softwares, para quem tem bons conhecimentos de programação (ou não), é simples dizer a palavra &#8220;mágica&#8221; que quase sempre já está na ponta da língua: &#8220;Eu tenho a solução!&#8221;, afirmam. Contudo, isso é um grande equívoco que profissionais/empresas cometem.</p>
<p style="text-align: justify;">O que alguns profissionais não entendem é que nem sempre o cliente sabe o que quer ou nem sempre consegue expressar o que pensa. E em muitos casos, expressam totalmente o contrário do que realmente queriam passar. É fácil entender isso, levando em consideração pontos tais como: falta de conhecimento de tendências, falta de sensibilidade, falta de conhecimento técnico, entre outros fatores que podemos enumerar. E, consequentemente, há um gasto excessivo de investimento e mão de obra e frustrações dos dois lados são inevitáveis.</p>
<p style="text-align: justify;">É provável que você já deve ter se deparado com vários casos parecidos. Na prática, é bem comum no início do <a title="Omissão de fases de um projeto de software – A armadilha" href="http://www.profissionaisti.com.br/2011/06/omissao-de-fases-de-um-projeto-de-software-a-armadilha/">projeto</a> uma conversa informal com o cliente e depois de quase tudo pronto ele dizer que não era bem aquilo que se esperava. Outro caso, é a mudança contínua das iterações do projeto para atender ao nível &#8220;alto&#8221; de satisfação do cliente (que nunca está satisfeito).</p>
<p style="text-align: justify;">A verdade sobre esses fatores são muitas. A começar pelo preço de custo/benefício, “tempo” e a pressão dos gestores em sua equipe para construírem softwares com tempo cada vez menor, e, contudo, a falta de planejamento sério e de chegar a um nível maduro de entendimento do que realmente o cliente espera do produto final.</p>
<p style="text-align: justify;">Conseguir bons requisitos não é tarefa fácil, e, nem tão pouco, empresas estão interessadas em investir neste tipo de profissional. Investir neste processo, gasta-se um tempo de planejamento, mas algo necessário, ou seja, levando-se pelo ponto de vista maduro, é algo que se ganha lá na frente da iteração do projeto.</p>
<p style="text-align: justify;">Estudos indicam que <a title="Análise de Sistemas: O Levantamento de Requisitos" href="http://www.profissionaisti.com.br/2011/05/analise-de-sistemas-levantamento-de-requisitos/">requisitos</a> detectados depois do software implementado ou erros em sua análise são até 20 vezes mais caros de se corrigir que qualquer outro tipo de erro. A ilustração abaixo mostra a realidade na construção de softwares e podemos até dizer (desconsiderando alguns passos) que em determinados tipos de serviços mais informais, isso também acontece.</p>
<p style="text-align: justify;"><a title="A análise de sistemas na construção de softwares" href="http://www.rafaelamaral.com.br//images_gerente/image/rafael-amaral-analise-de-sistema.jpg" target="_blank"><img class="aligncenter" title="A análise de sistemas na construção de softwares" src="http://www.rafaelamaral.com.br/images_gerente/image/rafael-amaral-analise-de-sistema.jpg" alt="A análise de sistemas na construção de softwares" width="564" height="423" /></a></p>
<p style="text-align: justify;">Essa é uma realidade não apenas no <a href="http://www.profissionaisti.com.br/category/desenvolvimento/">desenvolvimento</a> de softwares, mas é algo corriqueiro e que acontece em nosso cotidiano. Para isso, basta precisarmos de um serviço específico de uma determinada área que desconhecemos, um tipo de conserto de um aparelho, etc. Nestas situações, recebemos muitas opiniões e “conselhos” do que realmente não  se deve fazer. Mas, em alguns casos, encontramos algum bom profissional que realmente está atento a nossa necessidade e provê uma solução ao problema.</p>
<p style="text-align: justify;">“Um bom profissional sabe comunicar o seu jargão técnico com o jargão informal do seu cliente.”</p>
<p style="text-align: justify;">Outro ponto que alguns profissionais (mesmo os melhores) não entendem, é o fato que o cliente não é obrigado a saber/entender de um determinado assunto ou uma necessidade. Isso eu chamo de visão, ou seja, alguns profissionais têm (e conquistam o cliente), outros não.  Saliento a importância em dar à atenção ao cliente e se dedicar em ouvir sua história de forma a entender o que ele quer e para que ele quer.</p>
<p style="text-align: justify;">Especificamente falando de softwares, a análise é fundamental, pois em sua construção, um dos maiores desafios no desenvolvimento é o da construção do sistema certo, que preencha as necessidades dos usuários a um preço razoável. E para que isso aconteça, é preciso atingir boa comunicação e boa compreensão do mundo dos usuários (é onde entra a Análise de Sistemas). Este artigo é uma abordagem bem superficial de uma análise de softwares, onde há várias iterações, bem como sua documentação, no qual a documentação dos requisitos e de casos de uso é uma forma “contratual” entre a equipe de desenvolvimento e o cliente a respeito do software que será desenvolvido. Mas, o artigo aborda um ponto de vista que se deve ter na hora de construir software de qualidade.</p>
<p style="text-align: justify;">Por outro lado, posso afirmar que o grande desafio do analista não se limita apenas em implementar melhores soluções tecnológicas, mas sim em mudar a cultura de uma empresa. Estudar, se dedicar e se especializar no que faz é parte da vida do profissional, mas, saber lidar com essas situações divergentes é o que faz o grande diferencial do profissional e o sucesso no que se faz.</p>
<p style="text-align: justify;">Fonte: <a title="Rafael Amaral" href="http://www.rafaelamaral.com.br/artigos/a-analise-de-sistemas-na-construcao-de-softwares/" target="_blank">Blog Rafael Amaral</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.profissionaisti.com.br/2011/10/a-analise-de-sistemas-na-construcao-de-softwares/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Scrum é aberto para ampliação e modificação</title>
		<link>http://www.profissionaisti.com.br/2011/10/scrum-e-aberto-para-ampliacao-e-modificacao/</link>
		<comments>http://www.profissionaisti.com.br/2011/10/scrum-e-aberto-para-ampliacao-e-modificacao/#comments</comments>
		<pubDate>Thu, 13 Oct 2011 19:04:54 +0000</pubDate>
		<dc:creator>Rafael Peria de Sene</dc:creator>
				<category><![CDATA[Engenharia de Software]]></category>
		<category><![CDATA[Gerência de Projetos]]></category>
		<category><![CDATA[Metodologias]]></category>

		<guid isPermaLink="false">http://www.profissionaisti.com.br/?p=19703</guid>
		<description><![CDATA[Scrum.org e Scrum Inc. anunciaram um modelo formal para modificar e estender o Scrum. Os seus criadores Jeff Sutherland e Ken Schwaber estão convidando profissionais de todo o mundo para contribuir para o futuro do Scrum. O Scrum foi desenvolvido pela primeira vez a mais ou menos 15 anos atrás, e vem evoluindo e sofrendo [...]]]></description>
			<content:encoded><![CDATA[<p style="text-align: justify;"><img class="alignright size-full wp-image-19788" style="margin-left: 5px; margin-right: 5px;" title="Scrum" src="http://www.profissionaisti.com.br/wp-content/uploads/2011/10/scrum-org.jpg" alt="" width="242" height="81" />Scrum.org e Scrum Inc. anunciaram um modelo formal para modificar e estender o Scrum. Os seus criadores Jeff Sutherland e Ken Schwaber estão convidando profissionais de todo o mundo para contribuir para o futuro do Scrum.</p>
<p style="text-align: justify;">O Scrum foi desenvolvido pela primeira vez a mais ou menos 15 anos atrás, e vem evoluindo e sofrendo adaptações desde então. Suas regras, artefatos e eventos estão descritas no Guia Scrum.</p>
<p style="text-align: justify;">O anúncio marca uma nova era na evolução Scrum, tornando disponível um mecanismo para que o público possa  fornecer <em>feedback</em> sobre o Guia <a href="http://www.profissionaisti.com.br/tag/scrum/">Scrum</a>, além de fornecer um modelo para propor extensões para a sua estrutura básica.</p>
<p style="text-align: justify;">O processo formal para propor alterações que possam vir a integrar o <a href="http://www.profissionaisti.com.br/tag/scrum/">Guia Scrum</a> está disponível online no site scrum.org.</p>
<p style="text-align: justify;">Para saber mais sobre Scrum, ou propor a sua própria contribuição, você pode usar os seguintes links:</p>
<p style="text-align: justify;">Ler &#8211; <a href="http://www.scrum.org/scrumguides/" target="_blank">http://www.scrum.org/scrumguides/</a><br />
Alterar &#8211; <a href="http://www.scrum.org/scrum-guide-proposal/" target="_blank">http://www.scrum.org/scrum-guide-proposal/</a><br />
Estendê-lo &#8211; <a href="http://www.scrum.org/scrum-extensions/" target="_blank">http://www.scrum.org/scrum-extensions /</a></p>
<p style="text-align: justify;"><em>Esta é uma tradução livre do post original, disponível em <a href="http://agiletips.blogspot.com/2011/10/scrum-is-open-for-extension-and.html" target="_blank">http://agiletips.blogspot.com/2011/10/scrum-is-open-for-extension-and.html</a></em></p>
]]></content:encoded>
			<wfw:commentRss>http://www.profissionaisti.com.br/2011/10/scrum-e-aberto-para-ampliacao-e-modificacao/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>O que é Programação Orientada a Aspectos (POA)?</title>
		<link>http://www.profissionaisti.com.br/2011/09/o-que-e-programacao-orientada-a-aspectos-poa/</link>
		<comments>http://www.profissionaisti.com.br/2011/09/o-que-e-programacao-orientada-a-aspectos-poa/#comments</comments>
		<pubDate>Mon, 26 Sep 2011 16:22:49 +0000</pubDate>
		<dc:creator>Luís Gustavo Fabbro</dc:creator>
				<category><![CDATA[Desenvolvimento]]></category>
		<category><![CDATA[Engenharia de Software]]></category>
		<category><![CDATA[POA]]></category>
		<category><![CDATA[programação]]></category>
		<category><![CDATA[Software]]></category>

		<guid isPermaLink="false">http://www.profissionaisti.com.br/?p=15585</guid>
		<description><![CDATA[As ferramentas de modelagem de sistemas disponíveis para os Arquitetos de Software evoluem em paralelo com as técnicas de programação &#8211; quando um conceito é introduzido numa ferramenta, linguagens de programação rapidamente o incorporam também. Nos tempos em que o DFD (Diagrama de Fluxo de Dados) reinava, a programação de computadores era majoritariamente procedural. Isto [...]]]></description>
			<content:encoded><![CDATA[<p style="text-align: justify;">As ferramentas de modelagem de sistemas disponíveis para os Arquitetos de Software evoluem em paralelo com as técnicas de programação &#8211; quando um conceito é introduzido numa ferramenta, linguagens de programação rapidamente o incorporam também. Nos tempos em que o <a href="http://pt.wikipedia.org/wiki/Diagrama_de_Fluxos_de_Dados" target="_blank">DFD</a> (Diagrama de Fluxo de Dados) reinava, a programação de computadores era majoritariamente procedural. Isto é, os programas eram construídos com instruções sequenciais que emulavam o fluxo de dados definido pelo Diagrama, utilizando linguagens como o <a href="http://www.treinaweb.com.br/curso/cobol" target="_blank">COBOL</a>, Clipper ou Pascal. Hoje, as linguagems de programação comerciais mais usadas são calcadas no conceito de classes &#8211; <a href="http://www.treinaweb.com.br/curso/java-basico-jse" target="_blank">Java</a>, .Net, Delphi, etc. &#8211; e os sistemas são modelados frequentemente usando Diagramas de Classes e outras ferramentas que constituem a <a href="http://en.wikipedia.org/wiki/Unified_Modeling_Language" target="_blank">UML</a> (Unified Modeling Language).</p>
<p style="text-align: justify;">Essa forma de trabalho, no entanto, obriga o projetista a estabelecer relações entre certas classes que possuem pouco ou nada em comum, resultando em modelagens por vezes confusas e complicadas de se dar manutenção. Para ilustrar essa questão, imagine que você está modelando um sistema com operações que serão tratadas como <a href="http://pt.wikipedia.org/wiki/Banco_de_dados#Transa.C3.A7.C3.A3o" target="_blank">transações</a> no banco de dados.</p>
<p style="text-align: justify;">Neste sistema, haverá operações para movimentação de estoque (com saída de quantidade de um depósito e a respectiva entrada no depósito destino), para registrar contabilizações (envolvendo uma ou mais contas contábeis para débito e crédito) e para efetuar pagamentos a fornecedores. Distingue-se neste cenário a necessidade de modelagem de diversas classes de objetos: item de estoque, conta contábil, movimento de estoque, contabilização, fornecedor, entre outros. Há ainda claramente uma entidade que deve controlar as transações no banco de dados para garantir que as alterações comandadas numa operação sejam tratadas como um bloco único. Embora nada tenham em comum, tanto movimentos de estoque quanto pagamentos a fornecedores devem ser contabilizados. Um diagrama de classes que ilustre essas relações ficará confuso por misturar conceitos de movimentação de itens e de pagamentos. A situação tende a piorar se surgirem outras operações que precisem ser contabilizadas. E do ponto de vista da programação, modificações na classe de contabilização afetarão todas as outras classes, exigindo que estas também sejam revisadas.</p>
<p style="text-align: justify;">Recursos que permeiam várias classes de um sistema, vinculando mesmo aquelas que implementam regras conceitualmente distantes, são chamados de <strong>cross-cutting</strong>. Outros exemplos de recursos assim: criação de logs de operações, auditoria em alteração de dados, níveis de permissão de acesso a dados, autorização para executar operações, tratamento de exceções, etc. Melhorar a solução para esse tipo de recurso é a proposta da <strong>Programação Orientada a Aspectos</strong> (POA), onde o código que implementa os recursos <strong>cross-cutting</strong> são retirados das classes de negócio e inseridos em módulos próprios &#8211; os Aspectos. O código das regras de negócio fica mais limpo e alterações no funcionamento dos recursos <strong>cross-cutting</strong> passam a ser centralizadas no <strong>Aspecto</strong>.</p>
<p style="text-align: justify;">A <strong>POA</strong> depende ainda de um mecanismo que permita vincular a execução dos códigos do <strong>Aspecto</strong> à execução das regras de negócio. A solução proposta pela <strong>POA</strong> é centrado no modelo de pontos de ligação (Join Points). Tal modelo é definido por 3 características: o momento em que o código poderá ser executado &#8211; chamado de <strong>join point</strong> -, uma forma de especificar esses momentos e uma forma de especificar o código que deve ser executado em cada momento.</p>
<p style="text-align: justify;">Um <strong>ponto de ligação</strong> pode ser encarado como um evento que ocorre no código da regra de negócio &#8211; marcado pela execução de um determinado método ou pela alteração no valor de uma propriedade, por exemplo. Criar pontos de ligação significa, portanto, indicar quais desses eventos devem ser monitorados pelo <strong>Aspecto</strong>, usando para isso estruturas chamadas de <strong>pointcuts</strong>. Os <strong>pointcuts</strong> se valem de uma sintaxe especial para possibilitar a indicação de quais métodos e propriedades dispararão a execução do código relativo a um ponto de ligação. Ao código que será executado pelo <strong>Aspecto</strong> quando um ponto de ligação é encontrado dá-se o nome de <strong>Advice</strong>.</p>
<p style="text-align: justify;">Assim como as Classes, Aspectos também podem conter variáveis internas (membros) e ter heranças para especializar seu comportamento, adequando-o a uma função mais específica. Voltando ao exemplo das operações dado no início deste <em>post</em>, uma solução usando Aspectos seria criar um <strong>Aspecto</strong> base para tratar transações com o banco de dados. Isso implica a criação de um ponto de ligação para apontar o início da função que realiza a operação, momento em que o <strong>advice</strong> desse ponto de ligação deve tomar providências para garantir a existência de uma transação no banco de dados. Outro ponto, ao final da operação, deve encerrar a transação. Para cuidar das transações que precisem ser contabilizadas faríamos uma herança desse <strong>Aspecto</strong> e introduziríamos o código necessário num dos pontos de ligação já estabelecidos. Nesta herança, indicaríamos como <strong>pointcuts</strong> apenas as classes expressando regras passíveis de serem contabilizadas.</p>
<p style="text-align: justify;">A experiência mais bem sucedida para popularização da <strong>POA</strong> por enquanto é uma extensão da linguagem Java criada pelo <a href="http://en.wikipedia.org/wiki/PARC_(company)" target="_blank">Centro de Pesquisas da Xerox</a> que tem o nome de <a href="http://en.wikipedia.org/wiki/AspectJ">AspectJ</a>. Trata-se de um projeto <em>open source</em> disponível na <a href="http://www.eclipse.org/" target="_blank">Fundação Eclipse</a>. Há ainda algumas bibliotecas voltadas para C#, <a href="http://csharp-source.net/open-source/aspect-oriented-frameworks" target="_blank">disponíveis na forma de frameworks</a>. O <a href="http://www.embarcadero.com/products/delphi-prism">Delphi Prism</a> &#8211; IDE para programação na plataforma .NET usando a linguagem Delphi &#8211; incorporou uma implementação para uso de <strong>POA</strong> em sua versão 2010 usando para isso recursos do próprio .NET. Veja <a href="http://edn.embarcadero.com/article/40345#27AspectOrientedProgrammingAOP">aqui</a> um exemplo de uso com a sintaxe do Delphi.</p>
<p style="text-align: justify;">Tudo o que foi apresentado aqui não poderia ser resolvido apenas com uso de classes? Sim, poderia. Poderíamos até mesmo implementar tudo em uma solução exclusivamente procedural, se desejássemos. O ponto aqui é que as ferramentas até então existentes podem ser melhoradas para resolverem de forma mais eficiente determinados problemas. Uma nova filosofia está sendo amadurecida no campo da análise de sistemas e da programação e, mais cedo ou mais tarde, as linguagens também terão que evoluir para acompanhá-la consistentemente.</p>
<p style="text-align: justify;"><em>Fonte: <a href="http://balaiotecnologico.blogspot.com/2010/10/um-novo-paradigma-programacao-orientada.html" target="_blank">Balaio Tecnológico</a></em></p>
]]></content:encoded>
			<wfw:commentRss>http://www.profissionaisti.com.br/2011/09/o-que-e-programacao-orientada-a-aspectos-poa/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Introdução e exemplo de Análise &amp; Design (A&amp;D) Orientado a Objetos</title>
		<link>http://www.profissionaisti.com.br/2011/08/introducao-e-exemplo-de-analise-design-ad-orientado-a-objetos/</link>
		<comments>http://www.profissionaisti.com.br/2011/08/introducao-e-exemplo-de-analise-design-ad-orientado-a-objetos/#comments</comments>
		<pubDate>Wed, 24 Aug 2011 16:02:26 +0000</pubDate>
		<dc:creator>Hélio Engholm Jr</dc:creator>
				<category><![CDATA[Desenvolvimento]]></category>
		<category><![CDATA[Engenharia de Software]]></category>
		<category><![CDATA[Analise]]></category>
		<category><![CDATA[Design]]></category>
		<category><![CDATA[Orientação a Objetos]]></category>

		<guid isPermaLink="false">http://www.profissionaisti.com.br/?p=19059</guid>
		<description><![CDATA[Nos ciclos de desenvolvimento de sistemas, costumamos ter as fases de análise e design. Vamos ver neste artigo, um exemplo de AD orientada a objetos com UML. Na fase de análise os envolvidos devem obter uma idéia clara do que o sistema deverá fazer, sem se preocupar com detalhes relacionados à maneira como ele irá [...]]]></description>
			<content:encoded><![CDATA[<p style="text-align: justify;">Nos ciclos de <a href="http://www.profissionaisti.com.br/category/desenvolvimento/">desenvolvimento</a> de sistemas, costumamos ter as fases de análise e design. Vamos ver neste artigo, um exemplo de AD orientada a objetos com UML.</p>
<p style="text-align: justify;">Na fase de análise os envolvidos devem obter uma idéia clara do que o sistema deverá fazer, sem se preocupar com detalhes relacionados à maneira como ele irá implementar as funcionalidades levantadas nos requisitos do projeto.</p>
<p style="text-align: justify;">Para buscar este entendimento, podemos utilizar interessantes propostas de mercado, baseado no levantamento e análise dos requisitos do projeto através de Casos de Uso da UML (Unified Modeling Language).</p>
<p style="text-align: justify;">Após entrevistar os envolvidos no projeto da área de negócios do cliente, podemos analisar os Cenários de Caso de Uso identificados, elaborando e refinando diagramas de Caso de uso e de Atividades. Todas as informações levantadas devem ser registradas em algum documento formal baseado em propostas de mercado, veja propostas de Especificação de Caso de Uso e Relatório Sintético de Caso de Uso na referência bibliográfica deste artigo. Estes documentos devem ser validados pelos envolvidos no projeto e divulgados para toda a equipe do mesmo.</p>
<p style="text-align: justify;">Veja abaixo, representação UML do Caso de Uso de um sistema no cenário responsável pela emissão de conta de restaurante.</p>
<p style="text-align: justify;"><img class="aligncenter size-full wp-image-19060" src="http://www.profissionaisti.com.br/wp-content/uploads/2011/08/oo1.jpg" alt="" width="448" height="214" /></p>
<p style="text-align: justify;">Este digrama UML mostra claramente um usuário (Ator) e uma funcionalidade do sistema (Caso de Uso) que estaremos implementado em nosso sistema e deve ser elaborado na fase de análise de nosso projeto, vindo a incorporar a documentação técnica a ser aprovada e enviada para os desenvolvedores da aplicação.</p>
<p style="text-align: justify;">A Especificação de Caso de Uso deve conter uma série de informações adicionais. Neste exemplo, poderíamos citar as informações e processamento abaixo para ser possível encerrar a conta:</p>
<ul style="text-align: justify;">
<li>Em qual mesa se deseja encerrar a      conta.</li>
<li>Quais itens foram consumidos na      mesa e qual o valor de cada um.</li>
<li>Realizar processamento e emitir a      conta.</li>
<li>Registrar que o consumo da      respectiva mesa está encerrado.</li>
</ul>
<p style="text-align: justify;">Como parte da análise, torna-se extremamente interessante termos o Diagrama de Atividades relacionado ao Caso de Uso. Este diagrama deve ser validado com os donos do requisito, para aprovação e corroboração de nosso entendimento do que deve ser efetivamente desenvolvido, mostrando inclusive regras de negócio envolvidas, quando possível.</p>
<p style="text-align: justify;">Observe no diagrama abaixo como este diagrama torna muito claro o funcionamento, sequencia de eventos e regras de negócio envolvidos no mesmo.</p>
<p style="text-align: justify;"><img class="aligncenter size-full wp-image-19061" src="http://www.profissionaisti.com.br/wp-content/uploads/2011/08/oo2.jpg" alt="" width="467" height="484" /></p>
<p style="text-align: justify;">Na fase de análise, podemos definir sem detalhamento as classes envolvidas no Caso de Uso, sendo que na fase de design teremos que detalhar as mesmas. Neste momento, algumas classes sugeridas na fase de análise podem deixar de ser consideradas enquanto muitas outras provavelmente irão aparecer, conforme evoluímos em nosso trabalho.</p>
<p style="text-align: justify;">Veja abaixo, diagrama de classes inicial de nosso processo de modelagem.</p>
<p style="text-align: justify;"><a href="http://www.profissionaisti.com.br/wp-content/uploads/2011/08/oo3.jpg"><img class="aligncenter size-full wp-image-19062" src="http://www.profissionaisti.com.br/wp-content/uploads/2011/08/oo3.jpg" alt="" width="261" height="203" /></a></p>
<p style="text-align: justify;">Já na fase de design, temos que ter as classes muito bem definidas para termos um desenvolvimento correto, documentado, com facilidades de manutenção corretiva e evolutiva como a modelagem sugerida abaixo.</p>
<p style="text-align: justify;"><a href="http://www.profissionaisti.com.br/wp-content/uploads/2011/08/oo4.jpg"><img class="aligncenter size-full wp-image-19063" src="http://www.profissionaisti.com.br/wp-content/uploads/2011/08/oo4.jpg" alt="" width="543" height="139" /></a></p>
<p style="text-align: justify;">Na verdade, considero todo este processo muito empolgante e ainda existe muitos detalhes bem interessantes a se considerar na modelagem, tais como patterns, arquitetura, persistência de dados, &#8230;</p>
<p style="text-align: justify;"><em>Luck favors the prepared mind!</em></p>
<p style="text-align: justify;">Veja exemplo completo juntamente com templates em <a href="http://www.profissionaisti.com.br/2011/08/2010/05/livro-engenharia-de-software-na-pratica/">Engenharia de Software na Prática</a>: Editora Novatec, 2010. ISBN 978-85-7522-217-1</p>
]]></content:encoded>
			<wfw:commentRss>http://www.profissionaisti.com.br/2011/08/introducao-e-exemplo-de-analise-design-ad-orientado-a-objetos/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Como um software nasce legado</title>
		<link>http://www.profissionaisti.com.br/2011/08/como-um-software-nasce-legado/</link>
		<comments>http://www.profissionaisti.com.br/2011/08/como-um-software-nasce-legado/#comments</comments>
		<pubDate>Tue, 16 Aug 2011 15:34:34 +0000</pubDate>
		<dc:creator>Denis Ferrari</dc:creator>
				<category><![CDATA[Desenvolvimento]]></category>
		<category><![CDATA[Engenharia de Software]]></category>
		<category><![CDATA[Projeto]]></category>
		<category><![CDATA[Software]]></category>

		<guid isPermaLink="false">http://www.profissionaisti.com.br/?p=18911</guid>
		<description><![CDATA[Não somos capazes de prever o futuro, mas analisando os erros cometidos no passado, podemos determinar os efeitos colaterais que uma decisão tomada no início de um projeto terá no longo prazo. Quando iniciamos um projeto de software, vários aspectos precisam ser resolvidos: As tecnologias envolvidas, o processo que será utilizado, como o projeto será [...]]]></description>
			<content:encoded><![CDATA[<p style="text-align: justify;"><strong>Não somos capazes de prever o futuro</strong>, mas analisando os erros cometidos no passado, podemos determinar os efeitos colaterais que uma decisão tomada no início de um projeto terá no longo prazo.</p>
<p style="text-align: justify;">Quando iniciamos um projeto de software, vários aspectos precisam ser resolvidos: As tecnologias envolvidas, o processo que será utilizado, como o projeto será organizado, etc. <strong>Uma decisão errada em qualquer um desses aspectos pode causar danos irreversíveis no projeto e reduzir sua vida útil consideravelmente</strong>. Muitas vezes, decisões “simples” de design/arquitetura voltam para nos assombrar quando o sistema precisa ser adaptado para uma nova situação que não havia sido pensada originalmente (Já viram essa história?).</p>
<p style="text-align: justify;">Quando organizamos um projeto de software, o termo <strong>“Separação de responsabilidades” deve ser nosso mantra</strong>. Não criar dependências desnecessárias e <a href="http://www.heroisdati.com/ninject-injecao-de-dependencia-simples/" target="_blank">usar indiretamente as tecnologias envolvidas</a> são atitudes simples que auxiliam na manutenção do projeto e na substituição dos componentes quando necessário. Indo um pouco mais fundo no aspecto responsabilidade, cada coisa em um projeto tem o seu lugar, e esse lugar deve fazer sentido. Uma consulta SQL não pode estar na camada de apresentação, assim como regras de apresentação não podem estar no domínio, assim como regras de negócio não podem estar no banco de dados, etc. <strong>O próximo programador que trabalhar no projeto não deve ter que adivinhar onde escolhemos guardar as coisas, elas simplesmente devem fazer sentido de acordo com as camadas do projeto</strong>.</p>
<p style="text-align: justify;">Preservar ao máximo a camada de domínio também deve ser considerada uma missão crítica, afinal de contas, <strong>o domínio é o coração do software</strong>. Quando desenvolvemos um SI para qualquer área, investimos tempo aprendo sobre o domínio. Esse investimento deve ser preservado ao máximo, mas para isso, <a href="http://www.heroisdati.com/tecnologia-para-que-te-quero/" target="_blank">o domínio não pode ser infectado com as tecnologias envolvidas no projeto</a>. Vincular o domínio de um projeto a uma tecnologia é fazer com que o domínio do projeto não possa ser resolvido sem ela. Já ouviu falar de algum software que funciona em uma tecnologia muito antiga e a empresa não quer substituí-lo por que investiu um bom dinheiro naquele sistema? <a href="http://www.heroisdati.com/msdev-es-arena-entity-framework-x-nhibernate/" target="_blank">Agora, já pensou se esse domínio estivesse isolado e as demais camadas do software pudessem ser substituídas</a>?</p>
<p style="text-align: justify;">Não dominar as tecnologias escolhidas para o projeto também é um pecado grave. Nunca fazemos o melhor que pode ser feito, fazemos o melhor que o nosso conhecimento permite, e mesmo com muito conhecimento, corremos o risco de não fazer &#8220;o melhor&#8221;, imagine então quando somos iniciantes no que estamos nos propondo a utilizar. Algumas lições poderão ser aprendidas tarde demais. <strong>As tecnologias são criadas para facilitar o nosso trabalho, mas não podemos ser dependentes dela</strong>. Muitos fornecedores prometem produtividade extrema com suas ferramentas, mas na minha experiência, produtividade amarrada ao fornecedor é extremamente prejudicial no longo prazo.</p>
<p style="text-align: justify;">Concluindo, <strong>um software pode nascer legado simplesmente por não o organizarmos de forma decente ou usarmos as tecnologias de forma errada</strong>. A fase inicial de um projeto é onde precisamos de toda a nossa atenção e de toda ajuda necessária para fazer com que o investimento feito no projeto seja duradouro.</p>
<p style="text-align: justify;">Artigo originalmente publicado em <a href="http://www.heroisdati.com/">heroisdati</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.profissionaisti.com.br/2011/08/como-um-software-nasce-legado/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
	</channel>
</rss>

