Engenharia de Software
Ciência da Computação

Noiza Waltrick Trindade
noiza@uems.br

                          Introdução
                              Aula 01
Software
   Instruções
    quando executadas produzem a função e o
    desempenho desejados
   Estruturas de Dados
    possibilitam que os programas manipulem
    adequadamente a informação
   Documentos
    descrevem a operação e o uso dos
    programas
Características do Software

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

2. não se desgasta mas se deteriora

3. a maioria é feita sob medida em vez de ser
   montada a partir de componentes existentes
Falhas de Hardware/Software
   Quando um componente de hardware se
    desgasta é substituído por uma “peça de
    reposição”
   Não existe “peça de reposição” para software
    – Toda falha indica um erro no projeto ou no
      processo de tradução para o código executável
    – Manutenção do software é mais complexa do que
      a do hardware
Curva de falhas para o Hardware


          “mortalidade       “desgaste”
 índice
   de       infantil”
 falhas




                         tempo
Curva de falhas do Software


                      curva real
índice de
            mudança
  falhas


                        curva idealizada


                      tempo
O que é Software?
(Arndt Von Staa, 1987)
 São, usualmente, componentes de sistemas
  automatizados
 São compostos por documentação, dados, código e
  procedimentos
 São desenvolvidos com o objetivo de instruir
  máquinas e pessoas no sentido da realização de um
  conjunto bem definido de tarefas de processamento
  de dados
 São instrumentos para alcançar um fim específico:
  transformar dados em resultados confiáveis, úteis e
  oportunos
Quando desenvolver software?

   Aplicado a qualquer problema em que
    um conjunto previamente de passos
    procedimentais tiver sido definido
    (algoritmo)

   Exceção: Softwares de Inteligência
    Artificial
Aplicações do Software
BÁSICO            programas de apoio a outros programas
DE TEMPO REAL     monitora, analisa e controla eventos do
                  mundo real
COMERCIAL         operações comerciais e tomadas de
                  decisões administrativas
CIENTÍFICO E DE   algoritmos de processamento de números
ENGENHARIA
EMBUTIDO          controla produtos e sistemas de mercados
                  industriais e de consumo
DE COMPUTADOR     processamento de textos, planilhas
PESSOAL           eletrônicas, diversões, etc.
DE INTELIGÊNCIA   algoritmos não numéricos para resolver
ARTIFICIAL        problemas que não sejam favoráveis à
                  computação ou à análise direta
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
Evolução do Software
(1965 - 1975)
 Multiprogramação e sistemas multiusuários
 Técnicas interativas
 Sistemas de tempo real
 1a geração de SGBD’s
 Produto de software - software houses
 Bibliotecas de Software
 Cresce no de sistemas baseado em computador
 Manutenção quase impossível
                   ..... CRISE DE SOFTWARE
Evolução do Software
(1975 - hoje)
 Sistemas distribuídos
 Redes locais e globais
 Uso generalizado de microprocessadores -
  produtos inteligentes
 Hardware de baixo custo
 Impacto de consumo
Evolução do Software
        (Quarta era do software: atualidade)
 Tecnologias Orientadas a Objetos
 Sistemas especialistas e software de inteligência
  artificial usados na prática
 Software de rede neural artificial
 Computação Paralela
 Internet
Evolução do Software
          AFLIÇÃO
(1965 - 1975)       CRÔNICA
 Cresce
       o número de sistemas baseado
 em computador
         CRISE DE SOFTWARE
 Manutenção quase impossível
       Refere-se a um conjunto de
          problemas encontrados no
       ..... CRISE DE SOFTWARE
             desenvolvimento de
                  software
Crise de Software - Problemas

1.   As estimativas de prazo e de custo
     freqüentemente são imprecisas
     – “Não dedicamos tempo para coletar dados
       sobre o processo de desenvolvimento de
       software”
     – “Sem nenhuma indicação sólida de
       produtividade, não podemos avaliar com
       precisão a eficácia de novas ferramentas,
       métodos ou padrões”
Crise de Software - Problemas

