codificando .net magazine - edição 09

40

Upload: weliton-junior

Post on 12-Jun-2015

888 views

Category:

Documents


1 download

TRANSCRIPT

Page 1: Codificando .NET Magazine - Edição 09
Page 2: Codificando .NET Magazine - Edição 09

Fale com Editor

É muito importante para a equipe saber a sua opinião sobre a revista, caso tenha alguma critica, sugestão, ou elogio entre em contato. Caso tenha interesse em publicar um artigo na revista envie o título e um resumo do tema em formato Word.

[email protected]

EDITORES Alexandre Tarifa Diego Nogare Emerson Facunte Sergio Gonçalves REVISÃO Fernanda Sallai Giaccomo Sabino MONTAGEM / FORMATAÇÃO Milton Carvalhaes EDITORAÇÃO E DIAGRAMAÇÃO Adriano Almeida COLABORADORES Anderson Bermar Demetrio Silva Edson Aparecido do Nascimento Fábio Câmara Ivan Sampaio Juliana Prado Juliano Schimiguel Roni A. Marcello

Produzido por:

www.codificando.net

Edição 09 Número 09 Ano 03 2009

Sumário

Demonstração de como se faz para se animar uma sprite no XNA.

Por: Edson Aparecido do Nascimento

08 :. Tutorial XNA - Hello Word

O Objetivo deste artigo é demonstrar a utilização de mashups dentro do contexto e advento da Web 2.0 .

Por: Roni A. Marcello / Juliano Schimiguel

22 :. Utilização de Mashups com Silverlight

Neste artigo, abordaremos o SQL Server Audit, que é mais uma feature disponível no SQL Server 2008 para a realização de auditoria.

Por: Demetrio Silva

18 :. SQL Server Audit

Conceituação sobre metodologias ágeis e SCRUM. Por: Fábio Câmara

13 :. Uma Metodologia Ágil Scrum

04 :. Acessando o MySql com Asp.net

Veja neste artigo como acessar com ASP.NET um banco MySql através da Data Access Layer.

Por: Anderson Bermar / Juliano Schimiguel

Metodologias no desenvolvimento de software e o modo como elas evoluíram no decorrer dos anos. Por: Juliana Prado

29:. Evolução da Metodologia do Desenvolvimento de Sistemas

Carga de um cubo OLAP utilizando o Microsoft SQL Server 2005 Analysis Services.

Por: Ivan Sampaio / Juliano Schimiguel

33:. Criando um Cubo Olap

03:. Editorial 40:. .Close( )

Page 3: Codificando .NET Magazine - Edição 09

Diego Nogare [email protected]

Depois de mais de um ano fazendo a revista da forma que conseguíamos, finalmente montamos uma equipe profissional para a editoração! Através do Portal Codificando .Net nós convidamos todos os membros da comunidade para participar, e após os candidatos mostrarem interesse, nós selecionamos alguns para fazer o trabalho. A nova equipe de editoração da nova revista Codificando .Net e-Magazine é composta por dois revisores técnicos (Fernanda Sallai e Giaccomo Sabino), por um revisor geral (Milton Filho) e por um editor de diagramação e formatação (Adriano Almeida). Esta nova equipe mostrou uma maturidade e desempenho muito acima do que esperávamos, tenho certeza que a nova revista terá uma aceitação e credibilidade muito mais forte do que tínhamos antes. Muito obrigado por participarem e acreditarem nesta família. Grande abraço,

Editorial

Edição 09 Número 09 Ano 03 2009

Page 4: Codificando .NET Magazine - Edição 09

www.codificando.net

e-m

agazine Codific

ando.net

e-magazine

Abril / Maio 2009 | 4444

Acessando o MySql com ASP.NET Veja neste artigo como acessar com ASP.NET um

banco MySql através da Data Access Layer.

Neste artigo iremos apresentar como acessar com ASP.NET um banco MySql através da Data Access Layer, vamos utilizar também o componente chamado ObjectDataSource que será responsável em fazer a comunicação entre a Interface e a Data Access Layer, o artigo não irá abordar a instalação do MySql, mas irá mostrar como criar o banco, tabela, stored procedure e criar a camada de acesso a dados ou Data Access Layer para acessarmos com .net, tudo de forma rápida e de fácil acesso. Ferramentas

Para esse artigo foi usado o Visual Studio 2005, MySql 5.1 e o connector para .net, uso também uma ferramenta free chamada HeidiSQL para criação do banco, tabela e stored procedure. Um pouco mais sobre Data Access Layer – DAL A Data Access Layer ou camada de acesso a dados, é uma camada que tem por finalidade acessar o banco de dados, deixando as consultas SQL diretamente no banco, e fazendo o acesso através de stored procedure, ela se comunica com a camada lógica ou Business Logic Layer(BLL), deixando o sistema mais específico e com uma maior facilidade em manutenção e atualização do sistema, pois uma camada não interfere diretamente na outra, ou seja, em alguns casos, podemos atualizar uma regra de negócio sem ter que atualizar a camada de acesso a dados e vice-

versa, e podemos reaproveitar as camadas para qualquer tipo de aplicação seja ela para desktop, web ou mobile. Vamos a Prática Criando o banco de dados O script abaixo é a criação do banco de dados, tabela, inclusão de registros e as stored procedure’s. O script também apresenta alguns comandos SQL para inserção na tabela PRODUTO, você pode usar qualquer ferramenta que faz a criação do banco, tabela e stored procedure no MySql. CREATE DATABASE LOJA USE LOJA; CREATE TABLE IF NOT EXISTS PRODUTO ( ID INTEGER PRIMARY KEY NOT NULL AUTO_INCREMENT, DESCRICAO VARCHAR(30) NOT NULL, PRECO DOUBLE(6,2) ); INSERT INTO PRODUTO (DESCRICAO, PRECO) VALUES('TV PLASMA',1200.00); INSERT INTO PRODUTO (DESCRICAO, PRECO) VALUES('GELADEIRA',950.00); INSERT INTO PRODUTO (DESCRICAO, PRECO) VALUES('MICROONDAS',370.00); INSERT INTO PRODUTO (DESCRICAO, PRECO) VALUES('FERRO',150.00); CREATE PROCEDURE SELECTPRODUTO() SELECT * FROM PRODUTO;

Por: Anderson Bermar / Juliano Schimiguel

Page 5: Codificando .NET Magazine - Edição 09

www.codificando.net

e-m

agazine Codific

ando.net

e-magazine

Abril / Maio 2009 | 5555

using System; using System.Collections.Generic; using System.Text; using System.Data; //manespace para conexão com MySql using MySql.Data.MySqlClient; namespace DAL { public class Produtos { //string de conexão para o banco MySql public string str = "database=loja; data source=localhost; user id=root; password=mysql" ; //Método para selecionar os dados, através da procedure SELECTPRODUTO retorna um DataSet public DataSet Select() { MySqlConnection conn = new MySqlConnection(str); MySqlCommand cmd = new MySqlCommand("SELECTPRODUTO", conn);

CREATE PROCEDURE INSEREPRODUTO ( IN D VARCHAR(30), IN P DOUBLE(6,2) ) INSERT INTO PRODUTO (DESCRICAO, PRECO) VALUES(D,P); Na figura 1 mostra como ficou a criação do banco.

Criando a DAL Agora abra o Visual Studio 2005, e crie um projeto do tipo Class Library conforme a figura 2, na linguagem C#, salve o projeto onde desejar. Renomeie a classe Class1 para Produtos, e clique com o botão direito na pasta References e escolha a opção Add Reference figura 3. Abrirá uma caixa de dialogo, e na aba .net, localize a opção MySql.Data figura 4, selecione e clique em ok, a Solucion ficará conforme a figura 5.

O script 2 apresenta o código da classe Produtos.

Acessando o MySql com ASP.NET.

Figura: 01

Figura: 02

Figura: 03

Figura: 04

Page 6: Codificando .NET Magazine - Edição 09

www.codificando.net

e-m

agazine Codific

ando.net

e-magazine

Abril / Maio 2009 | 6666

cmd.CommandType = CommandType.StoredProcedure; MySqlDataAdapter dtAdapter = new MySqlDataAdapter(cmd); DataSet ds = new DataSet(); dtAdapter.Fill(ds); return ds; } //Método para inserir na tabela PRODUTOS, através da procedure INSEREPRODUTO public void Insert( string desc, double preco) { MySqlConnection conn = new MySqlConnection(str); MySqlCommand cmd = new MySqlCommand("INSEREPRODUTO", conn); cmd.CommandType = CommandType.StoredProcedure; cmd.Parameters.AddWithValue( "D" , desc); cmd.Parameters.AddWithValue( "P" , preco); conn.Open(); cmd.ExecuteNonQuery(); conn.Close(); } } }

Compile a aplicação em Build>Build Solution ou Ctrl + Schift + B. Criando o WebSite Depois de compilado o projeto DAL, no Visual Studio clique em File>Add>New Web Site.

Componente ID Text

TextBox txtDescricao

TextBox txtPreco

Button btnEnviar Enviar

GridView GridProdutos

ObjectDataSource ObjectDataSource

Acessando o MySql com ASP.NET.

Figura: 05

Figura: 06

Na caixa de dialogo que abrir, escolha ASP.NET Web Site, linguagem C#, File System, e escolha a mesma pasta do projeto que foi salvo a DAL. A figura 6 apresenta a página Default.aspx, que é a página onde vamos trabalhar, crie uma semelhante .

Após criar a página, temos que referenciar a DAL no projeto web, na aba Solution Explorer, clique com o botão direito em cima do projeto do web site e escolha a opção Add Reference. Na janela Add Reference, na aba Projects escolha DAL conforme figura 7.

Figura: 07

Page 7: Codificando .NET Magazine - Edição 09

www.codificando.net

e-m

agazine Codific

ando.net

e-magazine

Abril / Maio 2009 | 7777

Acessando o MySql com ASP.NET.

Volte na página Default.aspx, no componente ObjectDataSource clique na Smart tag (seta que fica em cima do componente), e escolha a opção Configure Data Source. Irá aparecer um wizard, e na primeira tela em Choose your business object selecione o Class Library DAL, a Class Library DAL já traz a classe Produtos automaticamente. Clique em Next, na próxima tela na aba Select defina o método que criamos na classe Produtos, clique em finish. Clique na Smart tag do GridView e em Choose Data Source escolha o Object Data Source. Pronto já fizemos a conexão com o banco de dados.

