Author: Gutierry Antonio

Conceitos da Construção Civil na Construção de Softwares

Introdução

Uma coisa que gosto de citar é que a construção de software não é uma “arte”; a construção de software é um produto da engenharia e funciona como na construção civil, ou seja: podemos prever e acompanhar o andamento de suas etapas.

Mas por que ‘prever e acompanhar o andamento de suas etapas’ nem sempre é possível na construção de um software ?

edificacoes

Construção Civil

A grande sacada na construção civil é que muito antes do seu início (na maioria da vezes) temos um escopo bem definido, o proprietário já definiu o quanto deseja gastar, o engenheiro ou empreiteiro lhe repassa se é possível ou não fazer aquela obra com aquele valor e no tempo desejado.

Após algumas reuniões, ambas as partes entram em acordo com as definições completas do projeto, como quantidade e tamanho dos cômodos, qual material será utilizado, tempo de entrega e todos os stakeholders sabem que qualquer alteração feita no escopo pode acarretar em alteração no valor ou no prazo de entrega e que isso refletiria no custo e prazo de entrega da obra.

A aprovação do projeto por parte dos donos ou responsáveis é fácil porque antes de iniciar já foram demonstradas as plantas baixas e já se sabe como será a área construída.

Para isso são dispostas maquetes do projeto e em alguns casos utiliza-se até de renderização 3D para montar maquetes virtuais.

Isso já deixa bem fixado na mente do cliente qual será o resultado final de seu produto.

Depois de tudo definido antes de se iniciar as obras são preparados os materiais a serem utilizados em cada etapa.

Existe a preparação do terreno, onde serão feitas as primeiras estruturas – os fundamentos – para que seja de fato realizada a construção.

Essa estrutura é sempre construída de forma cautelosa, pois é sobre ela que tudo será construída e é ela que limitará muitas coisas no projeto e fará com que essa edificação não venha a desabar.

Construção de Software

software

Se olharmos bem como uma edificação é construída, vamos ver que esses conceitos são básicos e funcionam de forma são eficiente. Para uma construtora a não entrega de um projeto no prazo acarreta perda de dinheiro e isso talvez seja  pior comparado à má reputação da empresa diante dos clientes.

Agora os softwares em sua maioria das vezes não são bem definidos ou quase nada definidos, começam como uma idéia que é iniciada pelo programador e sofre alterações ao longo do tempo até chegar no produto do cliente, que nem sempre é o que ele desejou, fora os problemas encontrados no meio do caminho devido a problemas técnicos que não foram previstos.

Imagine se uma obra inicia-se dessa forma, uma idéia de construir uma casa mais ainda não se sabe como vai ser quantos cômodos e tal ? seria um caos, existiria muito dinheiro perdido, paredes quebradas, tempo investido sem necessidade e o final disso seria uma catástrofe, uma  parede mais alta que a outra, pisos quebrados, de cores diferentes..

Bom, é assim que os softwares são construídos e assim que eles ficam.

A diferença é que toda essa bagunça é coberta pela “linda” interface gráfica que é disposta para o usuário, porem devemos ser sinceros: em muitos casos o software não faz exatamente o que o cliente pediu ou que ele realmente precisa.

Existem inúmeras funcionalidades que ele não utiliza.

Ao iniciar o projeto o cliente ainda não sabe o que ele terá de resultado fazendo que suas expectativas sejam altas com o projeto, ainda mais se ele for “salgado”($$).

Outra coisa que ocorre é que muitas vezes não só o cliente, mas também os desenvolvedores não sabem seu resultado final e muitas coisas são criadas na “tentativa e erro”;  sua estrutura é criada de forma singular e faz com que o projeto nem sempre suporte todos os itens que devem ser adicionados, causando assim problemas técnicos na implementação de novas funcionalidades no futuro, pois sua base não foi construída para suportar suas verdadeiras necessidades.
Construção Civil vs Construção de Softwares

Sabemos que os conceitos da organização da construção civil são eficientes e fáceis de se implementarem, se formos reparar veremos desde pequenos a médios projetos sendo implementados por “mestre de obras”, que na sua maioria das vezes são pessoas com pouco estudo, mas os projetos implementados por essas pessoas são eficientes e entregues com qualidade e no prazo.

Qual a dificuldade de implementar esses processos no desenvolvimento de softwares ?

