LightSwitch – Um jeito simples de criar aplicações modernas para empresas.

Olá pessoal, trago hoje mais uma novidade da Microsoft, o LightSwitch 2012

Todas as empresas atendem um determinado negócio e hoje em dia é praticamente impossível imaginar que não exista um sistema apoiando o controle do negócio ou pelo menos parte dele.

Desde a papelaria da esquina até um banco, todas empresas necessitam de um sistema, seja ele de apoio aos negócios ou de controle (estoque por exemplo).

As empresas possuem esta necessidade, é vital para seu funcionamento, mas nem sempre estão dispostas a investir financeiramente para adquirir um sistema moderno sob encomenda, tão quanto esperar aqueles meses de projeto para que fique pronto.

Resultado:
Sistemas Access, planilhas Excel, Softwares de prateleira ou até aquele sistema em VB5 que o vizinho tinha desenvolvido uns 10 anos atrás.

Em minha experiência com sistemas já presenciei diversos cenários, um dos mais intrigantes foi estar em um departamento de um banco de grande porte onde todo o processo era controlado por um sistema chamado “Planilhão”. O planilhão fazia tudo, controlava valores, entradas, saídas, diferenças.
Exposição à erros humanos, duplicação de informação e perda de dados era rotina.

Desenvolver um sistema sob encomenda que atenda o negócio de um determinado cliente não é barato para quem compra e não é fácil para quem faz.

Pensando nesse cenário a Microsoft inovou mais uma vez e lançou uma solução:

LightSwitch for Visual Studio

  • Desenvolva rapidamente aplicações de negócio.
  • Obtenha mais de seus dados.
  • Surpreenda os usuários finais.
  • Estenda sua aplicação sem redesenhá-la.

O LightSwitch é 100% RAD (Rapid Application Development).
Disponível para download no Visual Studio 2010, parte do Visual Studio 2012.
Cria automaticamente toda a estrutura (telas, CRUD, pesquisas, visualizações).
O único código que é escrito é a regra de negócios. Possui a facilidade de acompanhar o crescimento do sistema sem maiores manutenções.
Pode ser hospedado no Windows Azure 🙂

Arquitetura:

Arquitetura LightSwitch

Desenvolvedores tem em mãos com LightSwitch uma oportunidade de gerar novos negócios, pois possibilita o rápido desenvolvimento de sistemas, em conjunto com o Entity Framework todas as Entidades são criadas com base na modelagem de dados.

Não tem mais desculpa para usar o velho “planilhão” agora 🙂

Curioso para experimentar?
Abaixo uma série de vídeos passo-a-passo que irá prover todo o suporte necessário para se ambientar com a nova ferramenta:
(Conteúdo oficial Microsoft – Em Inglês) 

1 – How Do I: Define My Data in a LightSwitch Application?
(6 minutos 55 segundos)

2 – How Do I: Create a Search Screen in a LightSwitch Application?
(8 minutos, 58 segundos)

3 – How Do I: Create an Edit Details Screen in a LightSwitch Application?
(5 minutos, 15 segundos)

4 – How Do I: Format Data on a Screen in a LightSwitch Application?
(12 minutos, 52 segundos)

5 – How Do I: Sort and Filter Data on a Screen in a LightSwitch Application?
(9 minutos, 44 segundos)

6 – How Do I: Create a Master-Details (One-to-Many) Screen in a LightSwitch Application?
(9 minutos, 15 segundos)

7 – How Do I: Pass a Parameter into a Screen from the Command Bar in a LightSwitch Application?
(11 minutos, 44 segundos)

8 – How Do I: Write business rules for validation and calculated fields in a LightSwitch Application?
(15 minutos, 55 segundos)

9 – How Do I: Create a Screen that can Both Edit and Add Records in a LightSwitch Application?
(7 minutos, 30 segundos)

10 – How Do I: Create and Control Lookup Lists in a LightSwitch Application?
(7 minutos, 24 segundos)

11 – How Do I: Set up Security to Control User Access to Parts of a Visual Studio LightSwitch Application?
(23 minutos, 52 segundos)

12 – How Do I: Deploy a Visual Studio LightSwitch Application?
(20 minutos 24 segundos)

13 – How Do I: Deploy a LightSwitch Application to Azure?
(12 minutos, 41 segundos)

