O que é Teste Unitário?

A qualidade do software é uma das variáveis mais complexas de um software. Vai desde o processo administrativo até o padrão de código aplicado. Qualquer dia eu falo de qualidade e outras coisas do gênero; hoje vou falar apenas sobre uma pequena fatia dessa torta: Testes Unitários.
Os testes unitários têm um objetivo simples: garantir que os retornos dos métodos estejam de acordo com as expectativas. Certamente existem definições melhores e mais completas, mas repare: não falei que teste garante a qualidade. É um erro comum acreditar que os testes são a solução para todos os problemas, a bala de prata, infelizmente não são.
Testes unitários são aplicados as unidades de código, como funções, propriedades, procedures e semelhantes.  Veja uma código de exemplo de uma calculadora simples, como exemplo.

namespace calculadora
{
    public class Calculadora
    {
        int soma(int i, int j)
        {
            return i + j;
        }
        int multiplicacao(int i, int j)
        {
            return i * j;
        }
        int subtracao(int i, int j)
        {
            return i - j;
        }
        int divisao(int i, int j)
        {
            return i / j;
        }
    }
}
Parece um código simples demais para um programador  vacilar e cometer erros. Mas, vamos ver.

Como seria um teste unitário?
Veja um  teste unitário aplicado a calculadora do exemplo:
[TestMethod()]
public void CalculadoraConstructorTest()
{
    Calculadora target = new Calculadora();
}

[TestMethod()]
[DeploymentItem("calculadora.exe")]
public void divisaoTest()
{
    Calculadora_Accessor target = new Calculadora_Accessor();
    int i = 50;
    int j = 2;
    int expected = 25;
    int actual;
    actual = target.divisao(i, j);
    Assert.AreEqual(expected, actual);
}
[TestMethod()]
[DeploymentItem("calculadora.exe")]
public void multiplicacaoTest()
{
    Calculadora_Accessor target = new Calculadora_Accessor();
    int i = 50;
    int j = 2;
    int expected = 100;
    int actual;
    actual = target.divisao(i, j);
    Assert.AreEqual(expected, actual);
}

[TestMethod()]
[DeploymentItem("calculadora.exe")]
public void somaTest()
{
    Calculadora_Accessor target = new Calculadora_Accessor();
    int i = 50;
    int j = 2;
    int expected = 52;
    int actual;
    actual = target.divisao(i, j);
    Assert.AreEqual(expected, actual);
}

[TestMethod()]
[DeploymentItem("calculadora.exe")]
public void subtracaoTest()
{
    Calculadora_Accessor target = new Calculadora_Accessor();
    int i = 50;
    int j = 2;
    int expected = 48;
    int actual;
    actual = target.divisao(i, j);
    Assert.AreEqual(expected, actual);
}


Parece muito simples e fácil. Parece até mesmo desnecessário de tão óbvio. Entretanto, este teste está incorreto. Ele não considera que a classe Calculadora poderia realizar divisões por zero ou gerar estouros de buffer. Num projeto com diversas classes e chamadas os testes unitários ganham destaque.

Porque os testes unitários não garantem qualidade?
Não garantem porque o número de variantes de testes possíveis é grande demais. E a avaliação sobre que testes devem ser feitos e como devem ser feitos é humana, e não automática. A variável humana insere infinitas incertezas aos projetos de teste.

Porque utilizar Testes Unitários?
Eles são úteis para melhorar a qualidade dos softwares. Quando um software é modificado é comum perceber vários problemas decorrentes da alteração. Uma modificação impacta diversas coisas que nem sempre são pensadas pelos programadores, em primeiro momento. Aí que entra o teste unitário. É possível, automaticamente rodar todos os testes unitários e saber o impacto unitário da modificação realizada.

Passo a Passo: Como Fazer Teste Unitário no Visual Studio?
Novo Projeto

Projeto de Teste

Projeto de teste criado

Adicionar > Teste Unitário

Wizard para criação de Testes Unitários

Projeto criado pelo wizard

