Baixe o app para aproveitar ainda mais
Prévia do material em texto
ENGENHARIA DE SOFTWARE – SEMANA 01 Softwares podem ser desenvolvidos do zero ou estendidos a partir de software já existente. Softwares não são somente os programas em sim, mas também toda a documentação que o envolve. Atividades fundamentais: • Especificação, • projeto, • implementação, • validação, • evolução. Modelos de processo de software: Atividades do processo: • Especificação • Desenvolvimento • Validação • Evolução RUP O Processo Unificado da Rational conhecido como RUP (Rational Unified Process), é um processo de engenharia de software criado para apoiar o desenvolvimento orientado a objetos, fornecendo uma forma sistemática para se obter vantagens no uso da UML. Foi criado pela Rational Software Corporation e adquirido em fevereiro de 2003 pela IBM. O principal objetivo do RUP é atender as necessidades dos usuários garantindo uma produção de software de alta qualidade que cumpra um cronograma e um orçamento previsíveis. Assim, o RUP mostra como o sistema será construído na fase de implementação, gerando o modelo do projeto e, opcionalmente, o modelo de análise que é utilizado para garantir a robustez. O RUP define perfeitamente quem é responsável pelo Mudança é inevitável em grandes projetos. Possíveis soluções: • Prototipação • Entrega incremental https://www.infoescola.com/informatica/engenharia-de-software/ https://www.infoescola.com/engenharia-de-software/uml/ que, como as coisas deverão ser feitas e quando devem ser realizadas, descrevendo todas as metas de desenvolvimento especificamente para que sejam alcançadas. O RUP organiza o desenvolvimento de software em quatro fases, onde são tratadas questões sobre planejamento, levantamento de requisitos, análise, implementação, teste e implantação do software. Cada fase tem um papel fundamental para que o objetivo seja cumprido, distribuídos entre vários profissionais como o Analista de sistema, Projetista, Projetista de testes, entre outros. Fase de Concepção / Iniciação: Esta fase do RUP abrange as tarefas de comunicação com o cliente e planejamento. É feito um plano de projeto avaliando os possíveis riscos, as estimativas de custo e prazos, estabelecendo as prioridades, levantamento dos requisitos do sistema e preliminarmente analisá-lo. Assim, haverá uma anuência das partes interessadas na definição do escopo do projeto, onde são examinados os objetivos para se decidir sobre a continuidade do desenvolvimento. Fase de Elaboração: Abrange a Modelagem do modelo genérico do processo. O objetivo desta fase é analisar de forma mais detalhada a análise do domínio do problema, revisando os riscos que o projeto pode sofrer e a arquitetura do projeto começa a ter sua forma básica. Indagações como "O plano do projeto é confiável?", "Os custos são admissíveis?" são esclarecidas nesta etapa. Fase de Construção: Dese nvolve ou Adquire os componentes de Software. O principal objetivo desta fase é a construção do sistema de software, com foco no desenvolvimento de componentes e outros recursos do sistema. É na fase de Construção que a maior parte de codificação ocorre. Fase de Transição: Abrange a entrega do software ao usuário e a fase de testes. O objetivo desta fase é disponibilizar o sistema, tornando-o disponível e compreendido pelo usuário final. As atividades desta fase incluem o treinamento dos usuários finais e também a realização de testes da versão beta do sistema visando garantir que o mesmo possua o nível adequado de qualidade. Manifesto ágil, 2001 “Estamos descobrindo maneiras melhores de desenvolver software, fazendo-o nós mesmos e ajudando outros a fazerem o mesmo. Através deste trabalho, passamos a valorizar: • Indivíduos e interações mais que processos e ferramentas • Software em funcionamento mais que documentação abrangente • Colaboração com o cliente mais que negociação de contratos • Responder a mudanças mais que seguir um plano Ou seja, mesmo havendo valor nos itens à direita, valorizamos mais os itens à esquerda.” Princípios dos métodos ágeis Programação extrema e escalamento de métodos ágeis SEMANA 02 TIPOS DE REQUISITOS Requisitos de sistema/software: • Descrições do que o sistema/software deve fazer, os serviços que ele oferece, as restrições sobre seu funcionamento. • Refletem as necessidades dos clientes que servem a uma finalidade determinada. Engenharia de requisitos (Requirements engineering): • Processo de descobrir, analisar documentos, verificar e validar esses serviços e restrições. REQUISITOS FUNCIONAIS E NÃO-FUNCIONAIS Os Requisitos Funcionais definem o que o sistema fará, a Engenharia de Software afirma que os Requisitos Não Funcionais definem como o sistema fará. Na prática... o que cada um é responsável: REQUISITOS FUNCIONAIS REQUISITOS NÃO FUNCIONAIS • Incluir/Excluir/Alterar nome em uma tela de manutenção de funcionário • Geração de relatório de determinado período de vendas • Efetuar pagamentos de compra através de crédito ou débito • Consulta e alterações de dados pessoais de clientes • Emissão de relatórios de clientes ou vendas • Consulta de saldo ou estoque • O tamanho pode ser medido em kbytes e número de Chip de RAM. • A velocidade está ligada ao tempo de utilização da tela, ou transações processadas por segundos. • A métrica da portabilidade é o número de sistema-alvo. • A facilidade de uso pode ser medida pelo número de janelas ou o tempo de treino • A confiabilidade tem ligação com o tempo médio que o sistema pode vir a falhar, a disponibilidade ou até mesmo a taxa de ocorrência de falhas. TIPOS DE REQUISITOS NÃO-FUNCIONAIS Processo de engenharia de requisitos e especificação de requisitos MOMENTO PARA DESCONTRAIR... ESTUDAR PRA EVITAR ISSO! Elicitação e análise de requisitos Slides essenciais para entender de uma vez só Elicitação e análise de requisitos: https://pt.slideshare.net/wilkerbueno/elicitao-e-anlise?from_action=save Ou.. só ver abaixo ;P eu baixei em PDF, converti pra JPG e agora ta aqui. Vivaaaaa kkkkk https://pt.slideshare.net/wilkerbueno/elicitao-e-anlise?from_action=save E AGORA.... Validação de requisitos • Processo de checar se os requisitos definem o sistema que o cliente realmente quer. • Validação de requisitos se sobrepõe à análise de requisitos, uma vez que está preocupada em encontrar problemas com os requisitos. • Importante porque erros em um documento de requisitos podem gerar altos custos de retrabalho quando descobertos tardiamente. Validação x Verificação Validação: checar se os requisitos representam o sistema correto. Verificação: checar se os requisitos estão representados corretamente. Exemplos de problemas comuns: ➢ Validade/corretude: a função era exatamente aquela? ➢ Consistência: diferentes requisitos não podem entrar em conflito. ➢ Completude: todos os requisitos necessários devem ter sido incluídos. ➢ Realismo: os requisitos incluídos devem poder realmente ser implementados. ➢ Testabilidade: os requisitos devem poder ser validados sobre o sistema implementado. Exemplos de técnicas de V&V ✓ Revisão: os requisitos são analisados sistematicamente por uma equipe de revisores que busca por erros. ✓ Prototipação: um modelo executável do sistema em questão é demonstrado para os usuários finais e clientes. Estes podem experimentar o modelo para verificar se ele atende às suas reais necessidades. ✓ Projeto de casos de teste: adiantar o processo de projetar casos de teste. Gerenciamento de requisitos Ambiente dinâmico:❖ Ambiente técnico e de negócios muda, inclusive, depois da implantação do software. Mudam hardware, integração com outros sistemas, prioridades de negócio, legislações etc. ❖ Quem comprou e quem usa são pessoas diferentes e entram em conflito depois da implantação. ❖ Mesmo entre usuários há divergência e apenas uma pequena parte deles foi ouvida durante o desenvolvimento. SEMANA 03 MODELOS DE CONTEXTO E INTERAÇÃO Modelagem de software Modelos de software – são produzidos em: ➢ Engenharia de requisitos • Ajudam a extrair os requisitos ➢ Projeto de software • Ajudam a descrever/documentar o sistema Desenvolvimento de modelos abstratos de um sistema • Cada modelo com uma visão/perspectiva diferente • Deixa de fora detalhes • Normalmente usando uma notação gráfica (ex.: UML) RELEMBRANDO A ESTRUTURA DE CLASSE: Vídeo super didático. UML O que é um Diagrama de Classes: https://youtu.be/JQSsqMCVi1k UML - Diagrama de Classes – Relacionamentos: https://youtu.be/IJtQWLnHvcQ https://youtu.be/JQSsqMCVi1k https://youtu.be/IJtQWLnHvcQ Modelos estruturais Organizam um sistema em termos de seus componentes e seus relacionamentos. DIAGRAMAS A BAIXO EXEMPLIFICANDO: • Classes e associações • A classe de consultas • Hierarquia de generalização • Hierarquia de generalização com detalhes adicionais • Associação por agregação Modelos comportamentais Modelam o comportamento dinâmico do sistema quando está em execução. Mostram o que acontece ou deve acontecer quando o sistema responde a um estímulo de seu ambiente. Dois tipos de estímulo: • Dados: chegam e precisam ser processados pelo sistema. • Eventos: acontecem e disparam o processamento do sistema (podem ter dados associados, mas não necessariamente). MODELOGEM ORIENTADA A DADOS MODELOGEM ORIENTADA A EVENTOS Engenharia dirigida a modelos • Model-Driven Engineering (MDE) ▪ Model-Driven Architecture (MDA) • Programa/código é gerado automaticamente a partir de modelos. • UML executável • Exemplos de casos de sucesso: IBM e Siemens • Prós X contras (custo/benefício) SEMANA 04 Projeto de software e Padrões de projeto Projeto alto nível (conceito) → Projeto detalhado 1. Contexto e interações externas com o sistema 2. Arquitetura do sistema 3. Principais objetos do sistema 4. Modelos de projeto 5. Interfaces Padrões de projeto • Motivação: padrões de projeto de prédios • Formas de descrever as melhoras práticas, bons projetos e capturar a experiência de uma forma que torne possível a outros reusar essa experiência • Soluções já testadas • Geralmente associados a projeto orientado a objetos o Incluem herança e polimorfismo Elementos essenciais de um padrão de projeto: 1. Nome significativo (referência). 2. Descrição do problema (contexto de aplicação). 3. Descrição da solução de projeto, seus relacionamentos e suas responsabilidades. Não é o projeto concreto em si, mas um modelo (em geral, expresso graficamente) para ele a ser instanciado de diferentes maneiras. 4. Declaração das consequências (resultados e compromissos) da aplicação do padrão. RESUMINDO... Modelinho de projeto que alguém fez, deu certo e lançou de forma resumida e prática para que outro não precise começar do zero a programação do Software. PROJETO DE ARQUITETURA DE SOFTWARE Uma arquitetura de software é uma descrição de como um sistema de software é organizado. As propriedades de um sistema, como desempenho, proteção e disponibilidade, são influenciadas pela arquitetura adotada. As decisões de projeto de arquitetura incluem questões como o tipo de aplicação, a distribuição do sistema, os estilos da arquitetura a serem utilizados e as formas como a arquitetura deve ser documentada e avaliada. As arquiteturas podem ser documentadas a partir de diferentes perspectivas e visões. Dentre as possíveis visões estão a visão conceitual, a lógica, a de processo, a de desenvolvimento e a visão física. Os padrões da arquitetura são um meio de reutilizar o conhecimento sobre as arquiteturas genéricas de sistemas. Eles descrevem as arquiteturas, explicam quando podem ser usadas e discutem suas vantagens e desvantagens. Entre os padrões de arquitetura comumente usados, estão: Modelo-Visão-Controlador, Arquitetura em camadas, Repositório, Cliente-servidor e Duto e filtro. Modelos genéricos de arquiteturas de sistemas de aplicação nos ajudam a compreender o funcionamento das aplicações, comparar aplicações do mesmo tipo, validar projetos de sistemas de aplicação e avaliar os componentes para reúso em larga escala. Sistemas de processamento de transações são sistemas interativos que permitem que as informações em um banco de dados sejam acessadas remotamente e modificadas por vários usuários. Os sistemas de informação e de gerenciamento de recursos são exemplos de sistemas de processamento de transações. Sistemas de processamento de linguagens são usados para traduzir textos de uma linguagem para outra e para realizar as instruções especificadas em uma linguagem de entrada. Eles incluem um tradutor e uma máquina abstrata que executa a linguagem gerada. O projeto e a implementação de software são atividades intercaladas. O nível de detalhamento no projeto depende do tipo de sistema a ser desenvolvido e se está sendo usada uma abordagem ágil ou dirigida a planos. O processo de projeto orientado a objetos inclui atividades para projetar a arquitetura do sistema, identificar objetos no sistema, descrever o projeto usando diferentes modelos de objetos e documentar as interfaces dos componentes. Vários modelos diferentes podem ser produzidos durante um processo de projeto orientado a objetos. Estes incluem modelos estáticos (modelos de classes, de generalização, de associação) e modelos dinâmicos (modelos de sequência, modelos da máquina de estado). As interfaces de componentes devem ser definidas precisamente, de forma que outros objetos possam usá-las. Um estereótipo de interface da UML pode ser usado para definição das interfaces. Padrão de arquitetura MVC (Modelo-Visão-Controlador), vantagens e desvantagens da sua utilização. O padrão MVC separa a apresentação e a interação dos dados do sistema. O sistema é estruturado em três componentes lógicos que interagem entre si. O componente “Modelo” gerencia o sistema de dados e as operações associadas a esses dados. O componente “Visão” define e gerencia como os dados serão apresentados ao usuário. O componente “Controlador” gerencia a interação do usuário e passa essas interações para a Visão e o Modelo. Vantagens: • Permite que os dados sejam alterados de forma independente de sua representação e vice-versa; • Apoia a apresentação dos mesmos dados de maneiras diferentes, com as alterações feitas em uma representação aparecendo em todas elas. Desvantagens: • Quando o modelo de dados e as interações são simples, pode haver código adicional e complexidade ao código. Decisões de projeto de arquitetura 1. Há uma arquitetura genérica que pode atuar como um modelo para o sistema que está sendo projetado? 2. Como o sistema será distribuído por núcleos/processadores? 3. Que padrões ou estilos de arquitetura podem ser usados? 4. Qual será a abordagem para se estruturar o sistema? 5. Como os componentes estruturais do sistema serão decompostos em subcomponentes? 6. Que estratégia será usada para controlar o funcionamento dos componentes do sistema? 7. Qual a melhor organização de arquitetura para satisfazer os requisitos não funcionais? 8. Como o projeto de arquitetura será avaliado? 9. Como a arquitetura deve ser documentada? Requisitos não funcionais do sistema: • Desempenho• Proteção • Segurança • Disponibilidade • Manutenção Visões da arquitetura: • Visão lógica • Visão de processo • Visão de desenvolvimento • Visão física Padrões/estilos de arquitetura: • Forma de apresentar, compartilhar e reusar conhecimento sobre sistemas de software • Descrição abstrata, estilizada, de boas práticas testadas e experimentadas em diferentes sistemas e ambientes • Descrição bem sucedida anterior de uma organização de um sistema (incluindo informações sobre quando o uso é adequado, pontos fortes/fracos). EXEMPLOS: Vantagens de projetar/documentar a arquitetura: • Apoio à comunicação de stakeholders • Apoio à análise de sistemas • Apoio ao reuso em larga escala Exemplos de estilo arquitetural: (EXEMPLOS DE IMAGENS NOS SLIDES DA AULA 14) • Arquitetura em camadas • Arquitetura genérica em camadas • Arq. Do sistema LIBSYS • Padrão repositório • Repositório para uma IDE • Padrão cliente-servidor • Cliente-servidor p/ biblioteca de filmes • Padrão duto e filtro SEMANA 5 - Arquitetura orientada a serviços O que é SOA e quais são seus benefícios? Service Oriented Architectures (SOA) é, em tradução livre, Arquitetura Orientada a Serviços. Esse conceito de arquitetura busca disponibilizar as funcionalidades de um sistema como um serviço. Desta forma, essas funcionalidades podem ser compartilhadas e reutilizadas entre aplicações. Seu principal objetivo é ser mais flexível em atender às necessidades do mercado. Principais vantagens do SOA • O alinhamento com as regras de negócio; • A diminuição do tempo de desenvolvimento; • O baixo acoplamento entre as partes do sistema facilita a manutenção; • O isolamento da estrutura de um serviço traz flexibilidade durante mudanças; • Facilidade de agregar novas tecnologias a plataformas; • E a possibilidade de reutilização de componentes. Gerenciamento de mudanças • CCB – Change Control Board o “Grupo de desenvolvimento de produto” o Responsável pela tomada de decisões sobre como um sistema de software deve evoluir. o Revisa e aprova todas as solicitações de mudança (com exceção de erros simples, em tela, por exemplo) • Fatores a serem considerados pelo CCB: 1. Consequências de não se fazer a mudança 2. Benefícios da mudança 3. Impacto da mudança (número de usuários afetados) 4. Custos de se fazer a mudança 5. Ciclo de release do produto Gerenciamento de Versões • Recursos de sistemas/ferramentas: o Identificação de versões e releases o Gerenciamento de armazenamento o Registro de histórico de alterações o Desenvolvimento independente o Apoio a projetos Construção de sistemas • Características de sistemas/ferramentas: 1. Geração de script de construção 2. Integração de sistema de gerenciamento de versões 3. Recompilação mínima 4. Criação de sistemas executáveis 5. Automação de testes 6. Emissão de relatórios 7. Geração de documentação SEMANA 6 – Visão geral de Teste de Software Objetivos do teste? • Demonstrar que o teste está livre de defeitos? • Encontrar a existência de falhas! →→→ Os testes podem mostrar apenas a presença de defeitos, mas não a sua ausência. Nomenclatura usual Teste: atividade de V&V Validação de software: • Estamos construindo o software certo? Verificação de software: • Estamos construindo o software da maneira certa? Atividades estáticas de V&V: • Inspeções • Revisões Caracterização de teste de software: Fases de teste • Teste de desenvolvimento • Teste de release (Teste de aceitação) • Teste de usuário Forma de execução do teste • Teste manual • Teste automatizado Teste de regressão Técnicas de teste Como projetar os casos de teste: • Teste de caixa-preta • Teste de caixa-branca Níveis de teste e Desenvolvimento dirigido a testes NÍVEIS DE SOFTWARE Teste de unidade • Ex: testar as classes de objeto ▪ Testar todas as operações associadas ao objeto ▪ Definir e verificar o valor de todos os atributos associados ao objeto ▪ Colocar o objeto em todos os estados possíveis (simular todos os eventos que causam mudanças de estado) Teste de componente (integração) • Tipos de interface que podem conter defeitos: ▪ Interfaces de parâmetro ▪ Interfaces de memória compartilhada ▪ Interfaces de procedimento ▪ Interfaces de passagem de mensagem Desenvolvimento dirigido a testes ▪ TDD – Test-Driven Development o Ideia de “test-first” o Surgiu como parte de métodos ágeis (XP) ▪ Pode ser aplicado em engenharia de software “tradicional” o Intercalação de testes e implementação de código o Desenvolvimento de código incremental em conjunto com teste para esse incremento Benefícios ▪ Melhor entendimento do código ▪ Cobertura mínima de código pelo teste ▪ Teste de regressão automatizado ▪ Depuração simplificada ▪ Documentação indireta do sistema Limitação ▪ Não elimina necessidade de “teste de sistema” posterior RESMUNIDO SEMANA 1: Engenharia de software é uma disciplina de engenharia que se preocupa com todos os aspectos da produção de software. Software não é apenas um programa ou programas; ele inclui também a documentação. Os atributos principais de um produto de software são manutenibilidade, confiança, proteção, eficiência e aceitabilidade. O processo de software inclui todas as atividades envolvidas no desenvolvimento do software. Atividades de alto nível de especificação, desenvolvimento, validação e evolução são parte de todos os processos de software. As ideias fundamentais da engenharia de software são universalmente aplicáveis para todos os tipos de desenvolvimento de sistemas. Esses fundamentos incluem processos de software, confiança, proteção, requisitos e reúso. Existem vários tipos diferentes de sistemas, e cada um requer ferramentas e técnicas de engenharia de software adequadas a seu desenvolvimento. Existem poucas, se houver alguma, técnicas específicas de projeto e implementação aplicáveis para todos os tipos de sistemas. As ideias básicas da engenharia de software são aplicáveis a todos os tipos de sistemas de software. Esses fundamentos incluem processos de software gerenciados, confiança e proteção de software, engenharia de requisitos e reúso de software. Engenheiros de software têm responsabilidades com a profissão de engenharia e com a sociedade. Eles não devem se preocupar apenas com as questões técnicas. Sociedades profissionais publicam códigos de conduta que definem os padrões de comportamento esperados de seus membros. Os processos de software são as atividades envolvidas na produção de um sistema de software. Modelos de processos de software são representações abstratas desses processos. Modelos gerais de processo descrevem a organização dos processos de software. Exemplos desses modelos gerais incluem o modelo em cascata, o desenvolvimento incremental e o desenvolvimento orientado a reúso. Engenharia de requisitos é o processo de desenvolvimento de uma especificação de software. As especificações destinam-se a comunicar as necessidades de sistema dos clientes para os desenvolvedores do sistema. Processos de projeto e implementação estão relacionados com a transformação das especificações dos requisitos em um sistema de software executável. Métodos sistemáticos de projeto podem ser usados como parte dessa transformação. Validação de software é o processo de verificação de que o sistema está de acordo com sua especificação e satisfaz às necessidades reais dos usuários do sistema. Evolução de software ocorre quando se alteram os atuais sistemas de software para atender aos novos requisitos. As mudanças são contínuas e o software deve evoluir para continuar útil. Processos devem incluir atividades para lidar com as mudanças. Podem envolver umafase de prototipação, que ajuda a evitar más decisões sobre os requisitos e projeto. Processos podem ser estruturados para o desenvolvimento e a entrega iterativos, de forma que mudanças possam ser feitas sem afetar o sistema como um todo. O Rational Unified Process (RUP) é um moderno modelo genérico de processo, organizado em fases (concepção, elaboração, construção e transição), mas que separa as atividades (requisitos, análises, projeto etc.) dessas fases. Métodos ágeis: são métodos de desenvolvimento incremental que se concentram em desenvolvimento rápido, releases frequentes do software, redução de overheads dos processos e produção de códigos de alta qualidade. Eles envolvem o cliente diretamente no processo de desenvolvimento. A decisão de usar uma abordagem ágil ou uma abordagem dirigida a planos para o desenvolvimento deve depender do tipo de software a ser desenvolvido, das habilidades da equipe de desenvolvimento e da cultura da empresa que desenvolve o sistema. Extreme Programming é um método ágil, bem conhecido, que integra um conjunto de boas práticas de programação, como releases frequentes do software, melhorias contínuas do software e participação do cliente na equipe de desenvolvimento. Um ponto forte da Extreme Programming é o desenvolvimento de testes automatizados antes da criação de um recurso do programa. Quando um incremento é integrado ao sistema, todos os testes devem ser executados com sucesso. O método Scrum é uma metodologia ágil que fornece um framework de gerenciamento de projetos. É centralizado em torno de um conjunto de sprints, que são períodos determinados de tempo, quando um incremento de sistema é desenvolvido. O planejamento é baseado na priorização de um backlog de trabalho e na seleção das tarefas mais importantes para um sprint. O escalamento de métodos ágeis para sistemas de grande porte é difícil. Tais sistemas necessitam de projeto adiantado e alguma documentação. A integração contínua é praticamente impossível quando existem várias equipes de desenvolvimento separadas trabalhando em um projeto. RESMUNIDO SEMANA 2: Os pontos mais importantes, segundo Sommerville, são: Os requisitos para um sistema de software estabelecem o que o sistema deve fazer e define as restrições sobre seu funcionamento e implementação. Os requisitos funcionais são declarações dos serviços que o sistema deve fornecer ou descrições de como alguns processamentos devem ser efetuados. Muitas vezes, os requisitos não funcionais restringem o sistema que está sendo desenvolvido e o processo de desenvolvimento que está sendo usado. Estes podem ser os requisitos de produto, requisitos organizacionais ou requisitos externos. Eles costumam se relacionar com as propriedades emergentes do sistema e, portanto, aplicam-se ao sistema como um todo. O documento de requisitos de software é uma declaração acordada dos requisitos do sistema. Deve ser organizado para que ambos - os clientes do sistema e os desenvolvedores de software - possam usá-lo. O processo de engenharia de requisitos inclui um estudo da viabilidade, elicitação e análise de requisitos, especificação, validação e gerenciamento de requisitos. Elicitação e análise de requisitos descrevem um processo iterativo que pode ser representado como uma espiral de atividades - descoberta, classificação e organização de requisitos, negociação e documentação de requisitos. A validação de requisitos é o processo de verificação da validade, consistência, completude, realismo e verificabilidade dos requisitos. Mudanças organizacionais, mudanças nos negócios e mudanças técnicas inevitavelmente geram mudanças nos requisitos para um sistema de software. O gerenciamento de requisitos é o processo de gerenciamento e controle dessas mudanças. RESUMINDO SEMANA 3: A UML não possui um diagrama específico para que se faça a modelagem do banco de dados de um sistema. Explique o porquê dessa ausência de diagrama e descreva uma alternativa para que se faça a modelagem de dados utilizando a UML. A UML não possui uma notação específica para modelagem de banco de dados porque é utilizada dentro de um processo de desenvolvimento orientado a objetos e, portanto, assume que os dados serão modelados com o uso de classes, seus atributos e relacionamentos. Alternativamente, o diagrama de classes pode ser utilizado para representação de um modelo semântico de dados, retratando entidades com classes simplificadas (somente nome, sem detalhamento de operações); atributos das entidades, como os próprios atributos das classes, e relacionamentos, por meio de associações nomeadas entre classes. Um modelo é uma visão abstrata de um sistema que ignora alguns detalhes do sistema. Modelos de sistema complementares podem ser desenvolvidos para mostrar o contexto, as interações, a estrutura e o comportamento do sistema. Modelos de contexto mostram como um sistema que está sendo modelado é posicionado em um ambiente com outros sistemas e processos. Eles ajudam a definir os limites do sistema a ser desenvolvido. Diagramas de caso de uso e diagramas de sequência são usados para descrever as interações entre o usuário do sistema que será projetado e usuários ou outros sistemas. Os casos de uso descrevem as interações entre um sistema e atores externos. Diagramas de sequência acrescentam mais informações a eles, mostrando as interações entre os objetos do sistema. Os modelos estruturais mostram a organização e a arquitetura de um sistema. Os diagramas de classe são usados para definir a estrutura estática de classes em um sistema e suas associações. Os modelos comportamentais são usados para descrever o comportamento dinâmico de um sistema em execução. Podem ser modelados a partir da perspectiva dos dados processados pelo sistema ou pelos eventos que estimulam respostas de um sistema. Os diagramas de atividades podem ser usados para modelar o processamento de dados, em que cada atividade representa uma etapa do processo. Os diagramas de estado são usados para modelar o comportamento de um sistema em resposta a eventos internos ou externos. A engenharia dirigida a modelos é uma abordagem de desenvolvimento de software em que um sistema é representado como um conjunto de modelos que pode ser automaticamente transformado em código executável. RESUMINDO SEMANA 4: Uma arquitetura de software é uma descrição de como um sistema de software é organizado. As propriedades de um sistema, como desempenho, proteção e disponibilidade, são influenciadas pela arquitetura adotada. As decisões de projeto de arquitetura incluem questões como o tipo de aplicação, a distribuição do sistema, os estilos da arquitetura a serem utilizados e as formas como a arquitetura deve ser documentada e avaliada. As arquiteturas podem ser documentadas a partir de diferentes perspectivas e visões. Dentre as possíveis visões estão a visão conceitual, a lógica, a de processo, a de desenvolvimento e a visão física. Os padrões da arquitetura são um meio de reutilizar o conhecimento sobre as arquiteturas genéricas de sistemas. Eles descrevem as arquiteturas, explicam quando podem ser usadas e discutem suas vantagens e desvantagens. Entre os padrões de arquitetura comumente usados, estão: Modelo-Visão-Controlador, Arquitetura em camadas, Repositório, Cliente-servidor e Duto e filtro. Modelos genéricos de arquiteturas de sistemas de aplicação nos ajudam a compreender o funcionamento das aplicações, comparar aplicações do mesmo tipo, validar projetos de sistemas de aplicação e avaliar os componentes para reúso em larga escala. Sistemas de processamento de transações são sistemas interativos que permitem que as informações em um banco de dados sejam acessadas remotamente e modificadas por vários usuários. Os sistemas de informação e de gerenciamento de recursos são exemplos de sistemas de processamento de transações. Sistemas de processamento de linguagenssão usados para traduzir textos de uma linguagem para outra e para realizar as instruções especificadas em uma linguagem de entrada. Eles incluem um tradutor e uma máquina abstrata que executa a linguagem gerada. O projeto e a implementação de software são atividades intercaladas. O nível de detalhamento no projeto depende do tipo de sistema a ser desenvolvido e se está sendo usada uma abordagem ágil ou dirigida a planos. O processo de projeto orientado a objetos inclui atividades para projetar a arquitetura do sistema, identificar objetos no sistema, descrever o projeto usando diferentes modelos de objetos e documentar as interfaces dos componentes. Vários modelos diferentes podem ser produzidos durante um processo de projeto orientado a objetos. Estes incluem modelos estáticos (modelos de classes, de generalização, de associação) e modelos dinâmicos (modelos de sequência, modelos da máquina de estado). As interfaces de componentes devem ser definidas precisamente, de forma que outros objetos possam usá-las. Um estereótipo de interface da UML pode ser usado para definição das interfaces. Definir a arquitetura de um software é uma atividade muito importante. Em geral, as noções de separação de responsabilidades e independências entre as várias partes do sistema são fortemente consideradas. O padrão de arquitetura usado em muitos sistemas Web é o MVC (Modelo-Visão-Controlador). Descreva as funções de cada uma das partes do padrão MVC e como elas devem interagir entre si. Descreva o padrão de arquitetura MVC (Modelo-Visão-Controlador), citando vantagens e desvantagens da sua utilização. O padrão MVC separa a apresentação e a interação dos dados do sistema. O sistema é estruturado em três componentes lógicos que interagem entre si. O componente “Modelo” gerencia o sistema de dados e as operações associadas a esses dados. O componente “Visão” define e gerencia como os dados serão apresentados ao usuário. O componente “Controlador” gerencia a interação do usuário e passa essas interações para a Visão e o Modelo. Vantagens: Permite que os dados sejam alterados de forma independente de sua representação e vice-versa; Apoia a apresentação dos mesmos dados de maneiras diferentes, com as alterações feitas em uma representação aparecendo em todas elas. Desvantagens: Quando o modelo de dados e as interações são simples, pode haver código adicional e complexidade ao código. RESMUNIDO SEMANA 5: Arquitetura orientada a serviços é uma abordagem de engenharia de software em que os serviços reusáveis padronizados são os blocos básicos de construção para os sistemas de aplicação. Interfaces de serviço podem ser definidas em uma linguagem baseada em XML chamada WSDL. Uma especificação WSDL inclui uma definição dos tipos e operações de interface, o protocolo de ligação usado pelo serviço e a locação de serviço. Os serviços podem ser classificados como serviços utilitários que fornecem uma funcionalidade de uso geral, serviços de negócios que implementam parte de um processo de negócios ou serviços de coordenação que executam outros serviços. O processo de engenharia de serviço envolve a identificação de serviços candidatos à implementação, à definição de interface e à implementação de serviço e teste e à implantação de serviço. As interfaces de serviço podem ser definidas para sistemas legados que continuam úteis para uma organização. Em seguida, a funcionalidade do sistema legado pode ser reusada em outras aplicações. O desenvolvimento de software usando serviços baseia-se na ideia de que os programas são criados por composição e configuração de serviços para criar novos serviços compostos. Modelos de processos de negócios definem as atividades e o intercâmbio de informações que se realizam em um processo de negócios. Atividades em um processo de negócios podem ser implementadas por serviços para que o modelo de processo represente uma composição de serviço. O gerenciamento de configurações é o gerenciamento de um sistema de software em constante evolução. Durante a manutenção de um sistema, uma equipe de CM é responsável por garantir que as mudanças sejam incorporadas no sistema de uma forma controlada e que os registros sejam mantidos com os detalhes das mudanças que foram implementadas. Os principais processos de gerenciamento de configurações estão interessados no gerenciamento de mudanças, no gerenciamento de versões, na construção de sistema e no gerenciamento de releases. Ferramentas de software estão disponíveis para apoiar todos esses processos. O gerenciamento de mudanças envolve avaliar propostas de mudanças dos clientes de sistema e outros stakeholders e decidir se é efetivo implementá-las em um novo release de um sistema. O gerenciamento de versões envolve o acompanhamento das diferentes versões dos componentes de software criadas à medida que as mudanças são feitas. A construção de sistemas é o processo de montagem de componentes de sistema em um programa executável para executar em um sistema de computador-alvo. O software deve ser reconstruído e testado frequentemente, imediatamente após a construção de uma nova versão. Isso facilita a detecção de bugs e problemas introduzidos desde a última construção. Os releases de sistema incluem códigos executáveis, arquivos de dados, arquivos de configuração e documentação. O gerenciamento de versões envolve tomar decisões sobre as datas de release de sistema, preparar todas as informações para distribuição e documentar cada release de sistema. RESMUNIDO SEMANA 6: Os testes só podem anunciar a presença de defeitos em um programa. Não podem demonstrar que não existem defeitos remanescentes. Testes de desenvolvimento são de responsabilidade da equipe de desenvolvimento de software. Outra equipe deve ser responsável por testar o sistema antes que ele seja liberado para os clientes. No processo de testes de usuário, clientes ou usuários do sistema fornecem dados de teste e verificam se os testes são bem-sucedidos. Testes de desenvolvimento incluem testes unitários, nos quais você testa objetos e métodos específicos; testes de componentes, em que você testa diversos grupos de objetos; e testes de sistema, nos quais você testa sistemas parciais ou completos. Ao testar o software, você deve tentar “quebrar” o software usando sua experiência e diretrizes para escolher os tipos de casos de teste que têm sido eficazes na descoberta de defeitos em outros sistemas. Sempre que possível, você deve escrever testes automatizados. Os testes são incorporados em um programa que pode ser executado cada vez que uma alteração é feita para um sistema. O desenvolvimento test-first é uma abordagem de desenvolvimento na qual os testes são escritos antes do código que será testado. Pequenas alterações no código são feitas, e o código é refatorado até que todos os testes sejam executados com êxito. Testes de cenário são úteis porque replicam o uso prático do sistema. Trata-se de inventar um cenário típico de uso e usar isso para derivar casos de teste. Teste de aceitação é um processo de teste de usuário no qual o objetivo é decidir se o software é bom o suficiente para ser implantado e usado em seu ambiente operacional. No particionamento de equivalências as partições são definidas a partir de uma análise do domínio de entrada para o programa. Essa informação é obtida a partir de uma análise da especificação funcional do programa, ou seja, o teste é baseado na especificação para definir os requisitos de teste, sem considerar informações sobre a implementação, sendo, portanto, um teste caixa-preta ou funcional.
Compartilhar