Engenharia de Software

      Aula 2 – Processos de Software
              Profa. Dra. Judith Pavón
    Universidade Salvador – UNIFACS
                                  2012
Conteúdo
   Objetivo da aula
   Leitura recomendada
   Processos
   Modelos de Processos de Desenvolvimento de Software
   Processo de Software (genêrico)
   Modelos do Ciclo de Vida de Software
   Linguagem
   Método
   Ferramenta CASE
   Metodologia
   Pontos Principais


                                                      2
Objetivo da aula
O objetivo desta aula é apresentar os
conceitos de processo de software e as
características dos processos tradicionais
de desenvolvimento de software.




                                        3
Processos
• Conjunto de atividades pré-definidas que levam a um
resultado de boa qualidade, nas condições desejadas do
projeto (tempo e custo).
• Os processos devem ser adequados aos diferentes tipos
de sistema a construir.

Os modelos de processos de desenvolvimento de software
foram originalmente propostos para colocar ordem no caos
do desenvolvimento de software.
Maturidade do processo
- Medida da eficiência global da empresa de
software em relação ao processo de
desenvolvimento (Ex. CMMI)
                                                       4
Processo
   Conjunto de atividades
       bem definidas
       com responsáveis
       com artefatos de entrada e saída
       com dependências entre as mesmas e
        ordem de execução
       com modelo de ciclo de vida
Modelos de Processo de
Desenvolvimento de Software
• Os modelos de processos de desenvolvimento de software
têm trazido uma certa dose de estrutura útil para o trabalho
de engenharia de software e têm fornecido um roteiro
razoavelmente efetivo para as equipes de software.

• Quem decide o modelo de processo de desenvolvimento a
ser utilizado?
Os líderes de equipe ou gerentes adaptam um modelo de
processo a suas necessidades e depois o seguem.




                                                         6
Modelos de Processo de
 Desenvolvimento de Software
• Por que é importante?
Porque fornece estabilidade, controle e organização a uma atividade que pode,
se deixada sem controle, tornar-se caótica.

• Quais são os passos?
O processo dirige uma equipe de software por meio de um arcabouço de
atividades guarda-chuva que são organizadas em um fluxo de processo que
pode ser linear, incremental ou evolutivo.

• Qual é o produto do trabalho?
Do ponto de vista de um engenheiro de software, os produtos do trabalho são
todos os artefatos que conformam um software.

• Como tenho certeza que fiz corretamente?
Existem diversos mecanismos de avaliação de processo de software que
permitem às organizações determinar a “maturidade” do seu processo.

                                                                           7
Processo de Software
(genêrico)
 um framework para as tarefas necessárias para
 construir software de qualidade

 Três fases genéricas:
     
         Definição
        Desenvolvimento
        Manutenção
 Fase de Definição
    Foco: o que
    Atividades:
     
         Análise de viabilidade

        planejamento do projeto

        análise e especificação de
         requisitos
 Fase de
 Desenvolvimento
    Foco: como
    Atividades:
     
         projeto do software

        geração de código

        teste do software
 Fase de Manutenção
    Foco: mudanças no produto
     associadas a:
         correção de erros
         adaptação por mudanças no ambiente
     
          evolução por mudanças nos requisitos do
         usuário
Atividades de Apoio
     acompanhamento e controle do projeto
     revisões técnicas
     garantia da qualidade de software
     gerência de configuração
     preparação e produção de documentos
     gerência de reuso
     medições
     gerência de risco
Atividade 3 (entregar na próxima aula)

  Trabalho em duplas
   1. Identificar e listar os principais processos de
        desenvolvimento de software
   2. Fazer um breve resumo das principais características de
       cada processo listado no item anterior, comentar as fases
       desse processo e quando é recomendado usar.
   3. Escolha um sistema a ser desenvolvido.
   4. Defina o processo de desenvolvimento a ser seguido.




                                                                   13
Modelos do Ciclo de Vida de
Software
   Cascata
   Modelos Iterativos
         Espiral
         Incremental (ex: do RUP)
   ...
