Baixe o app para aproveitar ainda mais
Prévia do material em texto
29/11/2020 Ead.br https://fmu.blackboard.com/webapps/late-Course_Landing_Page_Course_100-BBLEARN/Controller 1/35 PRÁTICAS DE ENGENHARIA DEPRÁTICAS DE ENGENHARIA DE SOFTWARESOFTWARE GERENCIAMENTO,GERENCIAMENTO, CONFIGURAÇÃO E TESTECONFIGURAÇÃO E TESTE DE DE SOFTWARESOFTWARE Autor: Esp. Daniel Brandão I N I C I A R 29/11/2020 Ead.br https://fmu.blackboard.com/webapps/late-Course_Landing_Page_Course_100-BBLEARN/Controller 2/35 introduçãoIntrodução Arquitetura de software é o estudo da estrutura e desempenho em larga escala dos sistemas de software. Aspectos importantes da arquitetura de um sistema incluem a divisão de funções entre os módulos, os meios de comunicação entre os módulos e a representação de informações compartilhadas. A de�nição visa abranger esses usos distintos, mas relacionados, enquanto encoraja uma de�nição mais rigorosa do que constitui a organização fundamental de um sistema em domínios especí�cos. Para um bom funcionamento, adotar estruturas que auxiliem na con�guração e gerenciamento de projetos é fundamental. Nesta unidade, iremos mais a fundo nas técnicas e tecnologias envolvidas no processo de gerenciamento e con�guração de versões de software em um processo de entrega e integração contínua - CD/CI (em inglês chamado de Continuous Delivery/Continuous Integration), assim como de técnicas e automação de testes. 29/11/2020 Ead.br https://fmu.blackboard.com/webapps/late-Course_Landing_Page_Course_100-BBLEARN/Controller 3/35 Uma das boas práticas na gestão de projetos de software é o controle de processos e de versionamento de código-fonte. Com um projeto bem de�nido na fase de análise de sistemas, a primeira etapa como levantamento de requisitos e boas práticas são estabelecidas, a �m de que a equipe de desenvolvimento esteja a par do contexto em que estarão envolvidos no projeto. Com o avanço das tecnologias envolvidas na troca de mensagens em sistemas, as aplicações e softwares precisaram evoluir e, com isso, o modo como as equipes de desenvolvimento e os programadores full stack criam e disponibilizam essas aplicações também precisou evoluir. As linguagens de programação deixaram de ser puro código e passaram a ter toda uma base por trás, com frameworks e servidores próprios para executar aquele código. Com essa estrutura, a forma como se enviam os arquivos para um servidor, como na web, precisou acompanhar tudo isso, evoluindo do uso simples do protocolo FTP (File Transfer Protocol ou Protocolo de Transferência de Arquivo) para o CD (Continuous Delivery ou Entrega Contínua) e CI (Continuous Integration ou Integração Contínua). Gerenciamento deGerenciamento de Versões deVersões de SoftwareSoftware 29/11/2020 Ead.br https://fmu.blackboard.com/webapps/late-Course_Landing_Page_Course_100-BBLEARN/Controller 4/35 Um projeto de software requer diferentes olhares, desde sua fase de ideação, na prototipação inicial, passando por levantamento de requisitos, re�namento desses requisitos, a construção de modelos de banco de dados, o desenvolvimento em si, testes e mais testes. Uma das fases �nais é a entrega do projeto, fase essa conhecida como deploy (do inglês, implementar). É nesta última fase que o sistema passa a estar em um servidor, já como ambiente de homologação e habilitado para testes em ambiente real que, posteriormente, será liberado no chamado Ambiente de Produção. Este ambiente é como chamamos o estado de uso do sistema por seus usuários. É o ambiente onde o sistema está em execução de fato. Com o sistema em produção, o que pode ocorrer após isso são as eventuais manutenções ou melhorias, lançamento de novas versões e trabalhos do gênero. Para Lopes et al. (2019, p. 2), Cada etapa do processo não envolve somente o desenvolvedor e a linguagem, mas também o ambiente onde os processos estão ocorrendo, de forma que um mesmo produto de software assume comportamentos diferentes de acordo com seu ambiente de desenvolvimento. Isso porque durante seu desenvolvimento um sistema precisa passar por uma série de testes, mudanças e adequações [...]. Observe que a etapa de entrega é precedida de outras que também são de total importância. A entrega ou implantação de uma aplicação também necessita de cuidados especiais e deve contar com especialistas no processo, de acordo com o grau de complexidade da estrutura de servidor empregada, das tecnologias utilizadas no desenvolvimento e da quantidade de entregas necessárias ao longo do processo de deploy. Métodos Ágeis de Desenvolvimento Assim como um sistema não é criado apenas de uma forma, uma só linguagem de programação e um mesmo banco de dados sempre, o modo de criar projetos também possui diferentes vertentes. Os métodos ágeis de desenvolvimento de software surgiram no �nal da década de 90, propondo uma nova abordagem para organizar tais atividades (SATO, 2014, p. 2). 29/11/2020 Ead.br https://fmu.blackboard.com/webapps/late-Course_Landing_Page_Course_100-BBLEARN/Controller 5/35 Esses métodos não trabalham apenas com a ideia da programação em si, mas de todos os aspectos de um projeto, incluindo as entregas. Até então, as tarefas de desenvolvimento e a parte operacional do sistema eram bem divididas em times ou funções distintas. Enquanto um tem o interesse apenas de pensar no desenvolvimento em si, visando ao código-limpo e requisitos satisfeitos, o outro preza pela estabilidade do serviço e a persistência da aplicação, sempre disponível ao usuário �nal. Na tentativa de agilizar o processo e de não ter um abismo entre a equipe ou pessoa responsável pela programação em si e quem irá testar e posteriormente implantar a aplicação em servidor de produção, foram surgindo novas visões e técnicas de trabalho entre os processos. Dessa necessidade, surgiu o conceito de CI/CD – Continuous Integration/Continuous Delivery (Integração Contínua e Entrega Contínua). Essa técnica diminui o tempo entre cada deploy e passa a ter mais entregáveis ao longo do processo. Sato (2013, p. 5) ainda a�rma que o aumento da frequência de deploys faz com que a quantidade de mudanças em cada deploy diminua, reduzindo também o risco associado a ele. Logo, com mais entregas em tempos mais curtos entre si, haverá menos trabalho de correção, fazendo com que a equipe consiga entregar um produto de mais qualidade com baixos riscos de grandes manutenções futuras. Entrega Contínua CD (Continuous Delivery), como se chama o processo de Entrega Contínua de uma aplicação, é o processo de entrega constante. Feita assim que pequenos artefatos são desenvolvidos. No desenvolvimento de sistemas modulares, por exemplo, cada módulo é uma parte do sistema. A aplicação é constituída de partes menores onde cada uma representa um módulo, podendo ser dividido em: cadastro de clientes, catálogo de produtos, controle �nanceiro, recursos humanos, por exemplo. Na técnica de Entrega Contínua (CD), ao invés de ser submetida apenas a parte da aplicação ou a aplicação inteira de uma vez, ao �nal do processo, as entregas ou submissões da aplicação em pequenas etapas podem ser diárias, semanais ou em outra periodicidade. 29/11/2020 Ead.br https://fmu.blackboard.com/webapps/late-Course_Landing_Page_Course_100-BBLEARN/Controller 6/35 Para Bernardo (2018, on-line), Entrega Contínua é uma abordagem na qual os times de desenvolvimento lançam produtos de qualidade de forma frequente, previsível e automatizada. Em vez de fazer grandes entregas de uma vez, fazem várias pequenas e rápidas — reduzindo as chances de erros e conquistando maior controle de qualidade. A prática se apresenta como uma solução moderna de desenvolvimento de sistemas, visto que, com o desenvolvimento sendo feito orientado a entregas, ao �nal de cada entrega, o programador tem mais segurança. O que ele está criando passa por testes de execução tanto em ambiente de desenvolvimento quanto no ambiente de produção. Esse processo é compreendido quando se utiliza o versionamento de código. Ao se utilizar técnicas e ferramentasde controle de versão, há uma segurança de que, caso algum erro ocorra durante o processo de deploy ou se alguma das entregas feitas apresente defeito, a aplicação pode retornar a um estágio anterior ao da entrega defeituosa, fazendo com que o erro seja reparado de maneira mais rápida e prática. Muitas vezes, isso é detectado tão depressa que o usuário do sistema em si nem percebe que houve um downgrade da aplicação (voltar a um estado anterior). Com a aplicação do conceito de Entrega Contínua (CD), alguns benefícios são notados, como: automatização do processo de deploy de uma aplicação; melhora na produtividade do time de desenvolvimento; encontro e correções de bugs mais rapidamente; distribuição de atualizações mais rapidamente. Podemos dizer que essas são as principais características do uso de CI/CD no desenvolvimento e instalação de uma aplicação em servidor web. Uma tarefa geralmente ligada da CD é o provisionamento de servidor. Segundo Sato (2014, p. 63), O termo provisionamento é comumente usado por empresas de telecomunicações e por equipes de operações para se referir às etapas de preparação iniciais de con�guração de um novo recurso. Por exemplo: provisionar um aparelho celular, provisionar acesso à internet, provisionar um servidor, provisionar uma nova conta de usuário, e assim por diante. 29/11/2020 Ead.br https://fmu.blackboard.com/webapps/late-Course_Landing_Page_Course_100-BBLEARN/Controller 7/35 Em outras palavras, provisionar é prover previamente um ambiente ou con�guração inicial de algum serviço para que o usuário possa utilizar sem ter mais esse trabalho a cada novo aparelho. No caso de aplicações web, já é comum utilizar servidores em nuvem ou servidores dedicados em empresas terceirizadas. Nesse caso, o nível de provisionamento vai variar, podendo utilizar o conceito de virtualização, com máquinas virtuais, atuando em um mesmo servidor, onde toda a estrutura necessária em nível de software pode ser feita ainda em ambiente de desenvolvimento e, posteriormente, ser submetida completamente, já pronta e con�gurada, para o ambiente de produção em servidor web. praticarVamos Praticar Leia o trecho: “Muitas empresas de sucesso na internet – como Google, Amazon, Net�ix, Flickr, GitHub e Facebook – perceberam que a tecnologia pode ser usada a seu favor e que o atraso no deploy para produção signi�ca atrasar sua habilidade de competir e se adaptar a mudanças no mercado. É comum que elas realizem dezenas ou até centenas de deploys por dia” (SATO, 2014, p. 4). Essa linha de pensamento que tenta diminuir o tempo entre a criação de uma ideia e sua implementação em produção também é conhecida como: a) Engenharia de Software. b) Arquitetura de Software. c) Integração Contínua. 29/11/2020 Ead.br https://fmu.blackboard.com/webapps/late-Course_Landing_Page_Course_100-BBLEARN/Controller 8/35 d) Entrega Contínua. e) Métodos Ágeis. 29/11/2020 Ead.br https://fmu.blackboard.com/webapps/late-Course_Landing_Page_Course_100-BBLEARN/Controller 9/35 O ambiente de produção é como chamamos o ambiente de servidor web em que a aplicação estará em execução e, em consequência, sendo utilizada pelo usuário �nal da mesma. Após a submissão e as devidas parametrizações do servidor, a aplicação deverá estar pronta para uso. Mas, como submeter os arquivos da aplicação ao servidor? É isso que veremos a seguir, com duas formas distintas de fazer a tarefa: com Entregas Contínuas ou um deploy único. Aplicação com Entregas Contínuas Segundo Bernardo (2018, on-line), na integração contínua, os desenvolvedores integram as suas mudanças ao branch principal sempre que possível. [...] As mudanças são validadas com builds de testes que rodam de forma automatizada, impedindo problemas na hora de lançar mudanças nas integrações. Integração eIntegração e Con�guração deCon�guração de SistemasSistemas 29/11/2020 Ead.br https://fmu.blackboard.com/webapps/late-Course_Landing_Page_Course_100-BBLEARN/Controller 10/35 Geralmente ligada a um processo automatizado, as entregas e integrações contínuas permitem que a equipe de desenvolvimento se preocupe menos com as entrega em si e mais com sua tarefa principal, que é a de criar as aplicações e seus testes. Esta metodologia permite ter equipes mais focadas em programar propriamente, deixando algumas tarefas mais autônomas e menos burocráticas, dando mais liberdade aos desenvolvedores. Esta integração e entregas contínuas estão diretamente ligadas ao versionamento e controle de código. O método mais comum de criar versões de código é o uso do GIT. Serviços como GitHub e GitLab são os mais conhecidos serviços que utilizam a metodologia da criação de versões de arquivos em ambiente web. Esta prática com Git realiza a criação de repositórios onde cada arquivo de um projeto é criado e submetido a um servidor, onde será armazenado como cópia de seu estado atual, permitindo assim que cada arquivo criado e alterado tenha a possibilidade de ser revertido a um estado anterior. Logo, são criadas cópias ou versões do arquivo, vindo daí o conceito de versionamento. O controle de versões ou de código-fonte é uma forma de gerenciamento na alteração de códigos em arquivos de uma aplicação. É como você ter um site na web, já funcionando e sendo utilizado pelos usuários, mas se você precisar adicionar mais uma opção ao menu. Você pode alterar o arquivo com o menu localmente e, após a alteração, submetê-lo ao servidor web. Com isso, o site será atualizado e a nova opção de menu estará disponível. Em um processo de transferência de arquivo comum via FTP, por exemplo, o arquivo que contém o menu originalmente será substituído pela nova versão. Com uso do versionamento de código, tanto a nova versão do arquivo como a anterior, estão disponíveis. Daí vem a ideia de versão de código. Git Git é um sistema de controle de versão de arquivos onde é possível desenvolver projetos com diferentes pessoas contribuindo ao mesmo tempo, criando versões de cada alteração sem riscos de alterações serem sobrescritas (SCHMITZ, 2015). Esse sistema foi criado por Linus Torvalds, o mesmo criador do núcleo (kernel) do sistema operacional Linux. A ideia do Git é ter diferentes versões de um mesmo arquivo, de maneira independente um do outro, podendo reverter a um estado anterior o 29/11/2020 Ead.br https://fmu.blackboard.com/webapps/late-Course_Landing_Page_Course_100-BBLEARN/Controller 11/35 arquivo sempre que necessário. Cada atualização de arquivo é chamada de con�rmação. É geralmente utilizado como uma aplicação por shell script ou prompt de comando, com comandos básicos como Pull, Commit, Split e Merge. Os maiores benefícios apresentados pelo uso do versionamento via Git são: Acompanhamento histórico de alterações: é possível revisar como as con�rmações foram alteradas ao longo do tempo, ver quando e por quem as alterações foram feitas e reverter para uma con�rmação anterior, se necessário. Esse histórico facilita a identi�cação e a correção de bugs. Trabalho em equipe: você pode compartilhar seu código facilmente com outros colegas de equipe para revisão antes de con�rmar ou mesclar um arquivo. Além disso, os recursos de rami�cação e revisão permitem o desenvolvimento simultâneo. Várias pessoas podem trabalhar no mesmo arquivo e resolver as diferenças nele posteriormente. Melhora na velocidade e produtividade da equipe: o Git facilita o rastreamento de alterações no código. O desenvolvedor pode se concentrar em escrever código, em vez de gastar tempo rastreando e mesclando versões diferentes de sua equipe. Além disso, o Git executa cálculos e armazena seu repositório principal localmente, tornando-o mais rápido na maioria das operações. Disponibilidade e redundância: o Git trabalha de maneira distribuída, o que signi�ca que não existe um local central e único onde tudo esteja armazenado. Em um sistema distribuído, existem vários backups no caso de você precisar de um. Essa abordagem também signi�ca quevocê pode trabalhar off-line e con�rmar suas alterações quando estiver tudo pronto. Git é o padrão do setor: devido à sua popularidade, o Git se transformou no padrão de muitos ambientes de desenvolvimento integrado (IDEs) e por muitas ferramentas populares de desenvolvedor, incluindo AWS CodeCommit, Jenkins e Travis. Existem muitos recursos gratuitos do Git disponíveis. A Figura 3.1 apresenta a estrutura de um repositório Git, baseado em um �uxo de trabalho com diferentes rami�cações. 29/11/2020 Ead.br https://fmu.blackboard.com/webapps/late-Course_Landing_Page_Course_100-BBLEARN/Controller 12/35 Como apresentado pela �gura, o primeiro elemento representa o chamado Working Directory, que é a pasta que contém os arquivos atuais, em que se está trabalhando no momento. A segunda �gura representa o Index Stage, uma área temporária de arquivos, que estarão preparados para realização do commit (envio). A terceira imagem seria a Head, área de rami�cação dos arquivos no repositório. Figura 3.1 - Fluxo de trabalho em um processo Git Fonte: Elaborada pelo autor. 29/11/2020 Ead.br https://fmu.blackboard.com/webapps/late-Course_Landing_Page_Course_100-BBLEARN/Controller 13/35 Para realização das operações, o ambiente Git propõe o uso de comandos, como: Pull, Push, Merge, Clone, Commit, Branch, entre outros. Através de linha de comando, você gerencia projetos inteiros ou arquivos especí�cos em um ou mais repositórios. praticar V P ti saibamaisSaiba mais O Git utiliza comandos básicos, uma espécie de linguagem própria para troca de informações e o cumprimento do �uxo de processos dele mesmo. Alguns comandos como Git init (utilizando para iniciar um repositório), Git Pull (serve para baixar as últimas alterações de um repositório), Git Remote -V (para saber onde estão indo as alterações sendo realizadas), Git Status (comando que mostra se há alterações a serem submetidas ao repositório), Git Commit (comando que “comita”, ou seja, envia arquivos novos ou alterados aos servidores). Saiba mais sobre comandos Git acessando o site. ACESSAR https://rogerdudler.github.io/git-guide/index.pt_BR.html 29/11/2020 Ead.br https://fmu.blackboard.com/webapps/late-Course_Landing_Page_Course_100-BBLEARN/Controller 14/35 p Vamos Praticar O versionamento de código via GIT é uma forma de gerenciar código-fonte ou arquivos de maneira a criar instâncias deles. Com esse sistema, é possível compartilhar arquivos entre vários autores e colaboradores sob a segurança de estar criando cópias de cada versão de arquivo. Sobre os benefícios de se utilizar o versionamento via GIT, é correto o que se a�rma em: a) Transferência de arquivos via Cliente FTP. b) Redundância e backup único dos arquivos. c) Uma tarefa executada exclusivamente pelo DevOps. d) Aumento na velocidade e na produtividade no desenvolvimento. e) Menor acoplamento entre equipes de desenvolvimento e produção. 29/11/2020 Ead.br https://fmu.blackboard.com/webapps/late-Course_Landing_Page_Course_100-BBLEARN/Controller 15/35 O contexto do desenvolvimento de software engloba técnicas que buscam agilizar o processo da criação de sistemas. Como temos visto, alguns passos são importantes de serem contemplados no projeto de software com objetivo de não apenas concluir um projeto, mas de manter a qualidade no produto �nal, contando com menor tempo de desenvolvimento e a otimização do trabalho da equipe de desenvolvimento. Um dos aspectos mais importantes é o teste de software. Geralmente, o teste de software é de�nido como uma atividade para veri�car se os resultados reais correspondem aos resultados esperados e para garantir que o sistema de software esteja livre de defeitos. Envolve a execução de um componente de software ou de um sistema para avaliar uma ou mais propriedades de interesse. O teste de software também ajuda a identi�car erros, lacunas ou falta de requisitos, ao contrário dos requisitos reais (PEZZÈ e YOUNG, 2018). Pode ser feito manualmente ou usando ferramentas automatizadas. Alguns preferem dizer o teste de software como um teste de caixa branca e caixa preta. Existem diferentes técnicas de testes. A TLD ou Teste Depois do Desenvolvimento é o processo mais comum na prática de construção de um software (BARROS e Teste de Teste de SoftwareSoftware 29/11/2020 Ead.br https://fmu.blackboard.com/webapps/late-Course_Landing_Page_Course_100-BBLEARN/Controller 16/35 JÚNIOR, 2019, p. 10). Assim como este, existem outros como o TDD ou Desenvolvimento Orientado a Testes, com as tarefas de testes sendo realizadas antes da criação de uma funcionalidade (BARROS e JÚNIOR, 2019). Para Pezzè e Young (2018, p. 25), o teste completo de cada produto individual pode não ser econômico, dependendo dos custos do teste, da con�abilidade do processo de produção e dos custos de falhas em campo. Nesse contexto, é importante compreender todos os tipos de testes para poder ponderar tanto na estimativa de prazo quanto de custo que cada teste deverá gerar em torno de um projeto de software. O teste é importante porque os erros do software podem ser caros ou até perigosos, podendo causar perdas monetárias e humanas, com exemplos históricos que podem até causar espanto. Alguns dos casos mais emblemáticos são: erros em sistemas �nanceiros, bug do milênio, falha de software embarcado em automóveis (que custa uma fortuna com recalls), promoções em lojas virtuais vendendo produtos caros a meros R$ 1,00, entre outros casos. Em todos os casos, alguns testes antes da validação e implantação do software poderiam ter evitado milhões ou até bilhões de prejuízo para empresas e até instituições públicas. A falta de um planejamento e de um bom plano de testes pode custar caro, literalmente. Plano de Testes A melhor maneira de aplicar testes em software é começar elaborando um plano de testes. Para Andrade e Viana (2016, on-line), No ciclo de desenvolvimento de softwares, a realização de testes tem espaço desde a fase de design até o lançamento do produto. Eles conferem con�abilidade ao software, reorientam o desenvolvimento do design e do código e poupam gastos desnecessários, quando detectam erros nas fases iniciais do desenvolvimento de um software. Para eles, para cada tipo de uso que o software deverá ter após desenvolvido, existe um grau de necessidade e importância dos testes. O plano de testes se trata da 29/11/2020 Ead.br https://fmu.blackboard.com/webapps/late-Course_Landing_Page_Course_100-BBLEARN/Controller 17/35 documentação dos testes de software cujo conteúdo deve contemplar os critérios aceitos para o produto �nal, a �m de guiar os passos da execução dos testes. Assim como outras etapas da engenharia de software, os testes possuem certi�cações que são concedidas por organizações internacionais que trabalham especi�camente com qualidade, através de certi�cações concedidas por organizações que avaliam o processo considerando modelos de qualidade, como o Capability Maturity Model Integration (CMMI), assim como a ISO-12207. Segundo Pezzè e Young (2018, p. 29), nenhuma técnica de teste ou de análise pode servir sozinha a todos os objetivos. As razões primárias para combinar técnicas em vez de escolher uma técnica melhor são: E�cácia para diferentes classes de erros. Por exemplo, condições de corrida são muito difíceis de encontrar com teste convencional, mas podem ser detectadas com análise estática. Aplicabilidade em diferentes etapas do projeto. Por exemplo, pode-se aplicar técnicas de inspeção inicialmente aos requisitos e representações de projeto que não são apropriadas para análises mais automáticas. Diferenças de objetivos. Por exemplo, teste sistemático (não randômico) busca maximizar detecção de falhas, mas não pode ser usado para medir con�abilidade. Para isso, teste estatístico é necessário. Compromissos entre custo e garantias. Por exemplo, pode-se utilizar uma técnica relativamente custosa para garantir algumas propriedades essenciais de componentes centrais (exemplo:um kernel de segurança), enquanto que as mesmas técnicas seriam caras demais para aplicar a todo o projeto. Tipos de Testes Normalmente, o teste é classi�cado em três categorias: Teste Funcional, Teste Não Funcional ou Teste de Desempenho, Manutenção (Regressão e Manutenção). A seguir, são descritas, de melhor forma, as três categorias de teste: 29/11/2020 Ead.br https://fmu.blackboard.com/webapps/late-Course_Landing_Page_Course_100-BBLEARN/Controller 18/35 O teste funcional, conhecido como teste caixa-preta, é caracterizado por técnicas para derivar casos de teste a partir de especi�cações funcionais. Dentro dos testes funcionais, temos: unidade, integração, interoperabilidade, de aceitação do usuário, entre outros. Os testes não funcionais, também chamado de teste caixa-branca, buscam realizar a veri�cação da estrutura de software, através de requisitos não necessariamente operacionais, mas de partes de suporte e veri�cação de ambiente. Alguns dos tipos de testes não funcionais geralmente aplicados são: de atuação, resistência, carga, volume, escalabilidade, usabilidade. Os testes de manutenção têm a ver com testes realizados para veri�car algumas situações que podem ter gerado alteração ou mau funcionamento em sistemas que já estão em uso. Os principais são: de regressão e manutenção. Além da classi�cação de testes, existem tipos de testes que são empregados como metodologia ágil, na busca da automatização de testes, como TDD, ATDD, DDD, BDD e outros, que serão apresentados a seguir. DDD O Domain-Driven Design, ou Design Orientado a Domínio, foi inicialmente introduzido e popularizado pelo programador Eric Evans em seu livro Design Orientado a Domínio: Atacando as Complexidade no Coração do Software (2004). É a expansão e a aplicação do conceito que se aplica ao desenvolvimento de software. Segundo Evans (2016), DDD visa facilitar a criação de aplicativos complexos, conectando as partes relacionadas do software em um modelo em constante evolução e concentra- se em três princípios fundamentais: Concentra-se no núcleo do domínio e domínio lógico. Baseia-se em projetos complexos em modelos de domínio. Colabora constantemente com domínios especializados, para melhorar o modelo de aplicativo e resolver quaisquer domínios de problemas relacionados e emergentes. Domain-Driven Design também enfatiza fortemente a prática cada vez mais popular de continuous integration (CI ou Integração Contínua) que solicita que toda a equipe 29/11/2020 Ead.br https://fmu.blackboard.com/webapps/late-Course_Landing_Page_Course_100-BBLEARN/Controller 19/35 de desenvolvimento use um repositório de código compartilhado e envie con�rmações diárias diariamente (se não várias vezes ao dia). Um processo automático é executado no �nal do dia, que veri�ca a integridade de toda a base de códigos, executando testes de unidade automatizados, testes de regressão e similares, para detectar rapidamente quaisquer problemas em potencial que possam ter sido introduzidos nas con�rmações mais recentes. TDD Primeiramente, na abordagem de Desenvolvimento Orientado a Testes (TDD), é desenvolvido o teste que especi�ca e valida o que o código fará. De maneira simples, os casos de teste são criados antes da criação do código. O objetivo do TDD é tornar o código mais claro, simples e sem erros. O TDD começa com o design e o desenvolvimento de testes para todas as funcionalidades de um aplicativo. A técnica instrui os desenvolvedores a escrever um novo código somente se um teste automatizado falhar. Isso evita a duplicação de código. A abordagem TDD é principalmente uma técnica de especi�cação. Isso garante que seu código-fonte seja exaustivamente testado no nível con�rmatório. Existem dois níveis de TDD: Developer TDD e o TDD de aceitação (ATDD). O primeiro trata escreve um teste de desenvolvedor único, ou seja, teste de unidade e, em seguida, apenas o código de produção su�ciente para realizar esse teste. O teste de unidade se concentra em todas as pequenas funcionalidades do sistema. O Developer TDD é chamado simplesmente de TDD. Já no ATDD, você escreva um único teste de aceitação. Este teste cumpre os requisitos da especi�cação ou satisfaz ao comportamento do sistema. Depois disso, você escreva apenas o código de produção/funcionalidade su�ciente para realizar esse teste de aceitação. O teste de aceitação se concentra no comportamento geral do sistema. O ATDD também era conhecido como Desenvolvimento Comportamental (BDD). ti 29/11/2020 Ead.br https://fmu.blackboard.com/webapps/late-Course_Landing_Page_Course_100-BBLEARN/Controller 20/35 praticarVamos Praticar Teste de software é um processo de veri�cação de um sistema para decidir se ele atende aos requisitos especi�cados e produz os resultados desejados. Como resultado, você identi�ca erros no produto de software. De acordo com os tipos de teste de software, está correto o que se a�rma em: a) TDD é um teste que se concentra no núcleo de domínio de um sistema. b) BDD e TDD se trata do mesmo tipo de teste. c) O teste caixa-branca é o tipo de teste de manutenção de software. d) O teste caixa-preta também é conhecido como Teste Funcional. e) Os testes devem ser aplicados apenas na fase �nal do desenvolvimento. 29/11/2020 Ead.br https://fmu.blackboard.com/webapps/late-Course_Landing_Page_Course_100-BBLEARN/Controller 21/35 O gerenciamento de implantação de projetos de software abrange o conhecimento, técnicas e ferramentas necessárias para gerenciar o chamado deploy, a entrega em si de um produto de software. Diferente da metodologia de entregas contínuas, é possível realizar uma chamada entrega única. Este tipo de deploy é realizado, em geral, para aplicações mais simples, com grau de tecnologias e com baixo acoplamento em relação ao próprio servidor, ou seja, uma aplicação criada em uma única linguagem, ou criada por uma só pessoa, de maneira simples, páginas webs estáticas ou até dinâmicas, mas sem maiores complexidades. Este tipo de implantação pode ser considerado mais simples, porém, se não for feito da maneira correta, poderá apresentar falhas que comprometam a execução de maneira correta. Mesmo sendo um método mais fácil de implantação, requer o mínimo de cuidados e também deve submeter a testes a aplicação após seu deploy. Independentemente de ser considerado mais simples, requer cuidados semelhantes ao da Entrega Contínua, porém sem a necessidade de mais de um pro�ssional envolvido no processo. Implantação deImplantação de SistemasSistemas 29/11/2020 Ead.br https://fmu.blackboard.com/webapps/late-Course_Landing_Page_Course_100-BBLEARN/Controller 22/35 Utilizando Cliente FTP Para realizar uma implantação de sistema neste método, é preciso utilizar alguma ferramenta chamada Cliente FTP no processo. Este método nada mais é do que transferir arquivos de um servidor ou máquina local para outra máquina ou servidor, no caso de uma aplicação web o envio é para um servidor web. Esse processo se utiliza de um protocolo de internet especí�co, o FTP (File Transfer Protocol ou Protocolo de Transferência de Arquivo). Existem vários softwares que auxiliam na transferência de arquivos neste processo, podendo ser utilizadas tanto IDEs (Integrated Development Environment ou Ambiente de Desenvolvimento Integrado), programas especí�cos de Client FTP como Filezilla, SmartFTP, Transmit, Free FTP, entre outros. Existe opção tanto para sistemas operacionais Windows e Linux, como MAC OS, entre outros. A �gura 3.2 mais à frente apresenta um exemplo de um cliente FTP, o programa Filezilla no caso. De modo geral, o protocolo FTP requer alguns argumentos para conectar uma máquina local até um servidor ou outra máquina, a saber: Host: é a URL (Uniform Resource Locator) ou o domínio do servidor, que pode ser representado, por exemplo, pelo IP (Internet Protocol ou Protocolo da Internet) no formato http://0.0.0.0 ou nome de domínio no formato <http://dominio.com.br>. Nome do usuário: esse é onome de usuário criado no servidor que dá acesso a um diretório ou ao diretório raiz de um servidor web. Senha: a senha do usuário cadastrado no servidor. Porta: é a liberação de acesso ou conexão, onde, para cada tipo de conexão, uma porta pode ser usada. A porta padrão da web é a 21, mas essa pode ser parametrizada de maneira personalizada. A Figura 3.2 apresenta o detalhe da parte de cima do aplicativo Filezilla, contendo os campos a serem preenchidos com Host, Usuário, Senha e Portal. 29/11/2020 Ead.br https://fmu.blackboard.com/webapps/late-Course_Landing_Page_Course_100-BBLEARN/Controller 23/35 Uma vez que estejam preenchidos os campos com os dados corretos, basta clicar o botão “Conexão rápida” ou na setinha ao lado para escolher outra opção, com alguma outra conta já utilizada. Uma vez conectado, basta utilizar a árvore de diretórios ao lado para acessar os arquivos locais e arrastar os arquivos para a aba ao lado, de�nindo onde �carão os arquivos no servidor. Com o Filezilla, o processo é realmente simples e, logo após você escolher um arquivo ou pasta, deve arrastar para o lado servidor. Assim que o upload for concluído, seus arquivos estarão acessíveis no endereço o qual foi submetido. Por exemplo: http:// 0.0.0.0/arquivos. Ao término do envio, �carão listados os diretórios (pastas) e os arquivos enviados, à direita. O Filezilla mostra detalhes de log com tamanho do arquivo, tipo do arquivo, data de modi�cação, entre outros detalhes. Todos esses elementos estão visíveis na Figura 3.3: Figura 3.2 - Detalhe do Cliente FTP Filezilla Fonte: Elaborada pelo autor. Figura 3.3 - Janela completa do Cliente FTP Filezilla Fonte: Elaborada pelo autor. 29/11/2020 Ead.br https://fmu.blackboard.com/webapps/late-Course_Landing_Page_Course_100-BBLEARN/Controller 24/35 Com a aplicação devidamente con�gurada com banco de dados e outros detalhes necessários, ela estará disponível para ser acessada via navegador (caso seja uma aplicação web), ou por outro meio. Após isso, caso necessite submeter alguma alteração da aplicação, basta conectar novamente e submeter o arquivo alterado ou o novo arquivo de código-fonte criado. O cliente FTP irá perguntar se você quer substituir o arquivo que já existe no servidor e pronto. Sim, o processo é relativamente simples como parece, uma vez que a forma de transferência real e a troca de mensagens via protocolos de rede é algo transparente ao usuário via aplicação como os softwares de cliente FTP. Assim, seus arquivos ou aplicação estarão atualizados e/ou carregados no servidor ou máquina remota, estando sempre prontos a serem novamente acessados. Realizando Entregas e Integração Contínua Entregas Contínuas e de qualidade com tempo de ciclo curto precisam de um alto grau de automação. Da necessidade de diminuir a distância entre equipe de desenvolvimento e equipe operacional, surgiu a cultura DevOps. A escolha das ferramentas certas para o ambiente ou projeto é importante quando você muda para a cultura DevOps. Com base em práticas enxutas e ágeis, o DevOps signi�ca automação de processos no desenvolvimento e fornecimento de software. É quase impossível descrever essa abordagem no estilo “receita de bolo”, mas de modo geral podemos dizer que essa metodologia acaba por bene�ciar a maioria dos desenvolvedores com a melhora na conexão dos desenvolvedores e a parte operacional, antes mantidos isolados. Existem muitas ferramentas de DevOps que podem auxiliar no processo de implantação desta cultura, que ajuda bastante em como fazer isso acontecer. 29/11/2020 Ead.br https://fmu.blackboard.com/webapps/late-Course_Landing_Page_Course_100-BBLEARN/Controller 25/35 Um engenheiro DevOps é um pro�ssional que deve ser capaz de entender todo o processo de desenvolvimento e seu ciclo de vida, aliado à experiência de operar e administrar o sistema. Na verdade, se você parar para analisar ou pesquisar pelo período remoto do início da prática de desenvolvimento web, os primeiros pro�ssionais considerados analistas ou desenvolvedores web tinham esta prática atual, de dominar tanto a parte de codi�cação (a prática de programação em si) com a de con�guração e manutenção de uma aplicação em servidor web. No contexto geral, existem vários benefícios do uso da cultura DevOps no seu processo de implantação e deploy de aplicações web. Dentre eles, estão: Velocidade: operação em alta velocidade na inovação e entrega de novas funcionalidades de sistemas. Entrega rápida: aumento da frequência e ritmo de novos lançamentos, tanto para novas aplicações quanto para correções de problemas apresentados na execução da aplicação. saibamaisSaiba mais O DevOps consiste em uma abordagem cada vez mais comum para oferta de software em que as equipes de desenvolvimento e de operações colaboram para desenvolver, testar, implantar e monitorar aplicativos com velocidade, qualidade e controle. Fonte: IBM (2019, on-line). ACESSAR https://www.ibm.com/br-pt/cloud/devops? 29/11/2020 Ead.br https://fmu.blackboard.com/webapps/late-Course_Landing_Page_Course_100-BBLEARN/Controller 26/35 Con�abilidade: garante entregas mais rápidas e contínuas, gerando con�ança e passando segurança ao usuário �nal. Escalabilidade: a aplicação pode crescer sem que o serviço tenha que �car indisponível, utilizando também a arquitetura por microsserviços. Colaboração melhorada: equipes de desenvolvimento e operação trabalham mais próximas e de maneira colaborativa, compartilhando responsabilidades e combinando �uxos de trabalho. Segurança: operando rapidamente e utilizando controles de versões, a cultura DevOps auxilia em manter uma aplicação sempre atualizada e com uso de técnicas que garanta o acesso contínuo por pro�ssionais capacitados. Ferramentas DevOps Para uma boa prática DevOps, é altamente indicado o uso de ferramentas que auxiliem na produtividade da função. Existem algumas no mercado que tem por objetivo eliminar algumas práticas mais trabalhosas, como a de con�gurações extensas de servidores, desde o cuidado com o sistema operacional, variáveis de ambientes, sistemas de arquivos, até a con�guração de servidor web e de aplicação, banco de dados, entre outros. Docker Uma ferramenta bastante usual é o Docker. É uma tecnologia que permite a criação de containers, onde o objetivo é você criar um container local, con�gurado com todas as variantes citadas anteriormente, que preparam um ambiente propício para a execução da aplicação criada (LOPES et al., 2019). Esse container pode ser criado em uma máquina ou servidor local e, após a criação da aplicação, pode ser submetido ao servidor web e ali será executado como um nó de um servidor, sem precisar de praticamente nenhuma outra con�guração. Isso faz com que a aplicação web dentro do container funcione independentemente do sistema operacional do servidor web. Jenkins 29/11/2020 Ead.br https://fmu.blackboard.com/webapps/late-Course_Landing_Page_Course_100-BBLEARN/Controller 27/35 Segundo o site o�cial, o Jenkins é o principal servidor de automação de código aberto que fornece centenas de plugins para dar suporte à construção, implantação e automação de qualquer projeto (JENKINS, 2019, on-line). Com grande apelo de uso em projetos e por equipes que adotam a prática de entregas e integrações contínuas, esta ferramenta é capaz de automatizar processos repetitivos, sendo um apoio ao processo contínuo de atualizar e manutenção de aplicações em ambiente web. A documentação do Jenkins explica bem como integrar a ferramenta a uma aplicação de acordo com cada linguagem de programação. Na verdade, você pode utilizar ferramentas de cada linguagem para integrar o processo de entrega contínua do Jenkins. Com a ferramenta, o �uxo de entrega contínua mais básico terá, no mínimo, três estágios que devem ser de�nidos em um arquivo Jenkins: Compilar, Testar e Implementar. O último estágio, também chamado de deploy, precisa ser devidamente precedido pelos estágios de Compilar e Testar,para garantir que versão estável está sendo utilizada na atividade de implantação de uma aplicação. Para utilizá-lo como serviço, não há complicações. Basta baixar o instalador no site o�cial e ter como requisito básico pelo menos 512Mb de memória RAM e um espaço em disco de 10Gb, requisitos mínimos para a versão 1.4 (JENKINS, 2019, on-line). Diversas empresas, de todos os portes, utilizam o Jenkins como forma o�cial de automatizar seu �uxo de entregas contínuas. Desde gigantes como Microsoft, Redhat, Github, Rackspace, até empresas locais de desenvolvimento de sistemas e aplicações, principalmente sistemas para web. 29/11/2020 Ead.br https://fmu.blackboard.com/webapps/late-Course_Landing_Page_Course_100-BBLEARN/Controller 28/35 Controle de Logs Uma tarefa importante no �uxo de trabalho DevOps é o controle de logs. Com um �uxo contínuo de atualizações e novas submissões de arquivos, vários logs são gerados e precisam ser mantidos para um controle inteiro do processo. A�nal, um log diz muito sobre o uso de um servidor, pois se trata de discriminar detalhes de trabalhos em um ambiente, identi�cando: o que, quem e quando foi feita alguma reflitaRe�ita Realizar o acompanhamento de projetos, desde a fase de análise de requisitos até seu deploy é uma tarefa que requer bastante cuidado. Para que o CI / CD seja e�caz, você precisa vinculá-lo aos seus processos para que ele seja iniciado quando um novo código for con�rmado. Para poder con�ar que seus testes serão precisos, é necessário recriar o ambiente do aplicativo em contêineres que simulem o ambiente �nal onde o software irá ser executado. Após a conclusão dos testes, é importante con�gurar um processo de homologação para, aí sim, chegar à implantação em ambiente de produção. 29/11/2020 Ead.br https://fmu.blackboard.com/webapps/late-Course_Landing_Page_Course_100-BBLEARN/Controller 29/35 ação em determinado computador, sistema ou servidor. Para o trabalho DevOps, algumas ferramentas são indicadas para esse controle, como: Flume: ferramenta sob a licença da Fundação Apache que controla o �uxo de trabalhos em processos de software. ELK: uma stack (pilha) de aplicações que inclui o uso das ferramentas Elasticsearch, Logstash e Kibana, todas pertencentes à empresa Elastic. Fluentd: projeto de software criado pela empresa Treasure Data que, além de manipular logs, serve como um coletor de dados de modo geral, podendo ser utilizado para diversos �ns. praticarVamos Praticar As aplicações Web já não são mais tão simples como no início da popularização da internet. Com recursos avançados, a começar da evolução das próprias linguagens de programação, os requisitos de servidor de hospedagem aumentaram consideravelmente. A entrega de software passou a ser contínua e o versionamento de código quase que uma regra geral. A respeito das técnicas modernas de implantação de software na Web, é correto a�rmar: a) Entrega contínua é o envio de código-fonte via Cliente FTP. b) DevOps é um sistema de arquivos distribuídos. c) HTTP é o protocolo utilizado em aplicações para transferência padrão de arquivos para servidores. d) Integração contínua e entrega contínua são técnicas que trabalham em conjunto. e) Um desenvolvedor Full Stack é um programador que também atua como DevOps. 29/11/2020 Ead.br https://fmu.blackboard.com/webapps/late-Course_Landing_Page_Course_100-BBLEARN/Controller 30/35 indicações Material Complementar FILME Firewall - Segurança Em Risco Comentário: O enredo trata da história de Jack Stan�eld (Harrison Ford) como um especialista em sistema de segurança bancária. Com a família do personagem sequestrada, um criminoso exige que o pro�ssional ache uma brecha no sistema criado por ele mesmo para conseguir fraudar e desviar uma quantia milionária de Dólares. Apesar de não ser tão recente, o �lme traz um enredo bastante atual e possível que envolve segurança pessoal e digital, boas práticas em sistemas e o envolvimento com projetos de software. Para conhecer mais sobre o �lme, acesse o trailer a seguir. 29/11/2020 Ead.br https://fmu.blackboard.com/webapps/late-Course_Landing_Page_Course_100-BBLEARN/Controller 31/35 T R A I L E R L IVRO Engenharia de software - uma abordagem pro�issional Roger Pressman ISBN: 978-0-07-802212-8 Comentário: Esse livro foi escrito por uma das maiores autoridades em se tratando de Engenharia de Software, Roger Pressman. Partindo desde os princípios da matéria, ele aborda o uso de diagramas em cada etapa do processo de desenvolvimento de um sistema, baseado em técnicas atuais de desenvolvimento e implementação de software. 29/11/2020 Ead.br https://fmu.blackboard.com/webapps/late-Course_Landing_Page_Course_100-BBLEARN/Controller 32/35 conclusão Conclusão Ao concluir a unidade, podemos dizer que durante o desenvolvimento de software, tão importante quanto bem documentar cada etapa e saber utilizar as ferramentas necessárias para se chegar ao produto, saber gerenciar os processos e integrar ferramentas é primordial. Com o avanço das práticas de desenvolvimento de software, novas culturas surgiram e se tornaram importantes na busca de produtos de software de qualidade, destacando a cultura DevOps como uma forma de automatizar processos outrora bastante demorados. A implantação de sistemas baseada em Entrega e Integração Contínuas também são excelentes formas de criar um ambiente mais produtivo de desenvolvimento, encurtando espaço entre a equipe envolvida e o alcance da meta, que sempre será o software de qualidade. Também vimos como as técnicas de testes estão cada dia mais presentes nos ambientes de desenvolvimento e como auxiliam na obtenção da qualidade do produto �nal, estando presente em todas as etapas de desenvolvimento. referências Referências Bibliográ�cas 29/11/2020 Ead.br https://fmu.blackboard.com/webapps/late-Course_Landing_Page_Course_100-BBLEARN/Controller 33/35 ANDRADE, Ana Paula; VIANA, Phil. Criação e geração de planos de teste de software. Disponível em: https://www.ibm.com/developerworks/br/local/rational/ criacao_geracao_planos_testes_software/index.html. Acesso em: 16 fev. 2020. BARROS, Gabryela Santana; JÚNIOR, Lielson R. Pereira. Análise experimental entre as técnicas TDD e Test-Last no processo de manutenção corretiva de software. Disponível em: http://ri.ucsal.br:8080/jspui/bitstream/pre�x/879/1/ TCCGABRYELAELIELSON.pdf. Acesso em: 17 fev. 2020. BERNARDO, Kaluan. Entrega Contínua – o que é e como aplicar. Disponível em: https://www.opus-software.com.br/o-que-e-entrega-continua/. Acesso em: 25 fev. 2020. EVANS, Eric. Domain-Driven Design: atacando as complexidades no coração do software. 3. ed. São Paulo: Alta Books, 2016. JENKINS. Build great things at any scale. Disponível em: https://jenkins.io/. Acesso em: 16 fev. 2020. LOPES, Klerison Emmanuel; CAMPOS, Ronaldo Ribeiro de; PETRUCELLI, Erick Eduardo; SORIANO, Gustavo Henrique. O processo de deploy automático em ambientes de computação na nuvem: exemplo de utilização da plataforma Jenkins. Disponível em: https://revista.fatectq.edu.br/index.php/interfacetecnologica/article/view/545/361. Acesso em: 15 fev. 2020. PEZZÈ, Mauro; YOUNG, Michal. Teste e análise de software: processo, princípios e técnicas. Porto Alegre: Bookman, 2018. SATO, Danilo. DevOps na prática: entrega de software con�ável e automatizada. 2. ed. São Paulo: Casa do Código, 2014. SCHMITZ, Daniel. Tudo que você queria saber sobre Git e GitHub, mas tinha vergonha de perguntar. Disponível em: https://tableless.com.br/tudo-que-voce- queria-saber-sobre-git-e-github-mas-tinha-vergonha-de-perguntar/. Acesso em: 25 fev. 2020. https://www.ibm.com/developerworks/br/local/rational/%20criacao_geracao_planos_testes_software/index.html http://ri.ucsal.br:8080/jspui/bitstream/prefix/879/1/%20TCCGABRYELAELIELSON.pdf https://www.opus-software.com.br/o-que-e-entrega-continua/ https://jenkins.io/ https://revista.fatectq.edu.br/index.php/interfacetecnologica/article/view/545/361https://tableless.com.br/tudo-que-voce-queria-saber-sobre-git-e-github-mas-tinha-vergonha-de-perguntar/ 29/11/2020 Ead.br https://fmu.blackboard.com/webapps/late-Course_Landing_Page_Course_100-BBLEARN/Controller 34/35 29/11/2020 Ead.br https://fmu.blackboard.com/webapps/late-Course_Landing_Page_Course_100-BBLEARN/Controller 35/35
Compartilhar