Prévia do material em texto
Tema 2 Abordagem e fases de desenvolvimento de software Engenharia de Software I Prof. Adriano Sepe Devemos compreender que o processo de software corresponde às atividades necessárias para a produção de um produto de software. A aplicação dessas atividades, pode produzir um novo aplicativo, entenda como um software criado do zero, em quaisquer linguagens de programação. Fases de desenvolvimento de software Mas algo muito comum na construção de uma aplicação direcionado aos negócios está no fato de que ela possivelmente será construída por meio da extensão e modificação de um sistema existente, ou então pela configuração e integração com componentes do sistema. Fases de desenvolvimento de software Segundo Sommerville (2011), existem muitos processos diferentes, mas que todos incluem quatro importantes atividades para a engenharia de software: § Especificação de software; § Projeto e implementação de software; § Validação de software; § Evolução de software. Fases de desenvolvimento de software Também existem atividades relacionadas ao processo, na função de apoiá-lo, como a documentação e gerenciamento de configuração de software. Se avaliarmos as atividades que devem ser executadas, precisaremos descrever os processos de execução, e estes podem incluir os seguintes elementos: § Produtos § Papéis § Pré/pós condições Fases de desenvolvimento de software Segundo Sommerville (2011), os processos são complexos, pois envolvem intelecto e criatividade e são executados por pessoas. Ainda, ele ponderou que não existe um processo ideal, ficando a cargo das organizações o desenvolvimento de um processo, compatível com a realidade individual. Percebe-se a evolução dos processos, focados a tirarem o melhor das pessoas e das organizações, assim como das características dos sistemas em desenvolvimento § Agilidade ou processo? Fases de desenvolvimento de software Compreendemos o modelo de processo de software como uma representação simplificada do processo, também de software. Conforme apresentou Sommerville (2011), cada modelo representa uma perspectiva particular de um processo e, portanto, fornece informações parciais sobre ele. Por exemplo: um modelo de atividade do processo pode mostrar as atividades e sua sequência, mas não mostrar os papéis das pessoas envolvidas. Modelos de processo de software Discutiremos alguns modelos gerais de processos, que também são referenciados em algumas bibliografias como paradigmas de processos, todos na perspectiva de sua arquitetura. Esses modelos são tratados como genéricos, pois não apresentam uma descrição definitiva dos processos de software, apenas partem para uma abstração, que são utilizadas para descrever diferentes abordagens no desenvolvimento de softwares. Modelos de processo de software Podemos observar esses modelos genéricos como sendo frameworks de processo que podem ser aplicados e até adaptados para, então, criamos processos de engenharia de software especializados (SOMMERVILLE, 2011). Modelos de processo de software Continuando... Abordagem e fases de desenvolvimento de software Este modelo genérico foi o primeiro a ser publicado para o processo de desenvolvimento de software e ele foi derivado de processos mais gerais da engenharia de sistemas. A sua execução, por conta do encadeamento entre uma fase e outra, originou o termo associado ao seu nome, “modelo em cascata” ou clico de vida de software. Este modelo enfatiza a etapa de planejamento, quando, a princípio, devemos planejar e programar todas elas. Modelo em cascata Conforme Sommerville (2011), os principais estágios do modelo em cascata refletem diretamente as atividades fundamentais do desenvolvimento: § Análise e definição de requisitos; § Projeto de sistema e software; § Implementação e teste unitário; § Integração e teste de sistema; § Operação e manutenção. Modelo em cascata Modelo em cascata Fonte: Sommerville, 2011. Baseado na ideia de desenvolver uma implementação inicial, apresentá-la para observação e comentários dos usuários e, então, continuar por meio da criação de novas versões, até que o sistema adequado na perspectiva dos seus usuários, esteja concluído. As atividades de especificação, desenvolvimento e validação são intercaladas, e contínuas, e por não estarem separadas, proporcionam um feedback mais rápido entre todas elas. Desenvolvimento incremental As abordagens de desenvolvimento ágeis, que abordaremos mais a frente neste material, tem como parte fundamental o desenvolvimento incremental de software. Considere que a abordagem proporcionada pelo desenvolvimento incremental traz vantagem quando comparado à abordagem em cascata, isso para a maioria dos sistemas de negócios, e-commerce e sistemas pessoais. Desenvolvimento incremental Um fator que potencializa o uso dessa abordagem está no fato de que a utilizamos para resolver problemas no nosso dia a dia. Observe: quando nos deparamos com um problema, dificilmente elaboramos todo um planejamento para a sua resolução, diferentemente agimos a partir de pequenas ações até alcançarmos a real solução – e isso nos ajuda também a lidar mais facilmente com ações mal planejadas, pois o feedback do resultado será mais rápido (SOMMERVILLE, 2011). Desenvolvimento incremental Esse conhecimento empírico pode ser levado para o desenvolvimento de software, cujo uso da perspectiva de pequenos incrementos proporcionará economias financeiras. Caso haja necessidade de mudanças, elas serão aplicadas mais rapidamente pela continuidade das atividades e feedback imediato. Considere o seguinte raciocínio, os incrementos às novas versões, incluem novas funcionalidades solicitadas pelo cliente, baseando-se em critérios. Desenvolvimento incremental Ao compararmos o modelo incremental com o modelo em cascata, algumas vantagens serão percebidas, com destaque para estas (SOMMERVILLE, 2011): § Custo; § Feedback; § Agilidade. Modelo incrementa X Desenvolvimento incremental Existem também pontos negativos para a abordagem incremental, com destaque aos seguintes problemas: § Visibilidade; § Degradação. Desenvolvimento incremental Percebe-se que, para sistemas de vida-longa, grandes e complexos, onde várias equipes diferentes desenvolvem partes dele, o modelo incremental pode trazer problemas críticos. Desenvolvimento incremental Sistemas de grande porte, necessitam de um framework e de estabilidade em sua arquitetura e, ainda, clareza nas responsabilidades das equipes, com um forte apreço ao padrão e à arquitetura. Isso tudo deve ser planejado com antecedência e não desenvolvido de forma incremental (SOMMERVILLE, 2011). Desenvolvimento incremental Desenvolvimento incremental Fonte: Sommerville, 2011. Finalizando... Abordagem e fases de desenvolvimento de software É comum que, em projetos de software, haja algum tipo de reuso. Isso consiste na reutilização de partes, elementos ou módulos já desenvolvidos, com uma perspectiva inicial diferente daquela que deseja-se reutilizar. Isso é possível quando as pessoas envolvidas no projeto procuram meios e condições para facilitarem o processo de modificação e incorporação de elementos desenvolvidos, em seus sistemas. Engenharia de software orientada a reuso A reutilização ocorre independentemente do processo de software envolvido. Porém, a partir do século XXI, processos de desenvolvimento com foco no reuso de software existente, tornaram-se amplamente utilizados. Essas abordagens, conhecidas como abordagens orientadas a reuso, foi definidapor Sommervile (2011) como dependente de uma ampla base de componentes reusáveis de software e de um framework de integração para a composição desses componentes. Engenharia de software orientada a reuso Este modelo possui estágio de especificação de requisitos iniciais e, ainda, estágio de validação, ambos comparáveis aos outros processos de software, mas quando analisado os estágios intermediários, percebe-se que são diferentes (SOMMERVILLE, 2011) § Análise de componentes; § Modificação de requisitos; § Projeto do sistemas com reuso; § Desenvolvimento e integração. Engenharia de software orientada a reuso Segundo Sommerville (2011), a engenharia de software orientada a reuso tem a vantagem óbvia de reduzir a quantidade de software a ser desenvolvido e, assim, reduzir os custos e riscos. Geralmente, também proporciona a entrega mais rápida do software. Atualmente, podemos projetar um software a partir do processo orientado a reuso e utilizar três tipos diferentes de componentes: § Web services; § Coleção de objetos; e § Software standalone. Engenharia de software orientada a reuso Engenharia de software orientada a reuso Fonte: Sommerville, 2011. Avaliando Sommervile (2011) a respeito do modelo espiral, ele afirmou que um framework de processo de software dirigido a riscos (o modelo em espiral) foi proposto por Boehm (1988). Perceba que o processo de software é representado como uma espiral, diferente de outros modelos onde uma sequência de atividades com alguns retornos de uma para outra. Modelo espiral Uma volta no espiral representa uma fase do processo de software e, assim, uma volta mais interna, mais próxima do centro, pode preocupar-se com a viabilidade do sistema; o ciclo seguinte, com definição de requisitos; o seguinte, com o projeto do sistema, e assim por diante. Modelo espiral Uma característica fundamental do modelo em espiral é que existe a combinação de prevenção e tolerância a mudanças, pois existe a concepção de que as mudanças são um resultado de riscos de projeto, então de forma explicita há atividades focadas no gerenciamento de riscos para sua redução (SOMMERVILLE, 2011). Modelo espiral São quatro setores projetados para cada ciclo: § Definição de objetivos; § Avaliação e redução de riscos; § Desenvolvimento e validação; § Planejamento. Com destaque, o modelo espiral apresenta uma abordagem de processo de software, com o reconhecimento explícito do risco, fator que não ocorre em outros processos de softwares. Modelo espiral Modelo espiral Fonte: Sommerville, 2011.