14 – How Do I: Modify the Navigation of Screens in a LightSwitch Application?
(04 minutos, 19 segundos)

15 – How Do I: Open a Screen After Saving Another Screen in a LightSwitch Application?
(08 minutos, 41 segundos)

16 – How Do I: Connect LightSwitch to an Existing Database?
(15 minutos, 20 segundos)

17 – How Do I: Connect LightSwitch to SharePoint Data?
(15 minutos, 26 segundos)

18 – How Do I: Save Data from Multiple Data Sources on the Same Screen?
(07 minutos, 19 segundos)

19 – How Do I: Set Default Values on Fields when Entering New Data?
(03 minutos, 21 segundos)

20 – How Do I: Copy Data from One Row into a New Row?
(07 minutos, 18 segundos)

21 – How Do I: Add Commands as Buttons and Links to Screens?
(08 minutos, 15 segundos)

22 – How Do I: Show Multiple Columns in an Auto-Complete Dropdown Box?
(02 minutos, 39 segundos)

23 – How Do I: Create Custom Search Screens in LightSwitch?
(18 minutos 22 segundos)

24 – How Do I: Handle Database Concurrency Issues?
(14 minutos 12 segundos)

O objetivo desse post é divulgar a novidade, em breve postarei mais conteúdo como exemplos, códigos e dicas.

Downloads:

Saiba mais em:

Quer ser mais produtivo? Pomodoro Technique!

Olá pessoal, Vamos falar de Pomodoro Technique?

Pomodoro Technique

Codificar nunca foi tarefa fácil, hoje em dia muito menos, telefone, analista de negócios ou clientes com perguntas, sem falar nos e-mails, Twitter, Facebook entre outras distrações do dia-a-dia. Tem dia que não rende mesmo, e quando acordamos sem aquela motivação muito menos.

Técnicas de produtividade existem várias, vamos abordar uma hoje que vem me ajudando e estou gostando bastante.

O Pomodoro Technique foi inventado em 1980 por Francesco Cirillo.
A intenção é transformar o tempo em nosso aliado, mensurando o que devemos fazer e estabelecendo metas de tempo, gerando aperfeiçoamento do trabalho executado.

Vamos a receita:
Um timer (temporizador), material para anotação ou notepad 😉

Cozinhando com concentração, 25 minutos é o Tempo.

  1. Escolha uma tarefa a ser feita.
  2. Programe o timer para 25 minutos (o Pomodoro é o timer);
  3. Trabalhe concentrado até que o Pomodoro toque, então marque ‘ok’ na tarefa;
  4. Faça uma breve pausa (5 minutos são suficientes)
  5. A cada 4 tempos Pomodoro faça uma pausa mais longa.
Basicamente é isto!

Fazendo uma analogia com o filme “A Rede”:
Lembram em que determinados momentos os desenvolvedores do site Facebook estavam “Conectados”, ou seja, fones de ouvido, totalmente alheios ao mundo exterior, não atendiam a chamados, nem olhavam para os lados, foco, foco, foco!
Este é um momento Pomodoro.

Momentos como esse nos tornam extremamente produtivos, elevam a capacidade intelectual e de concentração, nos fazem manter o foco na finalização da tarefa.

E nos intervalos entre 1 ou 4 Pomodoros você pode checar os e-mails, Twittar e etc…

Eu não defendo que tudo deve ser seguido a risca, eu mesmo tenho momentos durante o dia em que realizo cerca de 20 Pomodoros contínuos e pronto, já me ajuda muito a resolver aquelas tarefas que exigem qualidade e atenção máxima, mas sem me sentir uma espécie de robô programador.

Existem alguns aplicativos para ajudar a desenvolver a técnica do Pomodoro:

E para quem quer mais sobre o assunto:

Referências:

Vamos ao TDC 2012?

Olá pessoal, Vamos ao TDC 2012?

Para quem não sabe o TDC é uma conferência sobre desenvolvimento de software, é um evento anual e estará sendo realizado em São Paulo, Florianópolis e Goiânia. Terão diversas tecnologias sendo abordadas .Net, Java, Ruby, Python e muitas outras, além também dos temas ALM, Arquitetura, Testes e enfim vale muito a pena!

 The Developers Conference 2012, um evento organizado pela Globalcode