Vamos pegar como exemplos obras de pequenos portes e comparar com desenvolvimento de pequenos softwares

  1. Falta da clara definição de todo o escopo do projeto
    Na construção civil sempre existe uma definição de o que se deseja no final.
    Na construção de softwares em muitos casos se desenvolve a pedido do cliente e existe a velha história do “vamos vendo no que vai dando”.
  2. A disponibilidade no tempo hábil dos recursos
    Na construção civil sabemos que antes de começar a obra existem caminhos de areia, pedra, cimentos ou qualquer outro material que são deixados no local.
    O mestre de obra faz a conferência e após a confirmação do material adequado inicia o trabalho e em alguns casos pode ocorrer de nem todo o material ser disponibilizado no inicio, mais isso é um risco que o mestre calcula e se prepara para que o restante do matéria esteja disponível logo que necessário.
    Na construção de softwares vemos muito a iniciação de um projeto sem nenhum tipo de recurso adequado, há casos que esses recursos nem foram calculados e são disponibilizados sobre demanda e na maioria das vezes em tempo tardio.
  3. A adequada utilização de ferramentas é um ponto essencial
    Na construção civil  todos esses recursos são disponibilizados antes de sua real utilização, assim não atrasando o projeto
    Na construção de softwares as ferramentas não são pensadas, nem sempre são as adequadas e nem sempre estão disponível na hora necessária.
  4. Definição de papel 
    Na construção civil  temos três papeis bem definidos: servente ou ajudante, o pedreiro e por fim o mestre de obra.
    Os serventes tem o papel fundamental de fazer os serviços mais braçais e “servir” ; o pedreiro é o responsável por executar tarefas mais especializadas e tem um maior conhecimento e mais tempo de obra, porem não executam tarefas simples pois sua mão de obra é mais cara e seria um desperdício de dinheiro colocar um pedreiro para puxar massa, e por fim temos o nosso “mestre de obra” responsável por coordenar toda a obra, não deixar ocorrer a falta de matérias, controlar o tempo e os gastos.
    Na construção de softwares  em sua maioria apenas dois papeis: os programadores e gerente do projeto, para um software pequeno raramente vamos ter o papel de analista de sistema.
    O programador podemos comparar com o pedreiro o papel dele seria fazer serviços especializados porem vemos que no desenvolvimento de softwares não temos a figura de uma auxiliar ou o servente que seria o responsável por fazer o trabalho “pesado” e fazer com que o programador não perca tempo em soluções simples e até mesmo perca tempo tendo que “carregar o tijolo”, ou seja isso pode ser considerado como uma deficiência, pois os programadores tem que se preocupar em fazer todo o trabalho e muitas das vezes de forma desordenada fazendo com que o foco seja perdido, já o gerente tem o papel semelhante ao mestre de obra, deve ser responsável por controlar coordenar a equipe, prazos e insumos do projeto.
  5. Planejamento
    Na construção civil o responsável pela obra consegue se planejar de forma eficaz dos prazos para cada etapa da obra, assim se um dos prazos não forem cumpridos ele sabe se a obra vai se atrasar num todo e antes disso ele consegue reverter essa situação. Existem um acompanhamento no mínimo semanal do andamento da obra e posso dizer que ele sabe com exatidão se esta no prazo ou não. Outra coisa impressionante é que a obra tem documentação, por menor que seja existe um mínimo de documentação, seja ela a planta baixa do projeto ou um rascunho onde sofreu a aprovação do cliente.
    Na construção de softwares nem sempre existe um planejamento, tudo é feito de forma desorganizada e nem sempre priorizam-se as reais necessidades. Outra coisa é a falta de documentação: não são gerados nem rascunhos de como o projeto deve ser.

Conclusão

Existem outras inúmeras razões para os processos da construção civil serem mais eficientes do que os processos da construção de software e que não serão abordadas nesse artigo.

Porém,  é interessante saber que são processos simples: à ponto de serem feitos de forma transparente sem a necessidade de tanta “burocracia”, ou que essa burocracia não seja sentida pelos seus participantes. São processos de certa forma organizados “naturalmente”, tão “simplórios” que os participantes desse processo em muitos casos não tem a necessidade de sequer ter uma quarta série do ensino fundamental, e a inclusão de um novo participante no processo é simples e natural.

Torço para ver o dia em que o processo para a construção de um software seja tão ou mais organizado que o processo para a construção de um edífício

 

Gutierry Antonio Neto Pereira

No Code Squad ministra os seguintes treinamentos:  http://code-squad.com/perfil/gutierryantonio.netopereira#cursos-ministrados