Projeto Alterado para refletir a realidade

Testes realizados pelo Visual Studio

Como criar um Custom Configuration Section em .NET 2.0

Quando se cria uma aplicação em .NET naturalmente se utiliza arquivos de configuração .config para centralizar e organizar sua estrutura. Normalmente web.config e app.config.
Muitas vezes se utiliza as seções appSettings e connectionStrings para configurações manipulados via código. Mas também é possível customizar os blocos destas configurações.

O que é necessário?
  1. Uma classe que herde de System.Configuration.ConfigurationSection
  2. Uma referencia no config no elemento <configSections>
  3. Utilização do configSectionCustomizado
  4. Consumir o valor do configSectionCustomizado
Então vamos lá...

1 - Como criar a uma classe ConfigurationSection
using System.Configuration;

namespace ConfigSection
{
    public class AnselmeSection : ConfigurationSection
    {
        [ConfigurationProperty("AnselmeServer", DefaultValue = "anselme://mail.sx", IsRequired = true)]
        public String AnselmeServer
        {
            get
            {
                return (String)this["AnselmeServer"];
            }
            set
            {
                this["AnselmeServer"] = value;
            }
        }
    }
}

2 - Como criar uma referencia no <configSections>


<configSections>
      <section name="Anselme" type="ConfigSection.AnselmeSection, ConfigSection"/>
</configSections>

3 - Como utilizar o configSection customizado no .config ?
  <Anselme AnselmeServer="anselme://brazil.mail.op" />

4 - Como consumir este código?
namespace ConfigSection
{
    public partial class _Default : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            AnselmeSection config = (AnselmeSection)ConfigurationManager.GetSection("Anselme");
            string servidor = config.AnselmeServer;
        }
    }
}


Para mais detalhes, a referecia oficial é:
http://msdn.microsoft.com/en-us/library/2tw134k3.aspx

"Sociedade 2.0"

Não é de hoje que as redes sociais são importantes. Como elas possuem uma forma própria para que seus integrantes compartilhem informações, as opiniões tendem a convergir criando um grupo de potencial influência na sociedade.

No auge do iluminismo a maçonaria mostrara um grupo coeso de ideais e opiniões próprias. Isso mesmo! A maçonaria é até hoje uma importante rede social, assim como a AL-Qaeda, Reuters.



A criação de sistemas web com páginas dinâmicas, assíncronas, o aumento da convergência dos padrões web, o aumento da maturidade do mercado mundial e o aumento da memória e processamento das maquinas propiciou redes sociais virtuais baseadas na internet.

As redes sociais se apóiam no conceito de software como serviço, (como o google.com que apenas prove o serviço de busca), colaboração e o comercial Web 2.0. Num ponto de vista mais antropológico da tecnologia, as redes sociais possuem comportamentos e mecânicas próprias que impactam na influencia que elas exercem sobre a sociedade.

Outro dia eu estava assistindo um jornal na tv e vi uma matéria interessante. Um colégio em São Paulo possui uma cantina que vende pão de queijo, bastante consumido pelos alunos. Num certo dia a cantina aumentou o preço do pão de queijo. Certo dia um aluno "revoltado" postou no Twitter sua indignação. Este tweet foi retuitado, retuitado... E se tornou Trend Topic dia. O que me surpreende é a capacidade de mobilização desta com a rede social. Outra história um pouco mais conhecida é a da revolução no Egito. Um grupo se reuniu no Facebook, e marcaram de fazer um grande protesto. O resultado do protesto foi a saída do atual presidente do Osnir Mubarack. A revolução do Egito desencadeou uma onda de protestos na África.