1.   As estimativas de prazo e de custo
     freqüentemente são imprecisas
     – “Os prazos arrastam-se por meses”
     – “Causa insatisfação para o cliente e falta
       de confiança”
     – “Sem nenhuma indicação sólida de
       produtividade, não podemos avaliar com
       precisão a eficácia de novas ferramentas,
       métodos ou padrões”
Crise de Software - Problemas

2.   Insatisfação do cliente com o sistema
     concluído
     – “Os projetos de desenvolvimento de
       software normalmente são efetuados
       apenas com um vago indício das
       exigências do cliente”
     – “A comunicação entre o cliente e o
       desenvolvedor de software é muito fraca
Crise de Software - Problemas

3.   A qualidade de software às vezes é
     menos que adequada
     – Não uso de técnicas de teste sistemáticas
       e completas
     – Só recentemente começam a surgir
       conceitos quantitativos sólidos de garantia
       de qualidade de software
Crise de Software - Problemas
4.   O software existente é muito difícil de manter
     – A tarefa de manutenção devora o orçamento
       destinado ao software
     – A facilidade de manutenção não foi enfatizada como
       um critério importante



     – Esses problemas podem ser corrigidos
     – Abordagem de engenharia de software aliada a
       técnicas e ferramentas
Crise de Software

estimativas de prazo e de custo 
produtividade das pessoas 
qualidade de software 
software difícil de manter 
Causas dos problemas associados à
         Crise de Software

1. Próprio caráter do Software
• O software é um elemento de sistema lógico e
  não físico (produto intangível)
• Conseqüentemente, o sucesso é medido pela
  qualidade de uma única entidade e não pela
  qualidade de muitas entidades manufaturadas

  O software não se desgasta, mas se
               deteriora!!!
Causas dos problemas associados à
        Crise de Software
2. Falhas das pessoas responsáveis pelo
  desenvolvimento de Software
• Gerentes sem nenhum background em
  software
• Os profissionais da área de software têm
  recebido pouco treinamento formal em novas
  técnicas para o desenvolvimento de software
• Resistência a mudanças.
Causas dos problemas associados à
        Crise de Software

3. Mitos do Software

    Propagaram desinformação e confusão
     administrativos
     cliente
     profissional
Mitos do Software (administrativos)

    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:
Será que o manual é usado?
Os profissionais sabem que ele existe?
Ele reflete a prática moderna de desenvolvimento de software?
Ele é completo?
Mitos do Software (administrativos)

   Meu pessoal tem ferramentas de
    desenvolvimento de software de última
    geração; afinal lhes compramos os
    mais novos computadores.

     Realidade:
     É preciso muito mais do que os mais recentes
     computadores para se fazer um desenvolvimento de
     software de alta qualidade.
Mitos do Software (administrativos)

   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 torna-o ainda mais
    atrasado. Pessoas podem ser acrescentadas, mas
    somente de uma forma planejada.
Mitos do Software (cliente)
   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 fracassos dos
esforços de desenvolvimento de software.
É fundamental 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.
Mitos do Software (cliente)
   Os requisitos de projeto modificam-se
    continuamente, mas as mudanças podem ser
    facilmente acomodadas, porque o software é
    flexível.

Realidade:
Uma mudança, quando solicitada tardiamente num projeto,
pode ser maior do que mais do que uma ordem de magnitude
mais dispendiosa do que a mesma mudança solicitada nas
fases iniciais.
Magnitude das mudanças


       FASES        CUSTO DE MANUTENÇÃO
  DEFINIÇÃO         1x
  DESENVOLVIMENTO   1.5 - 6x
  MANUTENÇÃO        60 - 100x
Mitos do Software (profissional)

   Assim que escrevermos o programa e o
    colocarmos em funcionamento nosso
    trabalho estará completo.


Realidade:
Os dados da indústria indicam que entre 50 e 70% de todo
esforço gasto num programa serão despendidos depois que
ele for entregue pela primeira vez ao cliente.
Mitos do Software (profissional)

   Enquanto não tiver o programa
    "funcionando", eu não terei realmente
    nenhuma maneira de avaliar sua qualidade.


