Desenvolvimento de Software
                          para baixa plataforma

1 Fase Artística
 ●   ou artesanal
 ●   profissionais não especializados
     ○ Engenheiros
     ○ Matemáticos
     ○ Adm. Empresas
 ●   sem metodologia
 ●   sem padrões
 ●   soluções diferentes a cada aplicação
 ●   aplicações caras
 ●   objetivos "simples" e específicos
 ●   computadores fora da rede

2 Fase Engenharia
 ●   problemas aumentavam
 ●   complexidade aumentava
 ●   máquinas em rede
 ●   software caros
 ●   longo tempo de desenvolvimento
 ●   necessário desenvolver
     ○ novos paradígmas
     ○ tecnologias de software
     ○ metodologias
 ●   profissionais
     ○ reviram técnicas antigas
        ■ não funcionavam
 ●   Oritentação a Objetos
     ○ paradigma da computação que une
        funcionalidade e estado no objeto
     ○ MIT em 1950/1960 para ambientes
        de inteligência artificial
     ○ formalmente em 1960 com Simula 67
     ○ anos 70 com Smaltalk da Xerox
     ○ predominante em 1990 com
        ■ Visual FoxPro3
        ■ C++
        ■ Delphi
 ●   Design Pattern
     ○ veio da engenharia e arquitetura (1977)
     ○ livro publicado em 1994
     ○ marca uso de conceitos de outras áreas
 ●   RUP(UML)
     ○ metodologia proprietária pela
        Raional (hoje da IBM)
     ○ surgimento em 95~98
 ●   CASE 1989~1995
     ○ Computer Aided Software Engineering
○  x CAD
     ○ cojunto de ferramentas e métodos
     ○ criar sistemas
        ■ alta qualidade
        ■ sem erros
        ■ fácil manutenção
        ■ sem depreciação
     ○ Geradores de Código
        ■ podiam criar produtos
 ●   Framework
     ○ Enterprise JavaBeans
        ■ EJB 1.0 em 1998
        ■ J2EE
           ● especificação
           ● API muito complexa
     ○ .Net em 2000
     ○ Rails, Django, Sinatra


3 Fase Arquitetura
 ●   problemas
     ○ mais relacionados a negócio
     ○ alta volatilidade de regras
     ○ custo do software
     ○ tempo de desenvolvimento
     ○ tempo de resposta
 ●   uso do embasamento da fase Engenharia
 ●   uso de Frameworks
 ●   RAD
     ○ modelo de processos de desenvolvimento
        iterativo e incremental de ciclo de vida
        extremamente curso (60 a 90 dias)
     ○ lança a idéia de planejamento
        mínimo e rápida prototipação
     ○ 1980 - modelo desenvolvimento espiral
        Barry Boehm
     ○ 1982 - modelo desenvolvimento evolucionário
        Tom Glib
     ○ RIPP
        ■ Rapid Interative Production Prototyping
     ○ melhor fase 1990
     ○ MSF
        ■ Microsoft Solution Framework
        ■ 1994
        ■ boas práticas
        ■ Microsoft usa Cascata/espiral
 ●   Agile
     ○ conjunto de métodos de
        desenvolvimento criado
        como resposta ao uso
        indiscriminado do
        CMMI, RUP, PMBOK
■  processos lentos e gordos
    ■ grande "Lead Time"
    ■ muito Work in Process
○   framework conceitual
○   Agile Manifesto em 2001
○   DSDM
    ■ Dynamic System Development Method
    ■ 1994
    ■ primariamente par disciplinar o RAD
    ■ 2007 ganha autonomia
    ■ baseado em limitação
       ● tempo
       ● recurso
    ■ JAD
       ● Joint Application Design
       ● processos para colega de requerimentos
       ● o usuário participa do desenvolvimento
       ● JAD workshops
          ○ IT
          ○ knowledge workers
○   AUP
    ■ Agile Unified Process
    ■ RUP para Agile
    ■ desenvolvido pela IBM
○   Agile Modeling
    ■ suporte a outros métodos
    ■ diminui a falta de modelagem
    ■ proporcional alguma documentação
○   Crystal Clear
    ■ metodologia "leve"
    ■ projetos não críticos
    ■ foca eficiência e habilidade
    ■ foca pessoas e não processos e ferramentas
