SlideShare una empresa de Scribd logo
1 de 44
Descargar para leer sin conexión
Construção de Software
    Curso Engenharia de Software
 http://engenhariadesoftware.inf.br
      Fábio Nogueira de Lucena
Referência
• Code Complete: A Practical Handbook of
  Software Construction, Steve McConnell
  2nd edition, Microsoft Press, 2004
• HOME PAGE (apoio ao livro)
  http://www.cc2e.com/
• IMPORTANTE: o conteúdo destes
  slides foi obtido, em sua maior parte,
  do livro supracitado. Nossos
  agradecimentos e a devida citação.
Construção de Software?
 • ISO/IEC 12207:2008
   identifica 43 processos (aquisição,
   fornecimento, desenvolvimento, operação,
   manutenção e retirada de operação de
   produtos de software).

 • Um deles: software construction process
 • Objetivo: produzir unidades de software
   executáveis que adequadamente refletem o
   projeto de software (software design).
Quais as atividades?
• Codificação (programação)
• Depuração (debugging)
• Projeto detalhado (low-level design)
• Testes unitários (unit tests)
• Testes de integração
• Integração
“Sinônimos”
• Codificação (muitas vezes entendida
  como a mera transcrição de projeto
  existente para uma linguagem de
  programação e, construção, envolve
  criatividade e critérios)
• Programação
  (mais adequado)
Alguns detalhes
• Verificar se pré-requisitos estão prontos
• Determinar como o código será testado
• Projetar e escrever classes e rotinas
• Selecionar estruturas de controle
• Realizar testes de unidade
• Reorganizar o código, formatá-lo,
  incluir comentários, ...
O que não é?
• Gerência do projeto
• Desenvolvimento dos requisitos
• Arquitetura de software
• Projeto da interface com o usuário
• Testes de sistema
• Manutenção
É importante?
• Extensa (30% a 80% do tempo total)
• Atividade central (após requisitos e
  arquitetura, antes dos testes de sistema)
• Foco na construção pode aumentar
  produtividade individual (variação de
  um fator de 10 a 20)
• Em alguns casos, o software é tudo
• Será executada garantidamente
Produtos da CS
• ISO/IEC 12207:2008
 • Critérios de verificação são definidos para todas as
   unidades de software com base nos requisitos

 • Unidades de software definidas pelo projeto são
   produzidas

 • Consistência e rastreabilidade são estabelecidas entre
   unidades de software, requisitos e projeto

 • Verificação das unidades de software conforme os
   requisitos e o projeto é realizada
Metáforas
Compreendendo o Desenvolvimento de Software
Metáfora (Aurélio)

• “transferência de uma palavra para um
  âmbito semântico que não é o do objeto
  que ela designa”
• Por exemplo, usar “raposa” para
  designar uma pessoa “astuta”.
Metáforas
• David Gries: “escrever software é uma
  ciência”
• Donald Knuth: “é uma arte”
• Watts Humphrey: “é um processo”
• Plauger e Kent Beck: “é como dirigir
  um carro”
• Alistair Cockburn: “é um jogo”, ...
Outras
• Escrever código (como uma carta?)
  (ignora planejamento e projeto)
• Cultivar uma planta
  (ignora que você não o clima tem
  controle)
• Cultura de ostras (incremento)
• Construção de software (edificação)
  (uma pipa é diferente de 1000 pipas)
Por fim,...
• Metáforas apenas facilitam a compreensão
  do processo de desenvolvimento de
  software relacionando-o com atividades
  conhecidas.
• Tratar CS como construção civil, ilustra a
  diferença entre grandes e pequenos
  projetos.
• Não são mutuamente exclusivas, combine-
  as.
Pré-requisitos
Meça duas vezes, corte uma
Preparação
• Deve ser adequada para as
  necessidades do projeto e ocorrer antes
  do início da construção
• Diálogo absurdo: “Quero uma casa
  aqui, diz o cliente. O mestre de obras
  diz: claro, quando terminar eu aviso e
  inicia a construção.”
Qualidade

• Qualidade no fim:
  Vamos testar
• Qualidade no meio:
  Vamos construir com cuidado
• Qualidade no início (preparação):
  Pleneja e projeta um produto de qualidade
Por que preparar?



• Reduzir riscos
Apelo aos dados
Custo de correção
• Quanto mais tarde a detecção de
  defeito, mais cara é a correção
