Desenvolvimento de sistemas

Fernando Lino
E-mail: fernandolinox@gmail.com
Site: http://flinox.blogspot.com
Mostrando postagens com marcador Desenvolvimento C#. Mostrar todas as postagens
Mostrando postagens com marcador Desenvolvimento C#. Mostrar todas as postagens

quinta-feira, 18 de novembro de 2010

Scrum, uma metodologia de desenvolvimento ágil.

A metodologia SCRUM assume-se como uma metodologia extremamente ágil e flexível. Tem por objetivo definir um processo de desenvolvimento iterativo e incremental que pode ser aplicado a qualquer produto ou no gerenciamento de qualquer atividade complexa, proporcionando um excelente entrosamento entre as equipes de desenvolvimento. Com todo esse entrosamento e com a participação ativa dos clientes, o rendimento do projeto aumenta e os requisitos e solicitação de alteração passa a ser entendido mais rapidamente. 

Antes de mais nada vamos aos jargões SCRUM:
Backlog Lista de todas as funcionalidades a serem desenvolvidas durante o projeto completo, sendo bem definido e detalhado no inicio do trabalho, deve ser listado e ordenado por prioridade de execução.

Sprint
Período não superior à 30 dias, onde o projeto (ou apenas 
algumas funcionalidades) é desenvolvido.

Sprint Backlog
Trabalho à ser desenvolvido num Sprint de modo a criar um 
produto a apresentar ao cliente. Deve ser desenvolvido de forma incremental, relativa ao Backlog anterior (se existir).

Scrum Reunião
diária onde são avaliados os progressos do projeto e 
as barreiras encontradas durante o desenvolvimento.

Scrum Meeting Rules 
Protocolo a seguir de modo a realizar uma reunião Scrum.

Scrum Team
A equipe de desenvolvimento de um Sprint.

Scrum Master
Elemento da equipa responsável pela gestão do projeto e lid
erar as Scrum Meetings, são normalmente engenheiros de software ou da área de sistemas. Apesar de ser gestor não tem propriamente autoridade sobre os demais membros da equipe. É incentivada a auto-gestão.

Figura que representa as etapas do processo Scrum.

As fases de desenvolvimento SCRUM podem ser divididas basicamente em três, são elas:

Planejamento: Definição de uma nova 
funcionalidade requerida pelo sistema baseado no conhecimento do sistema como um todo; 

Desenvolvimento: Desenvolvimento dessa nova funcionalidade respeitando o tempo previsto, requisitos exigidos e qualidade. Esses itens definem o fim do ciclo de desenvolvimento; 

Encerramento: Preparação para a entrega do produto persistindo as atividades: Teste Caixa Branca, Teste Caixa Preta, Documentação do Usuário, Treinamento e Marketing. 


Antes de entrar no detalhe de como funciona o processo scrum é interessante saber que existem dois tipos de processos de desenvolvimento: Definidos e Empíricos. 

Processos definidos são aqueles que determinam o que deve ser feito, quando e como. Para um mesmo conjunto de variáveis de entrada, pode-se esperar o mesmo resultado sempre. Um exemplo bem conhecido de processo definido é o RUP (Rational Unified Process) da IBM (Rational). 

Os processos empíricos devem ser utilizados sempre que os processos definidos não forem adequados devido à complexidade do projeto, ou seja, sempre que não se conheçam todas as variáveis de entrada para que possa 
estabelecer um processo repetível (com a mesma saída sempre), o Scrum é um exemplo deste. 

Para iniciar o processo Scrum, a primeira coisa a ser definida é quais pessoas serão designadas para trabalhar e que irão compor a equipe Scrum. Esta equipe deve ser composta de 6 a 9 membros. Se houver mais membros do que é possível gerir, separam-se várias equipes Scrum e cada equipe ficará focada numa área específica do trabalho.  

A próxima etapa a fazer é apontar o Scrum Master, uma vez que é essa pessoa que conduz as Scrum Meetings, mede o progresso empiricamente, toma decisões e remove os obstáculos do caminho para não desacelerar ou mesmo parar o trabalho em pontos críticos. O  Scrum Master  fica encarregado de gerenciar e transmitir as 
informações do projeto a todos os membros da equipe, ele deve ser capaz de tomar decisões imediatas e resolver todos os impedimentos rapidamente, de modo a não estender o tempo da reunião. É ele que identifica o backlog inicial, que é todo o trabalho proeminente para uma área do produto, tanto imediato e bem definido, como a longo prazo e indefinido. 

