Prévia do material em texto
Engenharia e Qualidade de Software Prof. Edson Moreno Unidade I Introdução “Os conceitos básicos da engenharia surgiram há uns 5.000 anos com a engenharia civil, há uns 600 anos surgiu a administração de materiais e há uns 300 anos a engenharia industrial. A engenharia de software tem apenas 50 anos! Estamos no início da era do software. Com o computador, o ser humano automatiza o conhecimento. A humanidade prosperou nestes últimos 50 anos o que não conseguiu em 4.950 anos. O software foi o responsável”. (Prof. Edson Quedas Moreno) Conteúdo programático da Unidade I – engenharia de software e processos de apoio Na Unidade I serão abordados os seguintes itens: Capítulo 1 – Fundamentos da engenharia de software: conceitos e objetivos; o produto; aplicações; camadas; e a visão atual do desenvolvimento do software. Capítulo 2 – Processo de software: o processo e o projeto; estrutura organizacional; modelos de processos de software; RUP; modelos PSP e TSP. Capítulo 1 – Fundamentos da engenharia de software “As tecnologias atuais resultam da convergência de sistemas de computadores e de sistemas de comunicação”. Questões complexas desafiam o engenheiro de software: integração de diversos ambientes operacionais, mudanças constantes de regras e negócios, adaptações a novas tecnologias e a ligação de todos esses elementos. (Pressman, 2011) – “Software de computadores continua a ser a tecnologia única mais importante no cenário mundial”. (Sommerville, 2011) – “Produzir software que apresente uma boa relação custo/benefício é essencial para o funcionamento das economias nacionais e internacionais”. 1.1 Conceitos e objetivos da engenharia de software Só após dimensionar o tamanho, a complexidade e as exigências de processamento é possível dimensionar a infraestrutura do sistema computacional que suportará o software e consequentemente iniciar o escopo do projeto do produto software. O software não é manufaturado. Problemas de hardware podem ser corrigidos pela manufatura. O custo do software está concentrado no trabalho de engenharia, que contempla os seguintes itens: Especificação, documentação e procedimentos. Análise, projeto, codificação, implementação, testes, diagnósticos e implantação. Suporte ao cliente/usuário. 1.2 O produto software O software possui um duplo papel na produção. O software não só pode constituir um produto completo. Por exemplo um software comercializado. O software pode também ser o veículo de melhora de outro produto. Pode melhorar outro software ou melhorar um produto industrial. Exemplo: “Apesar da segurança fornecida pelo sistema operacional, o antivírus é vendido como produto completo que melhora a segurança de outro produto software, no caso o próprio sistema operacional”. 1.2 O produto software (continuação) O software não “se desgasta”, mas "se deteriora"! (Pressman, 2011) 1.3 Aplicações do software Áreas do software Software básico – Programas estruturais que dão apoio a outros programas. Software de tempo real – Software para monitoramento, análise e controle de eventos. Software empresarial – E-business (ERP, CRM e SCM). Software para web – WebApps, e-commerce (B2B, B2C e C2C) e Cloud Computing. 1.3 Aplicações do software (continuação) Áreas do software Software científico e de engenharia – Processamento complexo de números. Software embutido – Adaptado ao controle de produtos industrializados. Software aplicativo para microcomputadores. Software de inteligência artificial – Para resolver problemas complexos do conhecimento. 1.4 Qualidade, processos, métodos e ferramentas A engenharia de software é uma tecnologia em camadas. (Pressman, 2011) A qualidade leva à cultura de melhoria contínua dos processos e abordagens cada vez mais efetivas para a engenharia de software. Processo – Mantém integradas as camadas da tecnologia. O processo define o controle do gerenciamento do projeto por meio de modelos de processos, tais como: cascata, incremental, prototipagem, espiral, RUP, PSP e TSP. Métodos – Incluem atividades organizadas para construir o produto software, por exemplo, as metodologias ágeis do desenvolvimento de software. Ferramentas – Fornecem apoio automatizado ou semiautomatizado. Uma das ferramentas mais completas é chamada de CASE (Computer Aided Software Enginnering). 1.4 Qualidade, processos, métodos e ferramentas 1.5 Fábrica de software (Sommerville, 2011) Gerentes e profissionais técnicos enfrentam, na atualidade, “três principais desafios da engenharia de software”: O desafio do legado – Fazer manutenção e atualização de sistemas antigos. O desafio da heterogeneidade – Desenvolvimento em diversas arquiteturas computacionais. O desafio do fornecimento – Entrega de sistemas em curto espaço de tempo. Mito do desenvolvedor: preciso entregar logo o programa funcionando para o cliente. Só assim termino o projeto. Realidade: dados industriais indicam que entre 50% e 70% do esforço gasto num programa será despendido depois que ele for entregue pela primeira vez ao cliente. O trabalho do desenvolvedor está restrito ao seu ambiente, que é diferente do ambiente do cliente/usuário, que também vai avaliar o produto, identificar falhas, erros, omissões e solicitar mudanças. 1.6 Mitos e realidades no desenvolvimento do software Interatividade A engenharia de software projeta e constrói o produto software de computador, bem como a infraestrutura necessária para que este funcione corretamente e com um bom desempenho. O software pode ser considerado o elemento mais importante de um sistema de informação? Assinale a alternativa correspondente à afirmativa ou negativa deste questionamento, bem como sua correta justificativa. Não. A especificação do sistema de informação independe da implementação e do uso do software. É necessário ter o sistema de informação para depois poder especificar o software. Não. Especifica o próprio computador. Sim. O software é a base de um sistema de informação responsável pela inteligência empresarial e, bem elaborado, permite a tomada de decisão. Sim. A organização de um conjunto de programas forma o produto software, que reflete o negócio por meio do sistema de informação, responsável por uma base de conhecimento pronta para ser utilizada. Sim. São instruções intelectualmente organizadas. Interatividade A engenharia de software projeta e constrói o produto software de computador, bem como a infraestrutura necessária para que este funcione corretamente e com um bom desempenho. O software pode ser considerado o elemento mais importante de um sistema de informação? Assinale a alternativa correspondente à afirmativa ou negativa deste questionamento, bem como sua correta justificativa. Não. A especificação do sistema de informação independe da implementação e do uso do software. É necessário ter o sistema de informação para depois poder especificar o software. Não. Especifica o próprio computador. Sim. O software é a base de um sistema de informação responsável pela inteligência empresarial e, bem elaborado, permite a tomada de decisão. Sim. A organização de um conjunto de programas forma o produto software, que reflete o negócio por meio do sistema de informação, responsável por uma base de conhecimento pronta para ser utilizada. Sim. São instruções intelectualmente organizadas. Interatividade Alternativa correta: D A engenharia de software projeta e constrói o produto software de computador, bem como a infraestrutura necessária para que este funcione corretamente e com um bom desempenho. O software pode ser considerado o elemento mais importante de um sistema de informação? Sim. A organização de um conjunto de programas forma o produto software, que reflete o negócio por meio do sistema de informação, responsável por uma base de conhecimento pronta para ser utilizada. Justificativa: Sim. O softwareé considerado o elemento mais importante do sistema. A afirmativa corresponde ao conceito do software. O software automatiza as intenções do cliente ou usuário implementadas no sistema para uso. Capítulo 2 – Processo de software Produzir software é percorrer todo o ciclo de vida do desenvolvimento com base em processos, para torná-lo efetivo, ter um bom controle com um bom desempenho. (Sommerville, 2011 e 2003) –“A engenharia de software é uma disciplina da engenharia que se ocupa de todos os aspectos da produção de software. Desde os estágios iniciais de especificação de um sistema até a manutenção, para que este sobreviva ao longo do tempo”. 2.1 Processo de software e o desenvolvimento do projeto A estrutura básica apresenta as principais fases do desenvolvimento do software. Cada fase pode e deve ser elaborada com base em um ou mais processos que variam de acordo com tamanho, complexidade e qualidade exigida do software. Se um processo estiver sem controle, as atividades tornam-se bastante caóticas. O processo fica sem acompanhamento, sem medições, sem comparações, com marcas de referência, ocorrem atividades e tarefas redundantes, conflitos na comunicação, na análise e, consequentemente, há aumento de erros. Veja o modelo básico de um processo com suas respectivas marcas de referência (input e output). 2.1 Processo de software e o desenvolvimento do projeto (continuação) Estrutura para decomposição do processo 2.1 Processo de software e o desenvolvimento do projeto (continuação) 2.2 Estrutura organizacional orientada por modelos de processo de software Estrutura organizacional para o desenvolvimento do software CONSTRUÇÃO Escolha da equipe, construção do código, testes, entrega e suporte. PROJETO Uso de metodologias, modelagem do produto e lógica de processamento. ANÁLISE Especificação dos requisitos, modelagem do negócio e escopo do projeto. PLANEJAMENTO Levantamento e gerenciamento dos requisitos do software. 2.3 Modelos de processo de software tradicionais Modelo cascata É considerado o modelo clássico de vida do desenvolvimento do software. Serve de base para os demais modelos. Prototipagem É a construção de um protótipo do esboço do software para melhorar o entendimento entre cliente e desenvolvedor. 2.3 Modelos de processo de software tradicionais (continuação) Modelo incremental É desenvolvido com o conceito de versionamento. A cada iteração* é gerada nova versão. Este método permite uma melhoria contínua do processo. * A cada entrega de um incremento é feita uma iteração, que é uma estratégia de planejamento para retrabalhar o processo. 2.3 Modelos de processo de software tradicionais (continuação) Modelo espiral É um modelo evolucionário que combina a natureza iterativa da prototipagem com o estilo clássico do modelo cascata. 2.3 Modelos de processo de software tradicionais (continuação) 2.4 RUP – Rational Unified Process (Processo Unificado Racional) O RUP é orientado por casos de uso. É um processo da engenharia de software proprietário comercializado pela IBM. Na horizontal são representadas as fases, que formam a estrutura dinâmica. Na vertical são representadas as disciplinas (workflows), que formam a estrutura estática. 2.5 Modelos de processo pessoal e de equipe PSP - Personal Software Process (Processo de Software Pessoal) O PSP é um processo de desenvolvimento específico para engenheiros de software. O PSP orienta o planejamento e o desenvolvimento dos componentes do software. A ideia é: “A melhoria da capacidade da organização depende da melhoria de cada indivíduo”. 2.5 Modelos de processo pessoal e de equipe (continuação) TSP - Team Software Process (Processo de Software da Equipe) O TSP é uma extensão do PSP com enfoque na equipe de trabalho. O TSP foi “criado” para ser seguido por desenvolvedores previamente treinados no PSP para trabalhar em equipes auto-organizadas e desenvolver software de qualidade. O TSP pode ser uma solução para pequenas organizações de software que se consideram muito pequenas para enfrentar as complexidades do CMMI. Conceito e estrutura: As equipes são autogerenciadas – A gerência orienta e dá suporte; a equipe planeja e gerencia as tarefas do dia a dia; os processos se baseiam na experiência, no conhecimento e na maturidade. O TSP provê um conjunto de elementos: scripts de processos; formulários, relatórios e gráficos; e papéis. Interatividade O processo de controle da qualidade do software aborda inspeções de entrada e saída do processo, revisões e testes do processo, confiabilidade dos equipamentos, técnicas de medições e dos dados coletados.” O objetivo do processo de controle da qualidade do software é: Estabelecer uma regra eficaz de acompanhamento dos requisitos do software. Examinar minuciosamente o artefato de software e estabelecer a prática de revisões sucessivas. Garantir as operações corretas das funcionalidades do software. Maior agilidade no desenvolvimento do software. Melhorar o desempenho do software. Interatividade “O processo de controle da qualidade do software aborda inspeções de entrada e saída do processo, revisões e testes do processo, confiabilidade dos equipamentos, técnicas de medições e dos dados coletados.” O objetivo do processo de controle da qualidade do software é: Estabelecer uma regra eficaz de acompanhamento dos requisitos do software. Examinar minuciosamente o artefato de software e estabelecer a prática de revisões sucessivas. Garantir as operações corretas das funcionalidades do software. Maior agilidade no desenvolvimento do software. Melhorar o desempenho do software. Interatividade Alternativa correta: B “O processo de controle da qualidade do software aborda inspeções de entrada e saída do processo, revisões e testes do processo, confiabilidade dos equipamentos, técnicas de medições e dos dados coletados.” O objetivo do processo de controle da qualidade do software é: Examinar minuciosamente o artefato de software e estabelecer a prática de revisões sucessivas. Justificativa: A análise detalhada de cada artefato de software garante que o produto completo vai sofrer melhorias ao longo de seu ciclo de vida. A prática de revisões sucessivas por meio de iterações permitem implementar novos recursos e atualizações de tecnologias. ATÉ A PRÓXIMA!