Realidade:
Um programa funcionando é somente uma parte de uma
Configuração de Software que inclui todos os itens de
informação produzidos durante a construção e manutenção do
software.
Questionamentos

 CRISE DE SOFTWARE
  Por que tanta demora para entregar?
  Refere-se a um conjunto
 Por que os prazos se atrasam?

   de problemas encontrados
 Por que os custos são altos?
 Por que não achar todos os erros antes
      no desenvolvimento de
  de entregar?
                software
 Por que dificuldade em medir o
  progresso do desenvolvimento de um
  software?
Resposta à Crise de Software




 A aplicação de uma abordagem
 sistemática, disciplinada e possível de
 ser medida para o desenvolvimento,
 operação e manutenção do software
 (IEEE)
Resposta à Crise de Software

 PROCESSO DE SOFTWARE

     A aplicação de uma abordagem
     sistemática, disciplinada e possível de
     ser medida para o desenvolvimento,
     operação e manutenção do software
     (IEEE)
34
Engenharia de Software


   Preocupação: Sistematizar o processo
    de criação e manutenção de software.
Engenharia de Software
Definições
   IEEE Standard Glossary of Software
    Engineering terminology:
    – Engenharia de software é uma abordagem
      sistemática para o desenvolvimento,
      operação, manutenção de software;
    – Software: programas de computador,
      procedimentos, regras, documentação
      possivelmente associada, e dados sobre
      sua operação.
Engenharia de Software
Definições
    Boehm: Engenharia de software
    envolve a aplicação prática de
    conhecimento científico para o projeto e
    construção de programas de
    computador e a documentação
    associada necessária para desenvolvê-
    los, operá-los e mantê-los.
Engenharia de Software
Definições
    Fairley: Engenharia de software é a
    disciplina tecnologica e gerencial
    preocupada com a produção
    sistemática e manutenção de produtos
    de software que são desenvolvidos e
    modificados no prazo estabelecido e
    dentro das estimativas de custo.
Pontos a ponderar

 Os mitos de software citados em aula
  são somente alguns entre muitos
  outros. Liste mitos adicionais para cada
  uma das categorias apresentadas.
 Além das aplicações de software
  citadas, pesquise sobre:
    – computação ubiqua
    – netsourcing
           ,
    – software aberto

