Mostrando postagens com marcador engenharia de softwares. Mostrar todas as postagens
Mostrando postagens com marcador engenharia de softwares. Mostrar todas as postagens

quinta-feira, 2 de abril de 2009

Introdução a Engenharia de Softwares - Parte 5

Histórico da evolução do Software
Pessoal, hoje vamos falar sobre o surgimento do software. É uma história muito interessante. É claro que será bem resumida, porque afinal são mais de 50 anos de evolução.

O quadro acima resumi bem o que aconteceu mais ou menos em cada época.

Não sei se todos lembram, mas quando foi inventado o primeiro computador, o Eniac (1946), os softwares eram programados na mão, através de painéis. O programador, ou operador como era conhecido na época, fazia as instruções de programa através de painéis elétricos. Como naquela época não existiam memória, hd ou qualquer dispositivo parecido, era preciso conectar fios, relês e seqüências de chaves para que se determinasse a tarefa a ser executada. A cada tarefa diferente o processo deveria ser refeito. A resposta era dada por uma seqüencia de lâmpadas.

Então se tivessemos 10 programas para ser executado, eles teriam que ser executados um após o outro, em lote (processamento batch).

Mais tarde com o advento da memória, que naquela época eram as famosas fitas magnéticas, e com computadores que possuiam leitores de fitas, os computadores já podiam ler, processar e gravar o resultado em outras fitas que posteriormente teriam que ser introduzidas em outro computador para que fizessem a impressão nos cartões perfurados.

Isso trazia muitos problemas, porque os computadores eram lentos e se tivessem processando alguma fita de dados, a próxima fita a ser processada deveria esperar a anterior acabar todo o processo, que as vezes levava dias. Foi devido a esse problema que inventaram a memória, e mais tarde a multiprogramação, mas esse é assunto pro próximo post.

sexta-feira, 13 de março de 2009

Introdução a Engenharia de Softwares - Parte 4

Pessoal, vamos falar um pouco mais sobre software!?

Os softwares tem características interessantes. Por isso acho que vale a pena escrever um pouco mais.

Definição de software

"Instruções (programas de computador) que, quando executadas, produzem a função e o desempenho desejados.

Estruturas de dados que possibilitam que os programas manipulem adequadamente a informação.

Documentos que descrevem a operação e o uso dos programas."

De acordo com os mais estudados no assunto, softwares não são apenas "programinhas de computador", e sim algo muito mais complexo. Os softwares são o conjunto dos elementos citados acima: Instruções (programa propriamente dito), Estruturas de dados (banco de dados, arquivos, hashmap, etc) e documentos (manuais, documentação de projeto, etc).

Características dos Softwares:


1. O software é desenvolvido ou projetado por engenharia, não manufaturado no sentido clássico.

O gráfico abaixo conhecido como The Bathtub Curve (Curva da banheira), demonstra a curva de falhas por tempo dos hardwares. Ele mostra a vida dos produtos como peças e acessórios eletrônicos após a fabricação até a sua "morte".



1º Estágio - Infant Mortality (Mortalidade Infantil).

No primeiro estágio vemos que a taxa de falhas é muito alta, isto é devido a peças que já saem com problemas de fábrica. Após a troca dessas peças defeituosas, a taxa se estabiliza (segundo estágio).

2º Estágio - Useful Life (Vida Útil).

No segundo estágio, após a troca de peças defeituosas detectadas precocemente (Burn-in), a taxa de falhas cai se torna estável por um tempo (é a vida útil do produto). Como o produto é físico (ao contrário do software), com o tempo ele começa a sofrer desgastes (terceiro estágio).

3º Estágio - Wear-out (Desgaste).

No terceiro estágio a taxa de falhas sobe muito devido ao desgaste sofrido com o uso do equipamento, poeira, vibração, corrosão, etc. Isto é a "morte" do produto ocasionando a troca ou reparo do equipamento.


Lembrando pessoal que usei a Curva da Banheira para compararmos com a Curva do Software que é uma evolução da anterior.

2. Software não se “desgasta”.


Como sabemos os softwares não são componentes físicos como os hardwares, e sim componentes lógicos, logo a curva sofrerá uma alteração.

