C# Iniciante – Short Circuiting

 Uma técnica interessante que o C# utiliza é o short circuiting (curto circuito), que significa que se parte de uma declaração é todo verdadeiro ou falso, não há nenhuma necessidade de processar o resto da declaração.

Vamos à prática para entender melhor.

Normalmente a utilização dos operadores lógicos são da seguinte forma:

int valor1 = 60;
int valor2 = 10;
int valor3 = 35;
if ((valor1 > valor2) | (valor2 < valor3))
    Response.Write("Verdadeiro");
else
    Response.Write("False");

if ((valor2 > valor3) & (valor1 > valor2))
    Response.Write("Verdadeiro");
else
    Response.Write("False");

No caso acima, tanto na primeira verificação ((valor1 > valor2) | (valor2 < valor3)) quanto na segunda verificação ((valor2 > valor3) & (valor1 > valor2)) as duas expressões são analisadas, independente se a primeira seja verdadeira ou falsa.

Agora analise o código abaixo, onde utilizamos a técnica short circuiting:

int valor1 = 60;
int valor2 = 10;
int valor3 = 35;
if ((valor1 > valor2) || (valor2 < valor3))
    Response.Write("Verdadeiro");
else
    Response.Write("False");

if ((valor2 > valor3) && (valor1 > valor2))
    Response.Write("Verdadeiro");
else
    Response.Write("False");

Primeira verificação: Neste caso, como o valor1 é maior que o valor2 e o operador lógico condicional utilizado é o OR (||), sem mesmo verificar a segunda instrução o resultado desta verificação é verdadeiro.

Segunda verificação: Neste caso, como o valor2 é menor que o valor3 e o operador lógico condicional utilizado é o AND (&&), sem mesmo verificar a segunda instrução o resultado desta verificação é falso.

Projetando bem as expressões que usam os operadores lógicos condicionais, você poderá aumentar o desempenho do seu código evitando trabalho desnecessário. Utilize a técnica short circuiting, coloque expressões booleanas simples que possam ser avaliadas facilmente no lado esquerdo de um operador lógico condicional e coloque as expressões mais complexas no lado direito. Com isso, em muitos casos as expressões mais complexas não são avaliadas por não ser necessária.

Para comprovar o que digo, crie um método aplicando a verificação convencional e outro aplicando a técnica short circuiting, depois crei um projeto/método de teste e analise o Code Coverage, veja quais expressões são analisadas nos dois casos.

Novas ferramentas para testes da Microsoft

março 30, 2010 1 comentário

No dia 12 de Abril de 2010 a Microsoft lançará sua nova plataforma de desenvolvimento, o Visual Studio 2010, junto com esta nova versão os profissionais de desenvolvimento de softwares, principalmente os de testes, terão novas ferramentas para ajudá-los na difícil missão de garantir a qualidade de um software.

Atualmente, na maioria dos casos, o cenário é:

  • O desenvolvedor finaliza a construção do software e “realiza” os testes unitários.
  • A equipe de testes (e usuários de negócio) partem para realizar os testes em todo o software, elaborando um cenários e roteiros de testes, muitas vezes em excel ou até mesmo no word, coletando as evidências dos testes através do bom e velho print-screen, anexando aos roteiros de testes.
  • Em alguns casos, os bugs encontrados são cadastrados no TFS, onde até então era necessário transcrever todas as informações do excel, criado pelo testador, para o Work Item de bug.
  • O desenvolvedor abre o software, realiza o “mesmo” roteiro e nada de encontrar o bug.
  • Ai inicia-se a batalha entre o desenvolvedor e o testador para reproduzir novamente o problema encontrado.
  • Até que finalmente o desenvolvedor encontra e resolve o bug, disponibilizando uma nova versão do software para uma nova bateria de testes.
  • Eis então que o testador realiza o mesmo roteiro de testes e encontra a maioria dos mesmos bugs reportados anteriormente.
  • E esta batalha continua em meio aos arquivos de excel, do word com os roteiros de testes, as imagens das evidências coletadas e as discussões entre a equipe de testes e de desenvolvimento.

Dentre as várias novidades do Visual Studio 2010 estão aquelas voltadas para os testes, que se destacam:

  • Coded UI Test: Permite automatizar os testes, ou seja, gravar a execução de um roteiro de teste,  navegando nas telas do sistema e preenchendo as opções, e depois re-executar esta “gravação” automaticamente com os mesmos dados ou com uma massa de dados provinda do excel, xml ou banco de dados.
  • Test Case Management: Permite criar cenários e roteiros de testes, tanto para testes manuais quanto para testes automatizados utilizando o Coded UI Test. Com esta nova funcionalidade o testador conseguirá “filmar” todas as ações executadas durante a realização de um determinado roteiro de testes, gerando um arquivo de vídeo .wmv e permitindo tirar um “print-screen” da tela de forma fácil, tudo integrado ao TFS 2010: o roteiro de testes, o vídeo, a imagem com o print-screen e outras informações do ambiente que são coletadas no momento do teste, podem ser anexados a um Work Item do tipo bug, permitindo que os desenvolvedores reproduzam e vejam todas as ações executadas na realização do roteiro de teste.
  • Test Management Configuration: Permite criar máquinas virtuais, seja do host ou client, realizando build/deploy e permitindo a re-execução dos testes nas máquinas virtuais.