Gutierry Antonio Neto Pereira – Engenheiro de Software Experiência em desenvolvimento com visual Fox Pro, Delphi, Ruby on Rails, Action Script 3.0 , nos bancos de dados Firebird, MySQL, gerencia de projetos de software e aplicação de métricas de software. Conhecimentos nas linguagens de programação Java, C# e C++, no banco de dados SQL Server.Participação de desenvolvimento de Framework em Delphi para desenvolvimento de softwares, desenvolvimento de framework para importação e exportação de dados entre banco de dados e Framework para BI.

Twitter

A Tecnologia de armazenamento RAID

Introdução
Hoje no mundo das informações ainda vemos muitas empresas ( de pequeno,  médio e até algumas de grande porte) que não tem nenhum tipo tecnologia de armazenamento.

346955637_9f3002fbb2_n

Hoje temos no mercado placas domésticas que já dispõem de sistemas de tecnologia de armazenamento.

Mais o que são essas tecnologias de armazenamentos ?

Ao final dos anos 80 foi proposto uma forma de não só recuperar dados com velocidade mais também que os mesmo sejam armazenados com segurança, esse modelo proposto se é conhecido como RAID.

O que é RAID?
RAID do inglês Redundant Array of Independent Disks trazendo isso para uma tradução literária Conjunto de Redundante de Discos Independentes.

O RAID consiste de uma técnica na utilização de dois ou mais discos para ganhar desempenho ou segurança em casos em que podemos combinar o desempenho com a segurança.

Essa implementação será sempre transparente para o usuário, o sistema interpreta essa combinação de discos como uma única unidade de disco e todo o trabalho é feito pela controladora RAID.
Implementações
Um sistema RAID pode ser implementado de duas formas, ou via software ou diretamente via hardware.

A Implementação via Software: A implementação via software é mais barata não exigindo a necessidade de uma placa controladora RAID porem todo o processamento de controle é manipulação de dados é feito sobre o sistema operacional e com isso existe um custo computacional sobre o processador e memória.

Implementação via Hardware: A implementação por Hardware exige uma controladora RAID que será a responsável por gerir os discos e entregar ao sistema operacional o disco pronto, com isso temos um ganho maior em performance e até mesmo em segurança na sua maioria as controladoras são elaboradas com um sistema de baterias, fazendo com que se houver uma falha de energia haja uma garantia do armazenamento dos dados que estavam pendentes. As controladoras tem seu próprio núcleo de processamento assim aliviando o processador e deixando isso de forma transparente até mesmo para o sistema operacional

Tipos de RAID?
Temos hoje alguns tipos de RAID e cada RAID com suas particularidades, porem todas elas estão preocupadas na velocidade e gravação dos dados ou na segurança da guarda dessas informações e alguns casos combinadas a velocidade e segurança, contamos hoje com os seguintes tipos de RAID:
RAID 1
RAID 2
RAID 3
RAID 4
RAID 5
RAID 6
RAID 01 ou RAID 0+1
RAID 10 ou RAID 1+0
RAID 50
RAID 100
As RAID’s que serão vistas nesse artigo serão as mais utilizadas, algumas delas ficaram defasadas devido ao uso de novas tecnologias e outras foram substituídas por outras como é o caso da RAID 2 que se tornou obsoleta devido aos discos mais atuais possuírem checagem de erros e a RAID 4 que é substituída pela RAID 5 que supera os problemas mais comuns pela RAID 4.
RAID 0
No RAID 0 os dados são divididos em pequenos fragmentos e armazenados em paralelos nos discos disponíveis, com isso o tempo de gravação e leitura é reduzido pela quantidade de discos que participam do conjunto.

Exemplo: Se temos dois discos em nosso conjunto significa que metade dos dados serão armazenados no disco 1 e a outra metade no disco 2, se o tempo de gravação de um determinado dado em um disco é de 1s em nosso conjunto esse tempo será de 0,5s visto que essa dado será fragmentado e armazenado em simultâneo nos dois discos.

A controladora RAID é responsável por quebrar esses dados e enviar para os discos, que irão pegar os dados que lhe foram passados e efetuar sua gravação de forma independente. Com esse conjunto quanto mais discos mais rápido será o tempo de gravação e leitura visto que a leitura e quanto mais disco mais espaços teremos disponível.

raid-figura-1
Na Figura 1 temos um exemplo de 2 discos em um conjunto RAID 0, onde a soma desses discos nos dá uma disponibilidade de 240GB e ao se gravar uma informação em um disco outro fragmento dela é gravado em outro.

Podemos observar isso através das cores laranjas e verdes considerando-as como dados diferentes e vemos que ambas estão nos dois discos.