No início vemos a taxa de falhas muito alta. Isto se deve ao fato de implantação do software, que inicialmente possui muitos erros. A medida que os erros são reparados (Debug), a taxa vai ficando estável.

Quando o software caminha para índices baixos de erro, o software necessita de uma manutenção ou atualização, e novamente a taxa de erros sobe. Isso acontece porque quando ocorre uma alteração no código, a probabilidade de se fazer algo errado e criar um novo erro é muito alta. Isso acontece diversas vezes na construção, implantação de um software e faz com que a taxa de falhas comece a subir novamente, devido a essas alterações.

O que acontece é que o sotware não é como o hardware, não se desgasta e sim começa a ficar obsoleto (Obsolescence). Veja figura abaixo.



3. A maioria dos softwares é feita sob medida em vez de ser montada a partir de componentes existentes.

Ao contrário do hardware que se uma peça der defeito, logo podemos trocá-la e resolver o problema, no software não podemos simplesmente trocar alguma parte do programa por outra nova. Daí a dificuldade de se construir softwares.

Componentes dos Softwares:

Componentes executáveis: instruções de programas, estruturas de dados (bancos de dados), interfaces.

Componentes não executáveis: documentação de projeto e análise, manual de usuário e de produção.

OBS:
Para que um software seja considerado completo, ele deve possuir todos esses componentes.

Aplicações dos Softwares:

Software Básico: Uma coleção de programas escritos para servir a outros programas. Ex: compiladores, editores, sistemas operacionais, drivers etc.

Software de Tempo Real: Programas que monitoram, analisam e controlam eventos do mundo real. Um sistema de tempo real precisa responder dentro de restrições de tempo especificadas, requerendo um bom tempo de resposta. Ex: software de controle de metrô, de usina nuclear, de satélites etc.

Software Comercial: A maior área de desenvolvimento de software. Sistemas de Informação: controle escolar, controle de estoque, sistema de biblioteca, comércio eletrônico, pontos de venda etc.

Software Científico e de Engenharia: Software para apoio a cálculos matemáticos, físicos e atividades de engenharia. Ex: simulação de sistemas, ferramentas CASE (computer-aided software engineering), ferramentas CAD (computer-aided design) etc.

Software Embutido: Normalmente residem em memória não volátil (ROM) e são usados para controle de produtos e sistemas para o mercado consumidor industrial. Ex: programas em forno de microondas, celulares, computadores de bordo em automóveis etc.

Software de Computador Pessoal ou Aplicativo: Softwares de escritório, para computadores pessoais. Ex: editores de texto, planilhas eletrônicas, software de acesso a e-mails etc.

Software de Inteligência Artificial: Adquirem conhecimento com a entrada de dados e informações coletadas anteriormente. Ex: (reconhecimento de voz, de imagem, digital, retina), (jogos inteligentes, gerenciamento de informações imprecisas), notícias, mala direta, etc.

Essa classificação dos software foi baseada na classificação feita por PRESSMAN.

terça-feira, 10 de março de 2009

Introdução a Engenharia de Softwares - Parte 3 - Automatizar ou não?



Tem outros pontos que acho importante ressaltar na Engenharia de Softwares. Por isso sempre que lembrar de algum detalhe que ache importante vou publicar aqui, porque por mais que sejam muito simples pra nós que somos dá área, pode ser útil as pessoas que estão ingressando.

Automatizar ou não?

Qual é o Analista que nunca se deparou com a situação de dizer a um cliente que não será viável o que ele quer?

Ou será que nenhum de vocês já ouviu. O software vai ter que ficar pra depois, temos que aguardar recursos.

Ou será que você se deparou com aquele velho amigo seu, dono de um boteco que vende muita cerveja e que vive dizendo que quer informatizar o bar, pra melhor controle das contas, clientes, vendas. Você explica a ele que se ele quiser informatizar seu bar terá que comprar um computador, um ar-condicionado, porque o ambiente é quente e pode superaquecer seu processador. De repente terá que comprar também uma impressora fiscal pra emitir os cupons e contratar um técnico para fazer a manutenção do computador já que ele não sabe mexer em nada. Não esquecendo que ele terá que pagar pelo software que você vao fazer que não deve ser nada barato.

