Arquitetura de Softwar2

3
Arquitetura de Software Arquitetura de software para desenvolvimento e para produção Tenho vivido em vários clientes uma situação que é no mínimo a base das equipes de desenvolvimento no País: O pessoal desenvolve num ambiente que normalmente não tem nada a ver com o ambiente onde a aplicação vai viver. E mais: nas pesquisas que fiz junto a comunidade Microsoft, normalmente o pessoal do desenvolvimento nem tem contato com o pessoal de produção, a não ser quando os problemas aparecem, nada preventivo. Isto nos leva a dois problemas: Um é o planejamento da aplicação sem o conhecimento necessário do ambiente de produção e o outro, do pessoal da produção, é receber uma aplicação que, ou não está completamente compatível com o que existe, ou que precisa ser muito ajustada. O segundo problema é que na produção a aplicação vai consumir recursos que podem não ter sido considerados, que podem já estar no limite e/ou impactar outras aplicações já existentes. Levando em consideração processos como RUP e etc, não se costuma tratar os requisitos de hardware da aplicação, até porque muitas vezes se ignora totalmente o comportamento da aplicação, já que raramente se fazem os testes necessários para descobrir isto. E também a separação que as próprias empresas impõe sobre as equipes dificulta a obtenção destas informações. O quê os clientes têm descoberto é que muitas vezes os problemas que vivem são frutos da falta de integração das equipes de desenvolvimento e produção. Nesta página A visão do Desenvolvimento A visão da Produção Sugestões A visão do Desenvolvimento O padrão para as equipes de desenvolvimento é receber as especificações para a construção da aplicação, seus componentes e etc., segundo vários modelos (quando há), definidos por alguém que está pensando nas funcionalidades que a aplicação implementará e mais raramente nas condições reais de utilização futura. Fica um pouco pior quando a aplicação tem seu desenvolvimento terceirizado, é dividida em componentes distribuídos entre várias empresas e outras situações onde fica impossível para quem está desenvolvendo ter a mais remota noção de onde a aplicação rodará, a não ser pela tecnologia usada. Além disto, muitas vezes acontecem mudanças de requisitos que têm impactos fortes sobre aspectos da arquitetura da aplicação, muitas vezes comprometendo até mesmo aplicações já em produção.

description

Arquitetura de software 2

Transcript of Arquitetura de Softwar2

Page 1: Arquitetura de Softwar2

Arquitetura de Software

Arquitetura de software para desenvolvimento e para produçãoTenho vivido em vários clientes uma situação que é no mínimo a base das equipes de

desenvolvimento no País: O pessoal desenvolve num ambiente que normalmente não tem nada a

ver com o ambiente onde a aplicação vai viver. E mais: nas pesquisas que fiz junto a comunidade

Microsoft, normalmente o pessoal do desenvolvimento nem tem contato com o pessoal de

produção, a não ser quando os problemas aparecem, nada preventivo.

Isto nos leva a dois problemas: Um é o planejamento da aplicação sem o conhecimento necessário

do ambiente de produção e o outro, do pessoal da produção, é receber uma aplicação que, ou não

está completamente compatível com o que existe, ou que precisa ser muito ajustada. O segundo

problema é que na produção a aplicação vai consumir recursos que podem não ter sido

considerados, que podem já estar no limite e/ou impactar outras aplicações já existentes.

Levando em consideração processos como RUP e etc, não se costuma tratar os requisitos de

hardware da aplicação, até porque muitas vezes se ignora totalmente o comportamento da

aplicação, já que raramente se fazem os testes necessários para descobrir isto. E também a

separação que as próprias empresas impõe sobre as equipes dificulta a obtenção destas

informações.

O quê os clientes têm descoberto é que muitas vezes os problemas que vivem são frutos da falta

de integração das equipes de desenvolvimento e produção.

Nesta página

A visão do Desenvolvimento

A visão da Produção

Sugestões

A visão do DesenvolvimentoO padrão para as equipes de desenvolvimento é receber as especificações para a construção da

aplicação, seus componentes e etc., segundo vários modelos (quando há), definidos por alguém

que está pensando nas funcionalidades que a aplicação implementará e mais raramente nas

condições reais de utilização futura. Fica um pouco pior quando a aplicação tem seu

desenvolvimento terceirizado, é dividida em componentes distribuídos entre várias empresas e

outras situações onde fica impossível para quem está desenvolvendo ter a mais remota noção de

onde a aplicação rodará, a não ser pela tecnologia usada.

Além disto, muitas vezes acontecem mudanças de requisitos que têm impactos fortes sobre