O valor depende da data de inscrição, mas é super acessível. Eu estarei presente no sábado 07/07 na trilha .Net.

Vejo vocês lá!

Prática de Desenvolvimento + Qualidade na Entrega

Olá Pessoal, hoje vamos falar sobre Prática de Desenvolvimento de Software.

De que forma ela influência na qualidade das entregas?

Participo de alguns grupos de debate sobre desenvolvimento, arquitetura, etc… E apesar dos assuntos lá debatidos não iniciarem em volta deste, quase sempre caem no mesmo tema.

Lá está você esperando eu começar a abordar um SCRUM + Kanban, XP ou algum Ágile, pois é, mas a prática a ser abordada hoje é um pouco mais conhecida e muito mais utilizadas que estas:

Go Horse!
GoHorse!

Apesar da brincadeira, é uma dura e triste realidade.
Empresas ou Departamentos de TI que não possuem estrutura, processos e gestão de tarefas automaticamente tendem a implicitamente utilizar Go Horse!

O objetivo desse post, além da brincadeira é abordar como podemos apesar da triste realidade nos sair melhor mesmo em modo Extreme Go Horse!

Apenas para enfatizar o Go Horse!
Realizar a entrega de um sistema / tarefa de desenvolvimento em um prazo impossível, não pense, apenas faça! Compilou? Sobre no repositório e avisa que está pronto. Testes? Se o cliente encontrar Bug corrigiremos.

Sacou? Nada diferente do que um dia já vivemos ou talvez viveremos.

Apesar da enorme desmotivação que o Go Horse! proporciona, (já que não podemos aplicar tudo aquilo que estudamos e é certo) podemos nos basear em algumas inteligentes regras para tornar nosso trabalho mais assertivo e menos desmotivante, e quem sabe (por que não?) atingirmos com sucesso nossos objetivos:

1- Entenda o propósito.
Procure ter uma visão completa sobre os objetivos que o sistema visa atender. Saiba também o por que o cliente precisa do sistema, como funciona o negócio do cliente.

2- Foco no Domínio.
Um cliente paga para obter valor ao seus negócios, ou seja, foque realmente naquilo que o cliente precisa, se o tempo é curto entregue com uma interface de usuário mais básica porém funcional, encantar o cliente antes de tudo é atingir os objetivos dele, tudo que foi desenvolvido e não foi percebido pelo cliente é investimento jogado fora.

3- Entregue o mais importante antes.
Geralmente a parte mais crítica do sistema é a que fica por último, por ser mais difícil ou por ser a mais trabalhosa, porém é aquela o cliente mais precisa, atenda o desejo dele o quão antes possível. Com o feedback da entrega você saberá se está no caminho certo.

4- O código que você produz reflete que profissional você é.
Não é por que o prazo é curto que o código precisa ser um lixo, escreva códigos simples, comentados, quebre tudo por funcionalidades ao invés de criar uma linguiça com N rotinas aglomeradas. Na próxima manutenção você não terá que jogá-lo no lixo e fazer tudo de novo.
Quanto menos manutenção seu código gerar, mais tempo você terá para pegar aquele projeto bacana que só não iniciou por que a entrega do cliente não está funcionando.

5- Código funcionando é código testado.
Sempre que possível faça os testes unitários de seu código, (ainda falaremos mais sobre isso em breve) Procure testar as rotinas mais críticas, ex: cálculo de juros.

6- Seja prático
Um código que atende claramente o Domínio do cliente é facilmente entendido por outro desenvolvedor, assim você não se torna o eterno pai do sistema.
Investir mais na fase inicial de desenvolvimento para eliminar a possibilidades de manutenções ou mesmo para facilitar possíveis futuras expansões é perca de tempo, não preveja o futuro, tudo muda a toda hora, atenda a necessidade atual da melhor forma possível, o futuro vem depois.

7- Adquira uma organização pessoal para aumento de produtividade.
E-mails, twitters, Facebook, e qualquer tipo de “desviadores de foco” estão presentes na vida de qualquer desenvolvedor. Procure obter momentos de 100% de foco, otimize sua produção com uma quantidade X desses momentos em sua jornada diária, e depois disso nos intervalos você pode Tuitar, ler/responder os e-mails ou até mesmo implementar aquele Pattern que você achou que seria benéfico ao sistema, mas não daria tempo de fazer.
Existe uma técnica interessante para essa gestão de tempo, falaremos futuramente sobre o Pomodoro.

