O que é um Sistema?

programador.jpg

Artigo narrado po Peter Turguniev e transcrito aqui.

https://www.youtube.com/watch?v=WnhewNUPlLg

 

O que é um sistema?

Sistema é o nome que se dá a um conjunto de componentes que se organizam de forma a
executar uma ou mais funções. É um termo que é usado em várias áreas do conhecimento humano.

Por exemplo, em anatomia, o sistema circulatório humano é o nome que se dá ao conjunto de
veias, artérias, capilares e o coração, que, em conjunto cumprem a função de fazer
o sangue circular pelo corpo.

Se você é da área de saúde, me perdoe a analogia simplista, imagino que tem milhares
de coisas que estou deixando de fora aqui, ou que entendi errado, mas a ideia é essa.
Dentre os componentes de um sistema, alguns desses componentes podem ser, por si só,
sistemas, ou seja, contam eles mesmos com outros componentes menores para executar uma
função. Normalmente se dá o nome de sub-sistema.

Um carro pode ser entendido como um grande sistema, com a função de te levar de um
lugar para outro.
Dentre os vários componentes, você tem um sub-sistema de aceleração e um sub-sistema
de frenagem, e cada um desses tem seus componentes e, eventualmente, sub-sistemas.

A medida que a tecnologia aumenta, os sistemas se tornam mais complexos.
Vários níveis de sistemas e sub-sistemas integrando milhares de componentes para produzir
diversas funções importantes.

Os sistemas informatizados estão entre os sistemas mais complexos jamais produzidos
pelo ser humano.

Você acha um carro algo complexo?
Pois a complexidade dos sistemas que rodam no caro é ordens de grandeza maior que a
dos componentes mecânicos envolvidos.

Apesar disso, cada vez mais, carros se torna informatizados, um grande computador com acessórios
de locomoção.

O que é um sistema?

Um sistema, em informática, é um conjunto de instruções de processador, informações
e outros subsistemas organizados de forma a permitir que o computador realize determinada
função esperada. Os componentes desse sistema são rotinas, trechos de código e outros sistemas mais
básicos.

No final das contas, a quantidade de componentes em um sistema de informática, como esse navegador
que você está usando para ver meu vídeo do youtube, ou o aplicativo do youtube no
celular, possuem milhares de instruções individuais.

Além disso usam funções do sistema operacional, que atua como um subsistema para acessar a
placa gráfica e mostrar o vídeo. Também usam o sub-sistema de network, para acessar o conteúdo do vídeo no servidor
do youtube e por aí vai. A complexidade desses sistemas todos é monstruosa.

Como é de se esperar, em sistemas muito complexos, é grande a chance de um erro ou uma falha.
Isso é um ponto que todo desenvolvedor de sistema está acostumado.
Sistemas tem bugs.
Você se esforçou durante meses, desenvolvendo aquele seu sisteminha, só para, no primeiro
dia, o usuário achar 200 bugs no seu filho. Dá raiva isso, eu sei.
Sistemas funcionam muito melhor sem usuários.
Você sabe que programador nenhum gosta de admitir que o programa tem erros.
Bug é inseto em inglês.

Reza a lenda que quando os primeiros programadores colocavam seus sistemas para rodar nos Eniacs
da vida, aqueles computadores antigos, ainda baseados em válvulas e não em chips de silício.
De repente o sistema dá aquela travada.
O que os programadores falavam?
Olha, um bug entrou ali na válvula e parou o sistema.
Vamos tirar o bug de lá e o sistema vai voltar a funcionar.

Lógico que não era inseto nada, era erro no código, mas o programador agora ganhou
um tempinho para corrigir o erro e botar a coisa para rodar de novo.
Mas o mais incrível é como esses malditos insetos conseguiram evoluir tão rapidamente,
migrar para os chips, e até hoje de vez em quando fazem os transistores e chips de silício
falharem e travarem o seu sistema.

Tem uma piada já a algum tempo que, se programadores fizesse carros, eles andariam a 10 km/h, dariam
erros a cada 20 metros e de tempos em tempos você teria que parar o carro, desligar ele,
sair do carro, entrar de novo e reiniciar o motor, mas, em compensação poderia copiar
o carro sem ter que pagar um novo.