Para identificar o backlog, a primeira coisa a fazer é listar todo o trabalho conhecido necessário fazer e agrupá-lo em incrementos que não devem ter duração superior a 30 dias. Se houver áreas de trabalho voláteis ou que não 
possam ser completamente definidas para 30 dias, deve ser estabelecido um incremento para um tempo conhecido.  

Depois disto, é preciso listar todo o trabalho proeminente a fazer e definir prioridades para todos os elementos listados. Uma vez terminado, o  backlog  deve ser assinado pelos membros das equipes e a partir daí, só o que foi definido neste documento deverá ser cumprido durante o Sprint  para cada área. É vital para que o processo funcione cumprir com os trabalhos rigorosamente com base nos pontos restantes do  Sprint Backlog. Para isso, é preciso estabelecer e conduzir as reuniões diárias Scrum onde às equipes se encontra e se atualizam sobre o que se vai fazendo. Isto fornece um foco diário no trabalho em desenvolvimento. Antes de mais nada, certifique-se de que as reuniões se realizem sempre na mesma hora e no mesmo local, evitando gastos na procura diária de um lugar, cada reunião não deve ultrapassar 30 minutos. Durante este tempo o Scrum Master cumpre o seu papel em colocar as referidas questões e em resolver todas as decisões necessárias. Qualquer questão não resolvida 
deverá ser adiada para posteriores reuniões. No fim de cada Sprint, deve ser feita uma reunião para revisão e demonstração do Sprint. Para conduzir estas reuniões deve ser eleito um porta-voz que irá redigir algumas 
questões. Estas questões devem ser resolvidas e registradas nessas reuniões, gerando um histórico do grupo no  Sprint. 

Exemplo de questões que podem ser levantadas:  

1. Qual o valor acrescentado neste incremento (Demonstração)? 
2. O que foi completado do nosso  Sprint Backlog? 
3. Qual o feedback por parte do Cliente do produto? 
4. O que se aconteceu de relevante no grupo durante o Sprint? 
5. Como é que cada um se sentiu? 
6. O que podemos concluir disso? 
7. O que pode ser aplicado para melhorar o próximo processo Sprint? 

Explicar perfeitamente as regras para que o processo corra melhor, de como a equipe deve trabalhar em conjunto, e toda a equipe tem que trabalhar no Sprint. Cada equipe deve demonstrar algo no fim de cada Sprint, uma vez que o objetivo é que sigam regras de auto-organização. 

terça-feira, 2 de novembro de 2010

IF em uma linha com asp.net C#

z = x > y ? x * z : y * z;

Traduzindo...

X é maior que Y ?

Caso seja, o resultado de Z será X * Z
Do Contrário o resultado de Z será Y * Z

sábado, 30 de outubro de 2010

Erro de Assembly ao usar ODP.net ( Oracle.DataAccess )

A Oracle disponibiliza uma excelente biblioteca para acesso ao banco de dados Oracle pelo .NET, chama-se ODP.net ( Oracle Data Provider ) tanto para 10G como para 11G.

O ODP.net possui diversos recursos mais interessantes do que o nativo do asp.net ( System.Data.Oracle ) com o ODP.net você pode implementar maneiras de rastrear qualquer operação de um usuário do sistema no banco de dados ( ClientID ), sem contar o fato de o ODP.net estar em pleno vapor sendo continuada pela Oracle.


Após instalar o ODP.net na adaptação de seu projeto pode haver um erro de Assembly conforme abaixo:

Error x
O assembly 'nomedoassembly, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null' 
usa 'Oracle.DataAccess, Version=2.102.2.20, Culture=neutral, PublicKeyToken=89b483f429c47342', 
que possui uma versão mais recente que o assembly 'Oracle.DataAccess, Version=1.102.2.20, Culture=neutral, PublicKeyToken=89b483f429c47342' usado como referência.