8- Não admita que as coisas são assim e pronto.
Como disse tudo muda a toda hora, se no seu trabalho o dia-a-dia é Go Horse! Você pode mudar isso. Sugira novas idéias, procure sempre aprimorar seu trabalho, não mantenha-se desmotivado, traga novidades para a empresa, procure convencer de forma teórica, didática e prática os seus gestores de que a coisa pode ser melhor.
Tudo mantem-se igual por que ninguém faz o esforço certo e necessário para que as coisas mudem.
Se no final de tudo (de tudo mesmo) a coisa não mudar, mude você! Afinal um bom profissional tem direito a uma boa oportunidade de trabalho.

Resumindo:
Apesar do Go Horse! definitivamente ser um dos grandes males de nossa área algumas inteligentes abordagens podem nos oferecer uma maior oportunidade de melhorar nosso dia-a-dia.
Sim, essa publicação é mais do mesmo, mas para quem principalmente está no início da carreira é importante ter em mente: Não vicie em um ritmo que não é bom, procure melhorar, procure mudar.

Especialmente inspirado:

Debugando Windows Services no Visual Studio

Um colega de trabalho me questionou como debugar um Windows Services, geralmente isso é uma tarefa chata, precisamos instalar o serviço e ativar a interação para depois iniciar o Visual Studio em modo debug atachando o processo do serviço instalado.

Veja bem, não precisa ser complicado assim. Basta definir no próprio código o comportamento. Acredito que isso veja a ajudar bastante o nosso dia-a-dia então ai vai:

No seu arquivo Program.cs em seu estado original encontraremos o código a seguir:

namespace ServicoEduardo
{
    static class Program
    {
        /// <summary>
        /// The main entry point for the application.
        /// </summary>
        static void Main()
        {
            ServiceBase[] ServicesToRun;
            ServicesToRun = new ServiceBase[]
			{
				new Service1()
			};
            ServiceBase.Run(ServicesToRun);
        }
    }
}

No código a seguir estamos deixando o serviço apto a ser debugado pelo Visual Studio sem a necessidade de instalação ou demais configurações:

namespace ServicoEduardo
{
    static class Program
    {
        /// <summary>
        /// The main entry point for the application.
        /// </summary>
        static void Main()
        {
#if (!DEBUG)
            ServiceBase[] ServicesToRun;
            ServicesToRun = new ServiceBase[]
			{
				new Service1()
			};
            ServiceBase.Run(ServicesToRun);
#else
            // Debug code: Permite debugar um código sem se passar por um Windows Service.
            // Defina qual método deseja chamar no inicio do Debug (ex. MetodoRealizaFuncao)
            // Depois de debugar basta compilar em Release e instalar para funcionar normalmente.
            Service1 service = new Service1();
            // Chamada do seu método para Debug.
            service.MetodoRealizaFuncao();
            // Coloque sempre um breakpoint para o ponto de parada do seu código.
            System.Threading.Thread.Sleep(System.Threading.Timeout.Infinite);
#endif
        }
    }
}

O que fizemos? Simples, informamos no próprio código o seu devido comportamento, assim quando estiver em modo Debug no Visual Studio ao dar um F5 seu código iniciará na chamada do método que foi definida.

Para testarmos as rotinas é muito prático, pois evitamos a necessidade de instalar e atachar o processo do serviço, que na maioria das vezes se torna o grande problema para testarmos as funcionalidades desenvolvidas.

Espero ter ajudado, em caso de dúvidas deixe um comentário.

DDD, TDD, BDD, Afinal o que são essas siglas?

Olá pessoal, Hoje vamos falar sobre DDD, TDD, BDD.

Muitas vezes pela internet em busca de novos conhecimentos nos deparamos com diversas siglas, estando elas anunciadas em algum requisito para desenvolvimento de sistema ou até mesmo citadas em alguma abordagem técnica.

Afinal o que são e para que servem?
Abordaremos de forma prática sua definição, muitos irão perceber que já estão usando e nem sabiam.

DDD – Domain-Driven Design (Desenvolvimento Guiado por Design ou Desenvolvimento orientado a Domínio)