Es aula01

  • 1.
    Engenharia de Software Ciênciada Computação Noiza Waltrick Trindade noiza@uems.br Introdução Aula 01
  • 2.
    Software  Instruções quando executadas produzem a função e o desempenho desejados  Estruturas de Dados possibilitam que os programas manipulem adequadamente a informação  Documentos descrevem a operação e o uso dos programas
  • 3.
    Características do Software 1.desenvolvido ou projetado por engenharia, não manufaturado no sentido clássico 2. não se desgasta mas se deteriora 3. a maioria é feita sob medida em vez de ser montada a partir de componentes existentes
  • 4.
    Falhas de Hardware/Software  Quando um componente de hardware se desgasta é substituído por uma “peça de reposição”  Não existe “peça de reposição” para software – Toda falha indica um erro no projeto ou no processo de tradução para o código executável – Manutenção do software é mais complexa do que a do hardware
  • 5.
    Curva de falhaspara o Hardware “mortalidade “desgaste” índice de infantil” falhas tempo
  • 6.
    Curva de falhasdo Software curva real índice de mudança falhas curva idealizada tempo
  • 7.
    O que éSoftware? (Arndt Von Staa, 1987)  São, usualmente, componentes de sistemas automatizados  São compostos por documentação, dados, código e procedimentos  São desenvolvidos com o objetivo de instruir máquinas e pessoas no sentido da realização de um conjunto bem definido de tarefas de processamento de dados  São instrumentos para alcançar um fim específico: transformar dados em resultados confiáveis, úteis e oportunos
  • 8.
    Quando desenvolver software?  Aplicado a qualquer problema em que um conjunto previamente de passos procedimentais tiver sido definido (algoritmo)  Exceção: Softwares de Inteligência Artificial
  • 9.
    Aplicações do Software BÁSICO programas de apoio a outros programas DE TEMPO REAL monitora, analisa e controla eventos do mundo real COMERCIAL operações comerciais e tomadas de decisões administrativas CIENTÍFICO E DE algoritmos de processamento de números ENGENHARIA EMBUTIDO controla produtos e sistemas de mercados industriais e de consumo DE COMPUTADOR processamento de textos, planilhas PESSOAL eletrônicas, diversões, etc. DE INTELIGÊNCIA algoritmos não numéricos para resolver ARTIFICIAL problemas que não sejam favoráveis à computação ou à análise direta
  • 10.
    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
  • 11.
    Evolução do Software (1965- 1975)  Multiprogramação e sistemas multiusuários  Técnicas interativas  Sistemas de tempo real  1a geração de SGBD’s  Produto de software - software houses  Bibliotecas de Software  Cresce no de sistemas baseado em computador  Manutenção quase impossível ..... CRISE DE SOFTWARE
  • 12.
    Evolução do Software (1975- hoje)  Sistemas distribuídos  Redes locais e globais  Uso generalizado de microprocessadores - produtos inteligentes  Hardware de baixo custo  Impacto de consumo
  • 13.
    Evolução do Software (Quarta era do software: atualidade)  Tecnologias Orientadas a Objetos  Sistemas especialistas e software de inteligência artificial usados na prática  Software de rede neural artificial  Computação Paralela  Internet
  • 14.
    Evolução do Software AFLIÇÃO (1965 - 1975) CRÔNICA  Cresce o número de sistemas baseado em computador CRISE DE SOFTWARE  Manutenção quase impossível Refere-se a um conjunto de problemas encontrados no ..... CRISE DE SOFTWARE desenvolvimento de software
  • 15.
    Crise de Software- Problemas 1. As estimativas de prazo e de custo freqüentemente são imprecisas – “Não dedicamos tempo para coletar dados sobre o processo de desenvolvimento de software” – “Sem nenhuma indicação sólida de produtividade, não podemos avaliar com precisão a eficácia de novas ferramentas, métodos ou padrões”
  • 16.
    Crise de Software- Problemas 1. As estimativas de prazo e de custo freqüentemente são imprecisas – “Os prazos arrastam-se por meses” – “Causa insatisfação para o cliente e falta de confiança” – “Sem nenhuma indicação sólida de produtividade, não podemos avaliar com precisão a eficácia de novas ferramentas, métodos ou padrões”
  • 17.
    Crise de Software- Problemas 2. Insatisfação do cliente com o sistema concluído – “Os projetos de desenvolvimento de software normalmente são efetuados apenas com um vago indício das exigências do cliente” – “A comunicação entre o cliente e o desenvolvedor de software é muito fraca
  • 18.
    Crise de Software- Problemas 3. A qualidade de software às vezes é menos que adequada – Não uso de técnicas de teste sistemáticas e completas – Só recentemente começam a surgir conceitos quantitativos sólidos de garantia de qualidade de software
  • 19.
    Crise de Software- Problemas 4. O software existente é muito difícil de manter – A tarefa de manutenção devora o orçamento destinado ao software – A facilidade de manutenção não foi enfatizada como um critério importante – Esses problemas podem ser corrigidos – Abordagem de engenharia de software aliada a técnicas e ferramentas
  • 20.
    Crise de Software estimativasde prazo e de custo  produtividade das pessoas  qualidade de software  software difícil de manter 
  • 21.
    Causas dos problemasassociados à Crise de Software 1. Próprio caráter do Software • O software é um elemento de sistema lógico e não físico (produto intangível) • Conseqüentemente, o sucesso é medido pela qualidade de uma única entidade e não pela qualidade de muitas entidades manufaturadas O software não se desgasta, mas se deteriora!!!
  • 22.
    Causas dos problemasassociados à Crise de Software 2. Falhas das pessoas responsáveis pelo desenvolvimento de Software • Gerentes sem nenhum background em software • Os profissionais da área de software têm recebido pouco treinamento formal em novas técnicas para o desenvolvimento de software • Resistência a mudanças.
  • 23.
    Causas dos problemasassociados à Crise de Software 3. Mitos do Software Propagaram desinformação e confusão administrativos cliente profissional
  • 24.
    Mitos do Software(administrativos)  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: Será que o manual é usado? Os profissionais sabem que ele existe? Ele reflete a prática moderna de desenvolvimento de software? Ele é completo?
  • 25.
    Mitos do Software(administrativos)  Meu pessoal tem ferramentas de desenvolvimento de software de última geração; afinal lhes compramos os mais novos computadores. Realidade: É preciso muito mais do que os mais recentes computadores para se fazer um desenvolvimento de software de alta qualidade.
  • 26.
    Mitos do Software(administrativos)  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 torna-o ainda mais atrasado. Pessoas podem ser acrescentadas, mas somente de uma forma planejada.
  • 27.
    Mitos do Software(cliente)  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 fracassos dos esforços de desenvolvimento de software. É fundamental 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.
  • 28.
    Mitos do Software(cliente)  Os requisitos de projeto modificam-se continuamente, mas as mudanças podem ser facilmente acomodadas, porque o software é flexível. Realidade: Uma mudança, quando solicitada tardiamente num projeto, pode ser maior do que mais do que uma ordem de magnitude mais dispendiosa do que a mesma mudança solicitada nas fases iniciais.
  • 29.
    Magnitude das mudanças FASES CUSTO DE MANUTENÇÃO DEFINIÇÃO 1x DESENVOLVIMENTO 1.5 - 6x MANUTENÇÃO 60 - 100x
  • 30.
    Mitos do Software(profissional)  Assim que escrevermos o programa e o colocarmos em funcionamento nosso trabalho estará completo. Realidade: Os dados da indústria indicam que entre 50 e 70% de todo esforço gasto num programa serão despendidos depois que ele for entregue pela primeira vez ao cliente.
  • 31.
    Mitos do Software(profissional)  Enquanto não tiver o programa "funcionando", eu não terei realmente nenhuma maneira de avaliar sua qualidade. Realidade: Um programa funcionando é somente uma parte de uma Configuração de Software que inclui todos os itens de informação produzidos durante a construção e manutenção do software.
  • 32.
    Questionamentos  CRISE DESOFTWARE Por que tanta demora para entregar? Refere-se a um conjunto  Por que os prazos se atrasam? de problemas encontrados  Por que os custos são altos?  Por que não achar todos os erros antes no desenvolvimento de de entregar? software  Por que dificuldade em medir o progresso do desenvolvimento de um software?
  • 33.
    Resposta à Crisede Software A aplicação de uma abordagem sistemática, disciplinada e possível de ser medida para o desenvolvimento, operação e manutenção do software (IEEE)
  • 34.
    Resposta à Crisede Software PROCESSO DE SOFTWARE A aplicação de uma abordagem sistemática, disciplinada e possível de ser medida para o desenvolvimento, operação e manutenção do software (IEEE) 34
  • 35.
    Engenharia de Software  Preocupação: Sistematizar o processo de criação e manutenção de software.
  • 36.
    Engenharia de Software Definições  IEEE Standard Glossary of Software Engineering terminology: – Engenharia de software é uma abordagem sistemática para o desenvolvimento, operação, manutenção de software; – Software: programas de computador, procedimentos, regras, documentação possivelmente associada, e dados sobre sua operação.
  • 37.
    Engenharia de Software Definições  Boehm: Engenharia de software envolve a aplicação prática de conhecimento científico para o projeto e construção de programas de computador e a documentação associada necessária para desenvolvê- los, operá-los e mantê-los.
  • 38.
    Engenharia de Software Definições  Fairley: Engenharia de software é a disciplina tecnologica e gerencial preocupada com a produção sistemática e manutenção de produtos de software que são desenvolvidos e modificados no prazo estabelecido e dentro das estimativas de custo.
  • 39.
    Pontos a ponderar Os mitos de software citados em aula são somente alguns entre muitos outros. Liste mitos adicionais para cada uma das categorias apresentadas.  Além das aplicações de software citadas, pesquise sobre: – computação ubiqua – netsourcing , – software aberto