Preparação depende do projeto

  • Diferentes projetos, diferentes
    preparações
  • Projeto simples, menos preparação
    (planejamento iterativo)
  • Projeto de software crítico (vidas em
    jogo), preparação extensiva
    (planejamento extensivo)
Quais os pré-requisitos?


 • Definição do problema
 • Requisitos
 • Arquitetura de Software
Definição do problema

• Problema:
  Coordenadores de curso têm dificuldades
  para alterar o horário de disciplinas
• É comum:
  Acrescentar tela similar ao Google Calendar
  (parece solução e não um problema)
Requisitos
• Descrevem em detalhes o que um software
  deve fazer
• Nomes associados:
 • Análise de Requisitos

 • Desenvolvimento de requisitos

 • Definição de requisitos

 • Especificação funcional, ...
Importância
• Custos (para corrigir defeitos na
  especificação)
• Segundo Steve McConnell:
  “Especificar requisitos corretamente é o
  segredo para o sucesso de um projeto, talvez
  ainda mais importante do que as técnicas de
  construção eficientes”.
Requisitos são estáveis?
 • Mesmo após a assinatura do cliente em
   uma especificação de requisitos, eles
   irão mudar
 • Quanto de mudança é normal?
   Estudos da IBM indicam 25% de
   mudanças nos requisitos, responsáveis
   por 70 a 85% das alterações em um
   projeto típico
Requisitos durante a CS
 • Avalie a qualidade dos requisitos
   (lista de verificação)

 • Certifique-se de que os custos das alterações nos
   requisitos são conhecidos

 • Estabeleça um procedimento para controle de
   alteração

 • Use estratégia compatível com alterações

 • Cancele o projeto

 • Considere o efeito comercial do projeto
Tarefa

• Ambiente-se com a Lista de Verificação
  de Requisitos (Requirements Checklist) no
  portal de apoio ao livro Code Complete
• Portal
  http://www.cc2e.com
Arquitetura
• Etapa de alto nível de projeto de
  software (software design)
• É a estrutura que irá acomodar as
  partes mais detalhadas do projeto de
  software (software design)
• Outros termos: arquitetura de sistema e
  high-level design
Por que arquitetura?
• Fornece orientação para programadores
• Desmembra o trabalho
  (várias equipes trabalharem
  independentemente)
• Arquitetura ruim torna a construção
  inviável
• Custo (para correção)
Arquitetura inclui:
• Visão geral do sistema   • Interoperabilidade
  (grandes blocos)         • Internacionalização/
• Classes principais         localização
• Projeto dos dados        • Entrada/saída
• Regras de negócio        • Processamento de
• Projeto de interface       erros
  com o usuário            • Tolerância a falhas
• Gerenciamento de         • Praticabilidade
  recursos                 • Robustez
• Segurança                • Comprar/construir
• Desempenho               • Reutilização
• Extensibilidade          • Estratégia de alteração
Tarefa

• Ambiente-se com a Lista de Verificação
  de Arquitetura (Architecture) no portal
  de apoio ao livro Code Complete
• Portal
  http://www.cc2e.com
Quanto de pré-requisitos?
  • Depende do projeto (acostume-se a
    considerar o contexto)
  • Em geral, 10 a 20% do esforço e 20 a
    30% do tempo dedicado ao
    planejamento prévio, requisitos e
    arquitetura
    (não inclui projeto detalhado, parte de
    CS)
Não esqueça
• Alguns projetos são mais sequenciais, outros
  mais iterativos

• Uma definição inadequada do problema pode
  levar à solução do problema errado durante a
  construção

• Não inicie a construção sem que os requisitos
  estejam corretos (custo de correção)

• Se a arquitetura estiver errada, você estará
  resolvendo o problema certo, mas de maneira
  errada
Principais decisões
  de Construção de Software
Principais decisões


• Linguagem de Programação
• Convenções de programação
• Onda tecnológica
Linguagem de programação



TIOBE
index
Um tratamento + formal

 • Lutz Prechelt, "An Empirical
   Comparison of Seven Programming
   Languages," Computer, vol. 33, no.
   10, pp. 23-29, Oct. 2000, doi:
   10.1109/2.876288
Algumas...
• Assembly. Linguagem de baixo nível,
  formada por mnemônicos para
  linguagens de máquina.
• Fortran. Primeira linguagem de alto
  nível e ainda “imbatível” em cálculos
• SQL. Linguagem padrão de fato para
  consultas e atualizações em bancos de
  dados (linguagem declarativa)
Linguagem é religião?