Bom depois disso, acho que por mais que eu o explicasse os benefícios que um software bem planejado traria a médio e longo prazo, acho que talvez não seria viável para ele naquele momento. De uma forma bem sucinta o que nós fizemos foi um estudo de viabilidade que nem sempre é feito pelos empresários, causando na maioria das vezes a parada do desenvolvimento de software que é sempre o que os empresários mais conservadores pensam que deve ficar em último plano.

Por essas e outras razões existem vários problemas que devem ser observados antes de começarmos a automatizar um processo. Vou citar os mais comuns para que vocês reflitam a respeito lembrando do exemplo do boteco do seu amigo.

Custo – Nem sempre é verdade que os computadores sejam mais rápidos e mais baratos do que o modo “antigo”.

As vezes o custo benefício não compensa como foi no caso do boteco.

Conforto – Espaço em demasia, excessivo ruído, gerar muito calor ou consumir energia demais.

Como no boteco de repente só o computador com o ar-condicionado iria consumir tanta energia que não compensaria.
Poderia não existir espaço para o computador.


Segurança – dados confidenciais podem ficar vulneráveis.

As vezes o dono fica com um certo medo de te passar informações confidenciais mas imprescindíveis para o desenvolvimento do sistema.

Manutenibilidade – pode não existir pessoal capacitado.

No caso do boteco o dono não teria condições de pagar um técnico para operar o software e fazer manutenção no computador.

Política – os computadores podem ser uma ameaça aos funcionários.

Os funcionários podem te atrapalhar na implantação e outras ocasiões por achar que perderão seus empregos para os computadores.


Pessaol, então é isso ai... Espero que tenha ajudado.

Se interessar estou colocando um link interessante sobre o assunto:
http://www.hitecnet.com.br/prospectos/31/pqdevo1.htm

Introdução a Engenharia de Softwares - Parte 2


Continuando o post anterior que expliquei uma diferença básica mas que confunde muita gente. Software X Sistema

Vamos tirar outras dúvidas que são básicas mas que muita gente não sabe.

Por que dizemos Engenharia de Softwares e não Engenharia de Sistemas?

E Por que dizemos Analista de Sistemas e não Analista de Softwares?

De acordo com a diferença mostrada pode-se concluir que Engenharia de sistemas trata da organização dos sistemas. Como funcionam, como são os processos em um ramo qualquer de atividade. Lembrando que sistemas não são programas de computador.

Quando falamos em Engenharia de softwares estamos nos referindo na construção, projeto, validação, testes e outras coisas relacionadas a programas de computador.

Um Engenheiro de Sistemas é capaz de conhecer como modelar sistemas e processos de um fábrica por exemplo. Já um Engenheiro de Software será capaz de modelar um software para atender as necessidades do Engenheiro de sistemas.

Já quando falamos de Analista de Sistemas e Analista de Softwares é um pouco diferente. O Analista de Sistemas tem a função de entender como funciona um sistema para que ele possa modelá-lo, projetá-lo e construir um software que atenda essas necessidades. Seria quase a junção de um Engenheiro de Sistemas com um Engenheiro de Software.

O Analista de Softwares tem a função de fazer auditoria no software, avaliar, ver as funcionalidades, etc. Em resumo é um estudo do software pronto.

quarta-feira, 4 de março de 2009

Introdução a Engenharia de Softwares - Parte 1


Introdução a Engenharia de Softwares

SOFTWARE X SISTEMA

Sistema

Segundo o WIKIPÉDIA, a palavra "sistema" vem do grego e significa "combinar", "ajustar",
"formar um conjunto". Ou seja, muito genérica a explicação.

Na verdade, em resumo, um sistema é uma ligação entre componentes comuns, com objetivos comuns.

Esses componentes também podem ser sub-sistemas.

Os sistemas tem características em comum:

Eles sempre podem ser divididos em sistemas menores.

Eles sempre farão parte de um sistema maior.


De acordo com essa definição, tudo o que está a nossa volta pode ser encarado como um sistema. Vamos pegar como exemplo o corpo humano.