○   XP
    ■ Extreme Programming
    ■ 1999
    ■ foco
       ● qualidade
       ● responsividade na mudança de requerimentos
    ■ TDD
       ● Test Driven Development
       ● Kant Beck 2003
       ● técnica baseada no ciclo curto
          ○ caso de teste
          ○ teste
          ○ código
          ○ teste
          ○ refatora
    ■ BDD
       ● Behavior Driven Development
       ● resposta ao TDD
       ● Dean North 2003
●   técnica insentiva colaboração
              ○ desenvolvedores
              ○ QA
              ○ negócio
              ○ não técnicos
          ●   o comportamento determina o teste
          ●   primeiro framework - JBehave
              ○ java
          ●   RBehave
              ○ Ruby 2007
              ○ incorporou ao RSpec
              ○ livro de RSpec e Cocumber em 2010
          ●   guiado por valores de negócio
              ○ Outside-in Development
     ○ FDD
       ■ Feature Driven Development
       ■ 2002
       ■ processo baseado em "melhores práticas"
       ■ foca
          ● funcionalidade de valor
             para o cliente (feature)
          ● baseado em modelo
     ○ Scrum
       ■ "restart" de partica rugby
          após pequena infração
       ■ mais voltado a gerenciamento
       ■ novos paradígmas para gerenciamento
       ■ empirical process control
       ■ decisões tomadas pela equipe
     ○ Lean Software Development
       ■ derivado
          ● Lean Manugacturing
          ● Lean ID
       ■ tradução para princípios e práticas
 ●   2080
     ○ Software Concept
     ○ 2005
     ○ "inversão" do princípio de pareto
     ○ princípios
       ■ foco em funcionalidade
       ■ construção ou compra
       ■ prototipação
       ■ técinicas agile


4 Lean Manufactoring
 ●   Manufatura enxuta
 ●   sistema Toyota de produção (TPS) 1990
 ●   filosofia de gestão
 ●   totalmente focado na criação de VALOR
     para o cliente final
 ●   valor é qualquer "coisa" que o
clientes esteja pronto para pagar
●   na otimização busca-se preservar o
    valor com menos trabalho
●   estratégia na eliminação de disperdícios
●   eliminando disperdício melhora
    qualidade, tempo e custo
●   ferramentas
    ○ processo contínuo
    ○ análise do fluxo (kanban)
    ○ produção por pull (kanban)
    ○ melhoramente contínuo (kaizen)
    ○ qualidade total
    ○ flexibilidade
●   tipos desperdícios
    ○ mura
        ■ irregularidade
    ○ muda
        ■ supéfulo
        ■ desnecessário
    ○ muri
        ■ impossível
        ■ muito difícil
●   classificação
    ○ Transportation
        ■ riscos
        ■ danos
        ■ perdas
        ■ custo
        ■ não transforma o produto
    ○ Inventory
        ■ de materiais
        ■ de trabalho em processo
        ■ de produto acabado
    ○ Motion
        ■ danos a quem cria o produto
        ■ desgaste de equipamentos
        ■ stress de funcionários
        ■ acidentes
    ○ Waiting
        ■ produto parado
    ○ Over-processing
        ■ além do pedido pelo cliente
        ■ melhor que o necessário
        ■ mais precisa que o necessário
    ○ Over-production
        ■ aumenta
           ● inventory
           ● waiting
           ● motion
           ● etc
    ○ Defects
        ■ retrabalho
5 Lean IT
 ●   extensões dos princípios Lean
     para o desenvolvimento
     e gerenciamento de IT
 ●   basea-se na eliminação de desperdícios
 ●   desperdício
     ○ trabalho que não adiciona valor
     ○ nova classe
        ■ Employee Knowledge
           ● falha em captar
              novas idéias
           ● retenção do conhecimento
 ●   implementação incremental
 ●   complementar a uma metodologia

6 LSD
 ●   Lean Software Development
 ●   livro de Mary Poppendieck
     e Tom Poppendieck
 ●   2003
 ●   7 princípios Lean
     ○ Eliminar Desperdícios
     ○ Aumentar conhecimento
     ○ Postergar definições o máximo
     ○ Entregar o mais rápido possível
     ○ Fortalecer a equipe
     ○ Integridade implicita
         ■ apresentação
         ■ entrega
         ■ implementação
         ■ acesso
         ■ facilidade de uso
         ■ preço
         ■ solução de problemas
     ○ Visão do todo
         ■ desenvolvimento por pedações
         ■ valor pelo todo
         ■ Think big, act small,
            fail fast; learn rapidly
 ●   22 ferramentas
     ○ Reconhecer disperdícios
     ○ Aprender a reduzir disperdícios
     ○ Feedback
     ○ Iterações
     ○ Sincronização
     ○ Definir desenvolvimento básico
     ○ Criar opções
     ○ Definir Momento último para definição
     ○ Tomada de decisões
     ○ Sistema Puxado
