quarta-feira, 20 de julho de 2011

Princípios da Engenharia de Sofware

Fala Galera!!!!

Amigos, companheiros, estas férias estão me matando, pior que nem deu para viajar ainda. Então já que não fui a lugar nenhum, vou postando por aqui algunas cozitas para nós. Vamos falar hoje de Engenharia de Software.

Afinal, o que é??

Vamos lá!


O que é software?

São programas de computador e documentação associadas, que podem ser classificados em:

• Sistemas genéricos, produzidos e vendidos no mercado a qualquer pessoa que queira comprá-los.
• Sistemas específicos, encomendados especificamente por um determinado cliente.

Os softwares(ou sistema), podem ser:
• Sistemas legados.
• Sistemas de tempo real.
• Sistemas embarcados (embutidos).
• Sistemas científicos.
• Sistemas para WEB.

O ciclo de vida do produto de software começa na concepção do problema (solicitação do usuário) e termina quando o sistema sai de uso.

A Engenharia de Software é uma das áreas da engenharia que trata dos aspectos de produção de
software. Seu objetivo é estabelecer uma abordagem de desenvolvimento, através de ferramentas e
técnicas apropriadas, dependendo do problema a ser abordado, considerando restrições e recursos
disponíveis.

Princípios da Engenharia de Software

• Formalidade: produtos mais confiáveis, controle de custo e desempenho
• Abstração: identificar os aspectos importantes, ignorando os detalhes.
• Decomposição: subdividir o processo em atividades específicas, atribuídas a diferentes especialistas.
• Generalização: sendo o software mais genérico, é bem possível que a solução possa ser reutilizada em outros projetos.
• Flexibilização: executar modificações no projeto com facilidade.


• Processos - seguem os métodos e estes se utilizam de ferramentas. Visam resolver problemas inerentes ao processo e ao produto.
• Métodos - São abordagens estruturadas para o desenvolvimento de software que incluem modelos, notações, regras e maneiras de desenvolvimento.
• Ferramentas - São programas de computador que têm o objetivo de fornecer um suporte automatizado para as atividades de processo de software.

Podem operar em dois níveis:

• Alto nível: ferramentas que suportam as atividades iniciais de requisitos e projetos.
• Baixo nível: ferramentas que suportam as atividades de programação, depuração e testes.

Modelo de processo de software

É a representação simplificada de um processo de software. Especificam as atividades e a ordem em que, de acordo com o modelo a ser seguido, devem ser executadas.
Softwares podem ser construídos usando os mais diferentes modelos de processos, sendo alguns modelos mais adequados para determinado tipo de aplicação.
O objetivo dos modelos é auxiliar no processo de produção, permitindo uma alta qualidade a um custo cada vez menor. Para isso, existem alguns modelos de processo. São eles:

• Cascata, sequencial ou clássico:

É um método sistemático e sequencial, onde o resultado de uma fase constitui na entrada de outra fase. Cada fase é estruturada como um conjunto de atividades que podem ser executadas por pessoas diferentes de forma simultânea.
Fases:

o Análise e definição de requisitos.
o Projeto de software.
o Implementação e testes unitários.
o Integração e teste de sistema.
o Operação e manutenção
Problemas:
o Ao utilizar o modelo sequencial, existe de a dependência que pode atrasar o projeto.
o O reinício do modelo é a dificuldade de acomodar mudanças depois que o processo está no final.


Evolutivo (prototipação)

O objetivo é desenvolver o sistema com o contínuo acompanhamento dos clientes desde a especificação. Os requisitos precisam ser bem entendidos.
Problemas:

o Ausência de visibilidade do processo.
o Sistemas são fracamente estruturados.
o Necessidades de ferramentas de rápido desenvolvimento (RAD).
Aplicabilidade:
o Sistemas de pequeno e médio porte;
o Como parte de um sistema grande;
o Sistema de curta duração.



• Transformação formal

Métodos formais são técnicas baseadas em formalismos matemáticos para a especificação, desenvolvimento e verificação dos sistemas de softwares e hardwares. Seu uso para o desenvolvimento de software e hardware é motivado pela expectativa que, como em outras disciplinas de engenharia, podem contribuir para a confiabilidade e robustez de um projeto executando análises matemáticas apropriadas. Entretanto, o alto custo do uso de métodos formais significa que eles são geralmente apenas usados no desenvolvimento de sistemas de alta-integridade, no qual há alta probabilidade das falhas conduzirem para a perda da vida ou sério prejuízo.
Problemas:

o Dificuldade em encontrar profissionais especializados.
o Dificuldade em especificar determinados aspectos como a interface do usuário.
Aplicabilidade:
o Principalmente para sistemas críticos, onde não são toleradas falhas.

• Integração de componentes reusáveis

Dá ênfase na decomposição dos sistemas, em componentes funcionais e lógicos com interfaces bem definidas, usadas para comunicação entre os próprios componentes.
Componentes são considerados como estando num nível de abstração mais alto que do que Objetos e, como tal, não compartilham estado e comunicam-se por troca de mensagens contendo dados.
Fases do processo:
o Análise do componente.
o Modificação dos requisitos.
o Projeto do sistema com reuso.
o Desenvolvimento e integração.
• Espiral

Engloba as características do ciclo de vida clássico e evolutivo, ao mesmo tempo que adiciona um novo elemento, a análise de risco.
Fases

o Definição dos objetivos, alternativas e restrições.
o Análise de risco.
o Desenvolvimento e validação.
o Planejamento.





Admin: Bruno

Olá Galera! muito grato por estarem acessando nosso blog. Espero que seja possível transmitir de forma compreensível um pouco de meus conhecimentos em programação, para esta comunidade de desenvolvedores que cresce cada vez mais! Espero que Gostem! Abraço! E meu enorme obrigado à Renato Simões, Átila Soares,Wanderson Quinto, Emerson e a toda galera que sempre ajudou meu sincero obrigado....
Especialmente a Natalia Failache e Rita de Cassia que sempre apoiaram este sonho....

De seu amigo Bruno Rafael.