A ES é toda uma área do conhecimento da computação. A intenção é conseguir especificar, desenvolver e manter software com a melhor relação de custo e qualidade possível com todas as técnicas que temos disponíveis, se focando em aspectos práticos. Por isso ela engloba todas estas partes do software:
- Requisitos;
- Design;
- Implementação;
- Testes;
- Manutenção;
- Gerência de configuração;
- Gerência de engenharia;
- Processos de engenharia;
- Ferramentas e métodos de engenharia;
- Qualidade;
Para nos ajudar a entender tudo isso, vamos começar com a definição de ciclo de vida do produto (software). A idéia destes modelos é detalhar como deve ser o passo a passo do desenvolvimento do software até que se tenha o produto final.
No processo em Cascata temos um processo linear, na base de muitos processos de ciclo de vida ainda hoje. Completa-se a engenharia de requisitos para só depois fazer o design do software. E só depois deste é que se inicia a implementação e os testes. Depois se testa o sistema e finalmente se entra na etapa de manutenção do software. Costuma funcionar melhor para equipes tecnicamente mais fracas e minimiza o tempo de planejamento. Porém é mais inflexível e só produz um software realmente no final do processo.
O modelo em espiral tenta dar maior importância a duas partes deste ciclo: a análise de risco e a prototipagem. Procura-se definir e especificar partes menores, produzindo protótipos e cada iteração pode voltar a qualquer etapa (mais comum de se voltar ao desenvolvimento ou especificação) e gerar outro protótipo até que se chegue ao final do produto. E este acaba sendo um modelo complexo de se planejar e utilizar, mas pode-se diminuir muito o risco dos projetos. Uma variação parecida é a Prototipagem Evolucionária, que também faz ciclos de protótipos, mas não chega a fazer um planejamento geral porque se planeja apenas versões curtas, o que é muito útil quando os requisitos ainda não estão bem definidos, mas tem a desvantagem de que é impossível de prever quanto tempo ou quantas iterações serão necessárias até o final do projeto.
Entre outros modelos utilizados estão: Codificação e Correção, Staged Delivery, Evolutionary Delivery, Design-to-Schedule, Design-to-Tools e Off-the-Shelf.
Quanto as metodologias de desenvolvimento, também temos diversas delas para escolher. O RUP (Rational Unified Process) foi criado por uma empresa adquirida pela IBM e virou IRUP (IBM RUP). Eles fornecem técnicas de desenvolvimento de software visando o aumento de produtividade. Ele faz uso da Orientação a Objetos e da linguagem UML para definir e ilustrar os seus processos. Ele divide o processo em quatro fases essenciais:
Concepção: ênfase no escopo do sistema;
Elaboração: ênfase na arquitetura;
Construção: ênfase no desenvolvimento;
Transição: ênfase na implantação.
É um modelo considerado pesado, mas que é muito útil com um grande número de pessoas na equipe, no caso de projetos muito grandes. Mas é suficientemente simples para que possamos trabalhar com ele em processos menores.
De qualquer forma, muitas metodologias surgiram exatamente por esta razão, com o nome de métodos ágeis. Eles procuravam uma forma de se conseguir um resultado semelhante sem gerar tantos documentos durante o processo e procuram minimizar o risco com curtos períodos de desenvolvimento. No início a "programação extrema" causou muito reboliço com suas idéias de programação em pares e projeto contínuo e hoje em dia sofre críticas mesmo daqueles que acreditam nas metodologias ágeis, como depender de desenvolvedores muito bem preparados, falta de estrutura e documentação, requerer uma mudança cultural muito grande, etc. Mais recentemente a metodologia ágil que mais ouço falar é a Scrum que procura percorrer todo o processo de desenvolvimento de software em "sprints" curtos, geralmente de 15-30 dias, gerando versões funcionais de software regularmente.
Basicamente, no Scrum se faz um planejamento geral que gera a lista completa de requisitos de software (o que é chamado de "product backlog"). Então se faz reuniões periódicas chamadas de "Sprint Planning Meetings" onde se acorda o escopo do próximo "sprint", montando o "sprint backlog". Diariamente durante o sprint, se faz uma reunião rápida para verificar se o andamento do sprint está comprometido (Daily Scrum). No final do sprint, se faz uma apresentação as "clientes" da versão, mostrando as funcionalidades implementadas e as anomalias que foram encontradas, para atualizarem o "product backlog" e se prepararem para o novo "sprint". Também deve ser realizada uma reunião de "Sprint Restrospective" para darem feedback sobre o processo e melhorarem o que for possível para o próximo "sprint". Devem, então, acontecer tantos "sprints" quanto forem necessários para que o produto seja dado como concluído.
Ultimamente tenho começado a acreditar que esta metodologia funciona muito bem com o tipo de estrutura que temos aqui na empresa que trabalho e estou estudando mais a respeito para utilizarmos o que for possível/benéfico.
sexta-feira, 5 de junho de 2009
quarta-feira, 3 de junho de 2009
Redes de Computadores
Quando dois ou mais computadores trocam serviços, se tem uma rede de computadores. Pode ser impressoras, dados, mensagens (de texto instantâneas ou emails), etc. A internet já é uma rede com muitos serviços disponíveis e por isso, é tão útil nos dias de hoje. A idéia deste post é comentar algumas destas teorias de redes.
Topologias
A topologia da rede define por onde esta troca de informações acontece e por isso, vou descrever um pouco destas topologias para podermos compreender melhor como estas redes funcionam.
Uma topologia em barramento é quando todos os computadores estão ligados ao mesmo barramento, que já não é muito utilizada nos dias de hoje, já que era feita com cabos coaxiais, ligando um computador ao outro com um único cabo e utilizando o "T" para fazer a extensão para o próximo computador. E as redes em árvore são essencialmente uma série de redes de barramento, fazendo uma máquina conversar com outras duas.
Quando os computadores estão ligados em anel, um computador só conversa com o seu vizinho diretamente. Então quando ele quer falar com outra máquina ele envia a mensagem e o vizinho passa para o próximo até que ou a mensagem chegue ao seu destino ou retorne ao computador que a enviou (que então tira a mensagem do círculo).
As topologias em estrela, hoje em dia, são as mais comuns. Tem um centralizador da rede (hub, switch) e todos os computadores da rede ligados a ele, funcionando para pequenas redes, já que estes centralizadores raramente possuem muitas portas. Mesmo assim, é um dos tipos mais comuns de redes atualmente.
Por fim, a topologia híbrida que é também muito utilizada hoje em dia. Cada ambiente seleciona a rede que é mais adequada para ele e conversa com outras redes de topologias diferentes.
Ligação ao Meio
Além das topologias, ainda há mais uma forma de se classificar estas ligações.
Ponto a ponto é uma forma de ligar dois equipamentos. Serve para as topologias de anel (ligando um computador ao outro), estrela (ligando um computador ao centralizador) e é bem mais simples de implementar porque não possui os problemas de múltiplas reflexões nem de transmissões simultâneas.
No caso da ligação multiponto, há algumas precauções que deve-se tomar com reflexões e ter a certeza de qual computador está tentando falar com ele. Pode-se utilizar este tipo de ligação em qualquer uma das topologias.
Meios de Transmissão
Agora vamos falar dos cabos e outros meios onde esta informação pode trafegar. É parte vital da montagem de uma boa rede a definição de qual meio de transmissão será utilizado.
O cabo de par trançado foi criado para se tentar diminuir o ruído e manter as propriedades elétricas do meio. Ele tem esse nome porque é composto por dois pares de cabos de cobre trançados um no outro. Em baixas frequências ele apresenta uma boa resistência a ruídos, porém em altas frequências o cabo coaxial é melhor.
Como acabamos de dizer, o cabo coaxial é mais resistente a ruídos, independentemente do tamanho do cabo, mas é mais caro. Ele é feito com dois condutores, um interno e um externo, separados por um dielétrico e possuindo uma camada isolante circundando o condutor externo.
Já as fibras óticas, ainda mais caras, são imunes a ruídos eletromagnéticos e permitem um isolamento completo entre o transmissor e o receptor. Sua transmissão é realizada por um sinal de luz codificado que trafega dentro do domínio de frequência infravermelho.
Fora isso temos os meios de transmissão wireless. Ou que não precisam de cabos. Ondas de rádio são utilizadas para longo alcance, mas podem ser bloqueadas por obstáculos físicos nestas frequências, ou em frequências mais baixas podem atravessar paredes, mas não ficam com um alcance muito grande. De qualquer forma, para o curto alcance, geralmente se utiliza as ondas milimétricas ou infravermelhas (utilizadas em controles remotos, por exemplo). Neste caso elas não atravessam objetos sólidos, o que é uma vantagem para este tipo de equipamento. E por fim, temos a transmissão por microondas, que foi muito utilizada para transmissões de longo alcance antes da fibra ótica e ainda hoje em tecnologias de celulares, possuem a desvantagem de precisar de muitos repetidores.
Transmissão e Banda Passante
Agora podemos conversar sobre como a transmissão dos dados será realizada. A origem primeiro gera a informação, depois monta uma tabela de símbolos e monta um pacote com os dados que será transmitido. Depois é feita a transmissão deste pacote da origem ao destino seguindo a topologia certa e no destino se faz a decodificação desta informação e se recria a informação. Para determinar a banda passante de uma rede é necessário saber com que frequência o sinal pode ocilar da origem até o destino, pelo ruído que pode ser gerado no canal, pela atenuação e pelos ecos. Em um meio sem ruído, o máximo que pode ser transmitido de dados com uma frequência de "X" Hz é 2 "X", porque você pode mandar um bit na subida e outro na decida da oscilação do sinal. Por isso, duas fórmulas bastante comuns na ausência de ruído:
C = 2 W baunds.
Se não forem apenas dois níveis de tensão (alto e baixo) transmitidos, na verdade a fórmula passa a poder transportar log2(L) bits, onde L é a quantidade de níveis de tensão, transformando a fórmula em:
C = 2 W log2(L) bps (se L = 2, log2(2) = 1 e ficamos exatamente com a fórmula anterior).
Para aqueles que não se lembram, uma regrinha fácil para o cálculo do logarítimo é com 2 elevado a "X" é igual a L. Quanto é "X"? Além disso os sinais vão sofrendo atenuação com a distância da origem (a fibra ótica permite uma atenuação menor que 1dB por km), por isso há um limite de uso diferente para cada tipo de cabeamento/meio de trasmissão e o ruído é geralmente medido em decibéis. Se quisermos levar em consideração o sinal sobre o ruído, podemos dividir a fórmula acima por:
C = ( 2 W log2(L) ) / (1 + S/R) (onde S = Sinal e R = Ruído, ambos em potência ou decibéis)
Assim é possível se determinar com mais precisão a banda passante máxima.
Protocolos de Rede
O modelo ISO/OSI é um bom modelo de arquitetura de redes que deve ser seguido nos projetos de protocolos de redes, com o objetivo de permitir a troca de informações entre computadores de fabricantes distintos. Para reduzir a complexidade, o modelo dividiu a arquitetura em camadas, sendo que há uma hierarquia entre elas. Cada camada fornece serviços para a camada superior e usa serviços da camada inferior. São elas:
- Aplicação -
Aplicação (fornecer aos processos de uma aplicação os meios para utilizar os meios de comunicação disponiveis)
Apresentação (realizar as conversões necessárias para que a comunicação seja realizada)
Sessão (estruturar os circuitos fornecidos pela camada de transporte para fazer o controle do token ou do diálogo - ver que estão se entendendo ou voltar até o último ponto de onde iniciaram)
Transporte (definir um meio confiável fim-a-fim de transmissão, garantir que os pacotes sejam interpretados na ordem correta e que cheguem do outro lado corretamente)
Rede (trata dos problemas de roteamento e chaveamento de pacotes)
Enlace (transforma um meio de comunicação não confiável em confiável, colocando a informação em quadros com redundância para detecção de erros, por exemplo)
Físico (define como representar os bits no meio físico, se a comunicação será half-duplex ou duplex, como a conexão será estabelecida e desfeita)
- meio físico -
Já a arquitetura TCP/IP é muito semelhante a esta, mas possui menos camadas definidas.
- Aplicação -
Aplicação (soma das camadas de sessão, apresentação e aplicação, tem como exemplos: http, dns, ftp, telnet)
Transporte (exemplos: TCP e UDP)
Rede (exemplos: IP)
Intra-Rede (corresponde as camadas físico e enlace, com exemplos: ethernet, slip, PPP)
- meio físico -
Montando a Rede
Agora que temos todo estes conhecimentos sobre redes podemos determinar qual a rede que precisamos para nossa aplicação. Podendo escolher como será feita a ligação dos computadores, quais protocolos utilizar, determinar a banda que será conquistada com a rede. Mais do que isso, talvez se quiser saber o quanto divide a banda ao se utilizar hubs ou switches, mas isto poderá ser matéria de um outro post...
Topologias
A topologia da rede define por onde esta troca de informações acontece e por isso, vou descrever um pouco destas topologias para podermos compreender melhor como estas redes funcionam.
Uma topologia em barramento é quando todos os computadores estão ligados ao mesmo barramento, que já não é muito utilizada nos dias de hoje, já que era feita com cabos coaxiais, ligando um computador ao outro com um único cabo e utilizando o "T" para fazer a extensão para o próximo computador. E as redes em árvore são essencialmente uma série de redes de barramento, fazendo uma máquina conversar com outras duas.
Quando os computadores estão ligados em anel, um computador só conversa com o seu vizinho diretamente. Então quando ele quer falar com outra máquina ele envia a mensagem e o vizinho passa para o próximo até que ou a mensagem chegue ao seu destino ou retorne ao computador que a enviou (que então tira a mensagem do círculo).
As topologias em estrela, hoje em dia, são as mais comuns. Tem um centralizador da rede (hub, switch) e todos os computadores da rede ligados a ele, funcionando para pequenas redes, já que estes centralizadores raramente possuem muitas portas. Mesmo assim, é um dos tipos mais comuns de redes atualmente.
Por fim, a topologia híbrida que é também muito utilizada hoje em dia. Cada ambiente seleciona a rede que é mais adequada para ele e conversa com outras redes de topologias diferentes.
Ligação ao Meio
Além das topologias, ainda há mais uma forma de se classificar estas ligações.
Ponto a ponto é uma forma de ligar dois equipamentos. Serve para as topologias de anel (ligando um computador ao outro), estrela (ligando um computador ao centralizador) e é bem mais simples de implementar porque não possui os problemas de múltiplas reflexões nem de transmissões simultâneas.
No caso da ligação multiponto, há algumas precauções que deve-se tomar com reflexões e ter a certeza de qual computador está tentando falar com ele. Pode-se utilizar este tipo de ligação em qualquer uma das topologias.
Meios de Transmissão
Agora vamos falar dos cabos e outros meios onde esta informação pode trafegar. É parte vital da montagem de uma boa rede a definição de qual meio de transmissão será utilizado.
O cabo de par trançado foi criado para se tentar diminuir o ruído e manter as propriedades elétricas do meio. Ele tem esse nome porque é composto por dois pares de cabos de cobre trançados um no outro. Em baixas frequências ele apresenta uma boa resistência a ruídos, porém em altas frequências o cabo coaxial é melhor.
Como acabamos de dizer, o cabo coaxial é mais resistente a ruídos, independentemente do tamanho do cabo, mas é mais caro. Ele é feito com dois condutores, um interno e um externo, separados por um dielétrico e possuindo uma camada isolante circundando o condutor externo.
Já as fibras óticas, ainda mais caras, são imunes a ruídos eletromagnéticos e permitem um isolamento completo entre o transmissor e o receptor. Sua transmissão é realizada por um sinal de luz codificado que trafega dentro do domínio de frequência infravermelho.
Fora isso temos os meios de transmissão wireless. Ou que não precisam de cabos. Ondas de rádio são utilizadas para longo alcance, mas podem ser bloqueadas por obstáculos físicos nestas frequências, ou em frequências mais baixas podem atravessar paredes, mas não ficam com um alcance muito grande. De qualquer forma, para o curto alcance, geralmente se utiliza as ondas milimétricas ou infravermelhas (utilizadas em controles remotos, por exemplo). Neste caso elas não atravessam objetos sólidos, o que é uma vantagem para este tipo de equipamento. E por fim, temos a transmissão por microondas, que foi muito utilizada para transmissões de longo alcance antes da fibra ótica e ainda hoje em tecnologias de celulares, possuem a desvantagem de precisar de muitos repetidores.
Transmissão e Banda Passante
Agora podemos conversar sobre como a transmissão dos dados será realizada. A origem primeiro gera a informação, depois monta uma tabela de símbolos e monta um pacote com os dados que será transmitido. Depois é feita a transmissão deste pacote da origem ao destino seguindo a topologia certa e no destino se faz a decodificação desta informação e se recria a informação. Para determinar a banda passante de uma rede é necessário saber com que frequência o sinal pode ocilar da origem até o destino, pelo ruído que pode ser gerado no canal, pela atenuação e pelos ecos. Em um meio sem ruído, o máximo que pode ser transmitido de dados com uma frequência de "X" Hz é 2 "X", porque você pode mandar um bit na subida e outro na decida da oscilação do sinal. Por isso, duas fórmulas bastante comuns na ausência de ruído:
C = 2 W baunds.
Se não forem apenas dois níveis de tensão (alto e baixo) transmitidos, na verdade a fórmula passa a poder transportar log2(L) bits, onde L é a quantidade de níveis de tensão, transformando a fórmula em:
C = 2 W log2(L) bps (se L = 2, log2(2) = 1 e ficamos exatamente com a fórmula anterior).
Para aqueles que não se lembram, uma regrinha fácil para o cálculo do logarítimo é com 2 elevado a "X" é igual a L. Quanto é "X"? Além disso os sinais vão sofrendo atenuação com a distância da origem (a fibra ótica permite uma atenuação menor que 1dB por km), por isso há um limite de uso diferente para cada tipo de cabeamento/meio de trasmissão e o ruído é geralmente medido em decibéis. Se quisermos levar em consideração o sinal sobre o ruído, podemos dividir a fórmula acima por:
C = ( 2 W log2(L) ) / (1 + S/R) (onde S = Sinal e R = Ruído, ambos em potência ou decibéis)
Assim é possível se determinar com mais precisão a banda passante máxima.
Protocolos de Rede
O modelo ISO/OSI é um bom modelo de arquitetura de redes que deve ser seguido nos projetos de protocolos de redes, com o objetivo de permitir a troca de informações entre computadores de fabricantes distintos. Para reduzir a complexidade, o modelo dividiu a arquitetura em camadas, sendo que há uma hierarquia entre elas. Cada camada fornece serviços para a camada superior e usa serviços da camada inferior. São elas:
- Aplicação -
Aplicação (fornecer aos processos de uma aplicação os meios para utilizar os meios de comunicação disponiveis)
Apresentação (realizar as conversões necessárias para que a comunicação seja realizada)
Sessão (estruturar os circuitos fornecidos pela camada de transporte para fazer o controle do token ou do diálogo - ver que estão se entendendo ou voltar até o último ponto de onde iniciaram)
Transporte (definir um meio confiável fim-a-fim de transmissão, garantir que os pacotes sejam interpretados na ordem correta e que cheguem do outro lado corretamente)
Rede (trata dos problemas de roteamento e chaveamento de pacotes)
Enlace (transforma um meio de comunicação não confiável em confiável, colocando a informação em quadros com redundância para detecção de erros, por exemplo)
Físico (define como representar os bits no meio físico, se a comunicação será half-duplex ou duplex, como a conexão será estabelecida e desfeita)
- meio físico -
Já a arquitetura TCP/IP é muito semelhante a esta, mas possui menos camadas definidas.
- Aplicação -
Aplicação (soma das camadas de sessão, apresentação e aplicação, tem como exemplos: http, dns, ftp, telnet)
Transporte (exemplos: TCP e UDP)
Rede (exemplos: IP)
Intra-Rede (corresponde as camadas físico e enlace, com exemplos: ethernet, slip, PPP)
- meio físico -
Montando a Rede
Agora que temos todo estes conhecimentos sobre redes podemos determinar qual a rede que precisamos para nossa aplicação. Podendo escolher como será feita a ligação dos computadores, quais protocolos utilizar, determinar a banda que será conquistada com a rede. Mais do que isso, talvez se quiser saber o quanto divide a banda ao se utilizar hubs ou switches, mas isto poderá ser matéria de um outro post...
Assinar:
Postagens (Atom)