Erick Evans lançou em 2003 o “Domain-Driven Design: Tackling Complexity in the Heart of Software” Mal imaginou que o livro tanto quanto o conceito alcançaria tal sucesso e respeito.

Trata-se de uma abordagem de design de software de forma disciplinada, abordando uma série de conceitos e técnicas sempre com foco no domínio do software.
Hoje em dia precisamos entender muitas técnicas, OO, SOA, EntityFramework, NHibernate, Injeção de Dependência e etc… O DDD não vem para substituir e também não é uma tecnologia, poderíamos dizer uma filosofia, não é algo super novo inventado e sim mais uma compilação de muito que já sabemos e aplicamos.

Como dito anteriormente o foco é no Domínio do Software, no propósito que o software deve atender, é a automatização de um processo de negócio.
Domínio nada mais é que do que você já está imaginando, ou seja, atender completamente um determinado negócio.

Ok! Mas todos os softwares corporativos não são desenvolvidos nesse propósito?
O DDD traz abordagens de como fazer isto, como atender um domínio complexo de informações. O pilar do DDD é conceitualizar em forma de Modelo o seu domínio.

Quando pensamos em modelo nos vem à cabeça: UML, Diagrama de Sequência, Diagrama de Estados e todo arsenal que pudermos montar.
Mas não exatamente, o Modelo pode ser feito de qualquer forma que possa ser entendido, Papel de pão, UML, Lego ou Massa de modelar, Não há padrão para modelo. Se o seu modelo expressar certo o funcionamento de negócio está perfeito!

E o que aborda o Modelo?
O modelo é um universo composto por cinco itens principais:
Entidades, Objetos de Valor, Factories, Serviços, Repositórios.
Já começou a ficar familiar, mas vamos entender mais um detalhe que o DDD aborda:

Ubiquitous Language:
Traduzindo, “Linguagem Onipresente”, é a que está em todo lugar. É a linguagem de quem entende do negócio.
Ex. O seu cliente, por um acaso um banco, fala Amortização (pagamento de parcelas). Logo sua equipe também fala Amortização, e isso se repete no modelo e no código.
É uma forma de todos falarem a mesma língua, a língua do negócio (Domínio).
Para se obter sucesso de um projeto DDD é necessário que todos os integrantes falem e entendam completamente o domínio.

Separação das camadas:
Na hora de desenvolver as camadas é necessário cuidado, as camadas precisam ser independentes, se duas camadas se misturam então não são duas camadas. Se você está desenvolvendo um sistema Web orientado a um domínio e resolveu migrar para ASP.Net, você necessita mudar a camada de UI (User Interface) e nada mais, pois são camadas independentes, o Core Domain (Dominio Principal) não depende da camada UI, e não só necessariamente uma UI, podemos estar falando de um WebService por exemplo, imagine que esta desenvolvendo um serviço SOA e quem consome o Core Domain seja um outro sistema.
Um software de negócios, com regras complexas pode ter N camadas, mas deve existir a camada Domínio, ela é o coração do sistema e a mais importante, afinal lá estão as regras de negócio que atendem ao domínio.

Voltando aos itens principais do modelo, começaremos com a Entidade:
Tudo que tenha valor ao domínio (regra de negócio) deve possuir uma entidade.
Voltando ao exemplo do banco, uma entidade seria o Cliente, toda entidade possui uma identidade nesse caso a Entidade Cliente possui uma Identidade (CPF).
Devemos escrever nesta camada todas as entidades ligadas ao domínio da forma mais simples, que seja implementada facilmente sem algum tipo de interface ou etc.

Objetos de valor:
São objetos reconhecidos por seus atributos e geralmente são imutáveis.
Por ex: Tipos de Conta são do tipo Corrente, Investimento, Crédito, Transitória e etc.
Sendo assim na hora de referenciar esse objeto de valor em sua entidade você necessita que ele possua estes tais atributos, pois fazem parte do domínio de seu negócio, chamamos isso de Agregação.

Serviços:
São ferramentas, pois não são entidades nem possuem objetos de valor.
Se por exemplo você precisa enviar um relatório de contas correntes ao Banco Central, sua entidade bem como os objetos de valor não estão preparados para isso, você precisa que um serviço execute essa tarefa, e por isso eles estão presentes no modelo de domínio do DDD.