Mas, agora falando sério, você já se perguntou porque software tem tantos erros?
Estamos acostumados a comprar um hardware, como um relógio, e ver esse relógio funcionar
por anos, sem nem um erro.
Porque o programa trava de vez em quando, para de funcionar?
Um motivo já mencionamos acima, é o fato de softwares serem sistemas extremamente complexos,
quando comparados com outros dispositivos mecânicos, mesmo dispositivos mecanismo bastante
complexos como são os relógios.
Mas existe um outro motivo que é contra intuitivo.

Softwares tem muito erros porque erros de software são baratos de corrigir.
Pensa bem. Quando um carro tem um erro de projeto, é preciso fazer um recall, chamar todos os carros,
substituir peças, alterar a linha de produção, é um custo enorme.
Por isso, o processo de desenvolvimento de um carro conta com uma fase de projeto extremamente
cara e extensa, gastar dinheiro no projeto é economizar dinheiro depois evitando erros.
Em software, se seu sistema deu bug, você, provavelmente vai lançar uma nova versão
corrigindo. Pronto. É barato.

Na maior parte das vezes, uma pessoa pode fazer um projeto meio nas coxas, de qualquer
jeito e depois ir corrigindo isso ao longo do caminho.
Por isso tantas equipes de desenvolvimento acabam aprendendo a fazer software assim e
se sentem confortáveis com isso.

O problema desse tipo de visão é que, embora eu concorde que a maior parte dos erros em
software seja algo simples, sem grandes custos, alguns erros podem sim ser caros, muito caros.

Por exemplo, o caso do foguete Ariane 5, um dos foguetes do programa espacial da união
europeia, usado para colocar satélites em órbita.
Esse foguete era uma melhoria em relação ao Ariane 4, seria lançado em 1995, após
um projeto que levou vários anos.
Esse projeto incluía um sistema de navegação que tinha um erro no cálculo do vetor de
aceleração horizontal.
Em determinado ponto do código, um número de ponto flutuante era armazenado em uma variável
inteiro.
O código era o mesmo que havia sido usado no foguete Ariane 4.
Como estava funcionando, eles não mudaram nada, não havia porque testar novamente.
Só que o foguete Ariane 5 era mais rápido, então deu overflow.
O número ponto flutuante não cabia dentro do inteiro.
O foguete perdeu o controle e precisou ser explodido no ar por segurança.
Um pequeno bug de software que custou algumas centenas de milhões de dólares.

Mas não é só esse.
Tem outros casos, como o Mars Orbiting Craft, uma sonda americana que explodiu ao chegar
a marte, em 1999, devido a um erro de conversão entre centímetros e polegadas no código
do sistema, no código do sistema.

Mas há casos ainda piores.
Em 2000 na cidade do panamá, um sistema de apoio para uma máquina de radioterapia tinha
um erro no código que acabava, em algumas situações, aumentando muito a dose de radiação.
E você sabe, radiação não mata na hora, leva um tempo.

No final, até descobrirem o que estava acontecendo, 8 pacientes morreram de complicações da
radiação e vários outros pioraram significativamente e tiveram complicações no tratamento devido
a um bug.

Portanto deve-se tomar muito cuidado.
Embora a maior parte dos bugs de sistemas seja extremamente barata de consertar, nem
todos são. Na nossa área, como vamos cuidar para garantir segurança de sistemas, um erro pode ser extremamente
caro.
Uma falha no controle de acesso, um erro que revele informações pessoais, senhas, tudo
isso pode ter um impacto financeiro absurdamente caro.
Por isso, é fundamental a criação de processos cuidadosos de desenvolvimento e testes de
sistemas de forma a minimizar a possibilidade de tais erros críticos.
Desenvolver software e desenvolver software com segurança são duas atividades com diferenças
significativas.

Nem sempre vale a pena o custo, mas, cada vez mais é importante considerar tais diferenças.
Não deixe o seu foguete explodir por falta de cuidado.