Prévia do material em texto
ARQIESW - Introdução à engenharia de softaware 1 ARQIESW - Introdução à engenharia de softaware 29/03/2023 Escritores de livros Ian Sommerville Roger Pressman O que é software ? É um conjunto de códigos(instruções) para máquina que tem como objetivo resolver algum problema, chegar em um objetivo. Segundo Pressman conjunto de instrução de computador composto de estrutura de dados e documentos - Software é o resultado das instruções geradas pelo código ARQIESW - Introdução à engenharia de softaware 2 Curiosidade : Cobol linguagem antiga que ainda é utilizada em certos sistemas de bancos. 💻 Curiosidades/questionamentos sem entrega 💻 Um pouco sobre a história e conceitos básicos 💻 O que é processo de software? 💻 Processos e modelos 💻 Análise de documentos 💻 Métodos Ágeis 💻 SCRUM 💻 Kanban 💻 Teste de software 💻 Manutenção de Software https://www.notion.so/Curiosidades-questionamentos-sem-entrega-69f0f36cc9344c7ba5e681b112b34875?pvs=21 https://www.notion.so/Um-pouco-sobre-a-hist-ria-e-conceitos-b-sicos-449578fe669443a7ba94067048a1c69a?pvs=21 https://www.notion.so/O-que-processo-de-software-da601b37ca214bf1aec40a33c1592239?pvs=21 https://www.notion.so/Processos-e-modelos-3d6e5eda7de6486fb6bd9b39c9e3e60b?pvs=21 https://www.notion.so/An-lise-de-documentos-5db843159fd34b4c94df7653cbc3c584?pvs=21 https://www.notion.so/M-todos-geis-d12f253ed8ba4c3e8622a150bc5772bf?pvs=21 https://www.notion.so/SCRUM-85b34fea5b1541eea08b4c466f73f060?pvs=21 https://www.notion.so/Kanban-c455e5f0019f4c45a319351b420df819?pvs=21 https://www.notion.so/Teste-de-software-ec46d7edf75a42a5890a242fc8cfafa0?pvs=21 https://www.notion.so/Manuten-o-de-Software-868eed40f6a644d7b0631d92592f6f69?pvs=21 Um pouco sobre a história e conceitos básicos 1 💻 Um pouco sobre a história e conceitos básicos Um pouco da História e conceitos básicos Crise do software - entrega atrasada, orçamento estourado, falhas durante a elaboração. Evolução do hardware X evolução do software - Custo do hardware decrescente e custo do software em ascensão Década de 50 - Surgiram os primeiros softwares. Pesquisas eram voltadas para componentes eletrônicos, software era desenvolvidos sem conhecimentos de engenharia de software Década de 60 - Software se tornou o foco na pesquisa, organizações começam a elaborar software para gerenciar, grandes sistemas. Hardware deixou de ser a pedra no sapato do software Crise do software - Equipes não tinham um modelo de como desenvolver software, não havia documentação adequada. Como dar manutenção em um software sem projeto ? Manutenção muito difícil e tem que começãr tudo do 0 algumas vezes Um pouco sobre a história e conceitos básicos 2 a partir de tudo citado acima surgiu a engenharia de software Objetivo da Engenharia de software - Criar técnicas, métodos, formulas, para reduzir custos do projeto. respeitando os prazos e qualidade desejada. Software é abstrato, integravel não é limitado por materiais, ou controlado pelas leis da física. Papel do Engenheiro de software - Adotar uma abordagem sistemática e organizada para seu trabalho, além de utilizar ferramentas e técnicas apropriadas, dependendo do problema a ser resolvido saber identificar qual técnica/ferramenta utilizar. Princípios para manter o bom funcionamento do produto final Evitar dependência de determinadas pessoas ou processos - desenvolvimento e criação deve ser colaborativo para não ficar dependente de uma pessoa só Abstrair aspetos importantes - Pegar apenas o que é importante em determinado cenário Subdividir problemas complexos - Dividir e conquistar, divide um grande problema em problemas menores para você conseguir resolver o problema por um todo Reutilizar resultados (códigos) Flexibilização e modularização para facilitar a manutenção Fundamentos - A engenharia de software é multidisciplinar podendo abranger outras áreas Ciências da Computação - saber programar, arquitetura, estrutura de dados, lógica de programação e etc. Um pouco sobre a história e conceitos básicos 3 Administração - gerir prazos, equipe, custos, resultados e etc. Comunicação - saber conversar com os clientes que podem ser leigos em TI Solucionar problemas Desafios da engenharia de software Reduzir custos Melhorar a qualidade Atender as expectativas Tipos de software Software de prateleiras/genérico - Pode ser que seja positivo ou negativo, pode ser bom ou não para o usuário. Software personalizado - Atende as expectativas para certa situação dos clientes Software comerciais - Controle financeiro, controle de estoque. Software embarcado - geladeira, micro-ondas, carros, relógios. Sistema de tempo real - usados em usina nuclear, tráfego aéreo Atributos de um bom software Fácil manutenção - deve evoluir para atender as necessidades de mudança Confiança - Deve ser confiável Um pouco sobre a história e conceitos básicos 4 Eficiência - não deve desperdiçar recursos do sistema, sem ocupar muita Ram e Processador. Usabilidade - Deve ser aceito pelos usuários, que seja fácil de usar Onde tudo isso é desenvolvido ? Empresas de desenvolvimento de software. O que é processo de software? 1 💻 O que é processo de software? O que é um processo? Conjunto de etapas com prazos, como devo proceder em cada uma. método utilizado para desenvolver ou produzir software é definir como e quando será feito o que é feito? -> produto como é feito -> passos por quem é feito -> agente o que usa ? -> insumos o que se espera ? -> resultados Boas praticas A estrutura genérica de um processo inclui as seguintes At : Comunicação (Dev e o cliente, levantamento de infos); planejamento(Já tenho as infos, a partir do planejamento estimasse o prazo, preço, custo) ; modelagem(Fazer um pequeno protótipo, modelo) ; construção(Pegar todas as infos e passar para códigos); implantação(Entregar o software para o cliente ); após isso, temos as manutenções de software e antes da implantação temos o teste. Modelo de processo de software deve encorpar uma estratégia de desenvolvimento Definição do problema → desenvolvimento técnico -> integração da solução -> estado atual -> definição do problema... O que é processo de software? 2 Técnica de modelagem Modelo é uma simplificação da realidade -São construído para permitir um melhor entendimento sobre o sistema que está sendo construído -Vários tipos de modelagem Modelagem uma das maneiras é uma descrição textual de como o sistema vai funcionar, outra é o diagrama de caso de uso ferramentas CASE computer aided software engineering - auxilia nas etapas de desenvolvimento de software * tarefa pesquisas sobre Objetivo da modelagem (porém um modelo não consegue representar 100%) Abstração melhorar o entendimento visualização especificações construção Documentação Processos e modelos 1 💻 Processos e modelos Modelo X Processo Modelo - documento teórico conjunto de possíveis ações Processo - deve determinar as ações a serem realizadas pela equipe com prazos definidos. Modelo prescritivo - é capaz de prever, incluir ações, mecanismos que garantem a qualidade e controle a principal função desses modelos é colocar a ordem no caos, podem ser adaptativos as fases e etapas de acordo com o problema, com a equipe. Modelo Cascata - Ciclo de vida clássico : é ideal para problemas nos quais os requisitos são bem definidos. Abordagem sistemática e sequencial ou seja uma nova atividade só pode ser iniciada quando a anterior for concluída. Desvantagem não pode voltar para trás Vantagem muito simples de gerenciar, modelo para outros, modelo sequencial. Problemas com o modelo cascata raramente os projetos seguem um fluxo, dificulta estabelecer os requisitos do inicio da projeto Cliente só recebe o produto quando ele está numa etapa avançada de desenvolvimento, no final do projeto. Modelos incrementais - desenvolvimento iterativo, ciclos que permitem revisões de atividades anteriores. → Entrega pequenosincrementos durante o desenvolvimento projeto, são desenvolvidos vários modelos em cascatas e vão Processos e modelos 2 fazendo uma entregas parcial. fragmentado em partes independentes. → A arquitetura do sistema deve possibilitar a entrega das partes independentes. → Características - incrementos como protótipos, podendo ser alterados, novos requisitos podem ser incorporadas, deve-se identificar funcionalidades prioritárias que serão desenvolvidas primeiro, os processos de cada incrementos podem ser independentes(podendo se utilizar o cascata), risco menor de fracasso completo no sistema. → Avaliação do cliente pode ser feita a partir das experiencias com esses fragmentos. → Vantagens - em cada incremento é adicionada novas funcionalidades Impacto pequeno - são resolvidos antes de um investimento muito grande(durante o desenvolvimento)Cliente tem um feedback, entregas parciais desde o inicio do projeto → Quando o cliente vê a funcionalidade já esta pronta para a implementação → Desvantagem - não podem deixar que se aproxime do método cascata →Todos os requisitos precisam ser conhecidos para decompor o produto em módulos Modelo Evolucionário(Interativo) - Cliente não tem ideia do que quer, e a ideia vai evoluindo. Prototipação - Vai entregando protótipos, desenvolve mostra pro cliente, da o feedback Espiral - Conjunto de etapas, comunicação, planejamento, modelagem... Partindo de onde o cliente não sabe o que quer, vai evoluindo até chegar no produto final. Diferenciam apensa que na prototipação não tem as fases definidas, e na entrega prototipação entrega protótipos e Processos e modelos 3 espiral pode ser entrega pode ser o software Incremental X Interativo Em um modelo sabe o que quer e outro não sabe Modelo incremental - vai entregando por partes Modelo Interativo - dentro de um todo vai sofrendo alterações e vai evoluindo Análise de documentos 1 💻 Análise de documentos https://s3-us-west-2.amazonaws.com/secure.notion-static.co m/4a2771d9-0878-45c4-a626-09b7e822b3eb/analise_documentaca o.pdf https://medium.com/lfdev-blog/como-escrever-requisitos-de- software-de-forma-simples-e-garantir-o-mínimo-de-erros-no- sistema-app-74df2ee241cc https://asana.com/pt/resources/feasibility-study 💡 Na etapa de análise vários documentos são gerados. O que é um sistema? É um conjunto de elementos que é organizado para realizar certo método, procedimento ou controle ao processar https://www.notion.so/signed/https%3A%2F%2Fs3-us-west-2.amazonaws.com%2Fsecure.notion-static.com%2F4a2771d9-0878-45c4-a626-09b7e822b3eb%2Fanalise_documentacao.pdf?table=block&id=8063460f-0d2e-4649-8e7e-11cdf3906857&spaceId=103f04c2-450e-42e6-b0b2-08ca14f988fd&userId=7b1b405e-91f7-4404-87a9-37d556adc12a&cache=v2 https://medium.com/lfdev-blog/como-escrever-requisitos-de-software-de-forma-simples-e-garantir-o-m%C3%ADnimo-de-erros-no-sistema-app-74df2ee241cc https://asana.com/pt/resources/feasibility-study Análise de documentos 2 informações Componentes de um sistema Papel do analista Coletar as informações e extrair o que é relevante dentro de um projeto. Passos da análise de sistemas 1 - Estudo das necessidades - Resultado: Documento conceitual do sistema com reuniões com os clientes sentir desejos e necessidades buscar definir funções/desempenho metas globais. 2 - Estudo de viabilidade - Resultado: documento sobre o assunto Introdução - aqui posso dizer algumas restrições Análise de documentos 3 Resumo Adm. análise de custo beneficio.(Tem detalhado no slide) 3 - Análise de requisitos - Ao final é gerado o Documento de requisitos Serve para mostrar o que o meu software deve ter Tipos de requisitos, tem no slide. Modelos de documento de requisitos - Este documento serve para trazer uma visão geral e funcional do produto, para ser capaz de lembrar todas as regras e funcionalidades que o sistema deve ter. Requisitos funcionais - Tem haver com as funcionalidades do meu sistema, são os serviços que o sistema deve prover, como o sistema se comporta em situações especificas, Ex: Desenvolvendo um editor de texto, as principais funções seriam o usuário conseguir escrever, apagar, salvar. Requisitos não funcionais - Não tem haver com funcionalidades, Tem haver com as característica do produto, por exemplo interface do produto quão fácil de utilizar o software é. Tem haver com os atributos do software. O software deve funcionar em um navegador Firefox (não tem haver com a funcionalidade porém é uma exigência). Caso de Uso - Uma outra forma de especificar requisitos é através de caso que uso, onde contém o nome da funcionalidade e pode ser conter sua respectiva descrição. No caso de uso você define o ator de maneira a relacionar com as funcionalidades, a Análise de documentos 4 partir dessa fase fica melhor descrito os requisitos para então iniciar o modelagem do banco, desenvolvimento e outras etapas. Métodos Ágeis 1 💻 Métodos Ágeis Manifesto ágil - Princípios, surgiu no inicio dos anos 2000 União de 17 pessoas, muito conhecidas dentro da engenharia de software Definiram o que é ágil, scrum é mais antigo que o manifesto ágil. Após isso começaram utilizar o termo metodologias ágeis no processo de desenvolvimento de software. https://agilemanifesto.org/iso/ptbr/manifesto.html Indivíduos e interações - valor humano de conversar cara a cara Software em funcionamento mais importante do que documento Colaboração com o cliente - mais que negociação de contratos, conversa entre ambos os lados sem ficar preso em contratos Responder a mudanças - mais do que seguir um plano. Durante o desenvolvimento se o cliente peça uma pequena alteração, já fazer no desenvolvimento durante o processo do que seguir um plano e deixar para o final. É mais valorizado os itens à esquerda que estão em negrito do que os itens à direita https://agilemanifesto.org/iso/ptbr/manifesto.html Métodos Ágeis 2 Ser ágil - não é ser rápido igual um trem bala, é ser igual um guepardo, se a pressa desviar bruscamente a direção o guepardo consegue mudar bruscamente também, essa analogia pode ser comparada com o desenvolvimento de software. Mais uma atitude, não um processo prescritivo Funciona na prática Não é um ataque para as ferramentas case Não é um ataque para documentação, é indicado que tenha documentação A cada final de release entrego uma porção do software para o cliente, os riscos são bem menores que no cascata, vai eliminando os riscos durante o desenvolvimento. Cliente pode dar o feedback sobre sobre o que já foi desenvolvido e entrega podendo pedir correções. Risco muito menor que os modelos tradicionais é interativa e incremental. Métodos Ágeis 3 SCRUM 1 💻 SCRUM Todos estão de certa forma juntos, conectados de forma a alcançar um objetivo, vindo do rugby É um processo para construir software onde o ambiente não tem processos bem definidos ou mudam com muita frequência, essa equipe não tem somente programadores a equipe é pequena porém é interdisciplinar. Formado por time box, segue a risca esses tempos, fala sobre reuniões diárias, falar de 3 assuntos durando 15 minutos, em um time muito grande o tempo já seria ultrapassado e seria difícil gerenciar. Utiliza times de 7 à 9 pessoas. SCRUM 2 Metodologia baseada em princípios semelhantes do XP Divide o desenvolvimento em sprints, que são as rodadas, o máximo é 30 dias por sprint. Trabalham em cima das funcionalidades definida em cada inicio de rodado e devem ser desenvolvidos naquele sprint. A equipe toda é responsável pelo projeto, se alcançar os resultados todo mundo é valorizado e caso não de certo todo mundo é responsável também. Existe a possibilidade de ter alguém com rendimento baixo, corpo mole, podendo ser desligado do projeto e tals. Reunião equipe expõe o que pretendo fazer no próximo dia, o que estou fazendo e se estou tendo algum problema para atingir os objetivos. Eventos do sprint → Sprint planning - Antes de começaré feito uma reunião de planejamento do sprint, onde é criado o backlog da sprint, define quantas funcionalidades podem ser completamente construídas no tempo da sprint → Execução do sprint - É pego o backlog priorizado para ser realizado no sprint e é a etapa que é feito o desenvolvimento do sprint. → Daily Scrum - É uma reunião diária de 15 minutos realizada todos os dias com o objetivo de saber o que foi feito no dia anterior, o que vai ser feito hoje e se existe algum impedimento, para todos visualizarem de uma maneira geral como está fluindo o desenvolvimento do produto. → Revisão do sprint - É a verificação do que foi feito no sprint, é uma validação e adaptação do produto que está sendo construído, é a apresentação daquilo que foi feito no sprint SCRUM 3 → Retrospectiva do sprint - Verificar necessidades de adaptação no processo, ver o que foi positivo e o que foi negativo durante o processo, o que devemos melhorar ou parar de fazer Artefatos do SCRUM → Product backlog - Lista de pendências do produto, somente o dono do produto mexe nisso. → Sprint backlog - Lista de pendências da sprint, é dividido a box anterior em varias tarefas e definir o que irão entregar no final → Sprint - Corrida, rodada de desenvolvimento, dentro do sprint todo dia tem reuniões diárias. → Working increment of the software - Incremento de trabalho de software, é a entrega do que foi realizado na sprint para o cliente. SCRUM 4 Papeis do SCRUM Product Owner (Proprietário do produto) - Entende sobre o produto. Scrum Master - Conhece o SCRUM por completo, é o responsável por aplicar o SCRUM no projeto, vai liderar as reuniões, tomar conta do dono do produto não conversar com a equipe, remove impedimentos quando ver algum problema é ele que resolve, pesquisa soluções para resolver o impedimento. Pode ou não programar depende da política da empresa. Equipe de desenvolvimento - Pessoas que criam o banco de dados, programam, gerenciam o projeto. Kanban 1 💻 Kanban É uma ferramenta de gestão visual, conhecida pelos seu quadro. Utiliza colunas e cartões, facilitando a visualização e gestão das atividades, permite medir o progresso da equipe, kanban veio da linha de produção. TRÊS FUNÇÕES Gerenciar fluxo de trabalho Equilibrar os processos Limitar quantidade de trabalho, para que não haja uma demanda maior do que é possível ser produzido. COMPOSIÇÃO Cartões Colunas - um quadro básico tem 3 colunas A fazer Fazendo Finalizado Quadro TIPOS DE KANBAN Kanban de produção é utilizado para medir estoque, controlar o estoque. Kanban 2 Kanban de movimentação tirava os cartões ao utilizar os lotes Surgiu na Toyota, com ideia de just in time, com ideia de controlar o estoque. Ferramenta trello → quadro kanban virtual Teste e manutenção de software 1 💻 Teste e manutenção de software TESTE DE SOFTWARE É o que garante qualidade, fazer experimentos com o produto, se tiver falhas registrar quando acontece a falha. Erro - É ação humana que produz um resultado incorreto Defeito - Manifestação do erro, conhecido como BUG Falha - Produto se comportando desta maneira citada acima, um software que não cumpriu o seu propósito Conceitos básicos de teste Artefato de teste - Documentação gerada no processo de teste Caso de teste - Composto por conjunto de entradas, por passos de execução e um resultado esperado; Testador elabora um plano de testes com possíveis cenários. MITOS SOBRE TESTE Testador é inimigo do desenvolvedor. Os testadores devem ser os desenvolvedores menos qualificados O sistema está pronto quando é terminado de codificar Um programador consegue testar eficientemente seu código Teste e manutenção de software 2 TERMINOLOGIA Níveis de abstração Teste de unidade → Funções, métodos Teste de módulo → Módulos, classes Teste de componentes → Conjunto de módulos ou componentes, bibliotecas… Teste do programa Teste de sistema Teste estrutural Caixa aberta, branca - quando tem acesso ao código Caixa entreaberta - Baseado em aspectos do código Caixa fechada - não tem acesso a nada de documentação ou código. MANUTENÇÃO DE SOFTWARE Custo da manutenção é maior que o custo de desenvolvimento. Cada vez menos sistemas são desenvolvidos do 0 são desenvolvidos e adaptados a partir de outros sistemas. Faz mais sentido ter o desenvolvimento e manutenção continuo Outros custos não monetários Adiantamento de oportunidades de desenvolvimento Insatisfação do cliente Redução da qualidade global do software Insatisfação do pessoal da manutenção Teste e manutenção de software 3 Problemas da manutenção Difícil entendimento do código de outra pessoa Documentação inexistente ou desatualizada Deficiência no planejamento e desenvolvimento Software não foi projetado para manutenção Planejamento de manutenção Estabelecer uma organização para o processo Descrever procedimentos de avaliação Empresas mais maduras o cliente não liga e fala com qualquer programador e já sai fazendo o que o cliente quer. Procedimentos para registrar o histórico das atividades de manutenção(ver Swanson) Evolução do software Devem mudar para permanecer uteis Mudanças no ambiente requer atualização de software Sistemas computacionais geralmente possuem vida longa - pois custam muito caro dependendo da sua complexidade.