Este erro ocorre por algum conflito entre o Oracle.DataAccess registrado no Machine.config, para saber quais assemblys estão registrados, abra o console do visual studio e rode o seguinte comando:

gacutil /l | find /i "Oracle" > c:\oracle.txt


Com o comando find será gerado um arquivo .txt com o resultado do find, o resultado será algo assim:

Oracle.DataAccess, Version=2.102.2.20, Culture=neutral, PublicKeyToken=89b483f429c47342, processorArchitecture=x86
System.Data.OracleClient, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089, processorArchitecture=x86
System.Data.OracleClient.resources, Version=2.0.0.0, Culture=pt-BR, PublicKeyToken=b77a5c561934e089, processorArchitecture=MSIL
Oracle.DataAccess, Version=1.102.2.20, Culture=neutral, PublicKeyToken=89b483f429c47342
Oracle.DataAccess, Version=10.2.0.100, Culture=neutral, PublicKeyToken=89b483f429c47342
Policy.10.1.Oracle.DataAccess, Version=1.102.2.20, Culture=neutral, PublicKeyToken=89b483f429c47342
Policy.10.1.Oracle.DataAccess, Version=10.2.0.100, Culture=neutral, PublicKeyToken=89b483f429c47342
Policy.10.2.Oracle.DataAccess, Version=1.102.2.20, Culture=neutral, PublicKeyToken=89b483f429c47342
Policy.9.2.Oracle.DataAccess, Version=1.102.2.20, Culture=neutral, PublicKeyToken=89b483f429c47342  Policy.9.2.Oracle.DataAccess, Version=10.2.0.100, Culture=neutral, PublicKeyToken=89b483f429c47342 
Desinstale então os assemblys da versão 1.0 com o seguinte comando:
gacutil /u "Oracle.DataAccess, Version=1.102.2.20, Culture=neutral, PublicKeyToken=89b483f429c47342"
gacutil /u "Oracle.DataAccess, Version=10.2.0.100, Culture=neutral, PublicKeyToken=89b483f429c47342" 
Caso não tenha o Oracle.DataAccess da versão 2.0 registrada, você pode usar o comando abaixo para registrar a dll, lembrando que você deve verificar o caminho de instalação de seu Oracle ODP.net:
C:\>gacutil.exe -i "C:\oracle\product\10.2.0\client_2\ODP.NET\bin\2.x\Oracle.DataAccess.dll"

segunda-feira, 11 de outubro de 2010

Método para Calculo dos Feriados Móveis ASP.NET C#



    /// <summary>
    /// Método para Calculo da Pascoa,Corpus Christ e Carnaval By: Flinox
    /// </summary>
    /// <param name="Ano"></param>
    /// <returns>Array Data[]</returns>
    protected DateTime[] CalculaPascoa(string Ano)
    {
        DateTime[] Data = new DateTime[3];
        int ano = Convert.ToInt32(Ano.Substring(0, 4));
        int x,y;
        int a, b, c, d, e;
        int dia, mes;


        DateTime pascoa, carnaval, corpus;


        if (ano >= 1900 & ano <= 2099)
        {  
            x = 24;
            y = 5;
        }
        else
            if (ano >= 2100 & ano <= 2199)
            {
                x = 24;
                y = 6;
            }
            else
                if (ano >= 2200 & ano <= 2299)
                {
                    x = 25;
                    y = 7;
                }
                else
                {
                    x = 24;
                    y = 5;
                }


        a = ano % 19;
        b = ano % 4;
        c = ano % 7;
        d = (19 * a + x) % 30;
        e = (2 * b + 4 * c + 6 * d + y) % 7;


        if ((d + e) > 9)
        {
            dia = (d + e - 9);
            mes = 4;
        }
        else
        {
            dia = (d + e + 22);
            mes = 3;
        }


        // PASCOA
        pascoa = Convert.ToDateTime((Convert.ToString(dia) + "/" + Convert.ToString(mes) + "/" + ano));
        Data[0] = pascoa;


        // CARNAVAL ( PASCOA - 47 dias )
        carnaval = pascoa.AddDays(-47);
        Data[1] = carnaval;


        // CORPUS CHRISTI ( PASCOA + 60 dias )
        corpus = pascoa.AddDays(60);
        Data[2] = corpus;


        return Data;


    }