Eu se que, por exemplo, os bancários eram mais importantes quando TI era menos importante, mas toda esta tecnologia também tem seu lado bom. O Twitter e o Facebook, os mais utilizados, fazem com que qualquer cidadão possa ser imprensa e formar opinião. O Linked In facilita o relacionamento entre os profissionais, identificar vagas, etc. O Digg para classificação de noticias. O Delicius para classificação de sites na internet. E muitos outros.O que aconteceu de mais interessante nas redes sociais é que elas tornaram mashups entre si. O msn 9 por exemplo, faz sincronização com os sistemas de mensageira instantânea do Facebook, além de sincronização de microblog com Facebook, Twitter, Linked In. O que chateia é não existir padrão de comunicação entre elas, e nenhum interesse de fazer isto.

Como criar sua própria rede social?

A força dos Portais de Intranet

Colaboração
Os Portais empresariais são um símbolo de autoridade nas empresas. Neles todos os conteúdos empresariais, desde comentários, arquivos de texto, imagens, até mesmo emails devem estar registrados. As informações bem como todos os fluxos de negócio armazenados num só lugar é um trabalho administrativo numa ferramenta de TI.

O tempo de Fayol volta à tona. Os portais refletem, talvez de maneira humana, o organograma. Toda a burocracia representada por um monte de retângulos ligados tem que ser reproduzida num site. Muitas empresas menos mecânicas têm problemas ao estabelecer Portais internos, e isso se dá em função de seus processos que fluem, e de seus setores que mudam o tempo todo.

O que é uma empresa? É talvez uma entidade formal com a função de estabelecer relação entre pessoas físicas ou jurídicas com a intenção de oferecer produtos e serviços. Sinceramente não sei. Quem é capaz de definir sua própria empresa? Platão já dizia que as coisas possuem uma forma ideal, e este ideal é único-imutável capaz de dar identidade a ela. Todas as outras características fluem.
Para entender uma empresa dinâmica é necessário primeiro perceber o que faz com que ela seja ela. Comercial, Serviços? Sendo pontual e detalhista, é bem difícil que seu portal não se torne um lindo elefante branco. É importante descobrir o que é fixo, e o que flui. E mais do que isso, descobrir quanto flui e formular isso. Esta é uma maneira razoável de definir portais de empresas dinâmicas.

Como criar menus com uma aplicação Office Ribbon



Microsoft Office Word 2010 - Ribbon






O Ribbon é uma nova forma de compor menus lançada em larga escala desde o office 2007 da microsoft. Problemas com a aceitação da nova forma de uso ja era esperada pela microsoft, por isso esta nova forma de uso nao estava presente em todos os produtos. O SharePoint 2010 embora não leve mais o sobrenome office aderiu a nova experiencia de uso de forma assincrona na web. A evolucao do hardware domestico propiciou o uso de novas interfaces.
A microsoft promoveu a adoção em larga escala de varias formas de uso, independente dela ter sido ou não a criadora. O formato de menu com arquivo -> editar -> formatar -> .... -> Ajuda é um dos mais utilizados. O sublinhado vermelho para erros de ortografia e verde para gramática tambám. Mas existiam vários problemas de usabilidade que a microsoft poderia resolver mas não era o momento de mercado. A falta de memória dos desktops dificultou o uso de máquinas virtuais, como o .NET Framework. Logo que as máquinas tinham a memória o uso de novas formas tecnologias tornaram-se possíveis.


O SharePoint na versao 2007 foi um dos produtos mais ascendentes no mercado. Ele é génerico e capaz de resolver inúmeros problemas empresariais. A facilidade de uso do SharePoint 2007 era discutível, uma vez que quase todas as ações de suas páginas eram síncronas. Para resolver isso a microsoft imbutiu o JQuery e fez inúmeras chamadas assíncronas. Isto da suporte a uma interface mais fluente e ao ribbon. O SharePoint 2010 utiliza ribbons e possui maneiras próprias de edição.

O office 2010 manteve o mesmo conceito de interface ribbon mesmo ainda tendo um número grande de usuários que ainda não tiveram essa experiência. No 2010 outras aplicações passaram a utilizar o office ribbon, como o Visio, Publisher, Project (tanto o Client quanto o Server).
A nova experiência de uso foi bem vista por algumas empresas e desenvolvedores que criaram aplicações próprias com a tecnologias de ribbons.