Agilidade em Testes de Software – O que é ser Ágil? Parte 02 de 03

agile-glossary

Olá Pessoal,

Dando continuidade ao post ALM – Agilidade em Testes de Software – O que é ser Ágil? – Parte 01 de 03 o que acredito ser um bom caminho desse tema as vezes polêmico.

Particularmente e longe da minha crença/opinião estar certa e além disso, amanhã posso tranquilamente mudar minha opinião, mas hoje creio que agilidade está intimamente ligada muito mais aos indivíduos (time, colaboradores, empresa) que fazem a atividade do que apenas no processo em si.

Claro que há processos que inibem você (que acredita que possui um pensamento ágil, assertivo, etc.) de pular partes desse processo devido a regras estabelecidas, mesmo que você entenda que aquela parte do processo é descartável, devido a uma obrigatoriedade legal como uma ISO ou SOX ou até por determinação da própria empresa.

Continuar lendo

ALM – Agilidade em Testes de Software – O que é ser Ágil? Parte 01 de 03

keep-calm-and-love-agil

Resolvi escrever esse post, depois que recebi um contato de uma amiga me pedindo se eu tinha materiais sobre Testes Ágeis. Então para deixar bem organizado, resolvi escrever um Post de 03 partes que, além de ajudar essa amiga, também deixar disponível caso alguém tenha interesse.

Primeiramente, antes de iniciar a leitura, gostaria de deixar claro que acredito particularmente que, todos os métodos, processos e frameworks são funcionais e bons, e tudo é questão de momento, tendências e realidades, conforme as necessidades de cada empresa e time. Que o objetivo desse post é apenas provocar uma reflexão sobre as tendências, se realmente temos o certo e errado dentro de processos e frameworks mundialmente utilizados e que tanto serviram a seus propósitos ao longo dos anos. E não sou um guru de testes ágeis, nem de DevOps, apenas estou expondo um pouco do que já vi e o conhecimento que tenho de ferramentas e processos.

Continuar lendo

ALM – Conhecendo um Pouco mais sobre ALM – Post 15 de 100 – Infraestrutura como Código ou “Infrastructure as Code”

Introdução

Esse artigo tem como objetivo explicar sobre o termo Infrastructure as Code (IaC), seu uso em ALM (DevOps), estudos de caso, práticas e ferramentas disponíveis no mercado para auxiliar a entrega de aplicativos mais rápidos, com qualidade e cada vez mais aproximando o time de operações e desenvolvimento.

 

image

Figura do site da Microsoft (DevOps)

O que é o IaC?

Infraestrutura como código (IaC) é um termo adotado na ramificação de ALM (Application Lifecycle Management) denominado DevOps e que está sendo amplamente divulgado devido a sua abordagem no quesito velocidade e principalmente qualidade na entrega de ambientes de desenvolvimento, testes e produção para atender cada vez mais rápido o mercado de tecnologia.

Resumindo, a abordagem IaC nada mais é do que a entrega de uma infraestrutura ágil, utilizando-se de codificação simples e objetiva, sem a necessidade mais de diversos passos e processos para se preparar um ambiente, sem perder o poder de controle, segurança, qualidade e disponibilidade.

A Forrester® fez um estudo intitulado Infrastructure As Code: Fueling The Fire For Faster Application Delivery em que se demonstra através de um estudo de caso com diversos profissionais o ganho do uso de IaC em seus ambientes, diminuindo-se a latência entre a disponibilização de um software do time de desenvolvimento até a entrada do mesmo em ambiente de QA e Produção. Nesse excelente estudo, um dos pontos abordados foi quais os maiores desafios para se prover e configurar uma infraestrutura. Os pontos levantados foram os abaixo:

image

Sendo que uma das maiores dificuldades vistas foi justamente a falta de colaboração entre os times de Operações e Desenvolvimento, seguido de falta de habilidades em fazer scripts de configuração e erros de configuração. Essas situações são extremamente comuns no dia a dia e um dos principais ofensores nas entregas de aplicativos, pois consome-se muito tempo em gerenciamento de conflitos entre times, além de retrabalhos devido a BUGS mapeados devido a configurações incorretas realizadas, gerando todo um fluxo de trabalho para os envolvidos.