Com este novo pacote de funcionalidades a Microsoft promete melhorar e muito a gestão dos testes de software.

Imagine gravar as ações de um roteiro de testes, encontrar bugs, anexar todas as informações necessárias em um Work Item para o desenvolvedor reproduzir e corrigir o problema, o desenvolvedor corrigir o problema e você apenas reproduzir novamente os mesmos roteiros de testes de forma automática? Esta é uma das propostas das novas funcionalidades do Visual Studio 2010.

Abaixo algumas telas:

Lag Management 2010

Central de Testes

Lab Management

Algumas das informações coletadas no momento do teste

 Visual Studio 2010: http://www.microsoft.com/visualstudio/en-us/

Acessando o TFS 2010 através do Visual Studio 2008

O TFS 2010 passou por várias modificações, uma delas (Project Collection) impede o acesso ao TFS 2010 através do Visual Studio 2008, para contornar este problema já temos disponível uma atualização para oVisual Studio 2008.

Baixe aqui esta atualização: Visual Studio Team System 2008 Service Pack 1 Forward Compatibility Update for Team Foundation Server 2010 (Installer).

Esta atualização só funciona se você já tiver o Team Explorer 2008 + Visual Studio 2008 SP1.

Após instalar esta atualização, na caixa de diálogo do Visual Studio que solicitar as informações do servidor do TFS, informe também o Project Collection, conforme exemplo abaixo:

Exemplo:   http://localhost:8080/tfs/DefaultCollection

Até o momento ainda não temos disponível uma atualização destas para o Visual Studio 2005.

Source Safe x Visual Studio Team Foundation Server 2010

Uma das novidades da nova versão do Visual Studio Team Foundation Server 2010 é a possibilidade de instalar uma versão básica do TFS 2010 sem a necessidade de um servidor robusto (como o Windows 2008 Server), agora é possível instalar uma versão básica do TFS em máquinas com o Windows 7 Home Premium por exemplo.

Com esta nova opção de instalação do Visual Studio Team Foundation Server 2010, desenvolvedores e pequenas empresas de desenvolvimento poderão aposentar o bom e velho Source Safe.

Os sistemas operacionais que suportam o TFS 2010 são:

  • Windows Vista® (x86 & x64) with Service Pack 2 or later (all editions except Starter Edition)
  • Windows Server® 2003 (x86) with Service Pack 2 or later (all editions)
  • Windows Server 2003 R2 (x86) or later (all editions)
  • Windows Server 2008 (x86 & x64) with Service Pack 2 or later
  • Windows Server 2008 R2 (x64)
  • Windows 7 (x86 & x64)

Os requisitos mínimos de hardware são:

  • Processador: 2.2GHz
  • 1 GB RAM
  • 8 GB espaço disponível no HD

Para a versão basic, você também precisará de um SQL Server 2008, podendo ser o SQL Server 2008 Express.

A versão basic disponibiliza o controle de versão, rastreamento de bug e automação de build.

Para testar, baixe a versão do Visual Studio Team Foundation Server 2010 RC, a instalação é bem simples, Next, Next, Next.

Diferente da versão 2008, a versão do VSTFS 2010 vem com o conceito de “Team Project Collection” que permite criar vários ambientes com configurações diferentes no mesmo servidor.

Google apresenta nova linguagem de programação

Isso mesmo, o Google está apresentando uma nova linguagem de programação, chamada de “GO”.

Segundo o Google, esta nova linguagem de programação combina a velocidade e a dinâmica do Python com o desempenho das versões compiladas C e C++, e como não poderia deixar de ser… totalmente Open Source.

O projeto para o desenvolvimento desta nova linguagem surgiu em 2008, ela ainda não roda na plataforma Windows, mas já há pacotes tanto para arquiteturas 32 bit quanto 64 bit.

Para saber mais, visite:

Site oficial do “GO”: http://golang.org/

Blogger official do “GO”: http://google-opensource.blogspot.com/2009/11/hey-ho-lets-go.html

Abaixo o famoso “Hello World” escrito em “GO”:

package main

import “fmt”

func main() {

fmt.Printf(“Hello, world\n”)

}

Novidades SQL Server 2008 – Declarative Management Framework

Um dos grandes sonhos de um DBA é o de manter o padrão de nomenclatura dos objetos, muito difícil de conseguir quando se tem um número razoavel de desenvolvedores.