Modelo Cascata
Modelo Cascata
Modelo Cascata
    A metodologia de desenvolvimento em cascata foi
    desenvolvida pela marinha norte-americana nos
    anos 60 para permitir o desenvolvimento de
    software militares.
   Propõe uma sequência de fases rígidas.
    Ao final de cada fase, a equipe de projeto finaliza
    com uma revisão.
   Somente pode ir para a próxima fase, se finalizar a
    anterior para o sistema como um todo.
Modelo Cascata – Quando
usar
    A Metodologia em Cascata funciona bem quando os
     requisitos do usuário são rígidos e podem ser
     conhecidos com antecedência.
    A metodologia de Desenvolvimento em Cascata
     pode funcionar bem em ambientes rígidos e
     fortemente controlados.
    No cenário comercial, somente recomenda-se usar
     este modelo para sistemas pequenos e simples, pois
     se for um sistema complexo vai demorar muito
     tempo até mostrar o funcionamento do sistema.
Prototipação
   O modelo de Prototipagem é uma abordagem que
    visualiza o desenvolvimento de concepções do
    sistema conforme o andamento do projeto.

   Esta metodologia baseia-se na utilização de
    prototipagem visual ou modelos do sistema final.
    Estes modelos podem ser simples desenhos,
    imagens gráficas ou simulações de aplicações.

   Esta metodologia é até certo ponto bastante flexível
    a respeito de mudanças de requisitos; contudo, este
    processo precisa de muito controle.
Prototipação
Modelos Iterativos
   Requisitos de sistema SEMPRE evoluem
    durante o decorrer de um projeto. Assim a
    iteração do processo sempre faz parte do
    desenvolvimento.
   Iterações podem ser aplicadas a quaisquer
    dos processos de software.
   Duas abordagens (relacionadas)
       Desenvolvimento espiral
       Desenvolvimento incremental
Desenvolvimento Espiral
   Guia o processo de desenvolvimento com base em
    análise de riscos e planejamento que é
    realizado durante toda a evolução do
    desenvolvimento.
   Exemplos de riscos: pessoas que abandonam a
    equipe de desenvolvimento, ferramentas que não
    podem ser utilizadas, falha em equipamentos usados
    no desenvolvimento ou que serão utilizados no
    produto final, etc.
   A identificação e o gerenciamento de riscos é hoje
    uma atividade importantíssima no desenvolvimento
    de software devido à imaturidade da área e à falta de
    conhecimento, técnicas e ferramentas adequadas.
Desenvolvimento Espiral
   Guia o processo de desenvolvimento com base em
    análise de riscos e planejamento que é
    realizado durante toda a evolução do
    desenvolvimento.
   Exemplos de riscos: pessoas que abandonam a
    equipe de desenvolvimento, ferramentas que não
    podem ser utilizadas, falha em equipamentos usados
    no desenvolvimento ou que serão utilizados no
    produto final, etc.
   A identificação e o gerenciamento de riscos é hoje
    uma atividade importantíssima no desenvolvimento
    de software devido à imaturidade da área e à falta de
    conhecimento, técnicas e ferramentas adequadas.
Desenvolvimento Espiral
Desenvolvimento Espiral
Desenvolvimento Incremental
    Em vez de entregar o sistema como um todo, o
     desenvolvimento e a entrega são divididos em
     incrementos, com cada incremento entregando
     parte da funcionalidade requerida
    Requisitos dos usuários são priorizados e os
     requisitos de mais alta prioridade são incluídos
     nas iterações iniciais
    Uma vez que o desenvolvimento de um
     incremento é iniciado, os requisitos são
     "congelados". Embora os requisitos possam
     continuar a evoluir para incrementos posteriores.
RUP (Rational Unified Process)
   A metodologia RUP (Rational Unified Process) é
    um processo que fornece uma metodologia
    disciplinada de desenvolvimento utilizando um
    conjunto de ferramentas, modelos e entregáveis.
   Nesse modelo, considera-se o desenvolvimento
    do software em ciclos iterativos onde uma
    pequena porção dos requisitos passa por todas as
    etapas de desenvolvimento como em um modelo
    cascata.
   Ao final de cada ciclo de iteração têm-se uma
    nova versão do software, a qual será
    incrementada a cada novo ciclo que ocorrer.
