O que é um Software?
Programas de computador
Entidade abstrata.
Ferramentas (mecanismos) pelas quais:
exploramos os recursos do hardware. executamos determinadas tarefas
resolvemos problemas.
interagimos com a máquina.
Características do Software
O software é composto de:
Instruções que executam uma ação/função desejada
nos dados.
Estrutura de dados para manipular informação.
O software não se desgasta com o uso; mas torna-se
Características do Software
Dificuldades para desenvolver o software:
Saber o que o software deve fazer: quais os requisitos
Saber quais ferramentas e qual a linguagem ideal para o
desenvolvimento do software
Calcular o tempo de desenvolvimento e
conseqüentemente os custos.
Prever falhas (antes de entregar). Tratar manutenção e versões.
Crise de Software
Problemas:
Software inadequado.
Cronogramas e custos imprecisos – dificuldades em
prever o progresso durante o desenvolvimento.
Inexistência de dados históricos sobre o processo de
desenvolvimento.
Comunicação deficiente - insatisfação de usuários. Carência de conceitos quantitativos sobre
confiabilidade, qualidade, reusabilidade.
Crise de Software
Solução:
Combinar métodos para as fases de desenvolvimento. Ferramentas para automatizar esses métodos.
Técnicas para assegurar qualidade. Daí surge a Engenharia de Software.
Engenharia de Software
Abordagem sistemática para o desenvolvimento,
implantação/operação e descarte do software.
Aplicação prática de conhecimento científico ao
projeto e construção de software.
Disciplina que utiliza princípios de engenharia
para produzir e manter softwares dentro de prazos
e custos estimados.
Engenharia de Software
Objetivos:
Melhorar a qualidade do software e aumentar a
produtividade e satisfação profissional de engenheiros de software.
Definição:
Disciplina que utiliza um conjunto de métodos, técnicas
e ferramentas para analisar, projetar e gerenciar desenvolvimento e manutenção de software.
Engenharia de Software
Princípios da Engenharia de Software:
Formalidade: produtos mais confiáveis, controlar seu
custo e mais confiança no seu 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 mais geral, é bem possível que a
solução possa ser reutilizada.
Engenharia de Software
Métodos e Técnicas: o que fazer Metodologias: como aplicar
Ferramentas: Automatizam os
métodos, dão apoio à utilização dos mesmos.
CASE (Computer-Aided Software
Engineering): Ferramentas integradas para desenvolver software.
Engenharia de Software
O que são ferramentas CASE?
São programas de computador que têm o objetivo
fornecer um suporte automatizado para as atividades de processo de software.
Operam 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
Engenharia de Software
O que são os métodos/técnicas da Engenharia de
Software?
São abordagens estruturadas para o desenvolvimento de
software que incluem as regras e maneiras de desenvolvimento.
O que são metodologias de Engenharia de Software?
São modelos de processos que indicam como os métodos
devem ser aplicados para o desenvolvimento do software
Modelo de processos é uma representação simplificada de um
processo de software, apresentada sobre uma perspectiva específica.
Engenharia de Software
Objetivos dos modelos:
Auxiliar no processo de produção produtos de alta
qualidade, produzidos mais rapidamente e a um custo cada vez menor.
Gerenciar: complexidade, visibilidade, aceitabilidade,
confiabilidade, manutenibilidade, segurança etc.
Possibilitam:
Ao gerente: controlar o processo de desenvolvimento de
sistemas de software.
Ao desenvolvedor: obter a base para produzir, de maneira
eficiente, software que satisfaça os requisitos pré-estabelecidos.
Engenharia de Software
Modelos de Processo:
Especificam as atividades e a ordem em que, de acordo com
o modelo, devem ser executadas.
Produtos de software podem ser construídos utilizando-se
de diferentes modelos de processo.
Alguns modelos são mais adequados que outros para
determinados tipos de aplicação.
A opção por um determinado modelo deve ser feita
Engenharia de Software
O que é um processo de software?
Um conjunto de atividades que objetivam o
desenvolvimento e a evolução de software.
Conjunto de atividades para especificar, projetar,
Engenharia de Software
As principais atividades de um processo de
desenvolvimento de software são:
Especificação: define o que o sistema deverá fazer,
considerando as suas restrições.
Desenvolvimento: projetar e implementação do
software.
Validação: checagem se o software faz o que o usuário
deseja.
Evolução: mudanças no software para atender às novas
Engenharia de Software
Os principais modelos são:
Modelo Clássico. Modelo Evolutivo.
Modelo Clássico
Método sistemático e seqüencial.
O resultado de uma fase constitui na entrada de outra.
Também é conhecido como Modelo Cascata.
Cada fase é estruturada como um conjunto de
atividades que podem ser executadas por pessoas
diferentes, simultaneamente.
Ciclo de vida clássico
Fases:
Análise e definição de requisitos. Projeto de software. Implementação e teste unitário. Integração e teste de sistema. Operação e manutenção. Requisitos Projeto Implementação Verificação ManutençãoCiclo de vida clássico
Problemas/Características:
Utiliza modelo sistemático e seqüencial, em que a
entrada de uma fase é o resultado da anterior.
Na prática os projetos não seguem esse fluxo.
Gerenciar as incertezas no início do projeto é difícil. Versão funcional dos programas disponível após os
últimos estágios do projeto
Dificuldade em atender às mudanças exigidas
posteriormente pelo cliente.
Modelo mais adequado quando os requisitos estão
Modelo Evolutivo
O software deve ser desenvolvido de forma a
evoluir a partir de protótipos iniciais
O objetivo é desenvolver o sistema com o contínuo
acompanhamento dos clientes.
Os requisitos precisam ser bem entendidos.
Os Protótipos podem ser:
Exploratórios (Descartáveis): usado para esclarecer os
requisitos
Evolutiva: o protótipo é evoluído até chegar ao produto
Modelo Evolutivo
Modelo Evolutivo
Características:
Localiza “aspectos visíveis” para o usuário (E/S).
A iteração pode adequar o protótipo às necessidades do
usuário.
O protótipo pode ser descartado ou fazer parte do
produto final.
Normalmente o modelo é aplicado quando:
Sistemas de pequeno e médio porte. Como parte de um sistema grande. Sistema de curta duração.
Modelo Evolutivo
Problemas:
Ausência de visibilidade do processo.
Cliente insiste que o protótipo seja, com ligeiras
modificações, a versão final do produto Soluções improvisados tornam-se parte do produto final.
Modelo Iterativo e Incremental
Os passos fundamentais do processo estão em
iniciar o desenvolvimento com um subconjunto
simples de Requisitos de Software e iterativamente
alcançar evoluções subseqüentes das versões até o
sistema todo estar implementado.
A cada iteração, as modificações de projeto são
feitas e novas funcionalidades são adicionadas.
Modelo Iterativo e Incremental
Abordagem intermediária: Combina vantagens dos
paradigmas ciclo de vida clássico e evolutivo.
Identificação das funções do sistema, estabelecimento
de incrementos e prioridades
Cada incremento pode utilizar um paradigma de
desenvolvimento diferente
Dificuldade para dividir e gerenciar versões
Os dois processos mais conhecidos de sistemas
iterativos e incremental de desenvolvimento são o RUP
(Processo Unificado da Rational) e o Desenvolvimento
ágil de software
Modelo Iterativo e Incremental
Problemas
Estimativa:
Não dedicamos tempo para coletar dados sobre o
software e seu processo de desenvolvimento.
Com poucos dados históricos como guia, as estimativas
têm sido “a olho”, com resultados previsivelmente ruins.
Produtividade:
Sem nenhum indicador sólido de produtividade, não
poderemos avaliar com precisão a eficácia de novas ferramentas, métodos, padrões ou processos.
Problemas
Qualidade:
O processo é feito não pelos benefícios que traz, mas
para mostrar atender as exigências do cliente gerando artefatos sem valor.
A comunicação entre o cliente e o desenvolvedor de
software freqüentemente é muito fraca.
Só recentemente começamos a entender a importância
dos testes de software sistemáticos e tecnicamente completos.
A insatisfação do cliente com o sistema “concluído”
Problemas
Manutenção:
O software existente pode ser muito difícil de manter.
Projeto mal feito Sistema legado
A tarefa de manutenção de software devora a maioria do
dinheiro destinado a software.
A capacidade de manutenção de software não foi
enfatizada como um critério importante para a aceitação do software.
Mitos do Software
Mitos Administrativos. Advém de gerentes sobre
pressão de orçamento e tempo.
Mitos do Cliente. Advém de falsas expectativas e
insatisfação com o desenvolvedor
Mitos do Profissional de Desenvolvimento. Advém
de se considerar o software como uma forma de
arte. Será que o software é uma arte ou uma
engenharia?
Mito do Manual de Práticas
Mito:
Já temos um manual repleto de padrões e procedimentos
para a construção de software. Isso não oferecerá ao meu pessoal tudo o que eles precisam saber?
Realidade:
O manual de padrões pode muito bem existir, mas será
que ele é usado? Os profissionais de software têm
conhecimento de sua existência? Ele reflete a moderna prática de desenvolvimento de software? É completo? Em muitos casos, a resposta a todas estas perguntas é “não”.
Mito do Computador Moderno
Mito:
Meu pessoal tem ferramentas de desenvolvimento de software
de última geração; afinal de contas lhes compramos os mais novos computadores.
Realidade:
É preciso muito mais do que o último modelo de computador
para se fazer um desenvolvimento de software de alta qualidade.
As ferramentas de engenharia de software auxiliadas por
computador (CASE) são mais importantes do que o hardware para se conseguir boa qualidade e produtividade; contudo, a
Mito das Hordas de Mongóis
Mito:
Se nós estamos atrasados nos prazos, podemos adicionar
mais programadores e tirar o atraso.
Realidade:
O desenvolvimento de software não é um processo
mecânico igual à manufatura. Acrescentar pessoas em um projeto de software atrasado torna-o ainda mais atrasado.
Gasta-se tempo formando os recém-chegados, o que
reduz o tempo de desenvolvimento produtivo. Pessoas podem ser acrescentadas, mas somente de uma forma planejada e bem coordenada.
Mitos da Especificação
Mito:
Uma declaração geral dos objetivos é suficiente para se
começar a escrever programas – podemos preencher os detalhes mais tarde.
Realidade:
Uma definição inicial ruim é a principal causa de fracasso dos
esforços de desenvolvimento de software.
Uma descrição formal e detalhada do domínio da informação,
função, desempenho, interfaces, restrições de projeto e critérios de validação é fundamental. Essas características podem ser determinadas somente depois de cuidadosa comunicação entre o cliente e o desenvolvedor.
O Pior Mito do Cliente
Mito:
Os requisitos de projeto modificam-se continuamente,
mas as mudanças podem ser facilmente acomodadas, porque o software é flexível (Cuidado como o “Já que...”) .
Realidade:
É verdade que os requisitos de software se modificam,
mas o impacto da mudança varia de acordo com o tempo em que ela é introduzida.
Mitos do “Entreguei! Finalmente
Acabou.”
Mito:
Assim que escrevemos o programa e o colocarmos em
funcionamento, nosso trabalho estará completo.
Realidade:
Alguém disse certa vez que “quanto mais cedo se começa
a ‘escrever o código’, mais tempo demora para que se
consiga terminá-lo”. Os dados da indústria indicam que entre 50 e 70% de todo o esforço gasto num programa serão despendidos depois que ele for entregue pela primeira vez ao cliente.
Mito da Qualidade
Mito:
Enquanto não tiver o programa “funcionando”, eu não
terei realmente nenhuma maneira de avaliar sua qualidade.
Realidade:
Um dos mecanismos mais efetivos de garantia de
qualidade de software pode ser aplicado desde o começo de um projeto – a revisão técnica formal. As revisões de software são um “filtro da qualidade” que têm sido
consideradas mais eficientes do que a realização de testes para a descoberta de defeitos.
Mito do Executável
Mito:
A única coisa a ser entregue em um projeto
bem-sucedido é o programa funcionando.
Realidade:
Um programa funcionando é somente uma parte de uma
configuração de software que inclui vários outros
elementos. A documentação forma os alicerces para um desenvolvimento bem-sucedido e fornece um guia para a tarefa de manutenção do software.
Perguntas
Qual é a importância da Engenharia de Software
no desenvolvimento de sistemas?
Faça um estudo comparativo entre o modelo de
desenvolvimento de software tradicional , o
evolutivo e o iterativo e incremental.
Comente os princípios da Engenharia de Software.
Qual é a importância do software no cotidiano das
Trabalho
Faça uma pesquisa sobre como as empresas de software
fazem para realizar as seguintes atividades:
Requisitos Análise de projeto Desenvolvimento Testes Gerenciamento de mudanças Acompanhamento do projeto
Resumo de no máximo 2 páginas Apresentação de 15 a 20 minutos Equipes de 4 a 5 alunos.
Referências Bibliográficas
Sommerville, Ian. Engenharia de
Software. 8a edição. Pearson Education, 2007.
Pressman, Roger S. Engenharia de
Software. 6a edição. McGraw-Hill, 2006.
Paulo Filho, Wilson de Pádua.