quarta-feira, 14 de julho de 2010

Extension Methods = Manutenibilidade

Com a versão 3.0 do .Net Framework tivemos, dentre outros recursos, a introdução do Extension Method, que é uma técnica para adicionar comportamento (método) a um determinado tipo sem a necessidade de alterar o código original ou criar tipos derivados.

Uma boa estratégia de uso de métodos de extensão contribui para um a manutenibilidade, que é um aspecto da qualidade de software que se refere ao esforço necessário para diagnosticar deficiências ou causas de falhas, ou localizar as partes a serem modificadas para corrigir os problemas ou à facilidade de modificação ou adaptação, ao esforço necessário para realizar alterações ou para adequar o produto a eventuais mudanças de ambiente operacional.

Imagine um método, em uma classe de negócio, que realiza o a venda de um produto e da baixa no estoque:

if (IsValid(sale) && AllItemsAreValids(sale.SaleDetailsList))
{
    var products = VerifyProductStockAvailability(sale);

    using (var trans = new DataTransaction())
    {
        var daoSale = new DAOSale();
        var daoProduct = new DAOProduct();

        daoSale.Insert(sale);

        for (int i = 0; i < sale.SaleDetailsList.Count; i++)
        {
            daoSale.InsertDetail(sale.SaleDetailsList[i]);
        }

        for (int i = 0; i < products.Count; i++)
        {
            daoProduct.UpdateStock(products[i]);
        }

        trans.Complete();
    }
}

Refatorando o código, aplicando métodos de extensão e buscando uma melhor lêxia do código, podemos chegar em resultados como:

if (sale.IsValid() && sale.SaleDetailsList.HasAllItemsValid())
{
    var products = VerifyProductStockAvailability(sale);

    using (var trans = new DataTransaction())
    {
        sale.Insert();
        products.UpdateStock();
        sale.SaleDetailsList.Insert();
        trans.Complete();
    }
}

Muitos podem argumentar que a diferença é pouca, o código é legível e de boa manutenibilidade das duas formas, eu concordo, porém, na segunda ele é muito mais fácil e rápido para ler e entender, além de que, com o uso dos métodos de extensão introduzimos um nível a mais de abstração.

Um recurso simples, porém, poderoso!

Como você o utiliza em seus projetos? Deixe seu comentário.

Até a próxima!

segunda-feira, 12 de julho de 2010

Validação, Verificação e Testes de Software

Qualidade não é um diferencial de mercado para as empresas conseguirem vender mais e lucrar mais, hoje, é um pré-requisito que devem conquistar para conseguir colocar seus produtos no mercado global.

Para obter qualidade, devemos, por exemplo, estar em conformidade com requisitos de clientes, antecipar-se e satisfazer os desejos dos clientes, ou ainda, escrever tudo o que se deve fazer e fazer tudo o que foi escrito.

E o que leva a falta de qualidade? A inabilidade de um software em cumprir a especificação de requisitos operacionais de sua responsabilidade, ou a habilidade de produzir efeitos indesejados são chamados de FALHAS (FAIL) e são a manifestação física (ERROR) de um DEFEITO (FAULT – imperfeição ou anomalia existente no código-fonte de um programa), o que a produtos pouco confiaveis, ou seja, de baixa qualidade.

O teste de software é um conjunto de atividades que pode ser planejada antecipadamente e realizada sistematicamente, ou seja, consiste num estudo das fases do software (desde a análise até a entrega do produto). Existem dois tipos de atividade: A verificação, que faz com que o software funcione corretamente de acordo com especificações; e a validação, que se refere ao conjunto de atividades que garantem ao software construído funcionar de maneira razoável de acordo com as exigências do cliente.

A figura abaixo ilustra quando testar, como testar e o que testar:



Esperamos que esse tipo de informação lhe seja útil no momento de avaliar como garantir ou melhorar a qualidade dos software feitos.

Até a próxima!