• Não.
• Pode ser que exista opção de escolha.
• Em geral, o projeto dita o uso de
  linguagens mais apropriadas
Convenções de Programação


  • Code Conventions for the Java
    Programming Language
    http://java.sun.com/docs/codeconv/
Onda tecnológica
• Programas baseados em caracteres, depois
  interfaces gráficas, depois web, ...
• Ferramentas para o desenvolvimento destes
  programas
• (Sugestão) David Gries distingue
  programação em e para uma linguagem.
  Quem programa em limita-se às construções
  da linguagem. Quem programa para cria
  ideias e depois as converte para a linguagem
  alvo.
Considerações finais


• Toda linguagem possui vantagens e
  desvantagens
• Estabeleça convenções de programação
Tarefa

• Ambiente-se com a Lista de Verificação
  de Decisões de Construção
  (Construction Decisions) no portal de
  apoio ao livro Code Complete
• Portal
  http://www.cc2e.com

Más contenido relacionado

La actualidad más candente

Modelos de Processo de Software Parte 1
Modelos de Processo de Software Parte 1Modelos de Processo de Software Parte 1
Modelos de Processo de Software Parte 1Elaine Cecília Gatto
 
Curso de Introdução a Engenharia de Software - CJR/UnB - Aula 1
Curso de Introdução a Engenharia de Software - CJR/UnB - Aula 1Curso de Introdução a Engenharia de Software - CJR/UnB - Aula 1
Curso de Introdução a Engenharia de Software - CJR/UnB - Aula 1Renato Leal
 
Introdução a engenharia de software aula 02
Introdução a engenharia de software   aula 02Introdução a engenharia de software   aula 02
Introdução a engenharia de software aula 02Franklin Matos Correia
 
Modelos de Processo de Software Parte 2
Modelos de Processo de Software Parte 2Modelos de Processo de Software Parte 2
Modelos de Processo de Software Parte 2Elaine Cecília Gatto
 
Qualidade de Software com Microsoft Visual Studio
Qualidade de Software com Microsoft Visual StudioQualidade de Software com Microsoft Visual Studio
Qualidade de Software com Microsoft Visual StudioAdriano Bertucci
 
Ferramentas de planejamento
Ferramentas de planejamentoFerramentas de planejamento
Ferramentas de planejamentoOtavio Siqueira
 
Modelos de Processo de Software Parte 4
Modelos de Processo de Software Parte 4Modelos de Processo de Software Parte 4
Modelos de Processo de Software Parte 4Elaine Cecília Gatto
 
Modelos de Processo de Software Parte 3
Modelos de Processo de Software Parte 3Modelos de Processo de Software Parte 3
Modelos de Processo de Software Parte 3Elaine Cecília Gatto
 
Introdução à Engenharia de Testes de Software
Introdução à Engenharia de Testes de SoftwareIntrodução à Engenharia de Testes de Software
Introdução à Engenharia de Testes de SoftwareCloves da Rocha
 

La actualidad más candente (20)

Curso Scrum - Turma Visie
Curso Scrum - Turma VisieCurso Scrum - Turma Visie
Curso Scrum - Turma Visie
 
Documento de requisitos
Documento de requisitosDocumento de requisitos
Documento de requisitos
 
Modelos de Processo de Software Parte 1
Modelos de Processo de Software Parte 1Modelos de Processo de Software Parte 1
Modelos de Processo de Software Parte 1
 
Fundamentos da Engenharia de Software
Fundamentos da Engenharia de SoftwareFundamentos da Engenharia de Software
Fundamentos da Engenharia de Software
 
Aula 3 - Engenharia de Software
Aula 3 - Engenharia de SoftwareAula 3 - Engenharia de Software
Aula 3 - Engenharia de Software
 
Curso de Introdução a Engenharia de Software - CJR/UnB - Aula 1
Curso de Introdução a Engenharia de Software - CJR/UnB - Aula 1Curso de Introdução a Engenharia de Software - CJR/UnB - Aula 1
Curso de Introdução a Engenharia de Software - CJR/UnB - Aula 1
 
Introdução a engenharia de software aula 02
Introdução a engenharia de software   aula 02Introdução a engenharia de software   aula 02
Introdução a engenharia de software aula 02
 
Crise de software2
Crise de software2Crise de software2
Crise de software2
 
Engenharia de Software Aula 1 - Intro
Engenharia de Software Aula 1 - IntroEngenharia de Software Aula 1 - Intro
Engenharia de Software Aula 1 - Intro
 