○   Teoria do Enfileiramento
○   Custo de atraso
○   Auto-determinação
○   Motivação
○   Liderança
○   Expertise
○   Integridade percebida
○   Integridade conceitual
○   Refactoring
○   Teste
○   Medições (instrumentação)
○   Contratos

Desenvolvimento de Software para Baixa Plataforma

  • 1.
    Desenvolvimento de Software para baixa plataforma 1 Fase Artística ● ou artesanal ● profissionais não especializados ○ Engenheiros ○ Matemáticos ○ Adm. Empresas ● sem metodologia ● sem padrões ● soluções diferentes a cada aplicação ● aplicações caras ● objetivos "simples" e específicos ● computadores fora da rede 2 Fase Engenharia ● problemas aumentavam ● complexidade aumentava ● máquinas em rede ● software caros ● longo tempo de desenvolvimento ● necessário desenvolver ○ novos paradígmas ○ tecnologias de software ○ metodologias ● profissionais ○ reviram técnicas antigas ■ não funcionavam ● Oritentação a Objetos ○ paradigma da computação que une funcionalidade e estado no objeto ○ MIT em 1950/1960 para ambientes de inteligência artificial ○ formalmente em 1960 com Simula 67 ○ anos 70 com Smaltalk da Xerox ○ predominante em 1990 com ■ Visual FoxPro3 ■ C++ ■ Delphi ● Design Pattern ○ veio da engenharia e arquitetura (1977) ○ livro publicado em 1994 ○ marca uso de conceitos de outras áreas ● RUP(UML) ○ metodologia proprietária pela Raional (hoje da IBM) ○ surgimento em 95~98 ● CASE 1989~1995 ○ Computer Aided Software Engineering
  • 2.
    ○ xCAD ○ cojunto de ferramentas e métodos ○ criar sistemas ■ alta qualidade ■ sem erros ■ fácil manutenção ■ sem depreciação ○ Geradores de Código ■ podiam criar produtos ● Framework ○ Enterprise JavaBeans ■ EJB 1.0 em 1998 ■ J2EE ● especificação ● API muito complexa ○ .Net em 2000 ○ Rails, Django, Sinatra 3 Fase Arquitetura ● problemas ○ mais relacionados a negócio ○ alta volatilidade de regras ○ custo do software ○ tempo de desenvolvimento ○ tempo de resposta ● uso do embasamento da fase Engenharia ● uso de Frameworks ● RAD ○ modelo de processos de desenvolvimento iterativo e incremental de ciclo de vida extremamente curso (60 a 90 dias) ○ lança a idéia de planejamento mínimo e rápida prototipação ○ 1980 - modelo desenvolvimento espiral Barry Boehm ○ 1982 - modelo desenvolvimento evolucionário Tom Glib ○ RIPP ■ Rapid Interative Production Prototyping ○ melhor fase 1990 ○ MSF ■ Microsoft Solution Framework ■ 1994 ■ boas práticas ■ Microsoft usa Cascata/espiral ● Agile ○ conjunto de métodos de desenvolvimento criado como resposta ao uso indiscriminado do CMMI, RUP, PMBOK
  • 3.
    ■ processoslentos e gordos ■ grande "Lead Time" ■ muito Work in Process ○ framework conceitual ○ Agile Manifesto em 2001 ○ DSDM ■ Dynamic System Development Method ■ 1994 ■ primariamente par disciplinar o RAD ■ 2007 ganha autonomia ■ baseado em limitação ● tempo ● recurso ■ JAD ● Joint Application Design ● processos para colega de requerimentos ● o usuário participa do desenvolvimento ● JAD workshops ○ IT ○ knowledge workers ○ AUP ■ Agile Unified Process ■ RUP para Agile ■ desenvolvido pela IBM ○ Agile Modeling ■ suporte a outros métodos ■ diminui a falta de modelagem ■ proporcional alguma documentação ○ Crystal Clear ■ metodologia "leve" ■ projetos não críticos ■ foca eficiência e habilidade ■ foca pessoas e não processos e ferramentas ○ XP ■ Extreme Programming ■ 1999 ■ foco ● qualidade ● responsividade na mudança de requerimentos ■ TDD ● Test Driven Development ● Kant Beck 2003 ● técnica baseada no ciclo curto ○ caso de teste ○ teste ○ código ○ teste ○ refatora ■ BDD ● Behavior Driven Development ● resposta ao TDD ● Dean North 2003
  • 4.
    técnica insentiva colaboração ○ desenvolvedores ○ QA ○ negócio ○ não técnicos ● o comportamento determina o teste ● primeiro framework - JBehave ○ java ● RBehave ○ Ruby 2007 ○ incorporou ao RSpec ○ livro de RSpec e Cocumber em 2010 ● guiado por valores de negócio ○ Outside-in Development ○ FDD ■ Feature Driven Development ■ 2002 ■ processo baseado em "melhores práticas" ■ foca ● funcionalidade de valor para o cliente (feature) ● baseado em modelo ○ Scrum ■ "restart" de partica rugby após pequena infração ■ mais voltado a gerenciamento ■ novos paradígmas para gerenciamento ■ empirical process control ■ decisões tomadas pela equipe ○ Lean Software Development ■ derivado ● Lean Manugacturing ● Lean ID ■ tradução para princípios e práticas ● 2080 ○ Software Concept ○ 2005 ○ "inversão" do princípio de pareto ○ princípios ■ foco em funcionalidade ■ construção ou compra ■ prototipação ■ técinicas agile 4 Lean Manufactoring ● Manufatura enxuta ● sistema Toyota de produção (TPS) 1990 ● filosofia de gestão ● totalmente focado na criação de VALOR para o cliente final ● valor é qualquer "coisa" que o
  • 5.
    clientes esteja prontopara pagar ● na otimização busca-se preservar o valor com menos trabalho ● estratégia na eliminação de disperdícios ● eliminando disperdício melhora qualidade, tempo e custo ● ferramentas ○ processo contínuo ○ análise do fluxo (kanban) ○ produção por pull (kanban) ○ melhoramente contínuo (kaizen) ○ qualidade total ○ flexibilidade ● tipos desperdícios ○ mura ■ irregularidade ○ muda ■ supéfulo ■ desnecessário ○ muri ■ impossível ■ muito difícil ● classificação ○ Transportation ■ riscos ■ danos ■ perdas ■ custo ■ não transforma o produto ○ Inventory ■ de materiais ■ de trabalho em processo ■ de produto acabado ○ Motion ■ danos a quem cria o produto ■ desgaste de equipamentos ■ stress de funcionários ■ acidentes ○ Waiting ■ produto parado ○ Over-processing ■ além do pedido pelo cliente ■ melhor que o necessário ■ mais precisa que o necessário ○ Over-production ■ aumenta ● inventory ● waiting ● motion ● etc ○ Defects ■ retrabalho
  • 6.
    5 Lean IT ● extensões dos princípios Lean para o desenvolvimento e gerenciamento de IT ● basea-se na eliminação de desperdícios ● desperdício ○ trabalho que não adiciona valor ○ nova classe ■ Employee Knowledge ● falha em captar novas idéias ● retenção do conhecimento ● implementação incremental ● complementar a uma metodologia 6 LSD ● Lean Software Development ● livro de Mary Poppendieck e Tom Poppendieck ● 2003 ● 7 princípios Lean ○ Eliminar Desperdícios ○ Aumentar conhecimento ○ Postergar definições o máximo ○ Entregar o mais rápido possível ○ Fortalecer a equipe ○ Integridade implicita ■ apresentação ■ entrega ■ implementação ■ acesso ■ facilidade de uso ■ preço ■ solução de problemas ○ Visão do todo ■ desenvolvimento por pedações ■ valor pelo todo ■ Think big, act small, fail fast; learn rapidly ● 22 ferramentas ○ Reconhecer disperdícios ○ Aprender a reduzir disperdícios ○ Feedback ○ Iterações ○ Sincronização ○ Definir desenvolvimento básico ○ Criar opções ○ Definir Momento último para definição ○ Tomada de decisões ○ Sistema Puxado
  • 7.
    Teoria do Enfileiramento ○ Custo de atraso ○ Auto-determinação ○ Motivação ○ Liderança ○ Expertise ○ Integridade percebida ○ Integridade conceitual ○ Refactoring ○ Teste ○ Medições (instrumentação) ○ Contratos