RUP (Rational Unified Process)
O RUP é estruturado em duas dimensões:
 Eixo X -Tempo: divisão do ciclo de vida em
 fases e iterações, mostra os aspectos do ciclo de
 vida do processo à medida que se desenvolve.
 Eixo Y - Componentes de processo:
 produção de um conjunto específico de artefatos
 (produtos) com atividades bem definidas.
RUP (Rational Unified Process)
Linguagem
   Notação com sintaxe e semântica bem
    definidas
       com representação gráfica ou textual
   Usada para descrever os artefatos
    gerados durante o desenvolvimento de
    software
   Exemplos: UML, BPMN
Método
   Descrição sistemática de como deve-se
    realizar uma determinada atividade ou
    tarefa
   A descrição é normalmente feita
    através de padrões e guias
   Exemplos: Método para descoberta das
    classes de análise no RUP.
Ferramenta CASE
   Provê suporte computacional a um
    determinado método ou linguagem
   Ambiente de desenvolvimento: conjunto
    de ferramentas integradas (CASE)
   Exemplos: Rational Rose, JBuilder
Metodologia
   Conjunto de métodos + processo
Pontos principais
   Engenharia de software é uma disciplina de
    engenharia que está envolvida com todos os
    aspectos da produção de software
   Produtos de software consistem de programas
    desenvolvidos e documentação associada. Alguns
    atributos   de    qualidade      do     produto são
    manutenibilidade, eficiência e usabilidade
   O processo de software consiste nas atividades que
    são envolvidas no desenvolvimento de produtos de
    software
Pontos principais
    Métodos são formas organizadas de produzir
     software. Eles incluem sugestões para o processo a
     ser seguido, as notações a serem usadas, regras
     que governam as descrições do sistema que são
     produzidas e diretrizes de projeto
    Ferramentas CASE são sistemas de software que
     são projetados para suportar as atividades rotineiras
     no processo de software, como edição de diagramas
     de projeto e verificação de consistência dos
     diagramas
Dúvidas




          36