Modelos de Processo de Software Parte 2
Modelos de Processo de Software Parte 2Modelos de Processo de Software Parte 2
Modelos de Processo de Software Parte 2
 
Qualidade de Software com Microsoft Visual Studio
Qualidade de Software com Microsoft Visual StudioQualidade de Software com Microsoft Visual Studio
Qualidade de Software com Microsoft Visual Studio
 
Ferramentas de planejamento
Ferramentas de planejamentoFerramentas de planejamento
Ferramentas de planejamento
 
DSDM
DSDMDSDM
DSDM
 
Aula 2 - Processos de Software
Aula 2 - Processos de SoftwareAula 2 - Processos de Software
Aula 2 - Processos de Software
 
Modelos de Processo de Software Parte 4
Modelos de Processo de Software Parte 4Modelos de Processo de Software Parte 4
Modelos de Processo de Software Parte 4
 
Analise aula2
Analise aula2Analise aula2
Analise aula2
 
Modelos de Processo de Software Parte 3
Modelos de Processo de Software Parte 3Modelos de Processo de Software Parte 3
Modelos de Processo de Software Parte 3
 
Introdução à Engenharia de Testes de Software
Introdução à Engenharia de Testes de SoftwareIntrodução à Engenharia de Testes de Software
Introdução à Engenharia de Testes de Software
 
Aula Gestão de Projetos
Aula Gestão de ProjetosAula Gestão de Projetos
Aula Gestão de Projetos
 
Es conceitos
Es conceitosEs conceitos
Es conceitos
 

Destacado (18)

Javafx Avancado
Javafx AvancadoJavafx Avancado
Javafx Avancado
 
servlet-requisicoes
servlet-requisicoesservlet-requisicoes
servlet-requisicoes
 
MDB
MDBMDB
MDB
 
Javafx Gui
Javafx GuiJavafx Gui
Javafx Gui
 
Como desenvolver-software
Como desenvolver-softwareComo desenvolver-software
Como desenvolver-software
 
Orientação a Objetos (3)
Orientação a Objetos (3)Orientação a Objetos (3)
Orientação a Objetos (3)
 
Orientação a Objetos (1)
Orientação a Objetos (1)Orientação a Objetos (1)
Orientação a Objetos (1)
 
servlet-respostas
servlet-respostasservlet-respostas
servlet-respostas
 
Visão Geral de EJB 3.0
Visão Geral de EJB 3.0Visão Geral de EJB 3.0
Visão Geral de EJB 3.0
 
Cs 2
Cs 2Cs 2
Cs 2
 
Introducao
IntroducaoIntroducao
Introducao
 
EJB
EJBEJB
EJB
 
jsp-intro
jsp-introjsp-intro
jsp-intro
 
Javafx Introdução
Javafx IntroduçãoJavafx Introdução
Javafx Introdução
 
Orientação a Objetos (2)
Orientação a Objetos (2)Orientação a Objetos (2)
Orientação a Objetos (2)
 
Uml
UmlUml
Uml
 
Especificação por meio de exemplos (BDD, testes de aceitação, ...)
Especificação por meio de exemplos (BDD, testes de aceitação, ...)Especificação por meio de exemplos (BDD, testes de aceitação, ...)
Especificação por meio de exemplos (BDD, testes de aceitação, ...)
 
engenharia-de-requisitos
engenharia-de-requisitosengenharia-de-requisitos
engenharia-de-requisitos
 

Similar a Cs 1

Gestão de Projeto de Desenvolvimento Agil(XP)
Gestão de Projeto de Desenvolvimento Agil(XP)Gestão de Projeto de Desenvolvimento Agil(XP)
Gestão de Projeto de Desenvolvimento Agil(XP)elliando dias
 
Introdução ao Windows Azure - Sessão 1 (mais teórica)
Introdução ao Windows Azure - Sessão 1 (mais teórica)Introdução ao Windows Azure - Sessão 1 (mais teórica)
Introdução ao Windows Azure - Sessão 1 (mais teórica)Giovanni Bassi
 
Gerenciamento de Projeto para Desenvolvimento de Sistema
Gerenciamento de Projeto para Desenvolvimento de SistemaGerenciamento de Projeto para Desenvolvimento de Sistema
Gerenciamento de Projeto para Desenvolvimento de Sistemaelliando dias
 
Paradigmas De Engenharia De Software
Paradigmas De Engenharia De SoftwareParadigmas De Engenharia De Software
Paradigmas De Engenharia De SoftwareRobson Silva Espig
 