Agora no SQL Server 2008 isso já é possível utilizando a DMF (Declarative Management Framework) que possibilita a adição de políticas no banco de dados para garantir que determinadas diretrizes sejam seguidas.

Através da DMF não só é possível garantir o padrão de nomenclatura de objetos como também garantir que determinadas opções do banco de dados não sejam alteradas, como por exemplo impedir que a opção autoshrink não seja habilitada.

A DMF baseia-se em três objetos:

  • Facets
  • Conditions
  • Policies

Facets são os objetos que possuem propriedades e que podem ter regras aplicadas sobre as mesmas. Exemplos de Facets são: Stored Procedures, Tables, Trigger, etc… Ao todo são 38 Facets.

Para visualizar todas as Facets, vá até o Management Studio, nó “Management” e expanda o  nó “Policy Management” e em seguida “Facets”. Lembrando que as Facets são fixas e não podem ser criadas pelo usuário pois tratam-se de objetos do banco de dados.

Como exemplo, crie uma “Condition” com a expressão @Name LIKE ‘up_%’. botão direito do mouse em “Conditions”, “New Condition”, selecione a Facet “Stored Procedure” e dê um nome a condition, exemplo “Nomenclatura de stored procedure”.

Depois crie uma Policy que vai associar a Facet à Condition criada, para isso clique com o botão direito do mouse em “Policies”, “New Policy”. Em seguida selecione a condition na lista de opções “Check condition” e na opção “Evaluation Mode” selecione “On change: prevent”. Ainda nesta janela, para melhorar, vá até a opção “Description” (ao lado esquerdo superior)  e na caixa de texto “Description” digite um texto que será exibido caso a politica seja violada, ou seja, caso tente-se criar uma stored procedure que não atenda a condição implementada, exemplo do texto “ATENÇÃO: Por questões de padronização as tabelas só podem ser criadas utilizando-se o prefixo ‘ut_’.”.

Pronto, à partir de agora é possível manter o padrão de nomenclatura dos objetos do banco de dados.

Novidades SQL Server 2008 – Instrução MERGE

Como certeza uma das maiores novidades do SQL Server 2008 é a instrução MERGE.

Merge significa “fusão”, através desta instrução é possível mesclar os dados de duas tabelas em uma tabela alvo.

Imagine que você tenha duas tabelas, uma com o cadastro de funcionários do seu sistema e outra com um segundo cadastro de funcionários que foi importado de uma planilha em excel, por exemplo.

Pressupondo que a segunda tabela contém os dados mais atuais, e que você deseja inserir na tabela de funcionários do seu sistema os NOVOS registros que estão na segunda tabela, atualizar os registros da tabela funcionários do seu sistema que existem na segunda tabela e por fim excluir registros da tabela funcionários do seu sistema que não existam na segunda tabela, para isso você pode utilizar a instrução MERGE.

Nas versões anteriores do SQL Server, caso você precisasse realizar este tipo de operação, era necessário realizar uma série de verificações, instruções insert, update e delete, agora você pode fazer tudo isso através da instrução MERGE.

Veja o exemplo do código abaixo:

MERGE tb_Funcionario AS FUN
USING tb_Funcionario_Novos AS FUN_NOVOS
ON FUN.Codigo = FUN_NOVOS.Codigo
WHEN MATCHED THEN -- Se o registro existir na tabela alvo, atualizar
 UPDATE SET
  Nome = FUN_NOVOS.Nome,
  Sobrenome = FUN_NOVOS.Sobrenome,
  Salario = FUN_NOVOS.Salario  
WHEN NOT MATCHED BY TARGET THEN -- Se o registro não existir na tabela alvo, inserir
 INSERT (Codigo, Nome, Sobrenome, Salario)
 VALUES (FUN_NOVOS.Codigo, FUN_NOVOS.Nome, FUN_NOVOS.Sobrenome, FUN_NOVOS.Salario)
WHEN NOT MATCHED BY SOURCE THEN
 DELETE
OUTPUT $action, Inserted.*, Deleted.*;

Este código faz exatamente como explicado acima, no final a tabela de funcionários do sistema (tb_Funcionario) ficará atualizada, seja com novos registros, com registros pré-existentes atualizados ou registros antigos removidos, tudo com base na segunda tabela (tb_Funcionario_Novos).

A última linha  (código OUTPUT) é opcional, ela retorna:

  • A ação que foi realizada (insert, update ou delete)
  • Registros com seus valores inseridos/atualizados
  • Registros com seus valores excluídos

Com a instrução MERGE é possível, por exemplo, criar uma stored procedure que recebe como parâmetro valores e estes são inseridos (caso não exista) ou atualizados (caso já exista) , sem que você tenha que realizar verificações com IF.