aspectos da arquitetura da aplicação, muitas vezes comprometendo até mesmo aplicações já em

produção.

Quando vamos nos preparar para fazer algum serviço nos clientes, costumamos fazer uma série

de perguntas sobre as condições esperadas de utilização da aplicação e sempre que as respostas

voltam, dependendo de quem responde, vêem com disparidades incríveis! Quando é o pessoal do

desenvolvimento, eles até conseguem entrar em contato com o usuário, mas nem sempre este

contato, que foi a interface na fase de desenvolvimento, está atualizado com a realidade da

aplicação. A regra é vir um monte de informações desatualizadas, que mostram claramente como

a aplicação mudou (evolui, se deformou e etc...), mas sem que com elas se possa de fato tomar

decisões importantes.

O quê acontece é termos que incluir uma fase de análise prévia no projeto para verificarmos uma

série de informações junto à produção ou aos usuários.

Page 2: Arquitetura de Softwar2

Início da página

A visão da ProduçãoAo contrario do desenvolvimento, normalmente o pessoal da Produção tem muitas respostas

pouco úteis em relação às aplicações. Costumo brincar (sem deixar de reconhecer a importância

deles) que as métricas que eles costumam ter são as de lata: memória dos servidores, acessos a

disco, consumo de CPU, de rede, literalmente um monte de informações muito úteis quando se

está fazendo um plano de capacidade, mas que não são tão úteis assim quando o objetivo é

resolver um problema na aplicação.

Além disto, apesar deles segurarem a barra de manter as aplicações no ar, costumam ser os

últimos a saber dos problemas das aplicações, uma vez que as SLA’s que normalmente têm

mostrar as métricas que mencionei acima. É mais fácil justificar um investimento para monitorar

algo tangível como os servidores, rede e etc do que uma abstrata transação, apesar desta ser o

fator determinante de sucesso de uma aplicação.

Habitualmente nas conversar com os clientes pergunto se eles têm seguro da sua infra-estrutura,

sites backup e etc. Sempre têm algum tipo, mas quando pergunto se fizeram segura da aplicação

que gera um montante X de receita, a resposta invariavelmente é não, além da pergunta: como

assim?

Como assim? Simples: Testando a aplicação de várias maneiras para que se conheça um mínimo

em relação aos pré-requisitos de consumo, concorrência e etc da aplicação. Quem não conhece a

teoria da ultima gota no copo cheio? É ela sempre que derruba tudo! Mesmo que a aplicação

esteja ok, sempre vai ser a última a entrar no ar a culpada pelo desastre, e os responsáveis por ela

os culpados!

Nos casos onde tenho como clientes as equipes de produção, além do stress normal, eles ainda

têm 2 desafios: 1) identificar rapidamente os problemas, 2)resolvê-los o mais rápido possível. É

desta forma que são avaliados pelas organizações onde trabalham.

Ainda na lista dos problemas, não adianta jogar uma aplicação projetada para suportar X usuários

simultâneos quando ela só suporta metade ou nem isto. É uma falha total, sem falar que quando a

aplicação é para consumo interno da organização, ela ainda pode cair em desgraça.

Início da página

SugestõesApesar de não ser exatamente uma novidade, uma das sugestões que usualmente dou, é fazer

reuniões de integração entre as equipes de desenvolvimento e produção para criar um time real,

unido e comprometido com os resultados da organização. Não adianta uma parte fazer um belo

projeto se ele contiver problemas para a outra parte.

Quando estava na Rational, e ainda hoje, vejo um monte de gente falando de ciclo de vida da

aplicação como sendo somente a fase de desenvolvimento e testes, mas a realidade é que esta é

a fase de gestação da aplicação. Em inglês o termo que identifica o momento de entrega é o

mesmo do parto: Delivery, e é a partir daí que a aplicação vai mostrar de fato a que veio, gerar

seu ROI e Pay-back, entre outras coisas.

Outra sugestão interessante, é deste o momento de concepção da aplicação, capturar-se o

ambiente onde ela rodará, de forma que os desenvolvedores possam conversar com os da

produção para que possam usar o máximo da infra-estrutura, evitar o máximo de desperdício de

recursos e ajustar o máximo de componentes pré-existentes aos novos serviços que terão que

suportar.

E mais do que tudo: testar, testar, testar.... como alguns ainda vão lembrar: um processo iterativo

controlado para os muito técnicos e um processo dialético para os filósofos.

Abraços

Mauricio Medina tem 22 anos de experiência no mercado de software, e é o diretor executivo da

Consequor Tecnologia, empresa especializada em qualidade de software, monitoração e análise de