SonarQube
SonarQubeSonarQube
SonarQubeCDS
 
Evolução das arquiteturas para aplicações Web
Evolução das arquiteturas para aplicações WebEvolução das arquiteturas para aplicações Web
Evolução das arquiteturas para aplicações WebBreno Vitorino
 
Engenharia Requisitos - Método RON
Engenharia Requisitos - Método RONEngenharia Requisitos - Método RON
Engenharia Requisitos - Método RONEduardo Castro
 
Introdução ao Asp.Net Mvc
Introdução ao Asp.Net MvcIntrodução ao Asp.Net Mvc
Introdução ao Asp.Net MvcGiovanni Bassi
 
Software Configuration Management Problemas e Soluções
Software Configuration Management Problemas e SoluçõesSoftware Configuration Management Problemas e Soluções
Software Configuration Management Problemas e Soluçõeselliando dias
 
Práticas de Desenvolvimento de Software
Práticas de Desenvolvimento de SoftwarePráticas de Desenvolvimento de Software
Práticas de Desenvolvimento de SoftwareTiago Barros
 
IC Cuidando de Sistemas Doentes
IC Cuidando de Sistemas DoentesIC Cuidando de Sistemas Doentes
IC Cuidando de Sistemas DoentesJefferson Moreira
 
Prototipagem Em Papel
Prototipagem Em PapelPrototipagem Em Papel
Prototipagem Em Papelelliando dias
 
Utilização da Engenharia de Requisitos: Onde, quando e como utilizar
Utilização da Engenharia de Requisitos: Onde, quando e como utilizarUtilização da Engenharia de Requisitos: Onde, quando e como utilizar
Utilização da Engenharia de Requisitos: Onde, quando e como utilizarOpencadd Advanced Technology
 
Aula 1 introdução à engenharia de software1 (1)
Aula 1   introdução à engenharia de software1 (1)Aula 1   introdução à engenharia de software1 (1)
Aula 1 introdução à engenharia de software1 (1)Tiago Vizoto
 
02 Introdução à engenharia de software - conceitos fundamentais
02 Introdução à engenharia de software - conceitos fundamentais02 Introdução à engenharia de software - conceitos fundamentais
02 Introdução à engenharia de software - conceitos fundamentaisWaldemar Roberti
 
Netbeans 6.0: Aplicações Java Desktop
Netbeans 6.0: Aplicações Java DesktopNetbeans 6.0: Aplicações Java Desktop
Netbeans 6.0: Aplicações Java Desktopelliando dias
 

Similar a Cs 1 (20)

Gestão de Projeto de Desenvolvimento Agil(XP)
Gestão de Projeto de Desenvolvimento Agil(XP)Gestão de Projeto de Desenvolvimento Agil(XP)
Gestão de Projeto de Desenvolvimento Agil(XP)
 
Introdução ao Windows Azure - Sessão 1 (mais teórica)
Introdução ao Windows Azure - Sessão 1 (mais teórica)Introdução ao Windows Azure - Sessão 1 (mais teórica)
Introdução ao Windows Azure - Sessão 1 (mais teórica)
 
Gerenciamento de Projeto para Desenvolvimento de Sistema
Gerenciamento de Projeto para Desenvolvimento de SistemaGerenciamento de Projeto para Desenvolvimento de Sistema
Gerenciamento de Projeto para Desenvolvimento de Sistema
 
Paradigmas De Engenharia De Software
Paradigmas De Engenharia De SoftwareParadigmas De Engenharia De Software
Paradigmas De Engenharia De Software
 
Aula 02
Aula 02Aula 02
Aula 02
 
Aula1 dia 22 02 2022.pdf
Aula1  dia 22 02 2022.pdfAula1  dia 22 02 2022.pdf
Aula1 dia 22 02 2022.pdf
 
SonarQube
SonarQubeSonarQube
SonarQube
 
Evolução das arquiteturas para aplicações Web
Evolução das arquiteturas para aplicações WebEvolução das arquiteturas para aplicações Web
Evolução das arquiteturas para aplicações Web
 
Engenharia Requisitos - Método RON
Engenharia Requisitos - Método RONEngenharia Requisitos - Método RON
Engenharia Requisitos - Método RON
 
Introdução ao Asp.Net Mvc
Introdução ao Asp.Net MvcIntrodução ao Asp.Net Mvc
Introdução ao Asp.Net Mvc
 
