Por que eu devo ler este artigo:Tanto a área de desenvolvimento de sistemas como também a área de operações de TI vem igualmente pressionadas a entregar e manter os sistemas e novas funcionalidades, cada vez mais disponíveis e escaláveis, dentro de um intervalo de tempo cada vez mais curto. Integrar as equipes de desenvolvimento e operações de TI surge como uma possível solução, pois permite que a operação entenda cada vez mais das aplicações e das necessidades de negócio encontrando e propondo soluções à equipe de desenvolvimento. A equipe de desenvolvimento, por sua vez, passa a entender melhor como as operações funcionam e como elas devem funcionar para atender cada vez mais e melhor ao negócio. Este é o papel do DevOps – integração contínua, agilidade, qualidade, estabilidade com escalabilidade e elasticidade. Entender o papel e a proposta do DevOps pode agregar grande valor às empresas as quais dependem, cada vez mais, de suas aplicações e sistemas como plataforma de sustentação de seus negócios.

Muitos profissionais da área de desenvolvimento do software vêm percebendo a necessidade crescente em se entregar software de qualidade e com maior frequência (menor intervalo de tempo). Muitos destes profissionais da área de desenvolvimento recorreram aos métodos ágeis, como o Scrum, para viabilizar estes objetivos.

O desenvolvimento de software, de qualidade, sempre foi e sempre será um grande desafio. A qualidade do software está diretamente relacionada ao atendimento dos requisitos solicitados pelo cliente. Existe sempre uma grande preocupação com o fato do software atender aos requisitos funcionais, seguramente podemos afirmar que esta seja a maior preocupação dos profissionais da área de desenvolvimento de software.

Requisitos funcionais, naturalmente, são tangíveis, pois o usuário pode por si próprio aferir se está de acordo com as suas expectativas ou não. Por outro lado, os requisitos não funcionais não são levados em conta. Requisitos não funcionais estão ligados à performance, disponibilidade, segurança, escalabilidade e, nos dias atuais, a elasticidade é outro requisito não funcional que vem crescendo em nível de importância.

A elasticidade é um grande recurso disponibilizado por alguns fornecedores de computação na nuvem (Cloud Computing) onde a infraestrutura se adapta à demanda, alocando mais recursos conforme a demanda por processamento aumenta e liberando estes recursos computacionais na medida em que a demanda diminui.

Mesmo parecendo óbvio, precisamos enfatizar que um software desenvolvido e entregue para funcionar precisará de uma infraestrutura. Quando dizemos infraestrutura, significa um conjunto composto por hardware, softwares e rede. A infraestrutura de hardware é composta por computadores do tipo servidor e outros dispositivos. Nestes servidores, são instalados os chamados softwares básicos, tais como: sistema operacional, serviços de gestão de aplicação, gestão de conteúdo, entre outros. Outro componente de software imprescindível são os chamados sistemas de gestão de banco de dados, ou simplesmente conhecidos como banco de dados, responsáveis pelo armazenamento de grandes volumes de dados. E ainda, para permitir o acesso ao software desenvolvido e instalado no servidor, deverá haver uma infraestrutura de rede (network) tais como links, firewalls, roteadores e etc.

Por mais óbvio que pareça, muitos profissionais da área de desenvolvimento de software geralmente se esquecem do fato de que a infraestrutura não pode ser exclusiva ou propriedade do software. Os recursos de infraestrutura são, em sua maioria, compartilhados entre outras tantas aplicações que visam atender a outras demandas de negócio da empresa. O custo de infraestrutura nunca foi pequeno ou irrelevante logo, não podem ser alocados de forma leviana. Os responsáveis pela manutenção da infraestrutura, os chamados sysadmin, possuem diversos desafios entre manter e evoluir a disponibilidade da infraestrutura de forma a torná-la cada vez mais confiável e com custos altamente vantajosos.

Na prática, para quem trabalha na gestão de projetos de desenvolvimento ou manutenção de softwares, é fácil perceber esta falta de entendimento sobre a infraestrutura pela equipe de desenvolvimento. Para ilustrar este ponto, faremos alusão sobre experiências vividas durante projetos de desenvolvimento de software.

Por definição, projeto é um esforço temporário empreendido para alcançar um objetivo específico. Projetos são executados por pessoas, geralmente têm limitações de recursos e são planejados, executados e controlados. Um projeto cria um produto, serviço ou resultado específico. Esta definição existe no PMBOK (Project Management Body of Knowledge), publicado e mantido pela instituição americana PMI (Project Management Institute).

Em se tratando de desenvolvimento de software, os projetos são criados para analisar (levantamento de requisitos), arquitetar (definir o desenho e alcance do software), construir (desenvolver o código fonte e testar), homologar (validar o que foi entregue) e, por fim, entregar o software disponibilizando-o em produção (roll-out) onde a equipe de operações de TI assume o software como item de configuração passando a monitorá-lo e mantê-lo disponível e seguro.

Não importa qual o método empregado para desenvolver o software, seja optando pelo modelo tradicional ou pelo modelo ágil, o resultado final esperado é a entrega do software em produção. A adoção do método está diretamente relacionada à cultura e a ...

Quer ler esse conteúdo completo? Tenha acesso completo