Factories:
Em português “Fábricas”, Factories criam objetos, existem cenários quais são impossíveis de definir um objeto sem a criação dele através de uma Factory, sugiro para quem não entende direito o conceito de Factory, a leitura deste exemplo.

Repositório:
Não importa onde esteja alocado seu repositório, em algum momento você vai precisar guardar e recuperar um conjunto de informações como um objeto.
Repositórios não tem regra de negócios, eles fazem a intermediação da sua camada de domínio e sua camada de mapeamento de dados. Pode ser usado NHibernate, Entity Framework entre outros, escolha bem o seu.

Enfim, qualquer abordagem de DDD é muito bem aceito numa metodologia ágil.
Receber os feedbacks dos donos do negócio ao tempo todo é fundamental para uma entrega assertiva. Dentro de uma metodologia ágil programar pequenas entregas é uma boa prática, pois não se inicia no 0% e entrega-se 100% com grandes chances de  conter desvios de entendimento.
Sprints, entregas particionadas, diminuem o risco de desvio do entendimento do domínio, assim como do retrabalho.

Lembrando que uma metodologia ágil não faz parte exatamente de uma abordagem de DDD, mas é muito bem vinda.

O DDD é indicado ao meu projeto?
O DDD é indicado para seu projeto caso ele possua um conjunto de regras complexas de negócio, para um sistema simples não é aconselhado o uso de DDD.
Na maioria dos sistemas corporativos são encontradas diversas regras de negócio e cada uma com sua particularidade e complexidade.  Iniciar um projeto usando a abordagem de DDD previne que o sistema cresça cada vez mais de uma forma não orientada ao domínio.

TDD – Test-Driven Development (Desenvolvimento Orientado a Testes)

Baseado no DDD e defendido pelo Extreme Programming  XP (outra abordagem de programação ágil) é o Desenvolvimento de Software orientado a Testes.

É uma abordagem que oferece muita agilidade dentro do ciclo de desenvolvimento, a ideia é codificar um sistema com 100% de cobertura dos testes.

O processo de desenvolvimento do TDD seria:
RedGreen, Refactor.

  1. Escrever um teste, sem mesmo ter escrito o código real a ser testado (Figure o que deseja testar).
  2. Executar os testes e acompanhar a falha (Pode ser um código falso que retorne o  erro) (Red)
  3. Escrevemos a funcionalidade do sistema que iremos testar.
  4. Testar novamente, agora para passar (Se não passou algo saiu errado, faça novamente o passo 3) (Green)
  5. Refatore sua funcionalidade e a escreva por completo (o teste também) (Refactor)
  6. Passe para o próxima estória ou caso de uso e inicie novo teste.
Para a criação de testes em .Net é bem recomendado o uso de NUnit.
Abaixo um exemplo de caso de teste desenhado:
using System;
using NUnit.Framework;

namespace TDD.ClienteBanco
{
    [TestFixture]
    public class ContaTests
    {
        [Test]
        public void TestAporte()
        {
            Conta conta = new Conta("Test");
            conta.Deposito(500.0);
            conta.Deposito(70.0);
            Assert.AreEqual(570.0, conta.Balanco);
        }
     }
}

Resumindo, é uma prática bem utilizada e entende que o desenvolvimento é feito do teste para o código.
Teste unitário não é tarefa do Tester e sim do desenvolvedor, em muitas empresas um código sem testes unitários nem sobe no repositório. Pense em código, pense em teste de cobertura de código.

Para criação dos testes é bem eficaz a utilização de Mock, Dummy, Fake, Stub, que são considerados dublês de teste, pois se passam por objetos reais sem a necessidade de codificação dos mesmos na etapa da escrita do teste.

Posso utilizar TDD com DDD?
Sim.
Posso utilizar TDD em processos não ágeis?
Sim.
TDD é útil para design de software?
Sim.
Escrever testes após desenvolvimento é TDD?
Não.

BDD – Behavior Driven Development (Desenvolvimento Guiado por Comportamento ou Desenvolvimento Orientado a Comportamento)

Foi originalmente concebido em 2003, por Dan North, como uma resposta ao TDD, tem se expandido muito assim como DDD e TDD.