IMPORTANTE: Ao final da instrução MERGE, não esqueça de fechá-la através do ponto-e-vírgula.

Para mais informações sobre a instrução MERGE, consulte o Books online do SQL Server 2008 através do link http://msdn.microsoft.com/en-us/library/bb510625.aspx.

Novidades SQL 2008 – Operadores Atribuição Composta

 

Este é mais um novo recurso do SQL 2008 que permite juntar um operador aritmético ( + – / * ) com o operador de atribuição (=).

Exemplo:

declare @Total Int
set @Total = 5
set @Total *= 2

 Observação: Operadores aritméticos também são chamados de bitwise.

Este é um recurso que já existe em diversas linguagens de programação, tais como C# e Java, as vantagens em utiliza-lo são:

  • Reduz o tempo de processamento de determinadas chamadas
  • Deixa o código mais legível
  • Economiza a codificação

Abaixo uma tabela com os operadores de atribuição composta com a forma convencional equivalente:

Operador

Operação

Atribuição composta

Forma convencional equivalente

+=

Adição

set @total += 1

set @total = @total + 1

-=

Subtração

set @total -= 1

set @total = @total – 1

*=

Multiplicação

set @total *= 1

set @total = @total * 1

/=

Divisão

set @total /= 1

set @total = @total / 1

^=

XOR bit a bit

set @total ^= 1

set @total = @total ^ 1

&=

AND bit a bit

set @total &= 1

set @total = @total & 1

|=

OR bit a bit

set @total |= 1

set @total = @total | 1

 

Importante: Só é possível realizar apenas uma atribuição composta a uma mesma variável na mesma linha, o exemplo abaixo não é possível:

set @total += @total -= 2

Porém, é possível realizar várias atribuições a uma mesma variável utilizando a instrução select, conforme o exemplo abaixo: 

SELECT @Total = @Total +1, @Total += 2

 Observação: Neste caso, a atribuição ocorre da esquerda para a direita.

Novidades SQL Server 2008 – Insert com múltiplos valores

 

Uma grande novidade incorporada na versão do SQL Server 2008 é a possibilidade de realizar um insert com múltiplos valores.

Imagine que você precise criar uma massa de dados para realizar testes por exemplo, que seja necessário incluir uma lista de nomes em uma tabela.

Até a versão do SQL Server 2005 você precisava criar uma instrução INSERT para cada registro a ser adicionado na tabela, conforme exemplo abaixo:

INSERT INTO tb_Clientes (codigo, nome, sobrenome) VALUES (1,'Joaquim','da Silva')
INSERT INTO tb_Clientes (codigo, nome, sobrenome) VALUES (2,'Maria','Aparecida')
INSERT INTO tb_Clientes (codigo, nome, sobrenome) VALUES (3,'João','Bezerra')
INSERT INTO tb_Clientes (codigo, nome, sobrenome) VALUES (4,'Gomes','da Costa')

 Outra opção seria utilizar o INSERT com o SELECT e UNION ALL:

INSERT INTO tb_Clientes (codigo, nome, sobrenome)
                            SELECT 1,'Joaquim','da Silva'     UNION ALL
                            SELECT 2,'Maria','Aparecida'     UNION ALL
                            SELECT 3,'João','Bezerra'             UNION ALL
                            SELECT 4,'Gomes','da Costa'

Agora, com este novo recurso trazido pelo SQL Server 2008, é possível realizar um INSERT com múltiplos valores, a situação acima pode ser escrita da seguinte forma:

INSERT INTO tb_Clientes (codigo, nome, sobrenome) VALUES
                            (1,'Joaquim','da Silva' ),
                            (2,'Maria','Aparecida'),
                            (3,'João','Bezerra'),
                            (4,'Gomes','da Costa')

Melhorou, não!?!?

Novidades SQL Server 2008 – Inicialização de variáveis locais

 

Uma das novidades no SQL Server 2008 é a declaração e inicialização de variáveis locais.

Até a versão SQL Server 2005, para declarar e inicializar uma variável local eram necessárias duas linhas de código, conforme o exemplo abaixo:

declare @volume int
set @volume = 453

Agora, na versão 2008 é possível declarar e inicializar uma variável local em uma única linha, veja o exemplo abaixo:

declare @volume int = 453

Se tentarmos fazer o mesmo na versão 2005, por exemplo, teremos a seguinte mensagem de erro:

Msg 139, Level 15, State 1, Line 0
Cannot assign a default value to a local variable.
 

Podemos utilizar este novo recurso da linguagem T-SQL, que trará produtividade e tornará o código mais limpo, para declaração de múltiplas variáveis:

declare @volume int = 453,
                @setor int = 96,
                @opcao char(1) = 'T'

Esta é uma dentre várias outras novidades do SQL Server 2008.

Seguir

Obtenha todo post novo entregue na sua caixa de entrada.