Software e
Engenharia de Software
Software
• Algumas Definições
“conjunto de instruções que governam as ações
de uma máquina programável.” ISO9126
“criação intelectual compreendendo os programas,
procedimentos, regras e qualquer documentação
correlata à operação de um sistema de
processamento de dados.” ISO9000-3
Produto de Software
• Produto de Software
“Conjunto completo de programas de
computador, procedimentos e documentação
correlata, assim como dados designados para
entrega a um usuário.” ISO9000-3
– “Um conjunto de artefatos formando uma
configuração que inclui programas,
documentos, dados ... .” Pressman-2002
Software na Visão de Brooks
• Um Programa é um software
• Um Programa-Produto é um programa que
– tem documentação e pode ser executado, testado,
modificado e estendido por qualquer pessoa
• Um Sistema de Programas é um software que:
– envolve vários programas, projetados para
funcionarem integrada e cooperativamente
• Sistemas de Programas-Produto são o objeto da
Engenharia de Software
Categorias de Softwares
Software
Software
Software
Software Software
Softwarede
de
Aplicativo
Aplicativo Sistemas
Sistemas
Software
Software Software
Software
Aplicativo
Aplicativo Aplicativo
Aplicativo Software
Softwarepara
para Software
Softwarepara
para
para
para Para
Para Gerenciamento
Gerenciamento Desenvolvimento
Desenvolvimento
Propósito
Propósito Propósito
Propósito de
deSistemas
Sistemas de
deSistemas
Sistemas
Geral
Geral Específicos
Específicos
Categorias de software
• Software Aplicativo
– Realiza o processamento de informações para usuário
finais
• Software de sistema (ou básico)
– Gerencia e suporta as operações dos sistemas
computacionais e redes
6
Software Aplicativo
• De propósito geral
– Programas que realizam o trabalho de processamento
de informações para usuários finais
– E.g., processamento de texto, planilhas, etc.
• De propósito específico
– Programas que apóiam aplicações específicas dos
usuários finais
– E.g., comércio eletrônico, gerenciamento de clientes,
etc.
7
Software de sistema (ou básico)
• Software que gerencia e dá suporte a um
sistema computacional
– Software de gerenciamento de sistemas
• Softwares que gerenciam hardware, software, redes e recursos
de dados
• E.g., sistemas operacionais, Sistemas de gerenciamento de
redes, Sistemas gerenciadores de bancos de dados (SGBD),
utilitários
– Software para de desenvolvimento de software
• Softwares que auxiliam usuários no desenvolvimento de outros
softwares
8
Categorias de software
9
Evolução do Software
Primeira
Primeira Segunda
Segunda Terceira
Terceira Quarta
Quarta Quinta
Quinta
Geração
Geração Geração
Geração Geração
Geração Geração
Geração Geração
Geração
Tendência: Rumo a pacotes de aplicativos fáceis de utilizar, para múltiplas
finalidades, com capacidade para uso em redes para produtividade e
colaboração
Sistemas de Linguagem Natural
Programas Gerenciamento de e Linguagem
escritos pelo Programas em Sistemas Banco de Dados Orientada a Objetos
usuário Pacotes Operacionais Pacotes Multiuso
Linguagens de Interface Gráfica
Linguagens de Linguagens Linguagens de Quarta Geração
Máquina Simbólicas Alto Nível Capacidade para
Uso em Redes e
Pacotes para Ajuda
Microcomputador Especializada
Tendência: Rumo a linguagens e ferramentas visuais e de conversação
Outras Classificações de Software
• Classificação baseada no público alvo
– Software personalizado (Custom software)
• Aplicações que são desenvolvidas dentro de uma organização
para ser utilizado pela própria organizaçcão
– COTS software (“software de prateleira”)
• Commercial Off-the-shelf (COTS)
• Desenvolvido com a intenção de ser vendido em múltiplas cópias
(não personalizado)
– COTS versus Custom ...
11
Outras Classificações de Software
Software Suites
12
Software Suites
• Vantagens:
– Custo do pacote é menor que aplicações individuais
– Todas as aplicações têm uma GUI similar
– Funcionam bem e integradas
• Desvantagens
– Recursos não utilizados por todos os usuários
13
Pacotes integrados
• Combinam funções de vários programas em um
pacote
– E.g., Microsoft Works, AppleWorks
• Vantagens:
– Muitas funções por um preço menor
• Desvantagem
– Funcionalidade limitada
14
Licenciamento de software
• Softwares são licenciados (COTS, ASP)
– Você não compra software: você compra
uma licença para usar o software
– Licenciado para proteger os direitos de
propriedade do fornecedor
15
Características de Software
• é especificado e não construído
• é uma entidade lógica (conceitual)
• é intangível
• não se desgasta
• não pode ser visualizado
• é inerentemente complexo
• precisa ser compatível
• sempre sofre modificações
Desgaste versus Deteriorização
increased failure
rate due to side effects
Failure
rate
change
actual curve
idealized curve
Time
Custo de Modificação
60-100x
1.5-6x
1x
Definição Desenvolvimento Operação
Como Construir?
Simplesmente
“FAZER”
OU
ENGENHARIA
DE SOFTWARE
[Link]/
[Link]/spi/
[Link]
Engenharia de Software
• Aplicação prática de conceitos de ciência da
computação e outras disciplinas em todas as
atividades técnicas e gerenciais que compõem o
desenvolvimento de sistemas de software com o
objetivo de garantir a qualidade dos processos e
dos produtos obtidos.
• Também pode ser definida como a aplicação
sistemática de métodos, ferramentas e técnicas
para atender os requisitos e alcançar os
objetivos de um sistema de software.
Engenharia de Software
Camadas
Técnicas e Ferramentas
Métodos
Processos
Foco na Qualidade
Desafios da ES
• Como garantir a qualidade do software
produzido?
• Como atender os requisitos cumprindo
orçamento e prazo?
• Como evoluir a base crescente de software
legado?
• Como evitar falhas catastróficas em
software?
• Como implantar novas tecnologias com
sucesso?
Dificuldades Essenciais e
Acidentais da ES
• Dificuldades em se construir um software:
– Essenciais: pertinentes à natureza do software, ao
modelo conceitual para o sistema (conjunto de dados,
relação entre esses itens de dados e a chamadas de
funções).
– Acidentais: dificuldades que se tem na produção do
software, mas que não são inerentes às regras de
negócio implementadas pelo software (linguagem,
tecnologias, etc).
– Conquistas passadas resolveram as dificuldades
acidentais, não essenciais.
Dificuldades Essenciais
• Complexidade: entidades de software
são mais complexas pelo seu tamanho
que qualquer outra construção humana,
pois suas partes são desiguais. Software
tem um grande número de estados,
tornando sua descrição, concepção e
teste muito difíceis.
Dificuldades Essenciais
• Conformidade: dificuldade em se manter
padrões desenvolvidos por pessoas
diferentes, em tempos diferentes. Em
versões prévias, por exemplo, esta
complexidade não pode ser simplificada
redesenhando o software sozinho.
Dificuldades Essenciais
• Alterabilidade: mudanças constantes
são promovidas no software, inclusive
após ser desenvolvido (o que é mais
complexo). Sistemas incorporam
funcionalidades e estas são, na maioria
das vezes, os pivôs das mudanças.
Dificuldades Essenciais
• Invisibilidade: software possui um
aspecto abstrato, imaterial, não pode ser
representado por uma baseado em
combinações geométricas. Para se
construir um software é necessário um
conjunto de diagramas (que devem
representar fluxo de dados, padrões de
dependência, sequência temporal, etc.)
Abordagens promissoras
• Reusar x Construir: concepção do software
não construindo-o completamente.
• Refinamento de requisitos e prototipagem
rápida: precisão no levantamento de dados é
essencial. É necessária uma interação exaustiva
entre cliente e desenvolvedor.
• Grandes projetistas: gerenciamento de
pessoal. Qualificação de grandes projetistas.
O Guia SWEBOK
• Não é o conhecimento em si, mas uma síntese e
uma referência ao material disponível em
diversas publicações que se complementam
para formar o corpo de conhecimento.
• Descreve que parte do conhecimento é
geralmente aceita pela comunidade profissional.
• Organiza o conhecimento.
• Provê acesso por tópicos ao conhecimento.
• Patrocinado por empresas como: Rational (IBM),
SAP, Boeing, entre outras.
Objetivos
1. Promover uma visão consistente da engenharia de
software em todo o mundo (500 revisores de 42 países
na fase Stoneman, versão Trial, e 120 revisores de 21
países na fase Ironman, versão 2004).
2. Definir as fronteiras de atuação da engenharia de
software e as áreas de interseção com outras disciplinas
como: engenharia da computação, ciência da
computação, gestão de negócios, matemática,
gerenciamento de projetos, gestão da qualidade,
ergonomia (acessibilidade e usabilidade) e engenharia
de sistemas (SWEBOK, capítulo 12).
Objetivos (Continuação)
3. Caracterizar o conteúdo da disciplina engenharia de
software, subdividindo-o hierarquicamente em áreas de
conhecimento (o Apêndice A descreve como as AC
devem ser organizadas).
4. Prover acesso por tópicos a base de conhecimento da
engenharia de software (material de referência e matriz
em cada AC).
5. Fornecer um alicerce para desenvolvimento do currículo,
certificação individual e licenciamento de material
(conhecimento geralmente aceito: aplica-se a maioria
dos projetos e das equipes pelo consenso e pela
efetividade).
Material de Referência e Matriz
• Exemplo de matriz que relaciona os tópicos de cada AC
com as fontes recomendadas.
Material de Referência e Matriz
● Exemplo de referências recomendadas em cada AC.
Áreas de Conhecimento (AC)
1. Software Requirements (Requisitos)
2. Software Design (Desenho / Projeto)
3. Software Construction (Construção / Implementação)
4. Software Testing (Testes)
5. Software Maintenance (Manutenção)
6. Software Configuration Management (Configuração)
7. Software Engineering Management (Gerenciamento)
8. Software Engineering Process (Processo)
9. Software Engineering Tools and Methods (Ferramentas e
Métodos)
10. Software Quality (Qualidade)