2. Visão geral da
Engenharia de Software
Engenharia (do latim ingeniu = “faculdade inventiva, talento”) é a arte, a
ciência e a técnica de bem conjugar os conhecimentos especializados
(científicos) de uma dada área do saber com a sua viabilidade técnico-
econômica, para produzir novas utilidades e/ ou transformar a natureza,
em conformidade com ideias bem planejadas. Pense em um mundo sem
eletrônica. Difícil, não é mesmo? Pois saiba que a grande maioria desses
produtos são desenvolvidos com o conhecimento que teremos nesta
disciplina.
O software envolve não somente o conjunto de programas ou código
fonte da aplicação, mas também toda documentação associada gerada
durante o processo de desenvolvimento.
3. Visão geral da
Engenharia de Software
Há décadas, aplicações de software participam da realização e controle
de praticamente todas as atividades na nossa volta. O inesgotável
avanço da tecnologia e o aumento constante da exigência dos usuários
fazem com que sistemas computacionais se tornem cada vez mais
complexos.
Neste contexto, o desenvolvimento e construção de sistemas que
atendam a estas demandas se tornam um desafio cada vez mais difícil
de ser alcançado. A Engenharia de Software é uma área da Ciência da
Computação relativamente nova, que surgiu para auxiliar neste
processo, visando o desenvolvimento de produtos de software com uma
boa relação entre custo e beneficio
4. Visão geral da
Engenharia de Software
A Engenharia de Software pode ser definida como uma disciplina que
utiliza um conjunto de métodos, técnicas e ferramentas para analisar,
projetar e gerenciar o desenvolvimento e manutenção de software,
visando produzir e manter software dentro de prazos, custos e
qualidade estimados.
Estes objetivos são alcançados através de uma abordagem sistemática
para o desenvolvimento, operação e descarte de software, aplicando a
prática de conhecimento científico ao projeto e construção de software.
Esta abordagem tem sua origem nos princípios propiciados pela
engenharia tradicional.
5. Visão geral da
Engenharia de Software
A Engenharia de Software objetiva o aumento da qualidade do
software, visando paralelamente uma maior produtividade da equipe
envolvida nas atividades de desenvolvimento e atingindo uma maior
satisfação por parte dos clientes.
A Engenharia de Software surgiu no contexto da chamada Crise do
Software quando, a partir do avanço tecnológico e a consequente
redução de custos na aquisição de computadores domésticos, houve um
aumento na demanda de software para um mercado profissional que
não estava preparado para atender a essa nova realidade.
6. Visão geral da
Engenharia de Software
Esta crise teve lugar na década dos 70´s, e foi constatada por um gargalo
no processo de desenvolvimento de software, onde a oferta de mão de
obra capacitada não conseguia atender à demanda. Algumas
consequências deste processo foram:
• Custos elevados;
• Atrasos na entrega;
• Baixa confiabilidade e corretude do produto;
• Dificuldade de medição;
• Gerência do desenvolvimento ineficaz;
• Alta demanda não atendida;
• Difícil manutenção do software existente.
7. Visão geral da
Engenharia de Software
Na busca por soluções às demandas, pesquisadores, desenvolvedores e
demais profissionais se reuniram na Conferência sobre Engenharia de
Software da OTAN (Organização do Tratado do Atlântico Norte), em
1968, onde o conceito e atribuições da Engenharia de Software foram
oficialmente estabelecidos. A criação desta nova área surgiu em uma
tentativa de contornar a crise do software e dar um tratamento de
engenharia (mais sistemático e controlado) ao desenvolvimento de
sistemas de software complexos.
Um sistema de software complexo se caracteriza por um conjunto de
componentes de software abstratos (estruturas de dados e algoritmos)
encapsulados na forma de procedimentos, funções, módulos, objetos
ou agentes e interconectados entre si, que deverão ser executados em
sistemas computacionais. O conjunto destes componentes e suas
interconexões determina a arquitetura do software.
8. Evolução do Software
(1950 - 1965)
• O hardware sofreu contínuas mudanças
• O software era uma arte "secundária“ para a qual havia poucos
métodos sistemáticos
• O hardware era de propósito geral
• O software era específico para cada aplicação
• Não havia documentação
9. Evolução do Software
(1965 - 1975)
• Multiprogramação e sistemas multiusuários
• Sistemas de tempo real
• 1a geração de SGBD’s
• Produto de software - software houses
• Bibliotecas de software
• Cresce o número de sistemas baseado em computador
• Manutenção quase impossível
• ..... CRISE DE SOFTWARE
10. Evolução do Software
(1975 - 2005)
• Sistemas distribuídos
• Redes locais e globais
• Uso generalizado de microprocessadores
• produtos inteligentes
• Hardware de baixo custo
• Impacto de consumo
11. Evolução do Software
Atualmente
• Tecnologias orientadas o objetos
• Sistemas especialistas e software de
• inteligência artificial usados na prática
• Software de rede neural artificial
• Computação paralela
• Várias outras tecnologias
12. Processo de Software
É um conjunto de atividades e resultados que geram um produto de
software
Ha 4 atividades fundamentais – comuns a todos os processos de
software
1. Especificação: definição das funcionalidades e restrições
2. Desenvolvimento: o software deve ser produzido de forma a
atender as especificações
3. Validação: garantia de que o software faz o que o cliente
deseja
4. Evolução: o software deve evoluir para
atender as necessidades mutáveis dos clientes
Diferentes organizações podem utilizar processos diferentes para
produzir o mesmo tipo de produto
13. Processo de Software
É uma representação simplificada de um processo de software,
apresentada a partir de uma perspectiva especifica.
Um modelo de processo de software define a sequencia em que as
atividades do processo serão realizadas
Exemplos de Modelos de Processo de Software
– Modelo em Cascata (Ciclo de Vida Clássico)
– Desenvolvimento Formal (Transformação formal)
– Desenvolvimento Evolucionário
– Desenvolvimento Orientado a Reuso (Montagem de um sistema a
partir de componentes reutilizáveis)
14. Engenharia de Software
baseada em componentes
• Baseia-se na existência de um numero significativo de componentes
reutilizáveis
• O processo de desenvolvimento de sistemas se concentra na
integração desses componentes em um sistema, em vez de partir do
zero
• Desenvolvimento Baseado em Componentes
15. Custos da Engenharia de
Software
• A distribuição dos custos ao longo do processo de software depende
do modelo de processo utilizado e do tipo de software que esta
sendo desenvolvido
• Aproximadamente 60% dos custos são relacionados ao
desenvolvimento e 40% são referentes aos testes
• para software personalizado (com um longo ciclo de duração), os
custos de evolução normalmente excedem os custos de
desenvolvimento
• Software genérico → normalmente tem custo de especificação baixo,
porem devem ser extensivamente testados
16. Métodos da Engenharia de
Software
• Baseiam-se na ideia de desenvolver modelos de um sistema que
possam ser representados graficamente e de utilizar esses modelos
como uma especificação ou projeto de software
• Métodos
Analise Estruturada
Orientados a Objetos (UML – Unified Modeling Language –
Linguagem de Modelagem Unificada)
17. Ferramenta CASE
(Computer-Aided Software Engineering)
• É um software destinado a proporcionar apoio automatizado as
atividades de processo de software, como a analise de requisitos,
modelagem do sistema, depuração e testes
• Alguns exemplos de ferramentas CASE
RequisitePro
DrCase
Rational Rose
Astah
18. Quais são os principais desafios enfrentados
pela engenharia de software?
• Desafio da heterogeneidade desenvolver técnicas para construir
softwares confiáveis, que sejam flexíveis para atender diferentes
tipos de computadores e diferentes sistemas de apoio
• Desafio da entrega reduzir tempo para entrega de sistemas
grandes e complexos, sem comprometer a qualidade
• Desafio da confiança desenvolver técnicas que demonstrem que o
software pode ter a confiança dos seus usuários
19. A prática da
Engenharia de Software
A essência da pratica:
• Compreenda o problema
• Planeje a solução
• Execute
• Monitore
• Examine o resultado
20. A prática da
Engenharia de Software
Princípios gerais
(1) A razão de existir → usuário e suas demandas
(2) KISS (Keep It Simple, Stupid!) → o ótimo é inimigo do bom!
(3) Mantenha a visão → foco no escopo do projeto e preserve a
convergência dos artefatos
(4) O que um produz, outros consomem
(5) Pensem no futuro → software não e produto perecível!
(6) Planeje, reutilize
(7) Pense antes de agir
21. Mitos relativos ao Software
Mitos de gerenciamento:
• Já temos um livro sobre padrões e procedimentos → isso supre meu
pessoal do que eles precisam saber
• Se o cronograma atrasar, poderemos acrescentar mais
programadores e ficamos em dia → horda mongol
• Se eu decidir terceirizar o projeto de software, posso simplesmente
relaxar e deixar essa empresa realiza-lo
22. Mitos relativos ao Software
Mitos dos Clientes:
• Uma definição geral dos objetivos e suficiente para começar a
escrever os programas → podemos preencher detalhes
posteriormente
• Os requisitos de software mudam continuamente, mas as mudanças
podem ser facilmente
23. Mitos relativos ao Software
Mitos dos Clientes:
• Uma vez desenvolvido o software e colocado em uso, nosso trabalho
esta terminado
• Até que o software entre em operação, não há maneira de avaliar sua
qualidade
• O único produto passível de entrega e código executável
• A engenharia de software nos fará criar documentação volumosa e
desnecessária, e invariavelmente, produzira atraso no cronograma
24. Os profissionais da
Engenharia de Software
• Analista de Negócios
• Analista de Sistemas
• Programador / Analista de Desenvolvimento
• Analista de Testes
• Analista de Qualidade
• Analista de Suporte / Analista de infraestrutura
• Administrador de Banco de Dados
• Administrador de Rede
• Gerente de Projeto
25. Referências
• PRESMANN, R. Engenharia de Software: uma abordagem
profissional. 7. ed. Rio de Janeiro: Mc Graw Hill, 2011. Cap. 1
• SOMMERVILLE, I. Engenharia de Software. 8. ed. Rio de Janeiro:
Pearson, 2007. Cap. 1 e 2.