Software Configuration Management Problemas e Soluções
Software Configuration Management Problemas e SoluçõesSoftware Configuration Management Problemas e Soluções
Software Configuration Management Problemas e Soluções
 
Práticas de Desenvolvimento de Software
Práticas de Desenvolvimento de SoftwarePráticas de Desenvolvimento de Software
Práticas de Desenvolvimento de Software
 
Macro Arquitetura de Software
Macro Arquitetura de SoftwareMacro Arquitetura de Software
Macro Arquitetura de Software
 
IC Cuidando de Sistemas Doentes
IC Cuidando de Sistemas DoentesIC Cuidando de Sistemas Doentes
IC Cuidando de Sistemas Doentes
 
Prototipagem Em Papel
Prototipagem Em PapelPrototipagem Em Papel
Prototipagem Em Papel
 
Utilização da Engenharia de Requisitos: Onde, quando e como utilizar
Utilização da Engenharia de Requisitos: Onde, quando e como utilizarUtilização da Engenharia de Requisitos: Onde, quando e como utilizar
Utilização da Engenharia de Requisitos: Onde, quando e como utilizar
 
Aula 01
Aula 01Aula 01
Aula 01
 
Aula 1 introdução à engenharia de software1 (1)
Aula 1   introdução à engenharia de software1 (1)Aula 1   introdução à engenharia de software1 (1)
Aula 1 introdução à engenharia de software1 (1)
 
02 Introdução à engenharia de software - conceitos fundamentais
02 Introdução à engenharia de software - conceitos fundamentais02 Introdução à engenharia de software - conceitos fundamentais
02 Introdução à engenharia de software - conceitos fundamentais
 
Netbeans 6.0: Aplicações Java Desktop
Netbeans 6.0: Aplicações Java DesktopNetbeans 6.0: Aplicações Java Desktop
Netbeans 6.0: Aplicações Java Desktop
 

Más de Fábio Nogueira de Lucena (17)

CSS
CSSCSS
CSS
 
Fundamentos de Programação Front-End
Fundamentos de Programação Front-EndFundamentos de Programação Front-End
Fundamentos de Programação Front-End
 
JavaScript: Aprendendo a programar
JavaScript: Aprendendo a programarJavaScript: Aprendendo a programar
JavaScript: Aprendendo a programar
 
HTML5: Primeiros Contatos (visão geral)
HTML5: Primeiros Contatos (visão geral)HTML5: Primeiros Contatos (visão geral)
HTML5: Primeiros Contatos (visão geral)
 
HTTP: Um Curso Básico
HTTP: Um Curso BásicoHTTP: Um Curso Básico
HTTP: Um Curso Básico
 
Apresentacao curso-2017-08-08
Apresentacao curso-2017-08-08Apresentacao curso-2017-08-08
Apresentacao curso-2017-08-08
 
Jornada Goiana em Engenharia de Software 2017
Jornada Goiana em Engenharia de Software 2017Jornada Goiana em Engenharia de Software 2017
Jornada Goiana em Engenharia de Software 2017
 
Arquétipos
ArquétiposArquétipos
Arquétipos
 
Introducao integracao
Introducao integracaoIntroducao integracao
Introducao integracao
 
Healthdb Visão Geral
Healthdb Visão GeralHealthdb Visão Geral
Healthdb Visão Geral
 
Engenharia de Software - planejamento pedagógico
Engenharia de Software - planejamento pedagógicoEngenharia de Software - planejamento pedagógico
Engenharia de Software - planejamento pedagógico
 
Arquitetura de Software EXPLICADA
Arquitetura de Software EXPLICADAArquitetura de Software EXPLICADA
Arquitetura de Software EXPLICADA
 
Arquitetura de Software
Arquitetura de SoftwareArquitetura de Software
Arquitetura de Software
 
Arquitetura software
Arquitetura softwareArquitetura software
Arquitetura software
 
Prontuário Eletrônico do Paciente
Prontuário Eletrônico do PacienteProntuário Eletrônico do Paciente
Prontuário Eletrônico do Paciente
 
Orientação a objetos (tecnologias)
Orientação a objetos (tecnologias)Orientação a objetos (tecnologias)
Orientação a objetos (tecnologias)
 
Orientação a Objetos (introdução)
Orientação a Objetos (introdução)Orientação a Objetos (introdução)
Orientação a Objetos (introdução)
 

