Baixe o app para aproveitar ainda mais
Prévia do material em texto
Segurança de aplicações Aula 01: Modelos de desenvolvimento de software: Processo de desenvolvimento e desenvolvimento ágil de software Apresentação A demanda da sociedade por soluções automatizadas aumenta cada vez mais em diversas áreas. Nesse sentido, o desenvolvimento de software ganha importância, devendo ser feito de forma e�caz e e�ciente. Para atingir esses objetivos, as metodologias de desenvolvimento são fundamentais, pois direcionam a construção do software desde o levantamento dos requisitos até sua entrega ao cliente. Objetivos Descrever o Processo de Desenvolvimento de software; Examinar o Desenvolvimento Ágil de software. Processo de desenvolvimento de software Cada vez mais, a sociedade demanda por serviços para tratar diversos problemas, como, por exemplo: Veri�car o extrato de uma conta bancária, fazer o agendamento médico, acessar o conteúdo online de uma disciplina, entre outras situações. (Fonte: Shutterstock). Nesse sentido, os softwares (programas de computador) são o instrumento ideal para atingir tal objetivo. A tarefa de desenvolver um software, por outro lado, é complexa e traz diversos desa�os. Entre eles, podemos destacar a escolha das tecnologias para desenvolvimento, a coordenação entre prazos de entrega e capacidade de desenvolver, além do treinamento dos integrantes das equipes. Cada organização tem uma forma de tratar todas essas questões, mas, para obterem sucesso, devem seguir metodologias padronizadas. Um exemplo dessas metodologias é a ágil. Como parte do processo de desenvolvimento de software, as seguintes atividades devem ser tratadas: Especi�cação ou requisitos Nessa etapa, as partes envolvidas no projeto — equipe de desenvolvimento e as partes que o demandaram — de�nem as principais funcionalidades do software que planejam criar, bem como as limitações que apresentam ao processo. Projeto e implementação O desenvolvimento é feito de acordo com o que foi estabelecido na especi�cação prede�nida. Veri�cação e validação Nessa etapa ocorrem os testes que garantem que o software está sendo desenvolvido de acordo com a especi�cação e, portanto, atende às necessidades do cliente identi�cadas nos requisitos de negócios. Manutenção e dimensionamento Depois do software desenvolvido, é necessário garantir que sua implementação no cliente funcione corretamente. Para isso ocorrer, uma equipe deve cuidar de sua manutenção. Isto implica que, eventualmente, serão feitas correções e ajustes no software para atender às exigências de quem fez a demanda. Etapas principais na criação de software O processo de desenvolvimento de software deve seguir uma metodologia bem de�nida. Isso é essencial para direcionar os esforços das equipes e evitar retrabalhos. Cada metodologia tem seus pontos fracos e fortes, mas, independentemente disso, é melhor ter uma metodologia a ser seguida do que não ter nenhuma. (Algumas das principais metodologias de desenvolvimento de software são: ágil, implantação do DevOps, cascata e desenvolvimento de aplicação rápida.| Fonte: Fonte: Shutterstock). Metodologia tradicional A metodologia tradicional de desenvolvimento de software em cascata desenvolve cada etapa do sistema por vez. Metodologia ágil Organiza as etapas do processo de desenvolvimento em ciclos curtos e repetitivos. Esses ciclos são chamados de sprints, que signi�cam, literalmente, corridas, e, geralmente, duram duas semanas. Ou seja, a cada fechamento de sprint, uma entrega é feita. Abaixo, seguem as principais etapas do processo de desenvolvimento de software: Clique nos botões para ver as informações. Trata-se da fase inicial do projeto. Aqui, a equipe de desenvolvimento se reúne com o gerente do projeto e do produto para discutir sobre os elementos que podem in�uenciar no desenvolvimento. Por exemplo, a equipe deve discutir sobre os seguintes aspectos do projeto: Alocação de recursos humanos e materiais, estimar prazos e custos, planejar a capacidade de entrega e provisionar os recursos necessários. Este passo é essencial e, se for mal feito, pode ter um enorme impacto negativo em todo o processo de desenvolvimento. Os resultados estratégicos do planejamento são: Plano do projeto de software, requisitos de aquisição, estimativas de custo e cronogramas. Juntos, estes elementos compõem um plano para que a equipe acompanhe e minimize as possibilidades de falhas ao longo do desenvolvimento do projeto. 1. Planejamento Para garantir que o software seja entregue de acordo com a expectativa do cliente é necessário que as equipes de negócios e desenvolvimento se comuniquem sobre os requisitos de negócios do projeto. Caso não façam isso, o software pode não atender ao que foi demandado pelo cliente. A fase de requisitos é fundamental, pois é nela que a equipe agrupa os requisitos das partes interessadas nos negócios. Gerentes de produto, arquitetos e equipes devem trabalhar para documentar os principais processos de negócios e casos de uso que devem ser atendidos pelo software: Automatização, ou otimização dos processos de negócio do cliente. Portanto, os requisitos devem estar corretos, precisos, completos, consistentes e veri�cáveis. Caso a equipe de desenvolvimento siga a metodologia ágil, o resultado dessa fase será um conjunto de tarefas que devem ser executadas durante o projeto. 2. Análise de Requisitos Após o entendimento dos requisitos do projeto pela equipe de desenvolvimento, os arquitetos e desenvolvedores de software devem decidir como projetar a arquitetura da aplicação. Isso é feito através do uso de aplicativos que possuem componentes existentes. Desta forma, a padronização do desenvolvimento e a reutilização dos componentes será facilitada. Os padrões de projeto e prototipagem também permitem a resolução de problemas algorítmicos de forma consistente, direcionando o trabalho do desenvolvedor para padrões pré-estabelecidos. As equipes também podem fazer protótipos que auxiliam nesse estágio para comparar diferentes soluções e encontrar a melhor forma de desenvolvimento. O resultado dessa etapa são documentos de projeto que listam os padrões e componentes a serem utilizados no desenvolvimento do software,bem como o código desenvolvido durante a prototipagem. 3. Projeto e prototipagem de software Nesta fase, o foco da equipe de desenvolvimento está na codi�cação do software. Dependendo da metodologia, o processo pode ser feito em sprints de tempo determinado (no caso ágil), ou seguir um único bloco de esforço (no caso do método cascata). Durante todo o processo de desenvolvimento, a equipe precisa manter contato com as partes interessadas do negócio para garantir que o projeto esteja indo na direção certa, ou seja, que atenda aos requisitos pré-estabelecidos. A saída desse processo é um software testável e funcional. 4. Programação Essa fase é fundamental, pois não há possibilidade de garantir um software de qualidade sem fazer testes. Entre os diversos testes que os desenvolvedores devem fazer estão: A qualidade do código, através de testes unitários; testes de integração, testes de desempenho e testes de segurança. O ideal é que as equipes automatizem os testes com ferramentas de Integração Contínua, de modo a produzir o software pronto para implantação em um ambiente de produção. 5. Teste Nessa etapa ocorre a entrega do software para o cliente. Uma das melhores formas de se chegar a este objetivo é através da automatização desse processo usando um modelo de Integração Contínua - com a ajuda de uma ferramenta como o Jenkins. O objetivo é acelerar e simpli�car essa etapa. O resultado dessa fase resulta na liberação do software de trabalho para produção. 6. Implantação Após a conclusão do desenvolvimento e implantação do software, a equipe de desenvolvimento deve monitorá-lo para garantir que esteja funcionando corretamente. Caso sejam descobertos erros ou defeitos na produção, a equipe de manutenção é acionada para resolvê-los. Cada vezque é feita uma intervenção no software, é possível que sejam inseridos novos problemas. Para reduzir as possibilidades de ocorrerem outros problemas, são executados testes regressivos; ou seja, devem ser feitos testes no software todo. 7.Manutenção Fatores que afetam o tempo necessário para o desenvolvimento de software (Fonte: Shutterstock). Quando se contrata uma empresa para desenvolver um software, a expectativa é que ele esteja disponível para uso dentro de um prazo determinado. Portanto, a organização do projeto de desenvolvimento de software envolve muitos desa�os, pois muitos fatores causam impacto no processo de desenvolvimento. Alguns fatores mais comuns são: problemas com a equipe, como afastamentos, atrasos, produtividade e experiência dos desenvolvedores; defeitos imprevistos ou solicitações de clientes fora do escopo pré-estabelecido; problemas de ambiente de desenvolvimento; subestimação da complexidade do sistema; problemas imprevistos relacionados à capacidade de manutenção, escalabilidade e desempenho. Além disso, ainda existem outras questões que também podem demandar mais tempo do que o planejado, como o tempo necessário para desenvolver protótipos e problemas relacionados à administração da própria organização. Cabe destacar que uma empresa que desenvolve software tem suas padronizações e diversas áreas para atuar; portanto, o desenvolvimento de um projeto em particular está sujeito à prioridade que a própria empresa dá ao mesmo. Isso pode tomar muito mais tempo do que o planejado inicialmente. Todas as questões levantadas di�cultam a estimativa do desenvolvimento de software, pois elas só �cam em evidência quando a equipe começa a codi�car. Portanto, faz parte do planejamento do projeto levar em consideração todos esses fatores e conseguir o comprometimento, dentro da própria organização, do atendimento dos pré-requisitos necessários ao desenvolvimento. Aceleração do processo de desenvolvimento de software Um tempo considerável no desenvolvimento do software ocorre no tratamento dos erros cometidos durante a codi�cação. Muitos fatores podem in�uenciar para que isso ocorra, como inexperiência de alguns dos indivíduos envolvidos nos processos e falhas na comunicação entre os membros da equipe. Para minimizar os riscos de ocorrência desses erros, algumas etapas devem ser aplicadas: Etapa 1 Integração contínua: Trata-se de uma prática de desenvolvimento na qual os códigos do software são integrados em um repositório compartilhado. Também é conhecida como esteira contínua. Esse processo permite que cada integração possa ser veri�cada de modo automatizado. Etapa 2 Controle de versionamento do código fonte: É comum que muitas pessoas atuem na codi�cação do mesmo software. Além disso, é bem comum que esses módulos de desenvolvimento estejam em etapas diferentes de maturidade, ou seja, alguns já estarão testados e validados, enquanto outros módulos ainda estão sendo desenvolvidos. Portanto, as equipes de desenvolvimento precisam usar um repositório de controle para garantir a coerência do software como um todo. Além disso, é bastante comum que os códigos tenham versões e, algumas vezes, é necessário voltar para uma determinada versão. Sem uma ferramenta que faça esse controle, esse processo seria muito complicado. Entre as ferramentas mais comuns para o versionamento de código estão git, cvs e team foundation da Microsoft. Etapa 3 Sistemas de gerenciamento de ciclo de vida de desenvolvimento de software: Um ciclo de vida de desenvolvimento de software lida com diversas partes e fases, com o planejamento,projeto, codi�cação, testes e implantação do software. Todas essas atividades são realizadas de diferentes maneiras. Portanto, a utilização de um software de gerenciamento auxilia a manter o histórico do desenvolvimento e acompanhar cada uma destas etapas com o objetivo de garantir a entrega dentro do prazo pré-estabelecido e com qualidade. Conclusão O desenvolvimento de software é um processo complexo que envolve diversas etapas. A sociedade cada vez mais demanda por soluções automatizadas que desa�am as empresas e os pro�ssionais da área de desenvolvimento a aprender a usar novas tecnologias e metodologias de desenvolvimento. Desenvolvimento ágil de software O desenvolvimento de software é um processo que traz diversos desa�os e que, portanto, precisa de uma metodologia para direcionar e controlar as diversas etapas do desenvolvimento. Dentre as metodologias existentes, uma que tem sido muito usada na prática é o método ágil. Trata-se de uma abordagem que tem como principais características ser iterativa e trabalhar com diversas entregas dentro do prazo determinado, conhecidas como Sprints. O desenvolvimento e as entregas do software, portanto, são feitas de forma incremental desde o início do projeto, em vez de entregar tudo no �m. A metodologia ágil A base do desenvolvimento ágil está fundamentada no desenvolvimento incremental e iterativo, em que todas as fases dentro de um ciclo de vida de desenvolvimento são tratadas repetidamente. Por ter essa característica de entregas ao �nal de cada período pré-determinado (Sprints), o software é aperfeiçoado iterativamente através das considerações feitas pelo cliente. No desenvolvimento ágil, em vez de trabalhar com um único modelo de processo como o implementado no ciclo de vida de desenvolvimento de software convencional, o ciclo de vida do desenvolvimento é dividido em partes menores chamadas de "incrementos" ou "iterações". De acordo com o Manifesto Ágil, as principais características incluem: 1 Envolvimento precoce do cliente 2 Desenvolvimento iterativo 3 Equipes auto-organizadas 4 Adaptação à mudança Entre os métodos mais comuns de desenvolvimento ágil estão: Scrum Kaban Extreme programming Crystal Lean Aspectos do desenvolvimento ágil 1 O desenvolvimento ágil segue um modelo incremental. Essa característica aumenta a colaboração entre os integrantes da equipe tanto na codi�cação do software como no planejamento contínuo. Essa característica tem um importante impacto no compartilhamento de conhecimento. 2 Por ter entregas em prazos mais curtos, os processos de identi�cação e correção de erros são mais simples. O ciclo de desenvolvimento de software – planejamento, prototipagem, implementação, teste e entrega – é coberto pelas metodologias ágeis. 3 Um ponto interessante que cabe destacar é que a principal vantagem da utilização de metodologias ágeis é a entrega de valor ao cliente continuamente, uma vez que as entregas são incrementais. Portanto, o fato de a entrega de software ser mais rápida é apenas um meio para conseguir atingir esse objetivo. Metodologias tradicionais x Metodologias ágeis Clique no botão acima. Na Tabela 1, apresentamos um resumo com algumas das diferenças entre as metodologias de desenvolvimento ágeis e as abordagens tradicionais (baseado nos trabalhos de NERUR, S. et al, 2005, DYBÅ, T;DINGSØYR, T., 2008, e BOHEM, B., 2002). Características Desenvolvimento tradicional Desenvolvimento ágil Desenvolvimento ágil Os sistemas devem ser especificados e desenvolvidos por meio de um planejamento detalhado O software é desenvolvido por pequenas equipes que usam o princípio de melhoria contínua do projeto e teste com base em retorno e mudança rápidos Estilo de gestão Comando e controle Liderança e colaboração Gestão do conhecimento Explícito Tácito Comunicação Formal Informal Modelo de desenvolvimento Modelo de ciclo de vida (modelos em cascata, espiral ou modificado) Modelo de entrega evolutiva Estrutura organizacional Mecânica (burocrática, alta formalização), visando grandes organizações Orgânico (flexível e participativo, incentiva a cooperação social), visando pequenas e médias organizações Controle de qualidade Planejamento difícil e controle rigoroso. Testes difíceis e tardios. Testes permanentes. Requisitos do usuário Detalhado e definido antes da codificação / implementaçãoEntrada interativa Custo de reinicialização Alto Baixo Direção de desenvolvimento Fixo Facilmente mutável Teste Após a codificação de todo software estar concluída Acada iteração Envolvimento do cliente Baixo Alto Habilidades adicionais necessárias dos desenvolvedores Nada em particular Habilidades interpessoais e conhecimento básico do negócio Desenvolvedores Orientado no plano, com habilidades adequadas, acesso ao conhecimento externo Ágil,conhecimento avançado, e cooperativo Clientes Com acesso ao conhecimento, cooperativo, representativo e com poderes Dedicado, experiente, cooperativo, representativo e com poderes Requisitos Muito estável, conhecido antecipadamente Emergente, com mudanças rápidas Arquitetura Design para requisitos atuais e previsíveis Projeto para requisitos atuais Remodelação Caro Não é caro Tamanho Grandes equipes e projetos Pequenas equipes e projetos Objetivos primários Alta segurança Valor rápido Entre as vantagens e desvantagens da aplicação da metodologia podemos destacar: Vantagens • Aplicação de metodologias iterativas e incrementais; • Participação do cliente; • Documentação menos formal e processo de revisão; • O cliente recebe entregas ao longo do desenvolvimento facilitando, assim, a garantia da entrega do software de acordo com suas expectativas; • Flexível para alterar um plano; • Interações individuais sobre ferramentas e processos. Desvantagens • Se os requisitos fornecidos pelo cliente não estiverem claros, o processo de desenvolvimento será prejudicado; • Embora a menor documentação economize tempo de desenvolvimento, por outro lado, é uma grande desvantagem para o desenvolvedor, além de di�cultar o ingresso de novos integrantes na equipe de desenvolvimento; • Pode consumir tempo e desperdiçar recursos devido à constante mudança de requisitos, pois, se os clientes não �cam satisfeitos com o software parcial por determinada iteração e alteram seus requisitos, essa parte incrementada não tem utilidade; • É mais útil para o gerenciamento do projeto do que para o desenvolvedor, pois a metodologia ágil auxilia no gerenciamento das decisões sobre o desenvolvimento de software, estabelece metas para os desenvolvedores e �xa prazos para eles. Entretanto, é muito difícil para os desenvolvedores trabalharem em um ambiente em constante mudança. Conclusão Para atender à crescente complexidade do desenvolvimento de software, de requisitos dinâmicos do usuário, orçamentos baixos e prazos apertados, o desenvolvimento de software ágil fornece uma solução que deve ser levada em consideração para atender aos desa�os enfrentados pela indústria. Por ter como característica as frequentes interações entre desenvolvedores e clientes, reduz as chances de possíveis problemas na entrega �nal. Por outro lado, esta metodologia também cria uma pressão sobre a equipe de desenvolvimento. Portanto, a parte inicial de entendimento do projeto é essencial para que a necessidade de fazer correções ao longo do desenvolvimento sejam minimizadas. Atividade 1. A Análise de Requisitos é uma etapa do ciclo de vida de desenvolvimento de software essencial para garantir que as expectativas do cliente em relação ao que vai receber sejam atendidas. Nesse sentido, selecione a opção que se enquadra corretamente no levantamento de requisitos: a) O software deve ser amigável; b) As operações que envolvam números fracionários devem trabalhar com duas casas decimais; c) O software deve responder rapidamente às solicitações dos usuários; d) Somente os usuários com cadastro no sistema de recursos humanos da empresa poderão acessar o sistema através do seu e-mail e senha corporativos; e) O software deve ser seguro. 2. Os conceitos de veri�cação e validação podem gerar uma certa confusão, pois o primeiro considera se o software está sendo desenvolvido de acordo com a especi�cação e, o segundo, checa se o que foi implementado funciona. Selecione a opção correta que atende a esses conceitos: a) A validação envolve a análise para garantir que o software atenda aos requisitos pré-estabelecidos; b) A verificação envolve a análise para garantir que o software atenda às demandas do negócio do cliente; c) A pergunta: “Estamos construindo o produto certo?” está relacionada ao conceito de validação; d) A confusão a respeito dos conceitos não se justifica, pois são sinônimos; e) A etapa de Verificação e Validação é opcional no ciclo de desenvolvimento do software, pois os testes nas etapas seguintes irão detectar possíveis desvios. 3. Os controles de versionamento de software são muito importantes para garantir a coerência dos códigos desenvolvidos. Selecione a opção correta sobre os controles de versionamento: a) São usados exclusivamente pelos métodos ágeis; b) Como fazem o versionamento do código, é possível recuperar uma determinada versão para atender a alguma demanda específica; c) Apesar da sua importância, são muito difíceis de serem usados na prática; d) São usados, exclusivamente, durante a fase de desenvolvimento do software; e) Para poder utilizar um controlador de versionamento é necessário pagar pela licença. 4. Um dos elementos mais importantes do desenvolvimento ágil são as Sprints. A respeito desse conceito, selecione a opção correta: a) Trata-se de um período flexível para que a equipe possa desenvolver o software; b) É um período pré-determinado para que o software seja implantado no cliente; c) Trata-se de um período pré-determinado para desenvolver algumas partes do software; d) As Sprints são pequenas entregas do software, também chamadas de iterações; e) Também fazem parte das metodologias de desenvolvimento tradicional. 5. No desenvolvimento ágil, o ciclo de vida do desenvolvimento é dividido em partes menores chamadas de "incrementos" ou "iterações". Selecione a opção incorreta a respeito dos fatores de desenvolvimento ágil: a) Envolvimento do cliente desde o início do projeto; b) O desenvolvimento é iterativo; c) As equipes são autoorganizadas; d) Os testes ocorrem após a codificação de todo os software estar concluída; e) O desenvolvimento é adaptado à mudança. Notas Título modal 1 Lorem Ipsum é simplesmente uma simulação de texto da indústria tipográ�ca e de impressos. Lorem Ipsum é simplesmente uma simulação de texto da indústria tipográ�ca e de impressos. Lorem Ipsum é simplesmente uma simulação de texto da indústria tipográ�ca e de impressos. Título modal 1 Lorem Ipsum é simplesmente uma simulação de texto da indústria tipográ�ca e de impressos. Lorem Ipsum é simplesmente uma simulação de texto da indústria tipográ�ca e de impressos. Lorem Ipsum é simplesmente uma simulação de texto da indústria tipográ�ca e de impressos. Referências ALLIANCE, S. The Agile Manifesto: The key values and principles of agile. Disponível em: https://www.scrumalliance.org/ resources/ agile-manifesto. Acesso em: 28 mai. 2020. BOHEM, B. Get Ready for Agile Methods, with Care, IEEE Januarie 2002, tabel 1, p. 68. DYBÅ, T.; DINGSØYR, T.Empirical studies of agile software development: A systematic review. Information and Software Technology 50, 9, 833–859, 2008. Disponível em: https://doi.org /10.1016/ j.infsof. 2008.01.006. Acesso em: 22 jun. 2020. NERUR, S.;MAHAPATRA, R.;MANGALARAJ, G. Challenges of migrating to agile methodologies. Communications of the ACM (May) (2005) 72– 78. Próxima aula Metodologias tradicionais versus ágeis; Ferramentas para desenvolvimento de software. javascript:void(0); javascript:void(0); Explore mais Leia os textos: Metodologias de desenvolvimento: qual a mais adequada? . Metodologia de Desenvolvimento de Software. javascript:void(0); javascript:void(0);
Compartilhar