Vantagens

Olhando-se para o cenário exposto acima, é perceptivel o quanto o conceito IaC pode ajudar a mitigar as situações acima mencionadas. Como esse conceito, torna-se muito mais fácil a gestão de um ambiente de desenvolvimento, testes e produção, local, remoto ou hibrido, On-Premise, Datacenter ou Nuvem. A vantagem do uso do IaC está na lógica do conceito de se preparar ambientes com codificações simples e seguras, utilizando-se de soluções disponiveis no mercado, facilitando a gestão do time de operações, pois com pouca gestão e tempo, consegue-se disponibilizar ambientes extremamente complexos e com qualidade para serem usados. Além disso, da-se a liberdade ao time de Desenvolvimento, através de suas ferramentas de codificação, a “subir” um ambiente localmente ou em nuvem, sem a necessidade de intervenção do time de Operações na parte de entrega do ambiente, dando mais velocidade na entrega de aplicativos, assim o time de Operações consegue focar mais no “Core” do ambiente, não tendo que se preocupar em estar atendendo solicitações de ambientes.

Outra vantagem é a assertividade do uso do IaC na entrega de ambientes no quesito configuração e pré-requisitos, pois usando-se das tecnologias disponiveis, evita-se falhas de configuração, falta de pré-requisitos, falta de chaves de registro, diretórios, permissões, etc.

– Velocidade na disponibilização de ambiente, mudando-se o tempo de entrega de ambientes e dias para horas;

– Gestão efetiva dos ambientes;

– Liberdade ao time de desenvolvimento sem perder o controle, pois é possível ainda usar de ferramentas de aprovação, se assim a empresa necessitar, dando uma gestão, controle e atendendo a legislações e práticas de modelos ISO, CMMI, entre outros;

– Integração com ferramentas de entregas de ambientes como o Microsoft Azure, System Center e Lab Management, Release Management e TFS Build Server vNext, e muitas outras;

image

Cenários

Imagine o cenário onde-se consegue disponibilizar um ambiente de virtualização, com todos os pré-requisitos instalados e todas as configurações feitas em minutos, e sem erros?

Ou garantir que uma configuração ou feature estará instalada no servidor, mesmo que alguém a remova de lá?

Um time de testes ou desenvolvimento, através de sua própria ferramenta como Visual Studio, Lab Management, ou similar, conseguir “subir” um ambiente em minutos totalmente preparado para sua necessidade, com fácil gestão de scripts?

Um time de Operações demandar toda uma infraestrutura simplesmente usando um sistema de aprovação com o Service Manager, sem a necessidade de estar sempre tendo que formatar, criar VM, aplicar updates, ativar features, configurar permissões, etc.?

Ou ter ainda todo esse tramite de DEV, QA, Homologação e Produção em seu SaaS, ambiente Corporativo, sendo local, remoto ou hibrido, usando um gerenciamento de liberações com sistema de aprovações?

Todos esses cenários são possiveis com o IaC.

Pontos Chaves para o Sucesso

Antes de mais nada, é importante frisar que ferramentas são um meio de se obter o que é necessário, mas antes mesmo de entrar na esfera de ferramentas, deve-se ter muito bem “mapeado” dentro de sua empresa quais são as dificuldades atuais, quais são as barreiras a serem “quebradas” quais são os objetivos a serem atingidos o como o IaC pode ajudar. Inicialmente se sugere que leia o artigo da Forrester na integra para identificar em quais pontos a sua empresa se encontra para poder trabalhar neles.

No que se tem visto ao uso do IaC nas empresas que adotaram tal conceito, foi-se:

– Melhor colaboração entre os times;

– Ganho de velocidade nas entregas (desde o desenvolvimento até a produção);

E os pontos trabalhados para se entender onde o IaC pode ajudar foi no:

– Estudo de pontos de “falha” no processo de configuração entre os times de Dev, Ops e até mesmo Dev e Testes;

– Alinhamento de quais ferramentas e códigos serão usados para a adoção do IaC, para que todos estejam “falando” a mesma lingua;

