cs 1
TRANSCRIPT
Construção de SoftwareCurso Engenharia de Software
http://engenhariadesoftware.inf.brFábio Nogueira de Lucena
Referência• Code Complete: A Practical Handbook of
Software Construction, Steve McConnell2nd 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:2008identifica 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áforasCompreendendo 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é-requisitosMeç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
• Portalhttp://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
(grandes blocos)• Classes principais• Projeto dos dados• Regras de negócio• Projeto de interface
com o usuário• Gerenciamento de
recursos• Segurança• Desempenho• Extensibilidade
• Interoperabilidade• Internacionalização/
localização• Entrada/saída• Processamento de
erros• Tolerância a falhas• Praticabilidade• Robustez• Comprar/construir• Reutilização• 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
• Portalhttp://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õesde 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 Languagehttp://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
• Portalhttp://www.cc2e.com