Aula2 processos sw

  • 1.
    Engenharia de Software Aula 2 – Processos de Software Profa. Dra. Judith Pavón Universidade Salvador – UNIFACS 2012
  • 2.
    Conteúdo  Objetivo da aula  Leitura recomendada  Processos  Modelos de Processos de Desenvolvimento de Software  Processo de Software (genêrico)  Modelos do Ciclo de Vida de Software  Linguagem  Método  Ferramenta CASE  Metodologia  Pontos Principais 2
  • 3.
    Objetivo da aula Oobjetivo desta aula é apresentar os conceitos de processo de software e as características dos processos tradicionais de desenvolvimento de software. 3
  • 4.
    Processos • Conjunto deatividades pré-definidas que levam a um resultado de boa qualidade, nas condições desejadas do projeto (tempo e custo). • Os processos devem ser adequados aos diferentes tipos de sistema a construir. Os modelos de processos de desenvolvimento de software foram originalmente propostos para colocar ordem no caos do desenvolvimento de software. Maturidade do processo - Medida da eficiência global da empresa de software em relação ao processo de desenvolvimento (Ex. CMMI) 4
  • 5.
    Processo  Conjunto de atividades  bem definidas  com responsáveis  com artefatos de entrada e saída  com dependências entre as mesmas e ordem de execução  com modelo de ciclo de vida
  • 6.
    Modelos de Processode Desenvolvimento de Software • Os modelos de processos de desenvolvimento de software têm trazido uma certa dose de estrutura útil para o trabalho de engenharia de software e têm fornecido um roteiro razoavelmente efetivo para as equipes de software. • Quem decide o modelo de processo de desenvolvimento a ser utilizado? Os líderes de equipe ou gerentes adaptam um modelo de processo a suas necessidades e depois o seguem. 6
  • 7.
    Modelos de Processode Desenvolvimento de Software • Por que é importante? Porque fornece estabilidade, controle e organização a uma atividade que pode, se deixada sem controle, tornar-se caótica. • Quais são os passos? O processo dirige uma equipe de software por meio de um arcabouço de atividades guarda-chuva que são organizadas em um fluxo de processo que pode ser linear, incremental ou evolutivo. • Qual é o produto do trabalho? Do ponto de vista de um engenheiro de software, os produtos do trabalho são todos os artefatos que conformam um software. • Como tenho certeza que fiz corretamente? Existem diversos mecanismos de avaliação de processo de software que permitem às organizações determinar a “maturidade” do seu processo. 7
  • 8.
    Processo de Software (genêrico) um framework para as tarefas necessárias para construir software de qualidade Três fases genéricas:  Definição  Desenvolvimento  Manutenção
  • 9.
     Fase deDefinição  Foco: o que  Atividades:  Análise de viabilidade  planejamento do projeto  análise e especificação de requisitos
  • 10.
     Fase de Desenvolvimento  Foco: como  Atividades:  projeto do software  geração de código  teste do software
  • 11.
     Fase deManutenção  Foco: mudanças no produto associadas a:  correção de erros  adaptação por mudanças no ambiente  evolução por mudanças nos requisitos do usuário
  • 12.
    Atividades de Apoio  acompanhamento e controle do projeto  revisões técnicas  garantia da qualidade de software  gerência de configuração  preparação e produção de documentos  gerência de reuso  medições  gerência de risco
  • 13.
    Atividade 3 (entregarna próxima aula) Trabalho em duplas 1. Identificar e listar os principais processos de desenvolvimento de software 2. Fazer um breve resumo das principais características de cada processo listado no item anterior, comentar as fases desse processo e quando é recomendado usar. 3. Escolha um sistema a ser desenvolvido. 4. Defina o processo de desenvolvimento a ser seguido. 13
  • 14.
    Modelos do Ciclode Vida de Software  Cascata  Modelos Iterativos  Espiral  Incremental (ex: do RUP)  ...
  • 15.
  • 16.
  • 17.
    Modelo Cascata  A metodologia de desenvolvimento em cascata foi desenvolvida pela marinha norte-americana nos anos 60 para permitir o desenvolvimento de software militares.  Propõe uma sequência de fases rígidas.  Ao final de cada fase, a equipe de projeto finaliza com uma revisão.  Somente pode ir para a próxima fase, se finalizar a anterior para o sistema como um todo.
  • 18.
    Modelo Cascata –Quando usar  A Metodologia em Cascata funciona bem quando os requisitos do usuário são rígidos e podem ser conhecidos com antecedência.  A metodologia de Desenvolvimento em Cascata pode funcionar bem em ambientes rígidos e fortemente controlados.  No cenário comercial, somente recomenda-se usar este modelo para sistemas pequenos e simples, pois se for um sistema complexo vai demorar muito tempo até mostrar o funcionamento do sistema.
  • 19.
    Prototipação  O modelo de Prototipagem é uma abordagem que visualiza o desenvolvimento de concepções do sistema conforme o andamento do projeto.  Esta metodologia baseia-se na utilização de prototipagem visual ou modelos do sistema final. Estes modelos podem ser simples desenhos, imagens gráficas ou simulações de aplicações.  Esta metodologia é até certo ponto bastante flexível a respeito de mudanças de requisitos; contudo, este processo precisa de muito controle.
  • 20.
  • 21.
    Modelos Iterativos  Requisitos de sistema SEMPRE evoluem durante o decorrer de um projeto. Assim a iteração do processo sempre faz parte do desenvolvimento.  Iterações podem ser aplicadas a quaisquer dos processos de software.  Duas abordagens (relacionadas)  Desenvolvimento espiral  Desenvolvimento incremental
  • 22.
    Desenvolvimento Espiral  Guia o processo de desenvolvimento com base em análise de riscos e planejamento que é realizado durante toda a evolução do desenvolvimento.  Exemplos de riscos: pessoas que abandonam a equipe de desenvolvimento, ferramentas que não podem ser utilizadas, falha em equipamentos usados no desenvolvimento ou que serão utilizados no produto final, etc.  A identificação e o gerenciamento de riscos é hoje uma atividade importantíssima no desenvolvimento de software devido à imaturidade da área e à falta de conhecimento, técnicas e ferramentas adequadas.
  • 23.
    Desenvolvimento Espiral  Guia o processo de desenvolvimento com base em análise de riscos e planejamento que é realizado durante toda a evolução do desenvolvimento.  Exemplos de riscos: pessoas que abandonam a equipe de desenvolvimento, ferramentas que não podem ser utilizadas, falha em equipamentos usados no desenvolvimento ou que serão utilizados no produto final, etc.  A identificação e o gerenciamento de riscos é hoje uma atividade importantíssima no desenvolvimento de software devido à imaturidade da área e à falta de conhecimento, técnicas e ferramentas adequadas.
  • 24.
  • 25.
  • 26.
    Desenvolvimento Incremental  Em vez de entregar o sistema como um todo, o desenvolvimento e a entrega são divididos em incrementos, com cada incremento entregando parte da funcionalidade requerida  Requisitos dos usuários são priorizados e os requisitos de mais alta prioridade são incluídos nas iterações iniciais  Uma vez que o desenvolvimento de um incremento é iniciado, os requisitos são "congelados". Embora os requisitos possam continuar a evoluir para incrementos posteriores.
  • 27.
    RUP (Rational UnifiedProcess)  A metodologia RUP (Rational Unified Process) é um processo que fornece uma metodologia disciplinada de desenvolvimento utilizando um conjunto de ferramentas, modelos e entregáveis.  Nesse modelo, considera-se o desenvolvimento do software em ciclos iterativos onde uma pequena porção dos requisitos passa por todas as etapas de desenvolvimento como em um modelo cascata.  Ao final de cada ciclo de iteração têm-se uma nova versão do software, a qual será incrementada a cada novo ciclo que ocorrer.
  • 28.
    RUP (Rational UnifiedProcess) O RUP é estruturado em duas dimensões:  Eixo X -Tempo: divisão do ciclo de vida em fases e iterações, mostra os aspectos do ciclo de vida do processo à medida que se desenvolve.  Eixo Y - Componentes de processo: produção de um conjunto específico de artefatos (produtos) com atividades bem definidas.
  • 29.
  • 30.
    Linguagem  Notação com sintaxe e semântica bem definidas  com representação gráfica ou textual  Usada para descrever os artefatos gerados durante o desenvolvimento de software  Exemplos: UML, BPMN
  • 31.
    Método  Descrição sistemática de como deve-se realizar uma determinada atividade ou tarefa  A descrição é normalmente feita através de padrões e guias  Exemplos: Método para descoberta das classes de análise no RUP.
  • 32.
    Ferramenta CASE  Provê suporte computacional a um determinado método ou linguagem  Ambiente de desenvolvimento: conjunto de ferramentas integradas (CASE)  Exemplos: Rational Rose, JBuilder
  • 33.
    Metodologia  Conjunto de métodos + processo
  • 34.
    Pontos principais  Engenharia de software é uma disciplina de engenharia que está envolvida com todos os aspectos da produção de software  Produtos de software consistem de programas desenvolvidos e documentação associada. Alguns atributos de qualidade do produto são manutenibilidade, eficiência e usabilidade  O processo de software consiste nas atividades que são envolvidas no desenvolvimento de produtos de software
  • 35.
    Pontos principais  Métodos são formas organizadas de produzir software. Eles incluem sugestões para o processo a ser seguido, as notações a serem usadas, regras que governam as descrições do sistema que são produzidas e diretrizes de projeto  Ferramentas CASE são sistemas de software que são projetados para suportar as atividades rotineiras no processo de software, como edição de diagramas de projeto e verificação de consistência dos diagramas
  • 36.