Dê um duplo clique no botão enviar e digite o código do script abaixo. protected void btnEnviar_Click( object sender, EventArgs e) { //Criação do objeto da classe DAL DAL. Produtos produto = new DAL. Produtos (); //Método da stored procedure produto.Insert(txtDescricao.Text.Trim(), double .Parse(txtPreco.Text.Trim())); }

Compile o web site, e na aba solution Explorer, clique com o botão direito em cima do projeto web e selecione a opção Set as StartUp Project , execute e teste a sua aplicação.

Conclusão Este artigo teve por finalidade mostrar como podemos acessar com .net o MySql. Criamos as stored procedure’s para separar as consultas SQL da camada DAL, camada que faz a conexão com o banco, e acessamos o banco de dados de duas formas, uma foi criando um objeto da classe Produtos e chamando o método Insert, passando os argumentos descrição e preço, e a outra maneira foi com o componente ObjectDataSource que fez a comunicação entre a interface e a camada de acesso a dados, um componente muito poderoso da versão 2.0 que faz a comunicação com o GridView e a classe produtos.

Figura: 08

Figura: 09

Page 8: Codificando .NET Magazine - Edição 09

www.codificando.net

e-m

agazine Codific

ando.net

e-magazine

Abril / Maio 2009 | 8888

Tutorial XNA - Hello Word

Demonstração de como se faz para se animar uma sprite no XNA.

Por: Edson Aparecido do Nascimento

Estou aqui para demonstrar como se faz para se animar uma sprite no XNA. Primeiro vamos definir o que é uma sprite. Segundo a wikipédia (onde achei a melhor definição), uma sprite (do latim spiritus, significando "duende", "fada") é um objeto gráfico bi ou tridimensional que se move numa tela sem deixar traços de sua passagem (como se fosse um "espírito"). Os sprites foram inventados originalmente como um método rápido de animação de várias imagens agrupadas numa tela, em jogos de computador bidimensionais, usando hardware especial. A medida que a performance dos computadores melhorou, esta otimização tornou-se desnecessária e o termo evoluiu para referir-se especificamente às imagens bidimensionais que eram integradas numa determinada cena, isto é, figuras geradas por hardware ou software eram todas referenciadas como sprites. A medida que gráficos tridimensionais tornaram-se mais comuns, o termo passou a descrever uma técnica elementar de simulação de imagens em 2.5D ou 3D que prescinde do uso de renderizações complexas. Bom, vamos à animação, primeiramente vamos abrir um novo projeto no XNA e dar a ele o nome de Hello World. Na janela Solution Explorer veremos que dentre os objetos criados existem dois arquivos de classe, um é o Program.cs no qual não iremos mexer, o outro é o Game1.cs no qual faremos o nosso código. Assim que abrirmos o Game1.cs veremos que parte do código já vem escrita para facilitar nosso entendimento.

Na primeira parte do código veremos as bibliotecas que o XNA estará usando. Para quem está acostumado com a linguagem C, o termo “using” do XNA é o mesmo que o “#include”. Logo abaixo temos a nomenclatura do projeto definida pelo termo “namespace”. Depois temos a definição de uma classe do tipo public “public class Game1 : Microsoft.Xna.Framework.Game” (esses dois pontos colocados após o nome da classe tem a mesma função que o termo “extends” usado em Java, ou seja, ele estende os termos dessa classe à biblioteca de frameworks do XNA). Seguindo nosso projeto temos: GraphicsDeviceManager graphics; SpriteBatch spritebatch; A primeira linha se refere à criação de uma variável graphics do tipo GraphicsDeviceManager, na qual iremos declarar as propriedades gráficas da tela. Na segunda linha declaramos uma variável spritebatch do tipo spritebatch. Aqui faremos a primeira alteração, para facilitar o nosso entendimento alteramos o nome dessa variável para sb, deixando a linha assim: SpriteBatch sb; Agora vamos declarar as outras variáveis a serem utilizadas, e é isso que vamos fazer na linha abaixo da declaração de SpriteBatch. Digitaremos as seguintes variáveis: Texture2D globo; int linha = 0; int coluna = 0; int largura, altura;

Page 9: Codificando .NET Magazine - Edição 09

www.codificando.net

e-m

agazine Codific

ando.net

e-magazine

Abril / Maio 2009 | 9999

Double tempo; GameTime tempojogo; Seguindo no nosso projeto vemos que logo abaixo existe a declaração de public game já estruturada, e abaixo temos a Initialize() onde iremos começar a carregar nosso jogo. Já temos declarado a linha base.Initialize() e em seguida vamos declarar o título da janela, sua altura e sua largura. Ficará assim: base.Initialize(); Window.Title = "Hello World"; \\ aqui definimos o nome da janela graphics.PreferredBackBufferHeight = 512; \\ definição da altura em 512 pixels graphics.PreferredBackBufferWidth = 512; \\ definição da largura em 512 pixels graphics.ApplyChanges(); \\ aplicamos as mudanças

Na sequência temos o módulo LoadContent onde carregaremos a imagem, lá já existe linha: spritebatch = new SpriteBatch(GraphicsDevice); A qual devemos lembrar de alterar o nome da variável, pois o altermos no início do programa, então a linha fica assim: sb = new SpriteBatch(GraphicsDevice); Mas, antes dessa linha devemos chamar nossa figura. Primeiramente vamos na Solution Explorer e clicar com o botão direito em cima de content, no menu que se abre clique em add e depois em new folder. Nomearemos essa pasta criada com o nome de Imagens. Depois clicamos com o botão direito em cima da pasta Imagens e no menu clicamos em add e existing item, uma caixa de busca será aberta e selecionaremos a imagem AnimetedSprite. Igual a figua 01.

Assim nossa imagem será anexada no projeto. Nela também devemos clicar com o botão direito e depois em properties, na janela properties deveremos verificar a propriedade Asset Name, essa propriedade se refere à que nome iremos instanciar a imagem para podermos chamá-la no projeto. Deixe como animatedsprite mesmo. Agora sim podemos voltar ao código. Antes de sb = new SpriteBatch(GraphicsDevice) colocaremos o código: globo = Content.Load<Texture2D>(@"Imagens\animatedsprite"); largura = (globo.Width / 4); altura = (globo.Height / 4);

Nesse código, em sua primeira linha, estamos carregando a imagem, na segunda linha definimos que existe dentro da sprite 4 imagens de largura e 4 de altura.

Em seguida vemos o método UnloadContent() no qual não faremos nenhuma alteração, pois ele não será utilizado nesse projeto. Após ele temos o método Update(GameTime gameTime) no qual já existe uma expressão do tipo if, essa expressão não terá utilidade nese projeto, então podemos apagá-la. No lugar delas vamos escrever o seguinte:

Figura: 01

Tutorial XNA - Hello Word

Page 10: Codificando .NET Magazine - Edição 09

www.codificando.net

e-m

agazine Codific

ando.net

e-magazine

Abril / Maio 2009 | 10101010

tempoJogo = gameTime; if (tempoJogo.TotalGameTime.TotalMilliseconds - tempo > 150) { coluna++; if (coluna > 3) { coluna = 0; linha++; } if (linha > 3) linha = 0; tempo = gameTime.TotalGameTime.TotalMilliseconds; }

Nessas linhas declaramos que a variável gameTime do método update vai se tornar a variável tempojogo que criamos no início. Definimos dentro do método if o tempo de 150 milissegundos para a mudança de quadro da imagem. Lendo o que está escrito seria algo assim: se o tempo for maior que 150 milissegundos então muda-se a coluna (coluna++) se a coluna for maior que 3 então voltamos à coluna 0 (coluna = 0)(lembre-se que em programação o primeiro item é o 0) e mudamos de linha (linha++) e se a linha for maior que 3 voltamos à linha 0.

Logo abaixo desse código temos: base.update(gameTime);

O qual já está escrito no nosso projeto. Por último temos o método Draw() que é responsável por fazer o nosso projeto aparecer na tela. Na primeira linha deles temos: graphics.GraphicsDevice.Clear(Color.CornflowerBlue); Essa linha serve para definir a cor de fundo da tela, onde está CornflowerBlue pode-se colocar

qualquer cor que lhe interesse, para isso basta apagar o nome de CornflowerBlue e digitar outra cor no lugar, no nosso caso utilizaremos o preto (Black). Assim nossa linha de código deverá ficar assim: graphics.GraphicsDevice.Clear(Color.Black); Agora vamos dar sequencia ao código para inicializar o programa, então digitaremos: sb.Begin(); int x = largura * coluna; int y = altura * linha; Rectangle retImagem = new Rectangle(x, y, largura, altura); sb.Draw(globo, Vector2.Zero, retImagem, Color.White); sb.End();

No fim temos a linha: base.Draw(gameTime); a qual já existe no projeto. Agora é só apertar F5 ou ir ao menu Debug > Start Debugging e ver nosso projeto sendo executado. Deverá aparecer uma pequena tela com fundo preto e um globo com os dizeres Hello World girando. Para melhor entendimento abaixo deixo o código completo: using System; using System.Collections.Generic; using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Audio; using Microsoft.Xna.Framework.Content; using Microsoft.Xna.Framework.GamerServices; using Microsoft.Xna.Framework.Graphics; using Microsoft.Xna.Framework.Input; using Microsoft.Xna.Framework.Net; using Microsoft.Xna.Framework.Storage; namespace GameHelloWorld { public class Game1 : Microsoft.Xna.Framework.Game { GraphicsDeviceManager graphics; SpriteBatch sb; Texture2D globo; int linha = 0;

Tutorial XNA - Hello Word

Page 11: Codificando .NET Magazine - Edição 09

www.codificando.net

e-m

agazine Codific

ando.net

e-magazine

Abril / Maio 2009 | 11111111

int coluna = 0; int largura, altura; Double tempo; GameTime tempoJogo; public Game1() { graphics = new GraphicsDeviceManager(this); Content.RootDirectory = "Content"; } protected override void Initialize() { base.Initialize(); Window.Title = "Hello World"; graphics.PreferredBackBufferHeight = 512; graphics.PreferredBackBufferWidth = 512; graphics.ApplyChanges(); } protected override void LoadContent() { globo = Content.Load<Texture2D>(@"Imagens\animatedsprite"); largura = (globo.Width / 4); altura = (globo.Height / 4); sb = new SpriteBatch(GraphicsDevice); } protected override void UnloadContent() { } protected override void Update(GameTime gameTime) { tempoJogo = gameTime; if (tempoJogo.TotalGameTime.TotalMilliseconds - tempo > 150) { coluna++; if (coluna > 3) { coluna = 0; linha++; } if (linha > 3) linha = 0; tempo = gameTime.TotalGameTime.TotalMilliseconds; }

base.Update(gameTime); } protected override void Draw(GameTime gameTime) { graphics.GraphicsDevice.Clear(Color.Black); sb.Begin(); int x = largura * coluna; int y = altura * linha; Rectangle retImagem = new Rectangle(x, y, largura, altura); sb.Draw(globo, Vector2.Zero, retImagem, Color.White); sb.End(); base.Draw(gameTime); } } }

Abaixo segue a tela do programa, onde se intercalam as imagens mostrando o globo girando e a palavra Hello World girando também:

Tutorial XNA - Hello Word

Figura: 02

Page 12: Codificando .NET Magazine - Edição 09
Page 13: Codificando .NET Magazine - Edição 09

www.codificando.net

e-m

agazine Codific

ando.net

e-magazine

Abril / Maio 2009 | 13131313

Uma Metodologia Ágil Scrum Conceituação sobre metodologias ágeis e SCRUM. Por: Fábio Câmara

Introdução Das muitas definições sobre agilidade que podemos encontrar em livros, revistas e na internet, uma das que mais gosto é: _ “Agilidade é a habilidade de criar e responder a mudanças com respeito ao resultado financeiro do projeto em um turbulento ambiente de negócios. Agilidade é a habilidade de balancear flexibilidade com estabilidade”. (Highsmith, Jim. Agile Project Management, 2002) Agilidade é uma proposta de desenvolver projetos com uma estrutura e organização “suficientes”. Muita estrutura e organização reduz a criatividade e a flexibilidade de suportar mudanças, pouca estrutura e organização permeia a ineficiência e resulta em esforços maiores que os necessários. A diferença entre caos e agilidade pode ser verificada nos produtos resultantes. Considerando o mesmo cenário turbulento de negócios¹, nas equipes que convivem com o caos verificamos atrasos constantes, baixissíma qualidade dos sistemas, problemas com estimativas e estouro de orçamento. Nas equipes que utilizam-se de métodos ágeis percebemos entregas parciais constantes, interação com clientes para revisão de estimativas e orçamento conjuntamente com antecedência salutar ao projeto e principalmente dois pontos fundamentais: compromisso com a satisfação do cliente e responsabilidade com o resultado financeiro do projeto.

Empresas procuram métodos ágeis As metodologias ágeis estão disponíveis desde a década passada, porém foi no ano de 2001 que houve a formalização com a assinatura do manifesto ágil (Manifesto for Agile Software Development-http://agilemanifesto.org/). Inicialmente houve uma desconfiança geral por parte da indústria de software, certamente impulsionada pelas diferenças aos métodos tradicionais e as questões das dificuldades de quebra de paradigmas por parte das pessoas. Nesta época tornou-se bastante famosa a metodologia XP (eXtreme Programming), pois propunha sem hipocrisia uma série de métodos polêmicos, muitos deles questionáveis até hoje como por exemplo a programação em pares e o cliente ao lado do desenvolvedor durante o projeto. Lentamente, a indústria de software impulsionada pela necessidade de obter resultados diferentes dos obtidos pelos métodos tradicionais, verificou que pessoas válidas estavam propondo métodos sérios e factíveis. Desta forma, determinadas práticas ágeis começaram a ser utilizadas em projetos de software sem a agressividade² pela adoção plena de uma

¹O autor entende como cenário turbulento de negócios as demandas oriundas de empresas no qual a necessidade de prazos rápidos e a competitividade são predominantes como regra de sobrevivência no seu próprio mercado de atuação. ²O autor define como agressividade neste contexto, a quantidade de procedimentos que deveriam ser mudados

no caso da adoção plena da metodologia ao invés da adoção de apenas alguns dos métodos propostos pela metodologia.

Page 14: Codificando .NET Magazine - Edição 09

www.codificando.net

e-m

agazine Codific

ando.net

e-magazine

Abril / Maio 2009 | 14141414

metodologia ágil. Alguns destes métodos, compreendidos de forma inadequada, causavam uma dificuldade de percepção dos resultados. Um ótimo exemplo disto é a iteração. Iteração (iteration), que em tradução simples quer dizer repetição, é confundido com “interação” ou compreendido como processos repetíveis. Na verdadeira definição ágil, iteração está mais para processos confiáveis do que processos repetíveis. Na lingua inglesa também verificamos este desentendimento quando estudamos em textos ágeis as palavras “repeatable” e “reliable”. A confusão entre confiável e repetível acontece porque muitos gestores de empresas gostam de formalizar processos muito estruturados e precisos (repetíveis) no lugar de formalizar processos suficientemente estruturados e flexíveis (confiáveis). Processos repetíveis focam na entrada das atividades, processos confiáveis focam no resultado das atividades. Outros métodos, por oferecerem propostas mais simples de compreensão e apuração de resultado, começaram a chamar a atenção positivamente da indústria de software. Face a isso, iniciou-se um movimento liderado pelas universidades no Brasil (hoje sou consultor de metodologias ágeis da USP) que objetiva esclarecer os métodos e gerar conteúdos práticos que facilitem a implantação de tais propostas metodológicas. Certificadas de que estes métodos funcionam, as empresas de software começaram a estudar uma proposta de metodologia classificada como ágil, que propõe novos métodos em substituição aos métodos praticados tradicionalmente. Este critério de escolha, que em minha opinião está suficientemente maduro, buscou primeiramente resolver as questões acerca da organização, distribuição e controle das atividades de um projeto de

software. Eis a explicação da escolha da metodologia SCRUM pelo mercado de empresas desenvolvedoras de software. SCRUM, muito simples de usar A metodologia SCRUM está entrando na moda aqui no Brasil, após já haver conquistados inúmeras empresas da indústria de software na América do Norte. Particularmente, eu considero o SCRUM uma proposta extremamente prática e honesta. Defino por prática neste contexto a facilidade de compreensão e aplicação em nosso ambiente de desenvolvimento de software. Defino por honesta a fidelidade entre a proposta do método e o resultado que podemos obter após aplicá-lo. SCRUM, nome utilizado inicialmente pelos japoneses Hirotaka Takeuchi e Ikujiro Nonaka, descrevia um tipo de processo de desenvolvimento de produto utilizado no Japão.Também o nome SCRUM foi escolhido pela similaridade entre o jogo de Rugby e o tipo de desenvolvimento de produto comentado. Ambos são adaptativos, rápidos e promovem a auto-organização. Para explicar SCRUM, utilizarei uma estratégia que foi usada pelo Ken Schwaber³ em seu livro chamado Agile Project Development with SCRUM. Na minha leitura, este é o melhor livro disponível lançado até a presente data. Iniciando um projeto, há uma formalização de todas as coisas que se pretende fazer ou que se precisar construir no projeto. Cada item desta lista representa um requisito funcional, ou requisito não funcional, ou questão de tecnologia / infra-estrutura. Esta lista é denominada Product Backlog. Podemos traduzir Product Backlog como uma

Uma Metodologia Ágil - Scrum

³ Ken Schwaber junto com Jeff Sutherland foram os formalizadores das primeiras versões de SCRUM como metodologia para desenvolvimento de projetos de software. Ken está trabalhando neste projeto desde o início dos anos 90.

Page 15: Codificando .NET Magazine - Edição 09

www.codificando.net

e-m

agazine Codific

ando.net

e-magazine

Abril / Maio 2009 | 15151515

lista de todos os requisitos de um produto priorizados, ou, em outras palavras, é qualquer coisa que represente um trabalho que precisa ser feito para o produto. Os itens com maior prioridade nesta lista são os requisitos mais desejados pelo produto. No projeto real, o Product Backlog nunca é finalizado. Existe uma natural evolução e maturidade dos requisitos nesta lista. Requisitos novos podem aparecer, requisitos existentes podem perder prioridade e podem até serem eliminados. Apesar de se permitir que áreas usuárias manifestem seus pedidos nesta lista, somente o Product Owner pode priorizar o Backlog. O Product Owner possui a responsabilidade de definir a ordem que os requisitos serão produzidos pela equipe de desenvolvimento. Esta equipe deve ser pequena, multi-disciplinar e capaz de desenvolver todos os requisitos. Esta equipe recebe o nome de SCRUM Teams. A preparação dos trabalhos é denominada SPRINT Planning. SPRINT Planning é composta dos seguintes ingredientes: Product Backlog, a capacidade de desenvolvimento da equipe, as condições e exigências do negócio, as características da tecnologia a ser usada e o comprometimento em entregar produtos executáveis incrementais. A mistura são revisões, administração e organização. Os resultados são SPRINT Goal e SPRINT.

O SCRUM Team deve desenvolver os itens separados pelo Product Owner em um determinado prazo previamente combinado. Este prazo é definido como Time Box e o trabalho de desenvolver os itens separados neste time box é denominado SPRINT. Estes itens separados do Product Backlog fazem parte de uma nova lista. Esta lista, chamada SPRINT Backlog, será de total responsabilidade do SCRUM Team que deverá mantê-la e organizá-la de tal forma a atender os objetivos do específico SPRINT. É permitido ter mais de um SCRUM Team trabalhando no mesmo Product Backlog, por isso os requisitos são devidamente separados em SPRINT Backlog distintos por equipe. Uma idéia deste ciclo é verificada na figura 01. A liderança destas equipes é exercida por um papel denominado SCRUM Master. O SCRUM Master é um facilitador da gestão dos requisitos e direcionador da gestão das equipes. Este papel deve garantir a correta utilização das práticas de SCRUM, deve ajudar a equipe a tomar decisões e apoiar a equipe para adquirir os recursos necessários para o desenvolvimento do produto. Este método de liderança é exercido através de 3 recorrentes tipos de reunião: SCRUM Daily Meeting, SPRINT Review e Retrospective. Começando pelo SPRINT Review que é a reunião típica de final de SPRINT (alguns SCRUM Team também a fazem no meio do

Figura: 01

Uma Metodologia Ágil - Scrum

Page 16: Codificando .NET Magazine - Edição 09

www.codificando.net

e-m

agazine Codific

ando.net

e-magazine

Abril / Maio 2009 | 16161616

SPRINT) para validar o produto executável que a equipe conseguiu incrementar. Explicando a Retrospective, é uma reunião que também acontece ao final do SPRINT com o objetivo de fortalecer a unidade de ação da equipe. Três perguntas deverão ser respondidas com seriedade por todos os membros do SCRUM Team: 1. O que você fez e gostou neste SPRINT? 2. O que você fez e não gostou neste

SPRINT? 3. O que você vai fazer diferente no

próximo SPRINT? O desenvolvimento de projetos de software é um desafio constante, é uma atividade complexa. Todo processo complexo exige uma intensa comunicação entre todos os membros do projeto. SCRUM Daily Meeting é a resposta para promover a comunicação da equipe. Todos os dias, obrigatoriamente, todo o SCRUM Team irá se reunir por 15 minutos aproximadamente para responder a 3 importantes perguntas. Sugerimos que está reunião seja de pé, pois temos verificado bons resultados em nossas práticas. As perguntas são: 1. O que eu fiz desde a última SCRUM

Daily Meeting até agora? 2. O que eu vou fazer hoje? 3. O que pode me impedir? Adicionalmente as técnicas apresentadas neste

artigo, temos observado que a utilização de KANBAN (ver figura abaixo) ajuda a maximizar o comprometimento da equipe e a comunicação de todos os comprometidos e envolvidos com o projeto. Figura 2- Nossa implementação de KANBAN na empresa REPOM dirigida pelo SCRUM Master Marcelo Martins. As cores amarela e laranja representam diferentes complexidades das atividades. A cor pink representa atividades não planejadas no SPRINT que foram incluídas por motivo de força maior. Por se tratar de um extenso assunto, abordaremos detalhes explicativos sobre o que é KANBAN e como se utiliza em projetos de software no nosso próximo artigo técnico. Considerações Finais Nós, praticantes das metodologias ágeis, acreditamos que todos os projetos são diferentes. A tecnologia destes projetos são diferentes. As pessoas, os requisitos idem. Nós não queremos ser indivíduos críticos do que existe há muito tempo na engenharia de software, nós queremos sugerir, proporcionar e fundamentar alternativas novas para resolver problemas antigos. Na grande maioria das consultorias que ministro sob a titulação de “coaching” para fins de crescimento dos resultados qualitativos e produtivos de equipes de desenvolvimento de software, encontro pessoas que utilizando-

Para saber mais recomendamos os livros:

Agile Project Management by Jim Highsmith.

Agile Software Development with SCRUM by Ken Schwaber e Mike Beedle.

Agile Project Management with SCRUM by Ken Schwaber.

Treinamento MSF Agile + SCRUM + Agile Methods em http://www.fcamara.com.br

Uma Metodologia Ágil - Scrum

Page 17: Codificando .NET Magazine - Edição 09

www.codificando.net

e-m

agazine Codific

ando.net

e-magazine

Abril / Maio 2009 | 17171717

se de métodos tradicionais ou simplesmente de improviso diário (também denominado “ausência de métodos”) revelam-me uma estranha e frustrante sensação – A Síndrome do Trabalho Vazio. A STV é a sensação que ocorre depois de um intenso dia de trabalho repleto de aborrecimentos e de atividades urgentes, quando percebe-se que no final todas as atividades planejadas para aquele dia não puderam ser implementadas. É uma constatação que se é uma espécie de marionete do tempo, da empresa e dos clientes. A utilização de métodos ágeis, com a adequação mental conforme os princípios estabelecidos pelas metodologias ágeis,

Uma Metodologia Ágil - Scrum

mudaram minha vida profissional perante o cenário anteriormente descrito. Eu consigo fazer atividades planejadas, consigo priorizar atividades importantes e tenho um pequeno índice de atividades urgentes no meu dia-a-dia. Eu me sinto protagonista do meu dia. As metodologias ágeis são uma positiva proposta para as empresas desgastadas com os resultados proporcionados por “waterfall approach to software development” ou pela ausência de métodos. Para iniciantes em metodologias ágeis, eu recomendo o SCRUM. Para praticantes de métodos ágeis que não conhecem o SCRUM, permitam-se mais uma evolução. Sucesso em seus projetos.

Page 18: Codificando .NET Magazine - Edição 09

www.codificando.net

e-m

agazine Codific

ando.net

e-magazine

Abril / Maio 2009 | 18181818

SQL Server Audit Neste artigo, abordaremos o SQL Server Audit, que é mais uma feature disponível no SQL Server 2008 para a realização de auditoria.

Por: Demetrio Silva

A versão do SQL Server 2008 trouxe diversas novas features que há muito tempo a comunidade aguardava. Neste artigo, abordaremos a SQL Server Audit, que é mais uma feature disponível no SQL Server 2008 para a realização de auditoria. O que é auditoria? É uma forma de registrar dados das ações realizadas pelos usuários, como por exemplo: • Alterações no esquema do banco de

dados; • Alterações de logins; • Consulta, alteração, exclusão e inclusão

de dados. Auditoria é muito importante para sistemas que trabalham com dados confidenciais ou críticos, visto que ela visa controlar data, hora, usuário e demais informações das ações realizadas. Por lei, sistemas da área financeira e de saúde, precisam realizar auditoria das ações realizadas. Enfim, uma auditoria pode nos ajudar a rastrear uma gama enorme de informações sobre as ações realizadas em um sistema como um todo. O que é o SQL Server Audit?

Um mecanismo que permite a realização de auditoria de diversas ações a nível instância e de database, ações essas como:

• select, insert, update e delete em determinadas tabelas ou esquemas;

• logins bem ou mal sucedidos; • backup e restore; • dentre outros. Para uma lista detalhada sobre operações que podem ser auditadas, a nível de instância, database e auditoria, consulte audit-level audit actions [SQL Server] no BOL. Como funciona?

O SQL Server Audit usa a infraestrutura do SQL Server Extended Events introduzida no SQL Server 2008. Os Extended Events registram todas as ações auditáveis ocorridas no servidor. Para mais informações consulte Extended Events no BOL. Os dados auditados podem ser gravados nos seguintes locais:

Nota: O processo de gravação dos dados da auditoria pode trabalhar de duas formas: 1. Síncrona: Os dados auditados são gravados antes de terminar uma transação ou ação; 2. Assíncrona: Os dados auditados são gravados após o término de uma transação ou ação. O parâmetro QUEUE_DELAY, que será demonstrado adiante, define a forma de gravação dos dados da auditoria. Caso o valor do parâmetro seja zero a auditoria será síncrona, do contrário, será assíncrona.

Page 19: Codificando .NET Magazine - Edição 09

www.codificando.net

e-m

agazine Codific

ando.net

e-magazine

Abril / Maio 2009 | 19191919

• Application Event Log; • File System; • Security Event Log. As ações auditadas, como citado anteriormente, podem ser a nível de instância ou de database. Neste artigo, iremos mostrar como auditar ações nos dois níveis e também como recuperar os dados auditados. Antes de iniciarmos a parte prática, iremos falar sobre alguns objetos que fazem parte do SQL Server Audit. São eles: 1 - Server Audit

É um Container para os audit specifications. Ele está associado à instância, visto que, SQL Server Audit não trabalha com múltiplas instâncias. É no Server Audit que ficam guardadas informações sobre onde serão gravados os arquivos de auditoria, o tamanho máximo de cada arquivo, se o modo de auditoria será Síncrono ou Assíncrono, dentre outros. 2 - Audit Specifications Determinam quais ações serão auditadas. Estão divididos em dois tipos: 2.1 Server Audit Specifications: determina as ações a serem auditadas para uma instância, portanto, existe somente no banco master. Ele usa grupos de ações para determinar quais ações deverão ser auditadas. Aplica-se quando necessitamos realizar auditoria de ações a nível de servidor, como por exemplo, um login bem sucedido. Exemplo: TRACE_CHANGE_GROUP é um grupo de ações que audita as seguintes ações: • Starting a trace; • Stopping a trace; • Altering a trace; • Enabling a C2 audit;

• Disabling a C2 audit. 2.2 Database Audit Specifications: em alguns cenários possuímos instâncias com diversos databases funcionando, no entanto, necessitamos auditar apenas um ou alguns databases nesta instância. Nestes casos, ao invés de usar a auditoria a nível de servidor( instância), podemos usá-la a nível de database. Diferente do Server Audit Specification, que só trabalha com grupos de ações, o Database Audit Specification nos permite, tanto auditar grupos de ações, como também apenas algumas ações de determinados grupos. Por exemplo: Para auditar selects apenas em um database chamado DB1 através do Server Audit Specification, deveríamos usar o grupo de ações chamado SCHEMA_OBJECT_ ACCESS_GROUP. No entanto, este grupo iria auditar não somente selects mas também inserts, updates e todas as outras ações contidas neste grupo. A auditoria também seria feita para essas ações em todos os demais databases desta instância. Isso poderia gerar uma carga extra desnecessária nos demais databases, visto que, a necessidade de auditoria era apenas para o database DB1. Para contornar este problema, podemos usar o Database Audit Specification e auditarmos apenas as ações de SELECT no database DB1 Diferente do Server Audit Specifications, usando o Database Audit Specifications, podemos auditar as ações individuais e não apenas através de grupos de ação. 2.3 Database e Server Audit Specifications: são grupos de ação no nível de auditoria, ou seja, é possível auditar a criação de um Server Audit ou Server Audit Specification por exemplo. Sendo auditar as ações no processo de auditoria a nível de database e servidor.

SQL Server Audit

Page 20: Codificando .NET Magazine - Edição 09

www.codificando.net

e-m

agazine Codific

ando.net

e-magazine

Abril / Maio 2009 | 20202020

Prática

1 - Criando um Server Audit

O comando abaixo cria um objeto Server Audit Assíncrono, chamado srvAudit que armazenará os dados auditados em um FILE SYSTEM, com tamanho máximo de 10 MB por arquivo num total de 100 arquivos. Após criado, é necessário alterar seu state para ON. USE MASTER; GO CREATE SERVER AUDIT srvAudit TO FILE ( FILEPATH = 'c:\' , MAXSIZE = 10MB, MAX_ROLLOVER_FILES = 100 , RESERVE_DISK_SPACE = ON )

WITH ( QUEUE_DELAY = 1000 ,--caso o valor fosse 0 a forma de gravação seria síncrona ON_FAILURE = CONTINUE, AUDIT_GUID = '0D54EF3D-9020-4AE7-A0A3-31D9D43ACAA4' ) GO ALTER SERVER AUDIT srvAudit WITH ( STATE = ON);

2 – Criando um Server Audit Specification

O comando abaixo cria um Server Audit Specification, no container srvAudit que audita falhas de Login. USE MASTER GO CREATE SERVER AUDIT SPECIFICATION srvAuditSpecification FOR SERVER AUDIT srvAudit ADD ( FAILED_LOGIN_GROUP ) WITH ( STATE = ON ) Mas, suponhamos que após criar o srvAuditSpecification acima, fosse necessário adicionar o grupo de ações SUCCESSFUL_LOGIN_GROUP ( logins bem sucedidos ). Antes de adicionar o novo grupo ao srvAuditSpecification, devemos setar seu state como OFF. O seguinte script realiza este procedimento: USE MASTER GO ALTER SERVER AUDIT SPECIFICATION srvAuditSpecification WITH ( STATE = OFF ) GO ALTER SERVER AUDIT SPECIFICATION srvAuditSpecification ADD ( SUCCESSFUL_LOGIN_GROUP ) WITH ( STATE = ON ) E, por fim, caso fosse necessário dropar, por

FILEPATH Pasta onde serão gravados os arquivos de dados da auditoria.

MAXSIZE Tamanho máximo de cada arquivo de auditoria.

MAX_ROLLOVER_FILES

Quantidade de arquivos que podem ser criados. Para o nosso exemplo, serão criados 100 arquivos de 10MB cada, sendo possível o armazenamento de 1GB ( 10 arquivos X 100 MB ) de dados de auditoria.

RESERVE_DISK_SPACE

Se é necessário pré-alocar espaço no disco. Este espaço é igual ao valor do parâmetro MAXSIZE. Somente deve ser setado como ON quando o valor de MAXSIZE for diferente de UNLIMITED.

QUEUE_DELAY

Este valor especifica o tempo de gravação dos dados. Caso seja passado o valor zero, o modo de auditoria passa a ser Síncrona.

ON_FAILURE Indica se a instância será “derrubada” ou continuará em caso de falha.

AUDIT_GUID Para dar suporte em cenários de Espelhamento, o SQL Server Audit precisa de um GUID. Ele não pode ser alterado após criada a auditoria.

Descrição dos parâmetros

SQL Server Audit

Page 21: Codificando .NET Magazine - Edição 09

www.codificando.net

e-m

agazine Codific

ando.net

e-magazine

Abril / Maio 2009 | 21212121

exemplo, o grupo FAILED_LOGIN_ GROUP: USE MASTER GO ALTER SERVER AUDIT SPECIFICATION srvAuditSpecification WITH ( STATE = OFF ) GO ALTER SERVER AUDIT SPECIFICATION srvAuditSpecification DROP ( FAILED_LOGIN_GROUP ) WITH ( STATE = ON ) 3 – Criando um Database Audit Specification Iremos mostrar agora como criar um Database Audit Specification para auditar selects para a tabela Person.Address e selects no Schema HumanResources. USE AdventureWorks GO CREATE DATABASE AUDIT SPECIFICATION dasSelect FOR SERVER AUDIT srvAudit ADD ( SELECT ON Person . Address BY PUBLIC ), ADD ( SELECT ON SCHEMA:: HumanResources BY PUBLIC ) WITH ( STATE = ON ) GO Visualizando os dados auditados

Por fim, para visualizarmos os dados gerados, que no nosso caso estão gravados em arquivo, existem duas formas: 1. Usando o SSMS: em <instância>\

Security\Audits, clicando com o botão direito e então View Audit Logs.

2. Usando a função de sistema fn_Get_ Audit_file: com esta função, podemos visualizar os dados auditados de apenas um arquivo ou de todo um diretório.

Exemplo:

SELECT STATEMENT AS comando , * FROM SYS. fn_Get_Audit_file ( 'c:\*' , DEFAULT, DEFAULT) ORDER BY event_time DESC Esta função retorna uma tabela contendo informações sobre as ações auditadas. Mais informações sobre o conteúdo de cada coluna podem ser vistas no BOL [fn_Get_Audit_file]. Vale lembrar que, como a auditoria pode trabalhar de forma síncrona e assíncrona, os dados auditados podem não estar gravados no momento do select, isso vai depender do parâmetro QUEUE_DELAY configurado na criação do Server Audit. Conclusão SQL Server Audit é uma nova feature do SQL Server 2008, que comparada com outros mecanismos, como C2 Audit, SQL Trace, Event Notifications e DDL Triggers, possui uma enorme flexibilidade e facilidade, além de gerar um menor overhead que os outros citados.

SQL Server Audit

Page 22: Codificando .NET Magazine - Edição 09

www.codificando.net

e-m

agazine Codific

ando.net

e-magazine

Abril / Maio 2009 | 22222222

Utilização de Mashups com Silverlight O Objetivo deste artigo é demonstrar a utilização de mashups dentro do contexto e advento da Web 2.0 .

Por: Roni A. Marcello / Juliano Schimiguel

Resumo Os mashups ganharam aceitação nos últimos anos, impulsionados pela Web 2.0. Inicialmente, os mashups adotaram dados de fontes como Craigslist (http://www.craigslist.org), combinando-os com serviços de mapeamento ou fotografia, para criar visualizações dos dados (por exemplo, http://housingmaps.com). Muitos desses primeiros mashups tinham o consumidor como objetivo mas, em anos recentes, a empresa também começou a se interessar e aceitar os mashups corporativos. As organizações começam a perceber que podem colocar seus serviços bem definidos para produzir bits distintos de lógica do negócio com outros serviços existentes, internos ou externos à organização, para fornecer visões novas e interessantes dos dados. 1. Introdução O Objetivo deste artigo é demonstrar a utilização de mashups dentro do contexto e advento da Web 2.0, e.g. [WEB2.0 2008] , segunda geração de comunidades e serviços baseados na plataforma Web, como wikis, aplicações baseadas em folksonomia e redes sociais , juntamente com a utilização do plugin de desenvolvimento para a plataforma .NET; Microsoft Silverlight, e.g. [MSDN 2008], que é um plug-in para vários navegadores, várias plataformas e vários dispositivos, destinado a oferecer a próxima geração de experiências de mídia baseadas em .NET framework para

desenvolvimento Web, e.g. [MSDN 2008] , além de aplicativos interativos e sofisticados para a Web . 2. Conceituação sobre Mashups 2.1 Definição Mashup, e.g. [MSDN 2008], é uma técnica para a construção de aplicativos que combina dados de várias fontes para criar uma experiência integrada. Atualmente, há muitos mashups hospedados em sites da Internet que oferecem representações visuais de dados abertos ao público. 2.2 Histórico Na medida em que as técnicas para a criação de mashups amadureceram, começamos a ver nas empresas a construção de modelos do negócio baseados nesta tecnologia. No mercado imobiliário norte-americano, Redfin (http://www.redfin. com) e Zillow (http://www.zillow.com) utilizam grandes volumes de dados imobiliários, públicos e privados, (de fontes como autarquias de registro municipais e Multiple Listing Service) combinados com serviços internos de "valor agregado", cujo resultado é apresentado ao usuário em um mapa (utilizando o Virtual Earth da Microsoft e o Google Maps, respectivamente). Há muitos outros tipos de informações que podem ser acrescentadas a um site do setor imobiliário: outras listagens similares, informações sobre escolas e hospitais locais, índices recentes de

Page 23: Codificando .NET Magazine - Edição 09

www.codificando.net

e-m

agazine Codific

ando.net

e-magazine

Abril / Maio 2009 | 23232323

criminalidade, classificados para colocações de trabalho e muito mais.

2.3 Arquitetura de um mashup prototípico

Embora haja grande variação na IU e nas fontes de dados de muitos mashups, ainda assim podemos derivar padrões arquiteturais comuns, compartilhados por todos. Por exemplo, todos os mashups são de natureza Restful (obedecem aos princípios do protocolo de transferência de estado representacional). A Figura 1 ilustra um processamento arquitetural típico. 2.3.1 Dados

Dados agregados e apresentados ao usuário são o principal elemento de qualquer mashup. Embora o diagrama acima descreva a fonte de dados como um banco de dados, para utilização do conceito não é necessário a utilização deste recurso no local, nem para o aplicativo mashup nem para o cliente. Os dados podem vir estritamente dos Web Services serializados para XML ou JSON (este é o padrão mais comum em mashups baseados em Internet). Existem compensações arquiteturais a serem feitas, do armazenamento de dados primários no local ao acesso aos dados feito a cada solicitação. Na medida em que os aplicativos mashups deixam de ser baseados em Internet para serem internos à empresa, tendem a depender menos

dos locais externos de armazenamento de dados. 2.3.2 "Feeds" RSS

O uso de "feeds" RSS (Really Simple Syndication) é uma fonte comum de dados primários ou suplementares . Os "feeds" RSS são fáceis de serem consumidos pois são documentos XML e muitas bibliotecas existem para manipular esses "feeds". A extensibilidade do RSS também é bastante conhecida, como demonstra a quantidade de extensões em uso atualmente, como a adição de vínculos aos "feeds", informações de localização e licenciamento da Creative Commons. 2.3.4 Web Services É também comum incluir chamadas para Web Services . É fácil ver Web Services baseados em WSDL e outros, baseados em REST, com alguns serviços expondo os dois estilos. Os Web Services podem ser usados para oferecer dados adicionais ou transformar os dados submetidos ao aplicativo. Para um mashup baseado em mapa, os dados só podem conter endereços de ruas e uma chamada para Web Service baseado em WSDL ou REST pode ser feita para converter o endereço de rua em uma coordenada longitudinal/latitudinal para o mapa. 2.4 Serviços da plataforma

A Figura 2 representa uma classe especial de serviços, usadas para criar mashups. Estamos chamando estes serviços de plataforma porque fornecem funcionalidade além do modelo típico solicitação/resposta dos Web Services tradicionais. Um exemplo típico disso é o mapeamento de serviços fornecido pelo Virtual Earth. Inclui uma lista completa de capacidades de processamento dos dois lados, cliente e servidor, assim como "serviços na nuvem". Estamos presenciando o surgimento de serviços de bloco de construção baseados na nuvem que começam a criar valor. Por exemplo, o serviço Amazon S3 oferece

Utilização de Mashups com Silverlight

Page 24: Codificando .NET Magazine - Edição 09

www.codificando.net

e-m

agazine Codific

ando.net

e-magazine

Abril / Maio 2009 | 24242424

armazenamento "na nuvem": facilita a exposição de todos os dados estáticos por meio de upload para provedor de armazenamento hospedado. O BizTalk Services da Microsoft é uma plataforma de serviços que oferece uma capacidade diferente: transmite comunicações da Internet por meio de um firewall corporativo e, assim, expõe serviços internos para o consumo de parceiros de negócio ou terceiros que constroem os próprios mashups corporativos. Comunicações transmitidas como fornecidas pelo BizTalk Services é também um serviço útil mesmo dentro de uma única empresa, com muitas unidades de negócio ou com inúmeros segmentos de rede. Uma transmissão de comunicações baseada em Internet pode eliminar a topologia de rede física como um obstáculo às comunicações.

2.5 Aplicativos Pense no aplicativo mashup como uma combinação de serviços de camada intermediária e de lógica leve do negócio. Para aplicativos baseados na Internet, sua codificação é usualmente escrita utilizando tecnologias web (como PHP ou ASP. NET), mas estamos começando a ver a demarcação entre o processamento do servidor e a indefinição do aplicativo cliente, com o surgimento das Rich Internet Applications (RIAs). As RIAs são aplicativos executados no navegador com funcionalidade rica, similar

àquela de muitos aplicativos de desktop. Tipicamente, não exigem uma instalação do lado do cliente, além de um plugin genérico, como o Adobe Flash ou Microsoft Silverlight.

2.6 Aplicativo cliente

O mashup é distribuído e apresentado ao usuário como aplicativo cliente. Para mashups públicos de Internet, o aplicativo cliente mais comum é um navegador web que recebe HTML e JavaScript distribuídos de um servidor web sobre HTTP. Contudo, começamos a ver os mesmos sendo distribuídos também com plataformas RIA. Neste modelo, o cliente pode fornecer mais riqueza visual e até algum processamento. 2.7 Direção futura dos mashups Nas primeiras versões , grande parte da implementação era muito ente diante e demorada. Muitos deles usavam o processamento do lado do servidor (quase sempre com PHP ou PERL) e o cansativo scripting do lado do cliente, na forma de JavaScript, para criar a experiência de mashup. Era comum para a pessoa que os criava criar código personalizado para analisar os conjuntos de retorno XML que recebiam das respectivas fontes de dados. Na medida em que o tempo passou e o processo de desenvolvimento amadureceu, uma boa parte do trabalho ente diante de codificação foi substituída por frameworks e melhores padrões de codificação. Os scripts personalizados no lado do servidor começaram a ser substituídos por bibliotecas padronizadas que automaticamente geram o necessário script do lado do cliente. Presenciamos também a padronização dos formatos de mensagens. Um exemplo disso é a extensão GeoRSS, para o padrão RSS, que permite especificar a longitude e a latitude correlatas dos itens do "feed". Os três principais provedores de serviço de mapeamento (Google, Microsoft e Yahoo) são compatíveis com GeoRSS e isso significa que os mashups com essa extensão RSS

Utilização de Mashups com Silverlight

Page 25: Codificando .NET Magazine - Edição 09

www.codificando.net

e-m

agazine Codific

ando.net

e-magazine

Abril / Maio 2009 | 25252525

praticamente não exigem codificação. Por algum tempo a criação de mashups foi domínio exclusivo do desenvolvedor, mas existe um movimento para colocar a habilidade de criá-los diretamente nas mãos do cliente final. Como os frameworks para sua criação tornaram-se cada vez mais simples de usar e os formatos de mensagens tornam-se mais padronizados, o próximo passo lógico será o de construir ferramentas que possam criar mashups. Algumas dessas ferramentas serão destinadas ao consumidor final. Pipes da Yahoo e Popfly da Microsoft são exemplos de frameworks e ferramentas que permitem aos usuários criar seus próprios mashups. Observamos um crescimento na importância do esquema comum e dos meta dados no desenvolvimento. Atualmente, já observamos o surgimento de outros esquemas-padrão, como a linguagem de marcação de keyhole (KML - Keyhole Markup Language) para descrever dados geoespaciais. Ainda mais interessante será o Microformats, framework de grande potencial, destinado à distribuição de significado semântico, que pode ser facilmente lido por software do tipo mashup. 2.8 Mashups na empresa Imagine-se arquiteto de aplicativos de um sistema de call center que recebe chamadas sobre assistência técnica de garantia e peças sobressalentes. Utilizando o número de telefone do cliente, poderíamos exibir seus registros incluindo um histórico de compras. Esse interessante aplicativo já está implantado em muitas centrais de chamadas. Mas se além de pesquisar as informações do cliente, pudéssemos associar o número do telefone em um mapa, utilizando um serviço disponível ao público e também exibir uma lista de centros de assistência técnica do local ou fornecedores de peças dos produtos incluídos no mapa. Com esses dados em mãos, poderíamos responder as perguntas dos clientes em segundos. E se também pesquisássemos as condições atuais do tempo nessa área ou as

equipes de esportes do local e os resultados dos seus jogos recentes como início de conversação ou passatempo em chamadas de longa duração. 2.8.1 Aproveitar os serviços já construídos por você

O retorno imediato de uma SOA pode ser concretizado quando as organizações começam a mesclar e fazer a correspondência desses serviços entre objetivos novos e existentes. Pode ser instigante iniciar o aproveitamento dos serviços ou aplicativos nos modos jamais imaginados no momento em que foram escritos. (Quicken Loans - mashups para resultados mais rápidos) 2.8.9 Aproveitar os serviços construídos por terceiros

É importante compreender que não se pode ter todas as informações do mundo e que há um retorno sobre o investimento bastante alto quando você simplesmente aproveita o trabalho árduo de outra pessoa, em lugar de reinventar a roda. 2.8.10 Construir serviços que terceiros possam aproveitar Outra oportunidade para as empresas, na medida em que os mashups tornam-se cada vez mais populares, é a de construir serviços que possam ser facilmente consumidos por aplicativos. Voltando ao exemplo que citamos, o atendente do serviço de chamadas pode deixar o cliente feliz informando o endereço da loja mais próxima. Mas, imagine se as próprias lojas expusessem seus inventários e disponibilidade de produtos para o mashup. Agora, o atendente do serviço de chamadas pode fornecer informações ainda mais detalhadas e valiosas ao cliente. Esse tipo de serviço seria importante para o cliente, para a central de chamadas e para a própria loja.

2.9 Plataforma ágil Muitos mashups foram criados para

Utilização de Mashups com Silverlight

Page 26: Codificando .NET Magazine - Edição 09

www.codificando.net

e-m

agazine Codific

ando.net

e-magazine

Abril / Maio 2009 | 26262626

distribuição na plataforma web baseada em padrões (HTML e Java Script). Isto não é uma limitação , mas apenas a forma padrão de distribuir aplicativos na Internet. À medida que vemos os mashups entrarem na empresa, observamos também um número crescente dos mesmos sendo construídos em plataformas RIA (como o Flash da Adobe e o Silverlight da Microsoft) e até mesmo o seu surgimento para desktop , completos e construídos em Windows Presentation Foundation. O processamento em 3-D completo, em plataforma de cliente rica, pode aumentar o se apelo visual. Os mashups corporativos podem aproveitar totalmente essas plataformas mais ricas pois muitas terão maior controle dos desktops. 2.10 Riscos Ao implementar mashups, quatro áreas de risco devem ser consideradas. 2.10.1 Dependências dos serviços Um dos principais riscos de sua criação para o ambiente corporativo ocorre quando se cria uma dependência dos serviços externos à sua empresa ("serviços nas nuvens” - cloud computing ). Os termos dos acordos de serviço deveriam ser analisados antes de se criar uma dependência. Por exemplo, alguns serviços exigem que o software que o usa seja de um site da Internet de acesso público; isto pode ocorrer quando o serviço tem um modelo de receita baseada em publicidade. Os termos também podem estar sujeitos às mudanças, em alguns casos, de formas que poderiam impedir de usá-lo . Para minimizar essa preocupação, procure provedores de serviço cujo modelo se adapte ao seu uso.

2.10.2 Perda de fidelidade dos dados

A perda de fidelidade dos dados exibidos é

outro risco-chave. Na medida em que os dados são visualizados, existe uma tendência de adaptar os dados aos limites da superfície de apresentação. Haverá uma tendência natural de não visualizar pequenos volumes de dados ou de agrupar dados em coleções maiores para economizar espaço na superfície de apresentação. Isso pode "distorcer" a visão que o usuário final tem dos dados.

2.10.3 Política A política também pode ser um obstáculo à criação de mashups. Se o serviço foi criado por terceiros, talvez faça (ou não) exatamente o que você desejou e, para fazer com que o desenvolvedor do serviço modifique-o de acordo com suas necessidades, demora muito. Essa mentalidade é fatal para os mashups. Isso também se manifesta em confiança; se não confia no provedor do serviço, você também não confiará nesse serviço para o seu aplicativo de missão crítica.

2.10.4 "Consumerização" não controlada De acordo com um recente relatório do Gartner, Inc. as tecnologias de consumo estão cada vez mais sendo utilizadas pelas empresas sem consciência, governança ou TI corporativo. Ferramentas voltadas ao consumidor têm enfoque rígido na criação e visualização de um mashup, assim, pode ser muito fácil sua criação inicial, mas a manutenção de longo prazo não é

Utilização de Mashups com Silverlight

Page 27: Codificando .NET Magazine - Edição 09

www.codificando.net

e-m

agazine Codific

ando.net

e-magazine

Abril / Maio 2009 | 27272727

considerada. Veja, também, como seria perigoso ter um usuário final carregando dados corporativos em uma ferramenta pública de mashup como Pipes ou Popfly. Existem muitas formas de minimizar esses riscos. Primeiramente, para serviços internos ou externos, implemente um contrato de nível de serviço (SLA) que descreva claramente as responsabilidades das duas partes, tempos de resposta para requisições de mudança, exigências de tempo de processamento, restrições de largura de banda e todos os outros detalhes relevantes. Depois, esquematize as possíveis exigências de emergência do seu aplicativo, caso haja falha na chamada de determinado serviço. Para alguns serviços, pode ser aceitável simplesmente não apresentar esses dados; com outros serviços, você pode deixar os dados em cachê aos quais poderá recorrer sempre que houver uma falha. Talvez seja preciso ter um serviço secundário alinhado como backup, a ser chamado caso alguma coisa horrível aconteça. Por fim, será preciso abordar as questões e a política de consumerização. Ao contrário da crescente confiabilidade e redundância dos serviços, isto exige um processo de governança. Se a sua organização tiver um processo amadurecido para governar o uso dos serviços, esse processo também deverá ser aproveitado para a criação e o consumo de mashups. 3.Conceituação Silverligth 3.1 Silverligth (anteriormente "WPF/E") Definição : "WPF/E" é o nome de uma nova tecnologia de apresentação na Web criada para ser executada em diversas plataformas. Ele permite a criação de experiências elaboradas,

interativas e visualmente impressionantes que podem ser executadas em qualquer lugar; em navegadores ou em vários dispositivos e sistemas operacionais de desktop (como o Apple Macintosh). De acordo com o WPF (Windows Presentation Foundation), o XAML (eXtensible Application Markup Language) é a base do recurso de apresentação "WPF/E". O XAML é uma tecnologia de apresentação do Microsoft .NET Framework 3.0 (infra-estrutura de programação Windows). No modelo "WPF/E", os designers podem criar a experiência de usuário que desejarem usando o XAML. Um desenvolvedor pode então incorporar diretamente o documento XAML em uma página da Web usando o tempo de execução "WPF/E". Portanto, os dois podem trabalhar mais de perto do que nunca para proporcionar uma experiência de usuário de alto nível.

No núcleo do "WPF/E" está o módulo de aprimoramento de navegador que processa o XAML e desenha os elementos gráficos resultantes na superfície do navegador. Trata-se de um download pequeno (menos de 2 MB) que pode ser instalado quando o usuário

Figura 03 - Microsoft Expression Graphic Designer : ferramenta da Microsoft. Permite que elementos gráficos de outros aplicativos e elementos de design de exportação sejam incorporados em uma variedade de ferramentas de software, incluindo XAML para WPF e "WPF/E". [MSDN 2008]

Utilização de Mashups com Silverlight

Page 28: Codificando .NET Magazine - Edição 09

www.codificando.net

e-m

agazine Codific

ando.net

e-magazine

Abril / Maio 2009 | 28282828

acessa o site com conteúdo "WPF/E". Esse módulo expõe a estrutura subjacente da página XAML aos desenvolvedores JavaScript, de modo que a interação com o conteúdo no nível da página torna-se possível e, portanto, o desenvolvedor pode, por exemplo, gravar manipuladores de eventos, ou manipular o conteúdo da página XAML usando código JavaScript. 4. Utilização Silverligth para criação de Mashups Com a criação do Silverligth plugin, a Microsoft vem apostando na utilização de mashups para competir diretamente com a utilização do Adobe Flash para criação de interface e utilização de componentização para Web 2.0 “rica”. Um exemplo de utilização e desenvolvimento já iniciado juntando os dois conceitos pode ser visualizado nas ferramentas Silverlight Photo Carousel e a ferramenta mais difundida Popfly.[Silverligth 2008] O Popfly permite combinar diversas fontes de dados em uma só aplicação on-line. Pode-se, por exemplo, usar fotos do Flickr como base para a montagem de um slide show. Cada componente do Popfly é representado por um módulo. Para montar o mashup, o usuário arrasta os módulos até a área central da tela e cria links entre as caixas. 5. Conclusão A idéia principal é demonstrar que com a utilização de “web interfaces ricas” surge um novo conceito no desenvolvimento de softwares e aplicativos para o usuário final com a possibilidade e “poder” para ele criar e montar (modularmente) a aplicação que mais se assemelhe a sua necessidade de mercado. A Microsoft através deste novo conceito vem instituindo ferramentas e plataformas para o desenvolvimento e utilização total sobre o conceito de mashups – corporativos ou de uso para público.

Referências WEB 2.0 – World Wide 2.0 – Disponível em : < http://pt.wikipedia.org/wiki/Web_2.0 >.Acessado em:dezembro 2008.

MSDN – Microsoft Developer Network Library – Disponível em: < http://msdn.microsoft.com/pt-br/library/default.aspx >.Acessado em:dezembro 2008.

Quarterly , The McKinsey (2007) , “ How Businesses are Using Web 2.0: A McKinsey Global Survey” – Disponível em : < http://www.mckinseyquarterly.com/article_abstract_visitor.aspx?ar=1913 > .Acessado em: dezembro 2008 Silverligth – Disponível em : < http://blog.programmableweb.com/2007/10/11/silverlight-mashups/ >.Acessado em: dezembro 2008.

Utilização de Mashups com Silverlight

Page 29: Codificando .NET Magazine - Edição 09

www.codificando.net

e-m

agazine Codific

ando.net

e-magazine

Abril / Maio 2009 | 29292929

Evolução da Metodologia do Desenvolvimento de Sistemas Metodologias no desenvolvimento de software e o modo como elas evoluíram no decorrer dos anos. Por: Juliana Prado

Evolução da metodologia do desenvolvimento de sistemas Introdução: Tem como objetivo esclarecer aos desenvolvedores o funcionamento das metodologias no desenvolvimento de software e o modo como elas evoluíram no decorrer dos anos. Em meados da primeira guerra mundial tivemos uma evolução significativa no segmento corporativo. Nesta época o mundo passava por intensas transformações e isto provocou drásticas mudanças no ciclo produtivo das empresas e percebeu-se a necessidade de controlar o seu processo de trabalho. Baseado nestas transformações houve a necessidade de se aplicar o conceito de dinamização de processos e daí surgiu à necessidade de se administrar grandes volumes de dados em organizações de todas as esferas. Com a criação dos computadores comerciais após a segunda guerra mundial tivemos um aumento significativo na dinamização da indústria de computadores e, conseqüentemente, o processo de construção de softwares, para que os mesmos automatizassem processos manuais e pudessem avaliar situações complexas que são parte integrante do cotidiano das organizações. E á partir desse cenário, criou-se modelos de desenvolvimento de softwares que atendessem a determinadas necessidades específicas e ao

mesmo tempo pudessem ser utilizados na elaboração softwares sem grandes complexidades. A seguir são apresentados os modelos de desenvolvimento de softwares. Modelo Cascata O Modelo Cascata, também chamado de Clássico ou Linear, caracteriza-se por possuir uma tendência na progressão seqüencial entre uma fase e a seguinte. Eventualmente, pode haver uma retroalimentação de uma fase para a fase anterior, mas de um ponto de vista macro, as fases seguem fundamentalmente de forma seqüencial. A figura abaixo nos dá uma idéia visual do conceito apresentado acima.

Modelo Iterativo e Incremental O Modelo de ciclo de vida Iterativo e Incremental foi proposto justamente para ser a resposta aos problemas encontrados no Modelo

Figura 01

Page 30: Codificando .NET Magazine - Edição 09

www.codificando.net

e-m

agazine Codific

ando.net

e-magazine

Abril / Maio 2009 | 30303030

em Cascata. Um processo de desenvolvimento, segundo essa abordagem, divide o desenvolvimento de um produto de software em ciclos. Em cada ciclo de desenvolvimento, podem ser identificadas as fases de análise, projeto, implementação e testes. Essa característica contrasta com a abordagem clássica, na qual as fases de análise, projeto, implementação e testes são realizados uma única vez. No Modelo de ciclo de vida iterativo e incremental, um sistema de software é desenvolvido em vários passos similares (iterativo). Em cada passo, o sistema é

estendido com mais funcionalidades (incremental). Existe um processo de desenvolvimento de software que é o principal representante da abordagem de desenvolvimento incremental e iterativo. Conhecido como RUP - Rational Unified Process (Processo Unificado Racional). E foi patenteado pela empresa

Rational, onde trabalham os famosos três

amigos (Jacobson, Booch e Rumbaugh). Agora vamos explanar um pouco da metodologia em espiral que consiste é desenvolvido em uma seqüência de iterações e nisso cada iteração corresponde a uma volta na espiral e cada fase ou atividade é um setor, um “ângulo” da volta. A figura 03 nos dá uma idéia visual do conceito apresentado acima. E com o surgimento desse modelo podemos realizar a construção de versões básicas dos produtos em prazos curtos e deixar novos requisitos para implementação futura, no momento em que se tornam essenciais.

Conforme o avanço tecnológico foi ocorrendo à mudança de paradigma no desenvolvimento de sistemas aconteceu e atualmente trabalhamos com o conceito de metodologia ágil. Muitos ainda se perguntam o que é e qual é a função desta metodologia e em que ela irá melhorar os processos existentes na elaboração de um software.

Vamos entender o que seria primeiramente esse Desenvolvimento ágil de software (do inglês Agile software development) ou Método ágil é um conjunto de metodologias de desenvolvimento de software. O desenvolvimento ágil, tal como qualquer metodologia de software, providencia uma estrutura conceitual para reger projetos de engenharia de software.

Figura 02

Evolução da Metodologia do Desenvolvimento de Sistemas

Page 31: Codificando .NET Magazine - Edição 09

www.codificando.net

e-m

agazine Codific

ando.net

e-magazine

Abril / Maio 2009 | 31313131

A figura 04 nos dá uma idéia visual do conceito apresentado acima. Porém existem vários modelos desta metodologia que são: 1. Cleanroom 2. XP 3. Scrum

Estarei detalhando cada um deles abaixo. Cleanroom é uma metodologia muito utilizada no desenvolvimento de software. É considerada "pesada" pelos padrões da Engenharia de Software, mas muito difundida no desenvolvimento de grandes projetos corporativos.

Figura 03

Figura 04

Evolução da Metodologia do Desenvolvimento de Sistemas

Page 32: Codificando .NET Magazine - Edição 09

www.codificando.net

e-m

agazine Codific

ando.net

e-magazine

Abril / Maio 2009 | 32323232

O processo é baseado no projeto apurado das funções, que são analisadas pelo método de revisão-par com o objetivo de verificar se fazem realmente o que foram especificadas a fazer. Por analogia, podemos comparar esta metodologia com as salas limpas na fabricação de semicondutores, que eliminam a necessidade de se limpar wafers de silício pelo fato de que eles nunca começam sujos. O desenvolvimento Cleanroom remove a necessidade de depuração do programa, assegurando que os erros nunca começam introduzidos no sistema. Programação Extrema (do inglês eXtreme Programming), ou simplesmente XP, é uma metodologia ágil para equipes pequenas e médias e que irão desenvolver software com requisitos vagos e em constante mudança. Para isso, adota a estratégia de constante acompanhamento e realização de vários pequenos ajustes durante o desenvolvimento de software. Scrum é um método ágil que foi concebido como um estilo de gerenciamento de projetos em empresas de fabricação de automóveis e produtos de consumo, por Takeuchi e Nonaka no artigo "The New New Product Development Game”.Eles notaram que projetos usando equipes pequenas e multidisciplinares (cross-functional) produziram os melhores resultados, e associaram estas equipes altamente eficazes à formação Scrum do Rugby (utilizada para reinício do jogo em certos casos). Jeff Sutherland, John Scumniotales, e Jeff McKenna documentaram, conceberam e implementaram o Scrum, como descrito abaixo, na empresa Easel Corporation em 1993, incorporando estilos de gerenciamento observados por Takeuchi e Nonaka. Em 1995, Ken Schwaber formalizou a definição de Scrum e ajudou a implantá-lo em desenvolvimento de software em todo o mundo. Por estarmos vivendo em constante

transformação neste cenário de desenvolvimento de software precisamos realizar uma análise do que foi vivido no passado para assim aprendermos com os erros e percebemos que podemos sempre inovar. Vejam o cenário que antes era a realidade dos desenvolvedores de software. As linguagens de programação eram bastante complexas e, além de não existir o conceito de linguagem visual, envolviam inúmeros cálculos matemáticos e isso exigia que os desenvolvedores possuíssem conhecimentos avançados nas áreas de matemática e física, tornando, assim, uma difícil manipulação delas. A interação do usuário ao software se dava através do teclado e isto fazia com que o usuário que fosse utilizar o computador passasse muito tempo para aprender a manipular o sistema. Pelo que se pode perceber que com a evolução dos paradigmas o cenário mudou significativamente como apresentado abaixo. Com a introdução do mouse nos PCs e o surgimento da interface gráfica surgiu o conceito de linguagens visuais e disso temos atualmente um cenário complexo para o desenvolvimento de sistemas. Por isso o conhecimento das metodologias acima e de sua aplicação no cenário de desenvolvimento pode muitas vezes economizar ciclos de trabalho e como conseqüência há uma economia significativa de dinheiro e trabalho. Não importa se você adotar um ou outra de forma isolada ou integrada o importante que desenvolver soluções vai além de linhas de código depende mais do trabalho das pessoas e de como é tratado cada ciclo deste trabalho.

Evolução da Metodologia do Desenvolvimento de Sistemas

Page 33: Codificando .NET Magazine - Edição 09

www.codificando.net

e-m

agazine Codific

ando.net

e-magazine

Abril / Maio 2009 | 33333333

Criando um Cubo Olap Carga de um cubo OLAP utilizando o Microsoft SQL Server 2005 Analysis Services.

Por: Ivan Sampaio / Juliano Schimiguel

Introdução Quando comecei a pesquisar sobre Business Intelligence, para incluir essa funcionalidade em um ERP, foi bastante difícil descobrir o caminho. No início, parti para procurar uma ferramenta free e não obtive sucesso, principalmente pela falta de documentação, foram dois meses de trabalho intensos sem obter um bom resultado. Então tomei a decisão de analisar o Microsoft SQL Server Analysis Services, em menos de uma semana estava montando meus primeiros cubos. Aqueles dois meses me ajudaram bastante a consolidar os conceitos sobre o assunto, mas com certeza o trabalho com o Analysis Services foi muito gratificante. Já se passaram dez meses e agora tenho a oportunidade de escrever um artigo para passar, de uma forma prática, um caminho a ser seguido para iniciar em um ambiente de Business Intelligence. O objetivo desse artigo é mostrar a criação e carga de um cubo OLAP utilizando o Microsoft SQL Server 2005 Analysis Services. Partindo-se de uma estrutura de informações sobre Notas Fiscais de Vendas, onde a base de dados é xBase, será definida a estrutura multidimensional, tabelas Fato e Dimensões, utilizando o Microsoft SQL Server. Para fazer a carga dos dados, será utilizado um programa escrito em Microsoft Visual FoxPro, transferindo os dados da base xBase para a base de dados multidimensional estruturada no

SQL Server. Para criar o cubo serão definidos todos os passos no Analysis Services, a partir das tabelas Fato e Dimensões criadas no SQL Server.

Desenvolvimento Na prática, quando se pensa em utilizar um cubo para análise de informações, os dados geralmente não estão modelados na forma multidimensional, então partimos do princípio que estão na forma relacional em uma base de dados xBase. Poderiam estar em qualquer outra base de dados, mas para mostrar detalhes de um programa de carga, escolhemos a estrutura xBase que pode ser usada de forma nativa por um programa desenvolvido em Visual FoxPro, que, pela sua simplicidade de codificação, facilitará o seu entendimento. A seguir, mostramos as estruturas originais das tabelas em uma base de dados xBase. Estrutura das Tabelas em xBase

Notas_Fiscais

NUMNTF Numeric 07

CODCLI Caracter 06

DTAEMINTF Date 08

Itens_das_Notas_Fiscais

NUMNTF Numeric 07

CODPRD Caracter 10

VLRPRDNTF Numeric 13 02

QTDPRDNTF Numeric 13 03

Page 34: Codificando .NET Magazine - Edição 09

www.codificando.net

e-m

agazine Codific

ando.net

e-magazine

Abril / Maio 2009 | 34343434

Para criar a base de dados multidimensional, que será utilizada na construção do cubo, usamos o SQL Server. Optamos por ele porque iremos utilizar o Analysis Services para construção do cubo e ambos fazem parte do Microsoft Visual Studio 2005, facilitando em muito o desenvolvimento. A seguir, mostramos as estruturas das tabelas na forma multidimensional em uma base de dados SQL. Estrutura das Tabelas Fato e Dimensões

Programa de Carga Para criar o programa para carga das tabelas da base de dados multidimensional, foi utilizado o Visual FoxPro, por que através dele é possível acessar nativamente uma base de dados xBase e através de ODBC acessar uma base de dados SQL Server. Esse programa é um exemplo, não pretende ser um modelo ideal para programas de carga de tabelas multidimensionais. Nas observações desse artigo, foram colocados alguns detalhes sobre certos cuidados que devem ser tomados para que a sua base de dados multidimensional seja consistente e de fácil e rápida atualização. A seguir, mostramos o programa para a carga de dados em tabelas multidimensionais definidas no SQL Server, a partir de uma base relacional em xBase. Listagem do Programa de Carga clear * Execução da Evento de Carga do Banco de Dados Multidimensional. local oVendas oVendas= createobject("NOTAS_FISCAIS","NOTAS_FISCAIS") oVendas.EvtAtuCub() return .t. * * Classe para atualização do Banco de Dados Multidimensional. define class Notas_Fiscais as Custom * Propriedades da Classe. STRCON="DSN=SQLServer;SERVER=ssss;UID=uuuu;PWD=pppp" IDTCON=0 * Evento para atualização do Banco de Dados Multidimensional. procedure EvtAtuCub * Conexão ao Banco de Dados. this .IDTCON=SqlStringConnect ( this . STRCON) if this .IDTCON<1 ? "O Servidor SQLServer não foi encontrado." return .t. endif * Tabelas Originais em xBase.

Produtos

CODPRD Caracter 10

NOMPRD Caracter 50

Clientes

CODCLI Caracter 06

NOMCLI Caracter 50

NOMCID Caracter 50

CODEST Caracter 02

Produtos (Dimensão)

IDT_Produto Serial

Nome do Produto Caracter 50

Notas Fiscais (Fato)

IDT_Nota_Fiscal Serial

IDT_Emissão_da_Nota_Fiscal Serial

IDT_Cliente Serial

IDT_Cidade Serial

IDT_Produto Serial

Valor das Vendas Numeric

Quantidade das Vendas Numeric

Clientes (Dimensão)

IDT_Cliente Serial

Cliente Caracter 50

Cidades (Dimensão)

IDT_Cidade Serial

Estado Caracter 02

Cidade Caracter 50

Emissões (Dimensão)

IDT_Emissão_da_Nota_Fiscal Serial

Ano Numeric

Mês Numeric

Dia Numeric

Criando um Cubo Olap

Page 35: Codificando .NET Magazine - Edição 09

www.codificando.net

e-m

agazine Codific

ando.net

e-magazine

Abril / Maio 2009 | 35353535

use Clientes alias CLI_TBL in select (1) use Produtos alias PRD_TBL in select (1) use Cidades alias CID_TBL in select (1) use Notas_Fiscais alias NTF_TBL in select (1) select NTF_TBL index on DTEMINNTF tag NTF_TBL use Itens_das_Notas_Fiscais alias INF_TBL in select (1) select INF_TBL index on NUMNTF tag INF_TBL * Selecionando as Notas Fiscais. select NTF_TBL go top do while not eof () ? " * Notas Fiscais..... "+ dtoc(NTF_TBL.DTAEMINTF) * Clientes. select CLI_TBL locate for CLI_TBL.CODCLI=NTF_TBL.CODCLI * Atualização da Dimensão Clientes. if sqlexec ( this .IDTCON,"select * from [Clientes]"+; " where [Nome do Cliente]='"+CLI_TBL.NOMCLI+"'")#1 sqlexec ( this .IDTCON,"insert into [Clientes]([Nome do Cliente])"+; " values ('"+CLI_TBL.NOMCLI+"')") endif * Atualização da Dimensão Cidades/Estados. if sqlexec ( this .IDTCON,"select * from [Cidades]"+; " where [Cidade]='"+CLI_TBL.NOMCID+"'"+; " and [Estado]='"+CLI_TBL.CODEST+"'")#1 sqlexec ( this .IDTCON,"insert into [Cidades]([Cidade],[Estado]"+; " values ('"+CLI_TBL.NOMCID+"','"+CLI_TBL.CODEST+"')") endif * Atualização da Dimensão Emissões. if sqlexec ( this .IDTCON,"select * from [Emissões]"+; " where [Ano]="+ str ( year (NTF_TBL.DTAEMINTF))+; " and [Mês]="+ str ( month (NTF_TBL.DTAEMINTF))+; " and [Dia]="+ str ( day (NTF_TBL.DTAEMINTF))#1 sqlexec ( this .IDTCON,"insert into [Emissão]([Ano],[Mês],[Dia])"+; " values ("+ str ( year (NTF_TBL.DTAEMINTF))+","+; +str ( month (NTF_TBL.DTAEMINTF))+","+; +str ( day (NTF_TBL.DTAEMINTF))+")") endif * Acessando as Dimensões para pegar o IDT_ para atualização da Tabela Fato. sqlexec ( this .IDTCON,"select * from [Clientes]"+; " where [Nome do Cliente]='"+CLI_TBL.NOMCLI+"'",TMP_CLI) sqlexec ( this .IDTCON,"select * from [Cidades]"+; " where [Cidade]='"+CLI_TBL.NOMCID+"'"+; " and [Estado]='"+CLI_TBL.CODEST+"'",TMP_CID) sqlexec ( this .IDTCON,"select * from [Emissões]"+; " where [Ano]="+ str ( year (NTF_TBL.DTAEMINTF))+;

" and [Mês]="+ str ( month (NTF_TBL.DTAEMINTF))+; " and [Dia]="+ str ( day (NTF_TBL.DTAEMINTF),TMP_EMI) * select INF_TBL locate for INF_TBL.NUMNTF=NTF_TBL.NUMNTF do while not eof () and INF_TBL.NUMNTF=NTF_TBL.NUMNTF * Produtos. select PRD_TBL locate for PRD_TBL.CODPRD=INF_TBL.CODPRD * Atualização da Dimensão Produtos. if sqlexec ( this .IDTCON,"select * from [Produtos]"+; " where [Nome do Produto]='"+PRD_TBL.NOMPRD+"'")#1 sqlexec ( this .IDTCON,"insert into [Produtos]([Nome do Produto])"+; " values ('"+PRD_TBL.NOMPRD+"')") endif sqlexec ( this .IDTCON,"select * from [Produtos]"+; " where [Nome do Produto]='"+PRD_TBL.NOMPRD+"'",TMP_PRD) * Atualização da Tabela Fato Notas Fiscais. sqlexec ( this .IDTCON,"insert into [Notas Fiscais]([Valor das Vendas],"+; "[Quantidade das Vendas],"+; "[IDT_Cliente],"+; "[IDT_Cidade],"+; "[IDT_Produto],"+; "[IDT_Emissão_da_Nota_Fiscal])"+; " values ("+ str (INF_TBL.QTDPRDNTF)+","+; +str (INF_TBL.VLRPRDNTF)+","+; +str (TMP_CLI.IDT_Cliente)+","+; +str (TMP_LOC.IDT_Cidade)+","+; +str (TMP_PRD.IDT_Produto)+","+; +str (TMP_EMI.IDT_Emissão)+")") select INF_TBL skip enddo select TMP_NTF skip enddo * Fechando as Tabelas. close databases all endproc * enddefine

Criação do Cubo Para criar o cubo utilizaremos o Visual Studio. Optamos por fazer de forma descrita e não mostrar as telas, pois a quantidade de telas é muito grande e artigo ficaria extenso. Para poder seguir a forma descrita é necessário estar com o Banco de Dados e as

Criando um Cubo Olap

Page 36: Codificando .NET Magazine - Edição 09

www.codificando.net

e-m

agazine Codific

ando.net

e-magazine

Abril / Maio 2009 | 36363636

tabelas na forma multidimensional criadas no SQL Server. Para isso está sendo disponibilizado abaixo um script para ser executado no SQL Server. Esse script irá criar o Banco de Dados e as respectivas tabelas, como descritas acima.

Script para geração do Banco de Dados com as tabelas Fato e Dimensões /* Criação do Banco de Dados Notas_Fiscais */ CREATE DATABASE [Vendas] ON PRIMARY ( NAME = N'Vendas' , FILENAME = N 'C:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\DATA\Vendas.mdf' , SIZE = 3072 KB , MAXSIZE = UNLIMITED, FILEGROWTH = 1024 KB ) GO /* */ USE [Vendas] GO /* Criação da Tabelas Notas_Fiscais */ CREATE TABLE [dbo] . [Notas Fiscais] ( [IDT_Nota_Fiscal] [int] IDENTITY ( 1, 1) NOT NULL, [IDT_Emissão_da_Nota_Fiscal] [int] NOT NULL, [IDT_Cliente] [int] NOT NULL, [IDT_Cidade] [int] NOT NULL, [IDT_Produto] [int] NOT NULL, [Valor das Vendas] [numeric] ( 15, 2 ) NOT NULL, [Quantidade das Vendas] [numeric] ( 15, 2 ) NOT NULL, CONSTRAINT [IDX_Notas_Fiscais] UNIQUE NONCLUSTERED ( [IDT_Nota_Fiscal] ASC ) ON [PRIMARY] ) /* Criação da Tabelas Clientes */ CREATE TABLE [dbo] . [Clientes] ( [IDT_Cliente] [int] IDENTITY ( 1, 1) NOT NULL, [Cliente] [char] ( 50) NOT NULL, CONSTRAINT [IDX_Clientes] UNIQUE NONCLUSTERED ( [IDT_Cliente] ASC ) ON [PRIMARY] ) /* Criação da Tabelas Cidades */ CREATE TABLE [dbo] . [Cidades] ( [IDT_Cidade] [int] IDENTITY ( 1, 1) NOT NULL, [Cidade] [char] ( 50) NOT NULL, [Estado] [char] ( 02) NOT NULL, CONSTRAINT [IDX_Cidades] UNIQUE NONCLUSTERED ( [IDT_Cidade] ASC ) ON [PRIMARY] ) /* Criação da Tabelas Emissões */ CREATE TABLE [dbo] . [Emissões] ( [IDT_Emissão_da_Nota_Fiscal] [int] IDENTITY ( 1, 1) NOT NULL, [Ano] [numeric] ( 04, 0) NOT NULL, [Mês] [numeric] ( 02, 0) NOT NULL, [Dia] [numeric] ( 02, 0) NOT NULL, CONSTRAINT [IDX_Emissões] UNIQUE NONCLUSTERED ( [IDT_Emissão_da_Nota_Fiscal] ASC ) ON [PRIMARY] ) /* Criação da Tabela Produtos */ CREATE TABLE [dbo] . [Produtos] (

[IDT_Produto] [int] IDENTITY ( 1, 1) NOT NULL, [Produto] [char] ( 50) NOT NULL, CONSTRAINT [IDX_Produtos] UNIQUE NONCLUSTERED ( [IDT_Produto] ASC ) ON [PRIMARY] )

Descrição dos passos necessários para criar um Cubo no Visual Studio Utilizando o Visual Studio, vamos descrever passo a passo como criar um cubo baseado nas tabelas acima descritas. - Execute o Visual Studio. - Selecione: File / New / Project... / Business Intelligence Projects Coloque em Name: ..... Notas Fiscais e clique em OK. Irá aparecer no formulário “Solution Explorer” o seu projeto Notas Fiscais. - No Solution Explorer - Notas Fiscais, aparecerão as seguintes pastas: Data Sources, Data Source Views, Cubes e Dimensions. São essas pastas que utilizaremos para criar o Cubo. Data Sources Clicar com o botão direito sobre essa pasta e escolha: New Data Source. No formulário Data Source Wizard, clicar no botão New. No formulário Connection Manager No Server Name: selecione o servidor SQL Server instalado. No Select or enter a database name: selecione Vendas. Clicar no Test Connection para verificar se a conexão está correta. Clicar em OK…Next… No Impersonation Information: selecione Default. Clicar em Next…Finish. Data Source View Clicar com o botão direito sobre essa pasta e escolha: New Data Source View.

Criando um Cubo Olap

Page 37: Codificando .NET Magazine - Edição 09

www.codificando.net

e-m

agazine Codific

ando.net

e-magazine

Abril / Maio 2009 | 37373737

Clicar em Next…Next. Transferir todas as tabelas de Available Objects para Included Objects. Clicar em Next…Finish. Cubes Clicar com o botão direito sobre essa pasta e escolha: New Cube. Clicar em Next... Next... Next... Next... Next......... Finish. Dimensions Clicar na primeira Dimensão. Em Atributos, painel mais a esquerda, clicar com o botão direito no atributo chave. Escolher Propriedades e mudar AtributeHierarchyVisible para False. Repetir esse processo para todas as Dimensões. Processar o Cubo Clicar com o botão direito sobre o Projeto Notas Fiscais escolha: Process. Escolha em seguida clicar em Yes. Obs.: nesse processo podem ocorrer erros, eles são erros provavelmente de definições quanto ao acesso ao servidor SQL. Devem ser analisados e corrigidos por pessoas que tenham domínio do SQL Server.

Navegação no Cubo Navegar no cubo pode ser feito através do Visual Studio ou desenvolver uma interface e utilizar a PivotTable que é um objeto do Excel. No nosso caso vamos utilizar Visual Studio. Abaixo será descrito passo a passo como navegar no Cubo. Clicar na pasta Cubes. Devem aparecer várias páginas no formulário a esquerda. Clicar na página Browse. Irá aparecer um formulário que possui quatro áreas:

Solte campos de totais ou de detalhes aqui. Nessa área podem ser arrastados as measures que estão no painel a esquerda. As measures são os valores que temos nos cubos. Solte campos de linha aqui. Nessa área podem ser arrastadas as Dimensões que estão no painel a esquerda. As dimensões aqui colocadas serão as linhas da tabela. No nosso cubo temos as dimensões Cidades/Estados, Clientes, Emissões e Produtos. Solte campos de coluna aqui. Nessa área podem ser arrastadas as Dimensões que estão no painel a esquerda. As dimensões aqui colocadas serão as colunas da tabela. No nosso cubo temos as dimensões Cidades/Estados, Clientes, Emissões e Produtos. Se você colocou a dimensão na linha não irá conseguir colocar na coluna, mas pode arrastar de um lugar para o outro. Solte campos de filtro aqui. Nessa área podem ser arrastadas as Dimensões que estão no painel a esquerda. As dimensões aqui colocadas serão filtros da tabela, não irão aparecer. No nosso cubo temos as dimensões Cidades/Estados, Clientes, Emissões e Produtos. Se você colocou a dimensão na linha ou coluna não irá conseguir colocar no filtro, mas pode arrastar de um lugar para o outro. Todas essas tarefas, após a primeira vez, ficam bastante intuitivas. Existem várias opções e recursos nesse formulário, vale a pena explora-las. Para se ter uma melhor idéia da Navegação no Cubo, popule as tabelas com dados e você terá uma idéia muito melhor do poder dessa ferramenta para análise das informações.

Conclusões Utilizando o esquema descrito anteriormente, hoje, tenho vários cubos desenvolvidos sendo utilizados pelos usuários do ERP ao qual foi

Criando um Cubo Olap

Page 38: Codificando .NET Magazine - Edição 09

www.codificando.net

e-m

agazine Codific

ando.net

e-magazine

Abril / Maio 2009 | 38383838

incorporado um Business Intelligence, de forma bastante satisfatória. Muito ainda tem que ser feito para que um conjunto de cubos se torne realmente um Business Intelligence, mas isso é questão de estudo e tempo. Como foi observado na introdução, o objetivo desse artigo era mostrar, de forma prática, a criação e carga de um cubo OLAP utilizando o Analysis Services do SQL Server, mas como o assunto é extenso, não daria para ser esgotado em um único artigo. Gostaria de deixar relacionadas algumas observações, com o objetivo de facilitar o trabalho de quem for se aprofundar no assunto. Os campos das tabelas Fato e Dimensões, devem ser de fácil entendimento para o usuário final, pois elas irão aparecer nas Medidas e Dimensões do cubo. Na criação do cubo elas podem ser alteradas, mas se estiverem já no formato final facilitará a criação do cubo no Analysis Services. Uma das grandes dificuldades encontradas quando são disponibilizadas informações em cubos, é a sua atualização. Os primeiros ambientes eram atualizados em processos batch, onde o programa que extraia os dados do ERP e atualizava a base de dados multidimensionais eram executados a noite por ser uma tarefa demorada pois tinha que excluir e inserir as informações de um determinado período anterior pois as informações no ERP poderiam ter sido alteradas. Uma forma de fazer essa tarefa mais rápida e fácil é criar um campo data/hora em todas as tabelas do ERP e baseado nela atualizar a base de dados multidimensional, sem precisar excluir e inserir novamente informações nas tabelas multidimensionais e sim atualiza-las baseando nas informações atualizadas no ERP. Deve ser armazenada em uma tabela auxiliar, a data da última atualização do cubo e o programa de carga deve se basear nela para fazer as próximas atualizações. O programa de carga deve verificar e trazer da

base de dados original somente os dados alterados, como por exemplo, uma nota fiscal que foi cancelada ou uma devolução de nota fiscal, devem ser alteradas e não excluídas e inseridas novamente. Deve ser armazenada em uma tabela auxiliar a data da última atualização do cubo e o programa de carga deve se basear nela para fazer as próximas atualizações. O cubo pode ser atualizado de três formas (ROLAP, MOLAP e HOLAP), eu sempre utilizo o MOLAP, pois minha base de dados não é enorme e garanto com isso um bom tempo de resposta. No MOLAP, os dados da base de dados multidimensional é transferida totalmente para os cubos e isso é feito através de um processo (veja Processar o Cubo em Descrição dos passos necessários para criar um Cubo no Visual Studio). Existe um componente no Visual Studio, o Integration Services que auxilia na criação de tarefas agendadas para fazer esse tipo de processo ser executado automaticamente, assim que for feita a carga de dados nas tabelas multidimensionais. Com um trabalho feito como o descrito para atualização dos cubos, tenho obtido excelentes tempo de atualizações, perto de 30 segundos para atualizar cubos de cerca de 1 milhão de registros. Quanto a navegação no cubo, crie um interface e use o PivotTable do Excel, os usuários ficarão bem mais satisfeitos. Os recursos do Microsoft SQL Server Analysis Services são imensos e devem ser explorados, o objetivo desse artigo é dar uma idéia de como e por onde começar.

Referências [1] W.H.Inmon, J.D. Welch, Katherine L. Glassey (1999) - Gerenciando Data Warehouse Makron Books do Brasil [2] W.H.Inmon, Richard D. Hackathorn (1997) - Como usar o Data Warehouse

Criando um Cubo Olap

Page 39: Codificando .NET Magazine - Edição 09

www.codificando.net

e-m

agazine Codific

ando.net

e-magazine

Abril / Maio 2009 | 39393939

Livraria e Editora Infobook [3] Carlos Barbieri (2001) - BI – Business Intelligence - Modelagem & Tecnologia Axcel Books do Brasil [4] Rebeca M. Riordan (2001) SQL Server Programando Passo a Passo Makron Books do Brasil [5] Reed Jacobson, Stacia Misner e Hitachi Consulting (2006) - Microsoft SQL Server 2005 Analysis Services Passo a Passo – Bookman [6] Microsoft SQL Server 2005 – Manual do software. Microsoft Corporation [7] Ricardo Peralva Costa (2001) - Visual FoxPro Editora Érica [8] Microsoft Visual FoxPro release 8.0 – Manual do software. Microsoft Corporation

Criando um Cubo Olap

Page 40: Codificando .NET Magazine - Edição 09

www.codificando.net Abril / Maio 2009 | 40404040 Abril / Maio 2009 | 40404040

e-m

agazine

Como se tornar um bom desenvolvedor Web?!

O mercado de desenvolvedores Web vem crescendo cada vez mais, na mesma escala que a tecnologia. Os investimentos de publicidade, o número usuários, etc não param de crescer. HTML e CSS – conhecer MUITO os padrões, desenvolver HTML’s com qualidade e CSS tem se tornado um ponto muito relevante, e hoje vejo muita deficiência neste ponto na maioria dos desenvolvedores… SEO, performance, funcionar em todos navegadores tem se tornado obrigação em sistemas web. Javascript e JQuery – por mais que o ASP.NET nos ajude muito em validações de campos, controles completo, existem muitos pontos que podem ser facilmente feitos em Javascript e principalmente JQuery, tornando sua aplicação mais rápida e evitando chamadas desnecessárias ao servidor… mas cuidado, Javascript demais pode ser ruim para SEO. AJAX – não basta conhecer o UpdatePanel do Asp.Net, jogar tudo lá dentro, a tela não pisca e ponto! Existe muito conceito por trás disso e não basta a tela não piscar, tem que ser performática!!! E para fazer aplicações rápidas com AJAX tem que conhecer muito bem o framework e também usar em locais necessários somente.

ASP.NET, C#/VB.Net e conceitos de programação – conhecer muito! O Asp.Net tem uma infra-estrutura de cache muito boa e de uma simplicidade absurda de implementação… perca tempo pensando em cache, pode ser a revolução de seu site. Banco de Dados – manipulação de dados é muito comum… busca dado daqui, insere ali, etc são rotinas comuns… temos que conhecer muito bem também. Hoje o mercado exige cada vez mais bons profissionais de web e os desenvolvedores ASP.Net devem se preparar para ocupar esse mercado e não somente de sistemas internos de empresas.

Conheça o que o mercado espera do profissional de desenvolvimento Web.

Por: Alexandre Tarifa