Quando respiramos utilizamos o sistema respiratório.

Quando comemos utilizamos o sistema digestivo.

Temos o sistema cardíaco, nervoso, etc. Esses sistemas possuem componentes que funcionam com um objetivo em comum. Por exemplo:

O sistema digestivo tem a função de retirar os nutrientes dos alimentos necessários a diferentes funções. E cada órgão terá uma função diferente, mas que no final o objetivo do conjunto é o mesmo.

Exemplos:

Sistemas Feitos pelo Homem:

Sistemas Sociais: organizações de leis, doutrinas, costumes...
Sistemas de Transporte: redes ferroviárias, linhas aéreas...
Sistemas de Comunicação: telefone, telex...
Sistemas Financeiros: contabilidade, controle de estoque...

Sistemas Automatizados:

“São sistemas feitos pelo homem, que interagem com, ou são controlados por um ou mais computadores.”

Sistemas Automatizados:

Componentes:
Hardware – Dispositivos eletrônicos (CPU, memória) que fornecem capacidade ao computador, e dispositivos eletromecânicos (sensores, impressoras, motores) que oferecem funções ao mundo externo.

Software – Programas de computador, estruturas de dados e documentação correlata que servem para efetivar o método, processo ou controle lógico necessário.

Peopleware – Aquelas que operam o sistema, que fornecem as entradas e utilizam as saídas, e as que desempenham atividades de processamento manual em um sistema.

Dataware – As informações que o sistema armazena por um período de tempo.

Procedimentos – Os passos que definem o uso específico de cada elemento do sistema.


Muitos sistemas feitos pelo homem interagem com os sistemas vivos - por exemplo, os marca-passos computadorizados que interagem com o coração humano.

Bom, mas isso está virando uma aula de Biologia? Não é isso que queremos. Estou apenas conceituando Sistema.

Mas e na Informática, o que seria um sistema?

Como na vida real podemos ter um sistema financeiro, sistema escolar, político, etc.

E como funciona?

De acordo com o conceito passado anteriormente esses sistemas possuem componentes que possuem os mesmos objetivos.

Em um sistema de comércio cada componente trabalhará realizando sua função, mas que no final todos terão o mesmo objetivo.

Um sistema comercial pode ser divido em outros sistemas menores como Vendas, Compras, Estoque, etc, comprovando as características citadas.

Mas aí surge a pergunta: Mas onde está a informática nessa história?

Agora que vamos entrar no software

O Software entra em um sistema para auxiliar, agilizar um processo por vários motivos. Aumentar velocidade, diminuir custos, otimizar recursos, etc.

Os softwares nada mais são do que programas de computador, junto com manuais, especificações, planos de teste, etc.

Então está claro a diferença? Software X Sistema

Em um sistema podemos ter vários softwares ou não ter nenhum.

Então por que Engenharia de Softwares e não Sistemas?

Por que da formação Analista de Sistemas e não Softwares?

Assunto para o próximo post. http://duvidasdeprogramacao.blogspot.com/2009/03/introducao-engenharia-de-softwares_10.html

Espero que tenham gostado.

sexta-feira, 21 de novembro de 2008

Starting today

Hello people who love computer languages, programming, software engineering, computers and technology. I am doing this blog to report, share and help people with my experiences in programming and the topics related. I have worked with programming since i was 15 years old when I have started High School. The first language I have studied was Clipper. After three years with Clipper and some of Delphi I stayed 2 years without programming. So I started Information Technology studies where I learned some languages like c, c++, java, pascal, delphi, php, asp, javascript, html... Of course I have learned the basic of any language but after I worked 4 years with Visual Fox Pro and 2 years with Delphi and I made some Home Pages with html, flash, php i got some "Know How" I guess. Therefore I have had experience in languages and algorithms I have many things i want to know and I feel that I need to share with you. I also will post questions because now i am working with C++ and its a wide language and you can make a lot of differents applications and get differents doubts.

I hope you all like this blog and put your question and code here and I will try to help you.
My name is Carlos Augusto from Brazil, I am 26 years old.

Links

Related Posts with Thumbnails