– Entender os locais de gargalo atuais na preparação e disponibilização de ambientes, e como o IaC pode ajudar (se a causa for realmente configuração);

– Ter as equipes comprometidas e alinhadas nessa nova fase de adaptação;

– Tempo e dinheiro para as equipes treinarem e se capacitarem nas tecnologias emergentes e consolidadas para serem usadas com assertividade, diminuindo-se o “tentativa e erro” que é uma das maiores causas de frustração e cancelamento de uma boa idéia.

Ferramentas e Materiais Disponíveis

Atualmente há diversas ferramentas no mercado, e aqui há algumas que estão disponiveis para serem usadas dentre as quais:

– Powershell DSC

Ferramenta disponivel nativamente no Windows Server 2012 R2 e Windows 8.1, que facilita a implementação features e configurações no Windows. Sua diferença do Powershell como conhecemos é que essa ferramenta utiliza duas simples lógicas “Present” e “Absent” ou seja, em pouco mais de 05 linhas de comando simples você determina se uma configuração, chave de registro, permissão, feature ou requisito está presente ou ausente do servidor ou computador cliente e o Powershell encarrega-se de entregar isso. E o mais legal dessa ferramenta é que você pode ter um servidor central, onde todos os demais servidores ou computadores clientes consultam esse servidor a cada 05 minutos, mantendo-se integro as configurações determinadas, mesmo que as permissões, chaves, features forem removidas incorretamente ou por falha, dando assim qualidade e garantia em seu ambiente. Como isso, você pode realizar um cenário similar ao abaixo:

image

ou

image

– Release Management

O Release Management é uma ferramenta parte integrante da solução de Application Lifecycle Management da Microsoft que tem como objetivo dar velocidade e qualidade na implantação de aplicativos em ambientes de testes, homologação e produção. Com o gerenciamento de lançamentos no Visual Studio, você pode configurar, aprovar e implantar seus aplicativos para qualquer ambiente. Crie orquestrações de implantação automatizadas para cada ambiente, independentemente da complexidade da configuração. A entrega de seu software com mais frequência e facilidade para um ambiente permite que seus testadores trabalhem na validação de seu sistema e mantém os participantes envolvidos em fornecer comentários.

Há diversas outras ferramentas a serem exploradas, e que está disponíveis no Portal do TechNet Wiki para conhecimento e estudos.

– Artigos sobre IaC

no Portal do TechNet Wiki há artigos sobre essa tecnologia, para saber mais vá na pesquisa e procure por termos como ALM, DevOps, IaC.

Maiores Informações e Fontes de Referência

Recursos técnicos para praticantes de DevOps

Microsoft DevOps

ALM – DevOps – Powershell DSC – Release Management

Saiu um novo módulo do Powershell DSC  para o Release Management, disponibilizado pelo time de Powershell da Microsoft.

image

O módulo xReleaseManagement é um conjunto de recursos de DSC que se estendem de Gerenciamento de Liberação para o Visual Studio.

Este módulo inclui atualmente um recurso DSC para transformar arquivos com base em um arquivo de token para uso com o Gerenciamento de Liberação para o Visual Studio.

Para conhecer mais sobre o Powershell DSC, pesquise nesse Blog!

DevOps – Powershell DSC – Entendendo os Recursos “Present” e “Absent”

Introdução

O DSC é um novo sistema de gestão no Windows PowerShell, que permite a implantação e o gerenciamento de dados de configuração para serviços de software e o ambiente em que estes serviços são executados de forma simplificada.

Conheça mais lendo o artigo: O que é o PowerShell v4 Desired State Configuration (DSC)? 

Present ou Absent

O Powershell DSC possui uma singularidade na forma de implantar ou remover os recursos de um servidor. Devido sua simplicidade, a forma de escrita de seu script é feita de forma declarativa, ou seja, simplesmente se declara no script, utilizando-se a linguagem do powershell, para garantir que um recurso esteja presente ou ausente de um servidor em que você deseja que uma aplicação esteja funcionando.

