Baixe o app para aproveitar ainda mais
Prévia do material em texto
Sistemas de Informação Aulas 7 a 13 Engenharia de Software Quando vamos desenvolver um Sistema/Software precisamos levanter uma série de informações e requisites. A programação é apenas uma parte do Sistema. Ela sozinha não é suficiente!!! A Engenharia de Software está aí para tornar os sistemas mais eficientes, pois ela inclui vários conceitos que facilitam o desenvolvimento Engenharia de Software A tecnologia tem evoluído numa velocidade sem precedentes ao longo dos anos. A sociedade fez com que ela se encontrasse presente em praticamente todas as coisas. Uma dessas tendências são os chamados eletrônicos de consumo que nos últimos anos estão mais integrados entre si. Assim, a Internet das Coisas, revolução tecnológica que conecta objetos do cotidiano à rede de computadores, se consolida cada vez mais. O software torna se cada vez mais presentes em nosso dia-a-dia, tornando-se presente nos mais diversos produtos desde os mais óbvios como os computadores pessoais e smartphones, até mesmo aqueles que nem nos damos conta de que está presentes como forno micro-ondas, por exemplo. Todos já sabemos o que é um Software... Ele normalmente é composto por diversas funções, bibliotecas e módulos que geram um programa executável no final do processo de desenvolvimento e este quando executado, recebe algum tipo de entrada, processa os dados seguindo uma sequência algorítmica ou de instruções lógicas e mostra uma saída como resultado deste processamento. Um software bem desenvolvido é normalmente criado pela área de engenharia de software e inclui não apenas o programa de computador em si mas também manuais especificações e configurações Nos ambientes software esse “produto” passa por várias etapas como: análise econômica, análise de requisitos, especificação, codificação, teste, documentação, treinamento, manutenção e implantação Então... Problemas relacionados com logística, coordenação de diferentes equipes ou o controle de máquinas e equipamentos tornam-se mais complexos à medida que se lida com projetos de grande dimensões. A engenharia de software introduz métodos e ferramentas que facilitam o trabalho nesse tipo de projetos e funde diversas disciplinas técnicas e não-técnicas como engenharia de controle e gestão de projetos, por exemplo. Engenharia de Software Engenharia de Software Engenharia de Software é uma área da computação voltada à especificação, desenvolvimento, manutenção e criação de software com aplicação de tecnologias e práticas de gerência de projetos e outras disciplinas visando organização produtividade e qualidade. Empresas usam a engenharia de Software para incluir requisitos que gerenciam modelos de simulação e testam ferramentas para desenvolver produtos com sofisticação e a inteligência do ser humano. Engenharia de Software Hoje dirigimos supercomputadores!!! Desde a performance do motor, distribuição de energia, controle de temperatura, controle de combustível até funções de segurança, são controlados por um complexo sistema de conexões de chips eletrônicos e milhões de linhas de códigos de software Engenharia de Software Requisitos Regulamentares $ $$ $ Engenharia de Software Engenharia de Software Empresas podem usar sistemas virtuais para conseguir provas de segurança totalmente documentadas Engenharia de Software A Engenharia de Software encapsula o trabalho em uma única plataforma multioperável, onde os times naturalmente colaboram. Engenharia de Software Empresas podem fazer versões digitais de seus sistemas de engenharia, que podem ser usados no futuro para novos produtos Engenharia de Software - Resumindo Friedrich Bauer definiu a como engenharia de software é a criação e a utilização de sólidos princípios de engenharia a fim de obter software de maneira econômica, que seja confiável e que trabalhe em máquinas reais. A Margaret Hamilton é creditada a criação do termo engenharia de software. O próprio significado de engenharia já traz os conceitos de criação, construção, análise, desenvolvimento e manutenção. Engenharia de software se concentra nos aspectos práticos da produção de um sistema de software, enquanto a ciência da computação estuda os fundamentos teóricos dos aspectos computacionais Engenharia de Software Aborda tanto questões relacionadas ao ambiente de desenvolvimento do software, como métodos, processos e ferramentas para sua produção. Deve-se ter bastante cuidado na criação de um software, pois quando há um mau planejamento e desenvolvimento, os recursos a serem gastos para conserto e principalmente o tempo a ser disponibilizado para tal procedimento são aspectos inviáveis em qualquer mercado, sobretudo no tecnológico, onde essas duas características são indispensáveis. Engenharia de Software O enfoque da Engenharia de Software é a análise e divisão do problema em pequenas partes, para que se possa realizar uma solução para cada uma delas e, depois de solucionadas, seja realizada a integração das mesmas. Para todo este controle, uma série de etapas devem ser seguidas, denominadas ciclo de um software, que vai desde o planejamento até a entrega do produto, com o objetivo de cumprir todos ou, pelo menos, quase todos os requisitos idealizados. Por ser um ciclo, as etapas não podem ser atropeladas sem antes se obter a verificação da qualidade em cada uma delas. Princípios da Engenharia de Software Os princípios da engenharia de software constituem a base dos métodos, tecnologias, metodologias e ferramentas adotadas na prática e que norteiam o desenvolvimento de soluções de software. Os princípios se aplicam a um processo e ao produto de software se tornando a prática de desenvolvimento de software através da adoção de métodos e técnicas. Geralmente são os métodos e técnicas que constituem uma metodologia que são apoiadas pela utilização de ferramentas. Princípios da Engenharia de Software rigor e formalidade separação de interesses modularidade alta coesão baixo acoplamento abstração antecipação a mudanças generalidade e incrementação Princípios da Engenharia de Software Podemos considerer a engenharia de software como uma área criativa, porém precisamos usar rigor e formalidade para dar sistematização aos processos Rigor – aumenta a confiança no desenvolvimento (análises e avaliações) Formalidade – é o rigor no seu nível máximo (documentação e gerenciamento) A Separação de Interesses envolve dominar a complexidade separando os problemas para seja possível suportar as atividades e processos, paralelização de atividades e separação de responsabilidades. Dividir para Conquistar!!! Princípios da Engenharia de Software Usamos o princípio de Modularidade para dividir o software em módulos, trazendo a tona o conceito de sistemas modulares. É importante atentar que quando estamos trabalhando em um módulo específico precisa ser possível ignorar os detalhes dos demais módulos da solução. Cada módulo dever ter alta coesão, sendo entendido como uma unidade significativa. Os elementos do módulo devem ser fortemente relacionados entre si. O baixo acoplamento remente a baixa interação de um módulo com os outros do sistema possibilitando que eles sejam percebidos como unidades separadas. Princípios da Engenharia de Software A abstração é a identificação de aspectos importnates de um fenômeno, ignorando seus detalhes. Ela deve tronar possível pensar sobre um ssistema através do racicínio sobre seus módulos. Ela serve, por exemplo, para conseguir estimar custos de um prjeto baseado nos projetos passados. A antecipação à mudanças significa ser capaz de suportar a evolução do software considerando sua arquitetura e compatibilidade com mudanças futuras Princípios da Engenhariade Software O princípio da generalidade visa descobrir, durante a resolução de um problema, se ele faz parte de uma instância mais geral, podendo sua solução ser reutilizada. O grande desafio está no balanceamento entre custo e performance. A incrementação está relacionada a evolução de um software através de incrementos estruturados. Neste caso, Podemos utilizer o coneceito de MVP muito difundido nas metodologias ágeis. O Papel Evolutivo do Software Hoje em dia o software assume um duplo papel. Ele é o produto e, ao mesmo tempo, o veículo para entrega do produto. O software entrega o mais importante produto da nossa época - a informação! O software transforma dados pessoais (p. ex., as transações financeiras de uma pessoa) de modo que possam ser mais úteis em determinado contexto; gera informação comercial para melhorar a competitividade; fornece um portal para as redes de informação de âmbito mundial (p. ex., a Internet) e proporciona os meios para obter informação em todas as suas formas. O Papel Evolutivo do Software Software como Produto Como produto ele disponibiliza o potencial de computação presente no computador ou, mais amplamente, numa rede de computadores acessível pelo hardware local. Quer resida em um telefone celular, quer opere em um computador de grande porte, o software é um transformador de informação - produzindo, gerando, adquirindo, modificando, exibindo, ou transmitindo informação, que pode ser tão simples como um único bit ou tão complexa como uma apresentação em multimídia. Software como Produto Atualmente os engenheiros de software estão envolvidos no desenvolvimento de produto de software, ou seja, software que pode ser vendido para seus clientes. Existem dois tipos de softwares produtos fundamentais: 1. Produtos Genéricos: São os softwares do tipo stand-alone, produzidos por uma organização de desenvolvimento e vendido no mercado para qualquer cliente que esteja disposto a comprar. 2. Produtos sob encomenda: São os sistemas encomendados por um cliente. O software é desenvolvido especialmente para aquele cliente com as características voltadas para apenas um cliente. Software como Veículo Como veículo usado para entrega do produto, o software age como uma base para controle do computador (sistemas operacionais), para a comunicação da informação (redes) e para a criação e o controle de outros programas (ferramentas e ambientes de software). Tipos de aplicações de software O software pode ser aplicado em qualquer situação para a qual um conjunto previamente especificado de procedimentos tenha sido definido. O conteúdo e a determinação da informação são fatores importantes para caracterizar a natureza de uma aplicação de software. Conteúdo - forma da entrada e saída da informação. Por exemplo, muitas aplicações comerciais usam dados de entrada altamente estruturados (uma base de dados) e produzem "relatórios" formatados. Determinação da informação - previsibilidade da ordem e temporização da informação. Um programa de análise de engenharia aceita dados que têm uma ordem pré-definida, executa o(s) algoritmo(s) de análise sem interrupção, e produz os dados resultantes em forma de relatório ou de gráfico. Tipos de aplicações de software Software de Sistemas: Software de sistema é uma coleção de programas escritos para servir a outros programas. A área de software de sistemas é caracterizada por interação intensa com o hardware, uso intenso de usuários, possui estrutura de dados complexas ( Exemplos: SO, Sistemas de rede) Software de Aplicação: O software de aplicação consiste em programas isolados que resolvem uma necessidade específica do negócio da empresa ( Exemplo: Software de sistema de tempo real, de pontos de vendas) Softwares Científicos ou de Engenharia: Antigamente esses eram caracterizados por algoritmos que processavam grandes quantidades de números. Hoje em dia essas aplicações estão mais próximas de software de sistemas. Exemplo (software de controle de riscos – Astronômicos, Vulcanologicos, da NASA) Tipos de aplicações de software Softwares Embutidos: O software embutido reside dentro de um produto ou sistema e é usado para implementar e controlar características e funções para o usuário final e para o próprio sistema. Os softwares embutidos podem realizar tarefas muito limitadas e também tarefas da mais alta capacidade de um software. (controles remotos). Software para linha de produto: Projetado para fornecer uma capacidade específica a ser usada por muitos clientes diferentes, esse software pode focar para um mercado limitado e especial ou dirigir-se ao mercado de consumo em massa. (pacote Office, Windows) Aplicações da WEB: Dos mais variados tipos. Software para inteligência artificial: O softwares de IA faz uso de algoritmos não numéricos para resolver problemas complexos que não são passíveis de computação e analise direta. Tipos de aplicações de software Software legado Dão suporte a funções importantes do negócio Críticos para o negócio A má qualidade é comum Projeto, código, documentação Histórico de mudanças mal gerido Evolução ao longo do tempo Novas necessidades Interoperabilidade Necessidade de reengenharia Engenharia reversa Engenharia reversa é o processo de descobrir os princípios tecnológicos e o funcionamento de um dispositivo, objeto ou sistema, através da análise de sua estrutura, função e operação. Objetivamente a engenharia reversa consiste em, por exemplo, desmontar uma máquina para descobrir como ela funciona. Programas proprietários, ou seja, que não possuem seu código aberto, não permitem que você saiba como eles foram programados, para descobrir maneiras de melhorá-los ou mesmo copiá-los. A engenharia reversa tem condições de fazer análises minuciosas sobre o comportamento de programas, para então tentar reconstruí-los, descobrindo assim como eles funcionam internamente. Engenharia reversa Interface: Engenharia reversa pode ser usado quando necessário um sistema efetuar interface com outro sistema e como as negociações entra os dois sistemas deverão ser estabelecidos. Esses requisitos normalmente existem para interoperabilidade. Melhorar deficiências de documentação: A engenharia reversa pode ser realizada quando a documentação de um sistema para a sua concepção, produção, operação ou manutenção possui deficiências e projetistas originais não estão disponíveis para melhorá-lo. Pode fornecer a documentação mais atual necessária para compreender o estado mais atual de um sistema de software. Obsolescência: Circuitos integrados muitas vezes parecem ter sido projetados em sistemas proprietários, obsoletos, o que significa que a única maneira de incorporar a funcionalidade em nova tecnologia é a engenharia reversa do chip existente e, em seguida, reprojetá-lo. Modernização de software: É geralmente necessária, a fim de compreender o estado de software existente ou legado, a fim de estimar adequadamente o esforço necessário para migrar conhecimento do sistema. Muito disso pode ser impulsionada por mudanças de requisitos funcionais, de conformidade ou de segurança. Engenharia reversa Produtos de análise de segurança: Para examinar como um produto funciona, quais são as especificações de seus componentes, estimar os custos e identificar o potencial de violação de patente. Aquisição de dados sensíveis por desmontar e analisar o projeto de um componente do sistema. Outra intenção pode ser a de remover proteção contra cópia, a evasão de restrições de acesso. Resolução de falha: Para corrigir (ou às vezes para melhorar) o software que não é mais suportado por seus criadores (por exemplo, Abandonware). Criação de duplicatas não licenciadas/aprovadas: Tais duplicatas são chamadas de clones no domínio da computação. Fins acadêmicos/aprendizagem:Para fins de aprendizagem podem ser compreender as questões- chave de um projeto mal sucedido e, posteriormente, melhorar o design. Sem rodeios… engenharia reversa é descobrir como funciona Reengenharia A reengenharia é repensar e redesenhar radicalmente os processos de negócios com o objetivo de conseguir grandes melhoras de desempenho, seja nos custos, qualidade, serviços ou tempo. “Está na hora de parar de seguir a trilha das vacas. Em vez de acrescentar processos ultrapassados em hardware e software devemos, rejeitá-los e começar de novo. Devemos fazer uma reengenharia em nossos negócios.” Michael Hammer Reengenharia Motivações para realizar a reengenharia: O sistema não atende mais as necessidades (requisitos) Sistema sem documentação Modernização dos sistemas legados Custo muito alto para manter o sistema legado Código muito bagunçado e com muitos erros Processos de negócios muito ultrapassados Reengenharia Reengenharia Problemas com prazo, planejamento e custos. Prazo CustoPlanejamento Utopia Processo de Software “Preciso criar um app, mas não sei por onde começar”! As 6 etapas fundamentais para tirar um projeto de software do papel: Conhecer as necessidades do cliente Definir os requisitos Avaliar a viabilidade do projeto Documentar todos os procedimentos Escolher a metodologia de desenvolvimento Testar as funcionalidades criadas Etapas do Processo de Software 1. Conheça a necessidade do cliente Todo projeto precisa ter uma reunião inicial, onde serão feitas discussões gerais sobre o que é necessário. O objetivo desta reunião é entender o que o cliente precisa, o porquê ele sente a necessidade daquilo e o quão disposto ele está a investir neste projeto. Esta última informação é muito importante porque é com ela que serão contratadas pessoas, ferramentas e serviços. 2. Defina os requisitos Nesta reunião inicial serão definidos os requisitos do software a ser criado. Estes requisitos podem ser funcionais ou não-funcionais, dependendo de sua aplicação no projeto. Com os requisitos em mãos é preciso analisa-los para então elaborar uma lista de prioridades que mostrará o que o software precisa ter, o que pode limitar cada função e quanto tempo aquilo poderá demorar, em teoria. Os requisitos precisam, depois de serem avaliados, ser documentados, o que costuma ser a parte mais complicada para desenvolvedores, mas muito importante para o projeto em geral. Etapas do Processo de Software 3. Avaliação de viabilidade Nesta etapa deve-se analisar: Pré-existência de soluções que façam o mesmo e por um preço menor. O que, no final das contas, pode ser mais vantajoso para o cliente; Pré-existência de frameworks e códigos que possam ser reaproveitados de alguma forma; Número de pessoas e capacidades necessárias para a formação de uma equipe; Quais tecnologias serão usadas, como o banco de dados, serviço de cloud, linguagens de programação, etc. Tudo isto precisa ser bem analisado, porque não podem haver gaps quando o projeto começar. Se for necessário contratar mais pessoas, é necessário ver o quanto isso custará e se o budget do projeto permite tal ação. Tudo isto deve ser passado ao cliente para que ele autorize ou não o start do projeto. Havendo a aprovação, é hora de começar a documentação. Etapas do Processo de Software 4. Documentação! Sabendo o que deve ser feito, é a hora de definir detalhes mais profundos do desenvolvimento. Nessa etapa, são criadas as documentações que listam o que será desenvolvido e como o processo terá que acontecer. Para isso, entram em cena os wireframes (espécie de exemplos do que deve ser feito), fluxogramas e casos de uso, ferramentas de projetos que fazem toda a diferença na documentação. Por mais que a documentação do projeto seja algo que desenvolvedor não gosta de fazer, é uma etapa essencial para o bom andamento do projeto, pois é onde o time irá se basear na hora de desenvolver o software. Se der algum problema, é na documentação que encontraremos a maioria das respostas. A documentação é um passo que dura o projeto inteiro, mesmo durante as alterações incrementais. Isto acontece porque tais documentos funcionam como um manual do desenvolvedor, onde se diz o que tem de ser feito e como. Etapas do Processo de Software 5. Metodologia de desenvolvimento Uma das características que é escolhida quando o projeto está sendo planejado é qual será a metodologia de desenvolvimento. Esta é uma decisão muito importante pois ela direcionará a forma como o projeto será desenvolvido, as pessoas que farão parte, quando e quais entregas serão feitas, além de outros detalhes importantes. Etapas do Processo de Software 6. Testes e mais testes Na hora em que as primeiras funcionalidades já estiverem prontas, elas deverão ser testadas e entregues. Os testes devem ser muito bem documentados e realizados, buscando emular o uso real da aplicação. É necessário se colocar no lugar do cliente, como se fosse realmente ele utilizando a funcionalidade que foi criada. Este costuma ser um dos principais problemas no desenvolvimento de software, principalmente, quando o teste é realizado somente pelo desenvolvedor, que muitas vezes não possui o conhecimento necessário para realizar o teste com a mesma eficiência que um testador especialista faria. Etapas do Processo de Software Avalie os riscos Para evitar qualquer tipo de problema, deve haver um planejamento que consiga proteger o projeto. Para isso, inúmeras medidas podem ser tomadas. A primeira seria a utilização de backups, um importante recurso para qualquer projeto digital. Além disso, é necessário ter uma infraestrutura que permita uma rápida recuperação caso ocorra algum desastre. Não só backups, mas ter uma equipe de suporte sempre pronta é algo muito importante para projetos de software, pois isso pode evitar que hajam perdas de informação e trabalho, caso algum imprevisto ocorra. Processo Pessoal de Software (PSP) Todo desenvolvedor usa algum processo para construir software de computador. O processo pode ser aleatório ou ad hoc, pode modificar-se diariamente, pode não ser eficiente, efetivo ou mesmo, bem-sucedido, mas existe um processo. O PSP enfatiza a medição pessoal tanto do produto do trabalho quanto a qualidade resultante do produto do trabalho. Além disso, o PSP torna o profissional responsável pelo planejamento do projeto e dá poder ao profissional para controlar a qualidade de todos os produtos do trabalho de software, por ele desenvolvido. Processo Pessoal de Software O modelo PSP define cinco atividades Planejamento: Essa atividade, isola os requisitos e, com base neles, desenvolve estimativas tanto de tamanho quanto de recurso.As tarefas de desenvolvimento são identificadas e um cronograma de projeto é criado. Projeto de alto nível: São desenvolvidas especificações externas para cada componente a ser construído e é criado um projeto dos componentes, Protótipos são construídos quando existe incerteza. Todos os itens são registrados e monitorados. Revisão do Projeto de alto nível: Métodos de verificação formal são aplicados para descobrir erros no projeto. Desenvolvimento: O projeto em nível de componentes é refinado e revisado. O código é, revisado, compilado e testado. Pós- conclusão: Usando as medidas e as métricas coletadas, a efetividade do processo é determinada. Processo Pessoal de Software O PSP enfatiza a necessidade de cada engenheiro de software identificar logo os erros e entender os tipos de erros que ele tende a fazer. O PSP representa uma abordagem disciplinada, baseada na métrica, da engenharia de software que pode levar a um choque de cultura em muitos profissionais, quando o mesmo é usado pela engenharia de software o aperfeiçoamento resultante naprodutividade e qualidade é significativo. Processo de Equipe de Software (TSP) O objetivo do TSP é construir uma equipe de projeto “autodirigida” que se organize para produzir um software de alta qualidade. Para isso foi definido os seguintes objetivos: Construir equipes autodirigidas que planejem e monitorem seu trabalho, estabelecem metas, e possuam seus próprios processos e planos. Mostrar aos gerentes como acompanhar e motivar suas equipes, e como ajudá- las a manter seu desempenho Facilitar o ensino as habilidades de equipe Processo de Equipe de Software O TSP define as seguintes atividades: lançamento, projeto de alto nível, implementação, integração e teste, pós- conclusão. Essas atividades permitem que a equipe planeje, projete e construa softwares de modo disciplinado e, ao mesmo tempo, meça quantitativamente o processo e o produto. A pós-conclusão prepara o cenário para aperfeiçoamento do processo. O TSP fornece benefícios distintos e quantificáveis em produtividade e qualidade. A equipe deve estabelecer um total comprometimento com o processo e deve passar por treinamentos para garantir que a abordagem seja propriamente aplicada. Modelos de Processos de Software Um modelo de processo de software é uma representação abstrata de um processo de software, lembrando que um processo de software é um conjunto de atividades que leva à produção de um produto de software. Cada modelo de processo representa um processo sobre determinada perspectiva e, dessa forma, fornece somente informações parciais sobre esse processo. Esses modelos não são descrições definitivas de processo de software, como já dito anteriormente, são abstrações do processo que podem ser usadas pra explicar diferentes abordagens para o desenvolvimento de software. Modelos de Processos de Software Modelo Caixa-Preta ou Codifica – Remenda - Neste modelo com muita sorte existe uma especificação por escrito. - A codificação é iniciada imediatamente e os erros são corrigidos na medida em que são encontrados. - Este modelo não oferece nenhum mecanismo de gerenciamento, a não ser liberar um produto depois que os volumes de defeitos críticos tenham sido reduzido a níveis aceitáveis. - A garantia da qualidade do software é restrita a teste de níveis de sistema (testes do tipo caixa –preta, aquele que você entra com um dado e espera um resultado). - Essa abordagem é inaceitável para alguns cenários: o Requisitos que implicam na segurança de vidas humanas; o Existência de requisitos de qualidade; o Previsão de custo e cronograma preciso. Modelos de Processos de Software Modelo Waterfall – Cascata O primeiro modelo de processo de desenvolvimento de software publicado originou-se dos processos mais gerais de engenharia de sistemas. Devido ao encadeamento de uma fase com a outra, esse modelo é conhecido como modelo cascata ou modelo de ciclo de vida de software. Para ocasiões em que os requisitos de um problema são razoavelmente bem compreendidos – quando o trabalho flui de modo razoavelmente linear, isso algumas vezes acontece em uma adaptação bem definidas de sistemas já existentes ou aperfeiçoamento dos mesmos. O modelo cascata pode ser melhor utilizado. Os principais estágios desse modelo demonstram as atividades fundamentais de desenvolvimento: Analise e definição de requisitos: Os serviços, restrições e objetivos são definidos em conjunto com os usuários. Projeto de sistema de software: Divide os requisitos em hardware e software, estabelece uma arquitetura geral do sistema. Implementação e teste de Unidade: O projeto de software é realizado, e testes unitários são realizados. Integração e teste de sistema: As unidades individuais do sistema são integrados e testados como um sistema completo para garantir que os requisitos foram atendidos. Operação e Manutenção: Geralmente é a fase mais longa. O sistema é instalado e colocado em operação. Modelos de Processos de Software Em princípio o resultado de cada fase resulta em um ou mais documentos aprovados. A fase seguinte não pode começar sem que a anterior tenha terminado. Porém na pratica esses estágios se sobrepõem e trocam informações entre si. Devido aos custos de produção e aprovação de documentos, as iterações são onerosas e envolvem um retrabalho significativo. É norma que depois de algumas iterações suspender parte dos desenvolvimentos com as especificações e prosseguir com os estágios posteriores do desenvolvimento. A vantagem do modelo cascata consiste na documentação produzida em cada fase e a sua aderência a outros modelos. Seu maior problema é a divisão inflexível do projeto em estágios distintos. Modelos de Processos de Software Modelo Incremental O modelo Incremental combina elementos do modelo cascata aplicado de maneira iterativa. O modelo incremental aplica sequências lineares de uma forma racional à medida que o tempo passa. Com o modelo incremental é possível entregar parte do projeto, ou chamada parte de funcionalidades básicas de um projeto, antes que o mesmo seja concluído na sua totalidade. Quando um módulo incremental é usado, o primeiro incremento é frequentemente chamado de núcleo do produto. Isto é os requisitos básicos são satisfeitos, mas muitas características suplementares deixam de ser elaboradas. Modelos de Processos de Software O processo de desenvolvimento incremental tem uma série de vantagens: Os clientes não precisam esperar até a entrega do sistema inteiro para se beneficiarem dele. Os clientes podem usar incrementos iniciais como protótipos e ganhar experiência, obtendo informações sobre os incrementos posteriores. Existe um risco menor de falha geral do projeto Como os requisitos não são definidos detalhadamente até que um incremento seja implementado, pode ser difícil identificar os recursos comuns exigidos por todos os incrementos. Modelos de Processos de Software O Modelo RAD O RAD(Rapid Application Development, Desenvolvimento Rápido de Aplicação) é um modelo de processo de software incremental que enfatiza um ciclo de desenvolvimento curto. O Modelo RAD é uma adaptação de “alta velocidade” do modelo em cascata, no qual o desenvolvimento rápido é conseguido com o uso de uma abordagem de construção baseada em componentes. No modelo RAD a comunicação trabalha para entender os problemas do negócios e as características informais que o software precisa acomodar. O planejamento é essencial, porque várias equipes de software trabalham em paralelo em diferentes funções do sistema. A modelagem abrange três das fases principais – modelagem de negócios, modelagem dos dados e modelagem dos processos. A construção enfatiza o uso de componentes de software preexistentes e a aplicação de geração de códigos automática. A implantação estabelece a base das iterações subsequentes se necessárias. Se uma aplicação comercial pode ser modularizada de modo a permitir que cada função principal possa ser completada em menos de três meses é uma candidata ao RAD. Modelos de Processos de Software A abordagem RAD tem desvantagens: 1. Para projetos grandes, o RAD exige recursos humanos suficientes para criar um número adequado de equipes RAD. 2. Se desenvolvedores e clientes não estiverem comprometidos com as atividades continuamente rápidas, para completar o sistema em curtíssimo espaço de tempo, o projeto RAD falhará. 3. Se o sistema não puder ser adequadamente modularizado, as construções dos componentes necessários ao RAD serão problemáticas. 4. O RAD pode não ser ajustado quando os riscos técnicos são altos Modelos de Processos de Software Modelos de Processos de Software Modelo – Prototipação Em casos aonde o desenvolvedor esta inseguro da eficiência do seu algoritmo, da adaptabilidade de um sistema operacional ou da forma de interação homem/máquina o paradigmada prototipagem pode oferecer a melhor abordagem. Apesar de a prototipagem poder ser usada como um modelo de processo independente ela é mais comumente usada como uma técnica que pode ser implementada dentro do contexto de qualquer modelo apresentado. A prototipagem auxilia o engenheiro de software e o cliente a entenderem melhor o que deve ser construído quando os requisitos estão confusos. O protótipo pode servir como “o primeiro sistema”, aquele que se recomenda a ser descartado. Modelos de Processos de Software Modelo – Prototipação Tanto os clientes como os analistas gostam do modelo de prototipagem. Os clientes porque tem um sistema real nas mãos e os desenvolvedores porque conseguem construir algo imediatamente. A prototipagem pode ser problemática pelas seguintes razões: O cliente vê o que parece ser uma versão executável do software, ignorando que o protótipo apenas consiga funcionar precariamente. Quando informamos que o produto deve ser refeito para que altos níveis de qualidade possam ser atingidos o cliente reclama e exige alguns acertos para transformar o protótipo em executável. O desenvolvedor frequentemente faz concessões na implementação a fim de conseguir rapidamente um protótipo executável. Modelos de Processos de Software Modelo Espiral O modelo espiral combina a natureza iterativa da prototipagem com os aspectos controlados e sistemáticos do modelo cascata. Ele fornece desenvolvimento rápido de versões cada vez mais completas. Em vez de representar o processo de software como sequências de atividades com algum retorno entre uma atividade e outra, o processo é representado por uma espiral, onde cada loop da espiral representa uma fase do processo de software. Cada loop da espiral esta dividido em quatro setores: Definição dos objetivos: Os objetivos específicos dessa fase do projeto são definidos, as restrições são identificadas e um plano de gerenciamento detalhado e elaborado. Os riscos do projeto são identificados. Avaliação e redução de riscos: Para cada risco do projeto identificado uma analise detalhada é realizada e providências são tomadas para reduzir os riscos. Desenvolvimento e Validação: Após a avaliação do risco um modelo de desenvolvimento para o sistema é selecionado Planejamento: O projeto é revisado e uma decisão é tomada para prosseguimento ao próximo loop da espiral. Se o próximo loop for começar então são elaborados planos para a próxima fase do projeto. Modelos de Processos de Software Modelo Espiral Diferente dos outros modelos, o modelo espiral reconhece o risco. O modelo espiral não termina quando o software é entregue, ele pode ser adaptado para aplicação ao longo da vida do software que foi construído. O modelo espiral é uma abordagem realista do desenvolvimento de sistema e softwares de grande porte. Como o software evolui à medida que o processo avança, o desenvolvedor e o cliente entendem melhor e reagem ao riscos de cada nível evolucionário. O modelo espiral usa a prototipagem como um mecanismo de redução de riscos, porém, mais importante, permite ao desenvolvedor aplicar prototipagem em qualquer estágio da evolução do produto. Modelos de Processos de Software Modelos de Processos de Software Modelos Especializados Os modelos especializados tendem a ser aplicados quando uma abordagem de engenharia de software estreitamente definida é escolhida. Desenvolvimento Baseado em Componentes Os componentes de software de prateleira podem ser usados quando o software precisa ser construído. Esses componentes fornecem funcionalidades-alvo com interfaces bem definidas que permitem ao componente ser integrado no software. O modelo de desenvolvimento baseado em componentes incorpora muitas das características do modelo espiral, demanda uma abordagem iterativa para criação de software. O modelo compõe aplicações a partir de componentes de software previamente preparados. As atividades de modelagem e construção começam com a identificação dos componentes candidatos. Modelos de Processos de Software Modelos Especializados de Processos Independente da tecnologia usada para criar os componentes, o modelo de desenvolvimento baseado em componentes incorpora os seguintes passos: Produtos baseados em componente disponíveis são pesquisados e avaliados para o domínio da aplicação em questão. Tópicos de integração de componentes são considerados. Uma arquitetura de software é projetada para acomodar os componentes. Componentes são integrados a arquitetura. Testes abrangentes são realizados para garantir a funcionalidade adequada. O modelo de desenvolvimento baseada em componentes leva ao reuso do software, e a reusabilidade fornece aos engenheiros vários benefícios mensuráveis. Redução de 70% do prazo do ciclo de desenvolvimento. Redução de 84% do custo do projeto Um índice de produtividade de 26,2. Modelos de Processos de Software O Modelo de Métodos Formais O modelo de métodos formais abrange um conjunto de atividades que levam à especificação matemática formal do software. Permitem ao engenheiro de software especificar, desenvolver e verificar um sistema baseado na aplicação rigorosa de uma notação matemática. Quando métodos formais são usados durante o desenvolvimento, eles fornecem um mecanismo para eliminação de muitos problemas que são difíceis de resolver usando outros paradigmas de engenharia de software. Quando usados durante o projeto, métodos formais servem de base para a verificação do programa e, assim, permite que o engenheiro descubra e corrija erros que poderiam passar despercebidos. Modelos de Processos de Software O Modelo de Métodos Formais As desvantagens desse método são: O desenvolvimento de modelos formais é atualmente muito lento e dispendioso. Como poucos desenvolvedores de software têm o preparo necessário para aplicar métodos formais, torna-se necessário um treinamento extensivo. É difícil usar os modelos como um mecanismo de comunicação, com clientes despreparados tecnicamente. Esse modelo é muito utilizado para construção de softwares críticos. Modelos de Processos de Software Desenvolvimento de Software Orientado a Aspectos Quando as preocupações diversas de um sistema entrecortam várias funções, características e informações do sistema, elas são frequentemente referidas como preocupações transversais. Requisitos referentes a aspectos definem essas preocupações que têm impacto em toda a arquitetura do software. O desenvolvimento de software orientado a aspecto é um paradigma relativamente novo na engenharia que fornece um processo e abordagem metodológica, para definir, especificar, projetar e construir aspectos. Modelos de Processos de Software Processos Unificados O processo unificado reconhece a importância da comunicação com o cliente e dos métodos diretos para escrever a visão do cliente de um sistema (o caso de uso). Ele enfatiza importantes papeis da arquitetura de software e ajuda o arquiteto a se concentrar nas metas corretas. Ele sugere um fluxo de processo de software que é iterativo e incremental, dando a sensação evolucionária, que é essencial no desenvolvimento moderno de software. Modelos de Processos de Software O processo unificado de software possui 5 fases: Fase da Concepção: Abrange atividades de comunicação com os clientes e de planejamento. Em colaboração com os clientes e usuários finais, os requisitos de negócio para o software são identificados, um rascunho de arquitetura é proposto. Os requisitos de negócios são escritos por meio de casos de uso preliminares. Fase de elaboração: Refina e expande os casos de uso preliminares que foram desenvolvidos e expande a representação arquitetural para incluir cinco visões diferentes do software – o modelo de caso de uso, o modelo de analise, o modelo de projeto, o modelo de implementaçãoe o modelo de implantação; A fase da construção: Desenvolve ou adquire componentes de software que vão tornar cada caso de uso operacional para os usuários finais. Todas as características e funções necessárias e requeridas do incremento de software serão implementadas no código fonte. À medida que os componentes são implementados , testes unitários são realizados. Fase de Transição: O software é dado ao usuário final para testes beta e relatórios de feedback do usuário sobre defeitos e modificações necessárias. Fase de Produção: Coincidem com as atividades do processo genérico de implantação, durante essa fase o uso do software é monitorado, é fornecido suporte para o ambiente de operação e os relatórios de defeitos e solicitações de modificações são submetidos e avaliados. Modelos de Processos de Software Rational Unified Process (RUP) O RUP é um exemplo de modelo de processo moderno que foi derivado do trabalho sobre a UML e do Processo Unificado de desenvolvimento de software (UP). O RUP reconhece que os modelos convencionais de processo apresentam uma visão única de processo. Por outro lado, o RUP e descrito a partir de três perspectivas: Uma perspectiva dinâmica, que mostra fases do modelo ao longo do tempo. Uma perspectiva estática, que mostra as atividades realizadas no processo. Uma perspectiva pratica que sugere as boas práticas a serem usadas durante o processo. Modelos de Processos de Software Rational Unified Process (RUP) O RUP é um modelo constituído por fases que identifica quatro fases discretas no processo de software. As fases do RUP estão relacionadas mais estritamente aos negócios do que aos assuntos técnicos. São elas: Concepção: O objetivo dessa fase de concepção é estabelecer um business case para o sistema. Você deve identificar todas as entidades externas (pessoas e sistemas) que irão interagir com o sistema, e definir essas interações. Depois essas informações são usadas para avaliar a contribuição do sistema com o negócio. Elaboração: Os objetivos dessa fase é desenvolver um entendimento do domínio do problema, estabelecer um framework de arquitetura para o sistema, desenvolver o plano de projeto e identificar os riscos principais do projeto. (UML) Construção: A fase de construção esta essencialmente relacionada ao projeto, programação e teste de sistema. As partes do sistema são desenvolvidas paralelamente e integradas durante essa fase. Transição: A fase final do RUP esta relacionada à transferência do sistema da comunidade de desenvolvimento para a comunidade dos usuários e com a entrada do sistema em funcionamento em ambiente real. Modelos de Processos de Software Rational Unified Process (RUP) Cada fase do RUP pode ser realizada de forma iterativa, com os resultados desenvolvidos incrementalmente, além disso o conjunto total de fases pode ser realizada de forma incremental. A visão estática do RUP enfoca as atividades que ocorrem durante o processo de desenvolvimento. Elas são chamadas de workflow, dos quais existem seis. Modelagem de Negócio; Requisitos; Análise de Projeto; Implementação; Teste; Implantação; Gerenciamento de Configuração; Gerenciamento de Projetos; Ambiente
Compartilhar