Prévia do material em texto
Engenharia de Software Profª Dani Pereira AULA 2 Objetivos da Aula de Hoje: • Compreender o processo de evolução do software Para refletir O que torna seu smartphone tão interessante? A Crise do Software O começo de uma nova era tecnológica A Crise do Software • O fenômeno da "crise de software" apareceu em meados do ano de 1960 e expressava as dificuldades no desenvolvimento de software meio a demanda que aumentava assim como a complexidade dos problemas a serem superados. • Não existiam técnicas estabelecidas para desenvolver softwares, por necessidade surgiu a engenharia de software que tem por objetivo sanar os seguintes problemas: • Projetos que ultrapassam o orçamento; • Projetos que ultrapassam o prazo; • Softwares que apresentam baixa qualidade; • Softwares que não atinge os requisitos propostos; • Código com baixa manutenibilidade. Evolução da Programação ao longo do tempo • Década de 40, surgiu a programação física em linguagem de máquina (conhecimento total do hardware). • Década de 50, surgiram as linguagens de 1ª geração, programação lógica (abstração do hardware), linguagens montadoras como assembler (ainda exigiam conhecimentos do hardware), ênfase em cálculos matemáticos. Linguagens: Fortran, List e Algol 58 • Década de 60, surgiram as linguagens de 2ª geração, ênfase no processamento de dados (sistemas bancários). Linguagens: Fortran, Algol 60, Lisp, Basic e Cobol. Evolução da Programação ao longo do tempo • Década de 70, surgiram as linguagens de 3ª geração, ênfase na estruturação do código (programação estruturada). Linguagens: PL/1, Fortran, Algol 68, Cobol, Linguagem C, Pascal (ferramenta de aprendizagem de programação) e Simula (primeira linguagem a suportar o conceito de classes). Crise do Software – Momentos Históricos • 1968 Conferência da OTAN sobre Engenharia de Software (NATO Software Engineering Conference) • O principal objetivo dessa reunião era estabelecer práticas mais maduras para o processo de desenvolvimento, por essa razão o encontro é considerado hoje como o nascimento da disciplina de Engenharia de Software. • Conforme foi observado, em relatório da época, cerca de 50 a 80% dos projetos nunca foram concluídos ou estavam tão longe de seus objetivos que foram considerados fracassados. Dos sistemas que foram finalizados, 90% haviam terminado 150 a 400% acima do orçamento e dos prazos predeterminados Crise do Software – Momentos Históricos • Duas décadas depois, em 1986, Alfred Spector, presidente da Transarc Corporation • Foi coautor de um artigo comparando a construção de pontes ao desenvolvimento de software. Sua premissa era de que as pontes normalmente eram construídas no tempo planejado, no orçamento, e nunca caiam. Na contramão, os softwares nunca ficavam prontos dentro do prazo e do orçamento, e, além disso, quase sempre Crise do Software – Momentos Históricos • 1995 – estudo da The Standish Group • O estudo publicado analisava as estatísticas sobre sucesso e fracasso dos projetos de desenvolvimento de software: o Chaos Report. • Foi revelado que 84% dos projetos de software são malsucedidos, sejam sendo cancelados ou apresentando falhas críticas (dentre elas conclusão fora da janela de tempo prevista, fora do orçamento previsto ou com menos funcionalidades do que o planejado). Considerando apenas os projetos malsucedidos, o custo real foi 189% maior que o estimado, e o tempo de conclusão 222% maior. Estimou- se que nesse ano, as agências governamentais e companhias privadas estadunidenses tenham gasto US$ 81 bilhões apenas em projetos cancelados, e mais US$ 59 bilhões em projetos concluídos fora do tempo previsto. A Engenharia de Software • A aplicação de uma abordagem sistemática, disciplinada e quantificável para o desenvolvimento, operação e manutenção de software, que é a aplicação de engenharia ao software. (SWEBOK Guide V3.0) A Engenharia de Software • Abordagem Sistemática : Significa que o desenvolvimento de software deve seguir um processo estruturado, com etapas bem definidas, como levantamento de requisitos, design, implementação, testes e manutenção. • Abordagem Disciplinada : Consulte o uso de metodologias e melhores práticas para evitar erros comuns no desenvolvimento, garantindo que o software seja produzido com qualidade e eficiência. • Abordagem Quantificável : Enfatiza que o desenvolvimento de software deve ser mensurável. Isso inclui análises como número de falhas, desempenho, tempo de resposta e custos , permitindo um controle eficaz do projeto. A Engenharia de Software • A engenharia de software se preocupa com teorias, métodos e ferramentas para desenvolvimento de softwares profissionais. • A engenharia de software é uma disciplina da engenharia que se preocupa com todos os aspectos da produção de software desde o início da especificação do sistema até a manutenção do sistema após esse estar sendo usado. • Utiliza teorias e métodos adequados para resolver os problemas tendo em mente as restrições organizacionais e financeiras. A Engenharia de Software • Não se preocupa apenas com o processo técnico de desenvolvimento, mas também com o gerenciamento de projetos e o desenvolvimento de ferramentas, métodos, etc. para dar apoio à produção de software. Software • Principal finalidade de um software: GERAR INFORMAÇÃO • Principais componentes de um SI: hardware, software, sistema gerenciador de banco de dados, redes de comunicação e serviços, sendo os referidos componentes interdependentes. • O software agrega valor aos dados na geração de informação • O software distribui o produto mais importante da nossa era – a Informação (PRESSMAN, 2016). Software de diferentes categorias • Software de sistema: Camadas de software que atendem a outros softwares, tais como, sistemas operacionais, drivers e outros. • Software de aplicação: Inclui software com escopo específico, tais como, sistemas de gestão empresarial (ERP). • Software de engenharia/científico: Inclui software aplicado às áreas de engenharia e científica, tal como, software para cálculo estrutural na área de engenharia civil ou processamento de imagem. Software de diferentes categorias • Software embarcado: Instalado em produtos com funções específicas, tal como, o controle de um veículo com informações disponíveis no painel digital. • Software para linha de produtos: Projetado com determinado conjunto de funcionalidades e utilizado por diferentes clientes, por exemplo, sistema emissor de nota fiscal. • Aplicações Web/aplicativos móveis: Software específico para dispositivo móvel. • Software de Inteligência Artificial: Utilizam técnicas de inteligência artificial, tais como, sistema especialistas, redes neurais, aprendizado de máquinas e outros. Arquitetura em Camadas da Engenharia de Software Camadas da Engenharia de Software • A Engenharia de Software como Tecnologia em Camadas é um conceito que estrutura uma disciplina de forma hierárquica, garantindo que todas as atividades de desenvolvimento sejam organizadas de maneira eficiente e controlada. Essa abordagem em camadas garante qualidade, organização e suporte adequado para o desenvolvimento de software. Arquitetura em Camadas da Engenharia de Software 1. Camada de Qualidade O que é? Uma camada de qualidade é a base para todas as outras camadas. Ela define os critérios e práticas que garantem que o software produzido seja confiável, seguro, eficiente e atenda às expectativas dos usuários . Importância: O foco está na garantia da qualidade do software (Quality Assurance - QA). Definir métricas e padrões para medir e avaliar a qualidade. Certifique-se de que o software atenda aos requisitos funcionais e não funcionais . Inclui práticas como revisões, auditorias, testes e conformidade com normas (ISO, CMMI, etc.) . Exemplos de aplicação: Testes automatizados para evitar erros em grandes projetos. Revisões de códigopara garantir boas práticas. Auditorias de processos para verificar conformidade com normas como ISO 9001, CMMI . Arquitetura em Camadas da Engenharia de Software 2. Camada de Processo O que é? A camada de processo estabelece o caminho a ser seguido no desenvolvimento do software. Ela define metodologias e frameworks que serão organizados como o software será projetado, construído e planejado. Importância: Definir um ciclo de vida do software (Ex: Cascata, Ágil, Scrum, DevOps ). Organiza atividades, papéis e responsabilidades dentro da equipe. Permite a gestão de prazos, custos e recursos . Garanta que o software seja desenvolvido de forma eficiente e previsível . Exemplos de aplicação: Uma empresa pode usar o Scrum (método ágil) para organizar entregas incrementais . Em sistemas críticos, pode ser usado o modelo em V , que enfatiza validações em cada fase . DevOps integra desenvolvimento e operações para automação e entrega contínua . Arquitetura em Camadas da Engenharia de Software 3. Camada de Métodos O que é? A camada de métodos abrange todas as técnicas, práticas e diretrizes usadas para desenvolver o software. Ela detalha como os requisitos são levantados, o software é projetado, codificado, testado e documentado . Importância: Defina como resolver problemas de software de maneira eficaz. Inclui princípios de modelagem, análise, design e programação . Auxilia no desenvolvimento de software modular, reutilizável e sustentável . Exemplos de aplicação: UML (Unified Modeling Language) para modelagem de sistemas. Design Patterns para resolver problemas comuns na programação. Refatoração para melhorar o código sem mudar sua funcionalidade. Pair Programming (programação em pares) para revisão de código em tempo real. Arquitetura em Camadas da Engenharia de Software 4. Camada de Ferramentas O que é? A camada de ferramentas fornece os recursos tecnológicos que ajudam a aplicar os métodos, implementar os processos e garantir a qualidade. Importância: Auxilia a automatizar tarefas e melhorar a eficiência. Fornecer ambientes integrados para desenvolvimento, testes e implantação. Suporta gerenciamento de código-fonte, automação de construções e monitoramento de sistemas . Exemplos de aplicação: IDE (Ambientes de Desenvolvimento Integrado): VS Code, Eclipse, IntelliJ. Sistemas de Controle de Versão: Git, GitHub, GitLab, Bitbucket. Ferramentas de automação de testes: Selenium, JUnit, Jest. Ferramentas de CI/CD (Integração Contínua): Jenkins, GitHub Actions, Azure DevOps. Arquitetura em Camadas da Engenharia de Software Resumo da Arquitetura em Camadas da Engenharia de Software 1️⃣ Camada de Qualidade → Garantir que o software atenda aos padrões esperados. 2️⃣ Camada de Processo → Definir o fluxo de trabalho para o desenvolvimento do software. 3️⃣ Camada de Métodos → Fornecer técnicas e práticas para a construção do software. 4️⃣ Camada de Ferramentas → Disponibiliza tecnologias para suporte ao desenvolvimento. Para Saber Mais Para saber mais • Vídeo "Software Engineering: Crash Course Computer Science #16" https://www.youtube.com/watch?v=O753uuutqH8 (Acesse usando chrome a ative a legenda, e a tradução automática para português) [1] Vídeo "O Que faz um Engenheiro De Software" disponível em: https://www.youtube.com/watch?v=ykFwpzab8rM [2] PRESSMAN, Roger; MAXIM, Bruce. Engenharia de Software. Porto Alegre: AGMH, 2016. Páginas 14 até 27. Disponível em: https://integrada.minhabiblioteca.com.br/#/books/9788580555349/ https://www.youtube.com/watch?v=O753uuutqH8 https://www.youtube.com/watch?v=ykFwpzab8rM Slide 1: Engenharia de Software Slide 2: Objetivos da Aula de Hoje: Slide 3 Slide 4: Para refletir Slide 5: A Crise do Software Slide 6: A Crise do Software Slide 7: Evolução da Programação ao longo do tempo Slide 8: Evolução da Programação ao longo do tempo Slide 9: Crise do Software – Momentos Históricos Slide 10: Crise do Software – Momentos Históricos Slide 11: Crise do Software – Momentos Históricos Slide 12 Slide 13: A Engenharia de Software Slide 14: A Engenharia de Software Slide 15: A Engenharia de Software Slide 16: A Engenharia de Software Slide 17: Software Slide 18: Software de diferentes categorias Slide 19: Software de diferentes categorias Slide 20: Arquitetura em Camadas da Engenharia de Software Slide 21: Camadas da Engenharia de Software Slide 22: Arquitetura em Camadas da Engenharia de Software Slide 23: Arquitetura em Camadas da Engenharia de Software Slide 24: Arquitetura em Camadas da Engenharia de Software Slide 25: Arquitetura em Camadas da Engenharia de Software Slide 26: Arquitetura em Camadas da Engenharia de Software Slide 27: Para Saber Mais Slide 28: Para saber mais