Um grande problema nesse conjunto é que se um dos discos falhar nossos dados não servem mais de nada, visto que eles estão distribuídos em fragmentos entre os discos.
RAID 1
O RAID 1 diferente do RAID 0 preza pela segurança e não pela velocidade, ele utiliza dois ou mais discos e os discos são espelhados, ou seja: os dados que são gravados em um disco são automaticamente replicados para os demais discos que participam desse conjunto em caso de um dos discos falhar o próximo entra em ação imediatamente.

Nosso computador contendo um um RAID 1 tem alta disponibilidade, se estamos sobre uma controladora RAID podemos efetuar a troca do disco com problema com nosso computador ainda em funcionamento assim não parando com nosso serviço disponibilizado nessa maquina, diferente do RAID 0 que em caso de falhas os dados são perdidos o RAID 1 garante a integridade dos dados. O problema do RAID 1 é que os discos adicionados a esse conjunto são considerados apenas como um, fazendo dessa solução uma solução cara pois espaço são perdidos para que possamos criar a redundância.

Na próxima figura podemos observar o uso do RAID 1, como podemos ver os dados no primeiro disco estão replicados no segundo disco e a capacidade de nosso conjunto é apenas de 120GB.

raid-figura-2

RAID 5
Podemos definir o RAID 5 como um “Super” RAID 1 com inúmeros aprimoramentos pois este é o sucessor do RAID 4, o RAID 5 é voltado a ganhos de desempenho como o RAID 1 porem dispõem de um sistema de segurança chamado de paridade. A paridade é uma espécie de soma de segurança que é armazenada nos discos de paridade diferente do RAID 4 que armazena a paridade em apenas um dos discos o RAID 5 distribui essa paridade para todos os discos do conjunto e se um dos discos falhar, pode ser recuperado através dos dados de paridade contido nos demais discos.

RAID 0+1
O RAID 01 ou RAID 0+1 combina a velocidade do RAID 0 com a segurança do RAID 1, para a montagem desse conjunto é necessário no mínimo quatro discos sendo os dados são divididos para melhorar a performance mais também são replicados para garantir a segurança dos dados. No RAID 01 se um dos discos falhar o sistema irá trabalhar como RAID 0 pois isso compromete a redundância. Na Figura 3 podemos observar a montagem de um conjunto em RAID 01, temos um conjunto principal em RAID 0 onde os dados serão fracionados e gravados em paralelo nos discos desse conjunto, e um conjunto “secundário” com as mesmas configurações do primeiro ligados entre si através de uma ligação RAID 1 garantindo assim a redundância de um conjunto para o outro.

raid-figura-5

RAID 1+0
O RAID 10 ou também conhecido com RAID 1+0 assim como o RAID 01 combina a velocidade RAID 0 com o RAID 1, assim como o RAID 01 necessita de ao menos 4 discos para sua formação. Sua diferença entre o RAID 01 é que sua formação nos blocos de baixo são formados pelo RAID 1 e a ligação entre eles é feita através do RAID 0, nesse conjunto podem haver a perda de até metade dos discos, desde que a perda não seja em um bloco de espelhamento. Assim como no RAID 1 temos a possibilidade de trocar os discos em pleno funcionamento. Na Figura 4 vemos como é montado o conjunto de um RAID 10, podemos observar que detro dos conjuntos baixos os dados são replicados mais entre um conjunto e outros os dados estão fracionados.

 

raid-figura-6

Conclusão
Com isso vemos que podemos combinar a velocidade e asegurança e termos um sistema robusto, tolerante a falhas, segurança e com alta disponiblidade

Referencias
Hardware, o Guia Definitivo – Carlos E. Morimoto – 2007
http://pt.wikipedia.org/wiki/RAID
http://www.intel.com/support/pt/chipsets/imsm/sb/cs-009337.htm

Fonte Foto: Flickr – John Athayde

Gutierry Antonio Neto Pereira

No Code Squad ministra os seguintes treinamentos:  http://code-squad.com/perfil/gutierryantonio.netopereira#cursos-ministrados

Gutierry Antonio Neto Pereira – Engenheiro de Software Experiência em desenvolvimento com visual Fox Pro, Delphi, Ruby on Rails, Action Script 3.0 , nos bancos de dados Firebird, MySQL, gerencia de projetos de software e aplicação de métricas de software. Conhecimentos nas linguagens de programação Java, C# e C++, no banco de dados SQL Server.Participação de desenvolvimento de Framework em Delphi para desenvolvimento de softwares, desenvolvimento de framework para importação e exportação de dados entre banco de dados e Framework para BI.

Twitter

© 2017 Bussola Code Squad

Theme by Anders NorenUp ↑