É uma abordagem que funciona também muito bem com uma metodologia ágil, encorajando desenvolvedores, pessoas de qualidade, não técnicas e de negócios em um projeto de software. Também defende o uso da ubiquitous language como explicado acima facilitando a conversação entre toda equipe envolvida.

Como começa a prática do BDD:

  1. Envolver as pessoas no processo através de Outside-in Development (Desenvolvimento de Fora pra Dentro)
  2. Usar exemplos para descrever o comportamento de uma aplicação ou unidades de código
  3. Automatizar os exemplos para prover um feedback rápido e testes de regressão
  4. Usar “deve”  na hora de descrever o comportamento de software para ajudar esclarecer responsabilidades e permitir que funcionalidades do software sejam questionadas
  5. Usar dublês de teste (mocks, stubs, fakes, dummies) para auxiliar na colaboração entre módulos e códigos que ainda não foram escritos.
Como o BDD é guiado pelo comportamento do negócio uma maneira de perceber o benefício produzido é pela interface gráfica, produzindo um feedback rápido para saber se os requisitos descritos através dos comportamentos estão funcionais.Escrevendo um requisito de comportamento do sistema:
Em BDD, um desenvolvedor, ou profissional do setor de qualidade ou até mesmo o cliente podem escrever os testes que basicamente são compostos em duas partes, a definição da funcionalidade a ser implementada (User storie) e os cenários de uso que irão validar este requisito.
A funcionalidade é escrita segundo um padrão:

Funcionalidade : [Nome]

Para [ Valor ao Negócio ] Eu, como [ Papel ] Desejo poder realizar [ Funcionalidade ]

Dessa forma fica muito claro a todos quais são os objetivos que uma funcionalidade deseja atingir e é de muito fácil entendimento.
Os cenários acompanham a funcionalidade de forma que demonstram comportamentos para atendê-la:

Cenário : [ Nome ]

Dado que [ Estado inicial do sistema ] Quando [ Ação a ser realizada no sistema ] Então [ Coisas que o sistema deve fazer após a ação do Quando ]

As palavras Dado queQuando e Então (GivenWhen e Then em inglês) são quase sempre usadas para guiar os cenários, não são obrigatórias.

A criação de requisitos para teste podem ser automatizados, existe uma ferramenta chamada SpecFlow,  que se adapta ao Visual Studio e suporta o idioma português.
Através do SpecFlow no Visual Studio é necessário adicionar um arquivo do tipo Feature File “.feature” e nele seria escrever uma estória.

Um exemplo bem simples de estória de uma aplicação de vendas poderia ser: “Venda de balas na doceria”.

#language: pt-br
Funcionalidade: Vender doces
     Para quando uma doce for vendido
     Eu, como vendedor
     Desejo decrementar um item no estoque

Cenário: Baixa 1 bala do estoque
     Dado que cliente pede 1 bala
     E tenho 10 balas em estoque
     Quando ele compra realiza a compra
     Então eu fico com 9 balas em estoque

Dado esta descrição o SpecFlow irá gerar um arquivo “.feature.cs” que será usado para testes, se rodar os testes após o momento da criação do arquivo com certeza vão falhar, afinal não existe a classe escrita nem a interface desenhada.

É possível fazer testes de interface e end to end sem muito esforço, usando ferramentas como o Watin e também Mock, Dummy, Fake ou Stub como dublês de objetos.

É nesse momento que entra o desenvolvimento da sua aplicação utilizando DDD e/ou TDD (por que não?) e após desenvolvida deve-se complementar o seu arquivo “.feature.cs” com as chamadas da interface para reprodução do requisito desenhado, então você poderá acompanhar o funcionamento do seu negócio com base nesses testes.

Esta é a abordagem do BDD, estimulando os todos envolvidos da equipe, técnicos ou não a escreverem um sistema baseado em comportamentos através de requisitos, estórias, funcionalidades e cenários.

É isso ai pessoal, espero ter abordado o DDD, TDD e BDD de forma clara e que tenha conseguido explicar cada um deles, suas diferenças entre si e como podem ser trabalhados juntos.

Referências:

Bem-vindo ao desenvolvimento para o Windows 8

Olá pessoal, vamos falar de Desenvolvimento para Windows 8.