Cs 1

  • 1. Construção de Software Curso Engenharia de Software http://engenhariadesoftware.inf.br Fábio Nogueira de Lucena
  • 2. Referência • Code Complete: A Practical Handbook of Software Construction, Steve McConnell 2nd edition, Microsoft Press, 2004 • HOME PAGE (apoio ao livro) http://www.cc2e.com/ • IMPORTANTE: o conteúdo destes slides foi obtido, em sua maior parte, do livro supracitado. Nossos agradecimentos e a devida citação.
  • 3. Construção de Software? • ISO/IEC 12207:2008 identifica 43 processos (aquisição, fornecimento, desenvolvimento, operação, manutenção e retirada de operação de produtos de software). • Um deles: software construction process • Objetivo: produzir unidades de software executáveis que adequadamente refletem o projeto de software (software design).
  • 4. Quais as atividades? • Codificação (programação) • Depuração (debugging) • Projeto detalhado (low-level design) • Testes unitários (unit tests) • Testes de integração • Integração
  • 5. “Sinônimos” • Codificação (muitas vezes entendida como a mera transcrição de projeto existente para uma linguagem de programação e, construção, envolve criatividade e critérios) • Programação (mais adequado)
  • 6. Alguns detalhes • Verificar se pré-requisitos estão prontos • Determinar como o código será testado • Projetar e escrever classes e rotinas • Selecionar estruturas de controle • Realizar testes de unidade • Reorganizar o código, formatá-lo, incluir comentários, ...
  • 7. O que não é? • Gerência do projeto • Desenvolvimento dos requisitos • Arquitetura de software • Projeto da interface com o usuário • Testes de sistema • Manutenção
  • 8. É importante? • Extensa (30% a 80% do tempo total) • Atividade central (após requisitos e arquitetura, antes dos testes de sistema) • Foco na construção pode aumentar produtividade individual (variação de um fator de 10 a 20) • Em alguns casos, o software é tudo • Será executada garantidamente
  • 9. Produtos da CS • ISO/IEC 12207:2008 • Critérios de verificação são definidos para todas as unidades de software com base nos requisitos • Unidades de software definidas pelo projeto são produzidas • Consistência e rastreabilidade são estabelecidas entre unidades de software, requisitos e projeto • Verificação das unidades de software conforme os requisitos e o projeto é realizada
  • 11. Metáfora (Aurélio) • “transferência de uma palavra para um âmbito semântico que não é o do objeto que ela designa” • Por exemplo, usar “raposa” para designar uma pessoa “astuta”.
  • 12. Metáforas • David Gries: “escrever software é uma ciência” • Donald Knuth: “é uma arte” • Watts Humphrey: “é um processo” • Plauger e Kent Beck: “é como dirigir um carro” • Alistair Cockburn: “é um jogo”, ...
  • 13. Outras • Escrever código (como uma carta?) (ignora planejamento e projeto) • Cultivar uma planta (ignora que você não o clima tem controle) • Cultura de ostras (incremento) • Construção de software (edificação) (uma pipa é diferente de 1000 pipas)
  • 14. Por fim,... • Metáforas apenas facilitam a compreensão do processo de desenvolvimento de software relacionando-o com atividades conhecidas. • Tratar CS como construção civil, ilustra a diferença entre grandes e pequenos projetos. • Não são mutuamente exclusivas, combine- as.
  • 16. Preparação • Deve ser adequada para as necessidades do projeto e ocorrer antes do início da construção • Diálogo absurdo: “Quero uma casa aqui, diz o cliente. O mestre de obras diz: claro, quando terminar eu aviso e inicia a construção.”
  • 17. Qualidade • Qualidade no fim: Vamos testar • Qualidade no meio: Vamos construir com cuidado • Qualidade no início (preparação): Pleneja e projeta um produto de qualidade
  • 18. Por que preparar? • Reduzir riscos
  • 20. Custo de correção • Quanto mais tarde a detecção de defeito, mais cara é a correção
  • 21. Preparação depende do projeto • Diferentes projetos, diferentes preparações • Projeto simples, menos preparação (planejamento iterativo) • Projeto de software crítico (vidas em jogo), preparação extensiva (planejamento extensivo)
  • 22. Quais os pré-requisitos? • Definição do problema • Requisitos • Arquitetura de Software
  • 23. Definição do problema • Problema: Coordenadores de curso têm dificuldades para alterar o horário de disciplinas • É comum: Acrescentar tela similar ao Google Calendar (parece solução e não um problema)
  • 24. Requisitos • Descrevem em detalhes o que um software deve fazer • Nomes associados: • Análise de Requisitos • Desenvolvimento de requisitos • Definição de requisitos • Especificação funcional, ...
  • 25. Importância • Custos (para corrigir defeitos na especificação) • Segundo Steve McConnell: “Especificar requisitos corretamente é o segredo para o sucesso de um projeto, talvez ainda mais importante do que as técnicas de construção eficientes”.
  • 26. Requisitos são estáveis? • Mesmo após a assinatura do cliente em uma especificação de requisitos, eles irão mudar • Quanto de mudança é normal? Estudos da IBM indicam 25% de mudanças nos requisitos, responsáveis por 70 a 85% das alterações em um projeto típico
  • 27. Requisitos durante a CS • Avalie a qualidade dos requisitos (lista de verificação) • Certifique-se de que os custos das alterações nos requisitos são conhecidos • Estabeleça um procedimento para controle de alteração • Use estratégia compatível com alterações • Cancele o projeto • Considere o efeito comercial do projeto
  • 28. Tarefa • Ambiente-se com a Lista de Verificação de Requisitos (Requirements Checklist) no portal de apoio ao livro Code Complete • Portal http://www.cc2e.com
  • 29. Arquitetura • Etapa de alto nível de projeto de software (software design) • É a estrutura que irá acomodar as partes mais detalhadas do projeto de software (software design) • Outros termos: arquitetura de sistema e high-level design
  • 30. Por que arquitetura? • Fornece orientação para programadores • Desmembra o trabalho (várias equipes trabalharem independentemente) • Arquitetura ruim torna a construção inviável • Custo (para correção)
  • 31. Arquitetura inclui: • Visão geral do sistema • Interoperabilidade (grandes blocos) • Internacionalização/ • Classes principais localização • Projeto dos dados • Entrada/saída • Regras de negócio • Processamento de • Projeto de interface erros com o usuário • Tolerância a falhas • Gerenciamento de • Praticabilidade recursos • Robustez • Segurança • Comprar/construir • Desempenho • Reutilização • Extensibilidade • Estratégia de alteração
  • 32. Tarefa • Ambiente-se com a Lista de Verificação de Arquitetura (Architecture) no portal de apoio ao livro Code Complete • Portal http://www.cc2e.com
  • 33. Quanto de pré-requisitos? • Depende do projeto (acostume-se a considerar o contexto) • Em geral, 10 a 20% do esforço e 20 a 30% do tempo dedicado ao planejamento prévio, requisitos e arquitetura (não inclui projeto detalhado, parte de CS)
  • 34. Não esqueça • Alguns projetos são mais sequenciais, outros mais iterativos • Uma definição inadequada do problema pode levar à solução do problema errado durante a construção • Não inicie a construção sem que os requisitos estejam corretos (custo de correção) • Se a arquitetura estiver errada, você estará resolvendo o problema certo, mas de maneira errada
  • 35. Principais decisões de Construção de Software
  • 36. Principais decisões • Linguagem de Programação • Convenções de programação • Onda tecnológica
  • 38. Um tratamento + formal • Lutz Prechelt, "An Empirical Comparison of Seven Programming Languages," Computer, vol. 33, no. 10, pp. 23-29, Oct. 2000, doi: 10.1109/2.876288
  • 39. Algumas... • Assembly. Linguagem de baixo nível, formada por mnemônicos para linguagens de máquina. • Fortran. Primeira linguagem de alto nível e ainda “imbatível” em cálculos • SQL. Linguagem padrão de fato para consultas e atualizações em bancos de dados (linguagem declarativa)
  • 40. Linguagem é religião? • Não. • Pode ser que exista opção de escolha. • Em geral, o projeto dita o uso de linguagens mais apropriadas
  • 41. Convenções de Programação • Code Conventions for the Java Programming Language http://java.sun.com/docs/codeconv/
  • 42. Onda tecnológica • Programas baseados em caracteres, depois interfaces gráficas, depois web, ... • Ferramentas para o desenvolvimento destes programas • (Sugestão) David Gries distingue programação em e para uma linguagem. Quem programa em limita-se às construções da linguagem. Quem programa para cria ideias e depois as converte para a linguagem alvo.
  • 43. Considerações finais • Toda linguagem possui vantagens e desvantagens • Estabeleça convenções de programação
  • 44. Tarefa • Ambiente-se com a Lista de Verificação de Decisões de Construção (Construction Decisions) no portal de apoio ao livro Code Complete • Portal http://www.cc2e.com