Present (Presente): Garante que toda vez que o Powershell DSC consumir o arquivo MOF, identificará se a feature/arquivo/configuração definida no script está disponível no servidor. Caso não esteja, ele irá instalar/configurar/inserir, inclusive os pré-requisitos necessários (desde que as fontes estejam disponíveis para a pesquisa do pré-requisito).

Absent (Ausente): Garante que toda vez que o Powershell DSC consumir o arquivo MOF, identificará se a feature/arquivo/configuração definida no script não está disponível no servidor. Caso esteja, ele irá desinstalar/desconfigurar/remover.

Por exemplo:

Se você necessita que seu servidor Windows Server 2012 tenha o serviço do Internet Information Services e o ASP.NET, simplesmente você escreve um código conforme a tela abaixo.

image

Ou seja, quando o arquivo for executado, o Powershell DSC irá garantir “Present” que as features informadas estejam lá. Se simplesmente trocar de “Present” para “Absent” ele irá garantir que a Feature não esteja presente no servidor.

Maiores Informações

Artigos sobre Powershell DSC – Portal do TechNet Wiki

DevOps – Powershell DSC – Habilitando o Acesso Remoto do Servidor

Introdução

Com o Powershell DSC ficou muito mais simples implantar requisitos em um sistema operacional Windows, utilizando-se de forma declarativa e com poucas linhas de codificação.

Conheça mais nos artigos:

O que é Powershell DSC

Lista de Features do Windows e Exemplos de Implantação

Requisitos

Necessário possuir o Powershell 4.0 disponível no Windows 8 ou Windows Server 2012;

Ter instalado o Resource Kit (adicional) do Powershell DSC. Veja nesse artigo: DevOps – Powershell DSC – Instalando o Resource Kit – Pacotes Adicionais

Habilitando o Acesso Remoto (RDP) no Servidor

São 03 passos simples:

– Executar o script inicial;

– Gerar o arquivo MOF;

– Consumir o arquivo MOF com o Powershell DSC;

Qualquer dúvida, veja o artigo exemplo:

DevOps – Powershell DSC – Lista de Features do Windows e Exemplo de Implantação

Nesse artigo há telas das mensagens que deverão aparecer em um exemplo.

– Executar o script inicial (exemplo do Microsoft Gallery)

Configuration AllowRemoteDesktopAdminConnections
{
    Import-DscResource -Module xRemoteDesktopAdmin, xNetworking

    Node (‘localhost’)
    {       
        xRemoteDesktopAdmin RemoteDesktopSettings
        {
           Ensure = ‘Present’
           UserAuthentication = ‘Secure’
        }

        xFirewall AllowRDP
        {
            Name = ‘DSC – Remote Desktop Admin Connections’
            DisplayGroup = “Remote Desktop”
            Ensure = ‘Present’
            State = ‘Enabled’
            Access = ‘Allow’
            Profile = ‘Domain’
        }
    }
}

$workingdir = ‘C:\RDP\MOF’

– Gerar o arquivo MOF

AllowRemoteDesktopAdminConnections -OutputPath $workingdir

– Consumir o arquivo MOF com o Powershell DSC

Depois do arquivo MOF gerado, execute o comando via Powershell para o arquivo ser consumido.

Start-DscConfiguration -ComputerName ‘localhost’ -wait -force -verbose -path $workingdir

Maiores Informações

http://technet.microsoft.com/en-us/library/dn249912.aspx

DevOps – Powershell DSC – Instalando o Resource Kit – Pacotes Adicionais

Introdução

Com o Powershell DSC ficou muito mais simples implantar requisitos em um sistema operacional Windows, utilizando-se de forma declarativa e com poucas linhas de codificação.

Conheça mais nos artigos:

O que é Powershell DSC

Lista de Features do Windows e Exemplos de Implantação

Importando o pacote Resource Kit para o Powershell DSC

Faça o download no link:

https://gallery.technet.microsoft.com/scriptcenter/DSC-Resource-Kit-All-c449312d

Em seguida, extraia o arquivo para o diretório \Powershell\Modules

image

Execute o comando Get-DSCResource

image

image

Observe os componentes instalados.

image