Desenvolver um aplicativo pode ser uma tarefa simples, mas, ao mesmo tempo, existem vários pontos que devemos trabalhar para desenvolver um aplicativo de alta qualidade. Abaixo, elencamos atividades normalmente necessárias para se criar aplicativos de alta qualidade e os recursos básicos para cada atividade (alguns links apontam para páginas fora de sites da Microsoft).

Atividade Objetivo Recursos
1. Concepção da App
1.1 Análise das possibilidades Conhecer o que é possível fazer com a plataforma Metro Style Apps para Windows 8 Conheça o Windows 8: http://bit.ly/xpNvrMConheça a plataforma: http://bit.ly/wGuSvRO que sua App precisa ter: http://bit.ly/wzTyMRConheça o ferramental: http://bit.ly/xvVgnE

Conheça o Consumer Preview: http://bit.ly/HUtXcd

Guia do Consumer Preview: http://bit.ly/HmpcI4

Mais sobre Windows 8: http://bit.ly/HKfAGe

1.2 Definição da App (não técnico) Definir a visão da App, descrição, usuário-alvo, objetivos, principais funcionalidades e proposta de valor para o usuário Visão do produto: http://bit.ly/z9jBDKVisão do produto (PT-BR): http://bit.ly/xWiyUuProduct box e elevator pitch: http://bit.ly/whCHHu
1.3 Dar visibilidade Dar visibilidade para a Microsoft que você está desenvolvendo para Windows 8.
Você receberá conteúdos de antemão e terá prioridade nos treinamentos de Windows 8.
Registre sua aplicação na seção “Application Profile”:http://bit.ly/HUAcgj
1.4 Projeto e design da App Definir a arte, storyboards, design técnico, arquitetura e funcionalidades da plataforma. Planejar a execução. Projetando User Experience (UX): http://bit.ly/HmoNoPUser Experience Guidelines: http://bit.ly/zfOMHrRequisitos de certificação: http://bit.ly/wIg0LSDesign e estilo da App: http://bit.ly/yjVcI0

Otimização pra touch: http://bit.ly/w1Ic0P

Scrum e Product Backlog (PT-BR): http://scr.bi/zI1185

1.5 Criação de provas de conceito (Opcional) Validar ideias e mitigar riscos com provas de conceitos de tecnologias, componentes e controles. Downloads para Desenvolvedores: http://bit.ly/HeUVIFExemplos de código: http://bit.ly/HmpkqUMetro Style com DirectX: http://bit.ly/zOHEm2Metro Style com HTML5: http://bit.ly/wgD9zh

Metro Style com XAML: http://bit.ly/A8WGp6

Metro Style com Javascript: http://bit.ly/xgc9EQ

Metro Style com XAML 2: http://bit.ly/yiI8d8

2. Elaboração da App
2.1 Criação de protótipo funcional Implementar a primeira versão da App que será evoluída até a publicação na Windows Store.Primar pela qualidade e ir adicionando funcionalidades aos poucos. Metro Style com DirectX: http://bit.ly/zOHEm2Metro Style com HTML5: http://bit.ly/wgD9zhMetro Style com XAML: http://bit.ly/A8WGp6Metro Style com Javascript: http://bit.ly/xgc9EQ

Metro Style com XAML 2: http://bit.ly/yiI8d8

3. Evolução da App
3.1 Testes e correção de defeitos3.2 Evolução do protótipo adicionando novas funcionalidades Evolução da prova de conceito em produto (conteúdo do BUILD sobre desenvolvimento avançado) Ferramenta de testes de certificação:http://bit.ly/wIg0LSOutros recursos sobre Windows 8: http://bit.ly/HKfAGe

Próximos passos

  1. Baixe o Consumer Preview e as ferramentas de desenvolvimento:  http://bit.ly/HeUVIF
  2. Dê visibilidade para a Microsoft que você está desenvolvendo para Windows 8. Você receberá conteúdos de antemão e terá prioridade nos treinamentos de Windows Registre sua aplicação na seção “Application Profile”: http://bit.ly/HUAcgj

Primeiro Post

Olá Pessoal,

Estou dedicando meu tempo desde 2011 à comunidade Microsoft, minha pretensão é ajudar e orientar principalmente os que estão começando agora, plantar a semente do código bem feito e do estudo contínuo.
Esse blog é com foco na geração que vai dar manutenção em nossos códigos :)

Agradeço a todos pelas visitas, comentem, debatam e fiquem a vontade!