Prévia do material em texto
INTRODUÇÃO Bem-vindo ao estudo da disciplina Qualidade e Automação de Testes. Aqui, você estudará desde a história da testagem de softwares até as modernas ferramentas utilizadas para a realização de testes de softwares, programas e aplicativos oriundas das metodologias ágeis, como o TDD e o BDD, que são as siglas de Desenvolvimento Orientado a Testes e a Comportamentos. Quando testamos um código, queremos encontrar erros, os chamados bugs. A função de um bom teste é encontrar erros de programação devido à linguagem ou a erros humanos de interpretação do desejo do cliente na elaboração dos programas, pois, desta forma, evitamos que um software seja vendido com muitos bugs. Nenhum de nós volta a usar um aplicativo sem receio quando o utilizamos pela 1ª vez e ele não funciona da maneira que nos foi prometido. Atualmente, as indústrias e os fabricantes de jogos e aplicativos procuram pro�ssionais que sejam capazes de identi�car e corrigir erros de programação no momento da realização ou antes que um produto seja vendido comercialmente. Elas procuram por pro�ssionais que queiram trabalhar em equipe e interpretar o desejo do cliente. Depois de concluir este curso, você será capaz de realizar a testagem, inclusive, elaborando procedimentos e executando testes de softwares com muita qualidade, através de um conhecimento baseado em técnicas inovadoras que te farão um pro�ssional disputado pelo mercado de trabalho. HISTÓRIA DA TESTAGEM DE SOFTWARES Muitos historiadores atribuem a origem do termo bug a Thomas Edson, o inventor da lâmpada elétrica e do gramofone, o primeiro gravador de voz, porque um inseto – bug, em inglês – caiu em seu gramofone, dani�cando uma de suas gravações. Outros historiadores atribuem o termo aos engenheiros que estavam construindo o Mark I, pois uma traça dani�cou alguns dos seus sistemas, e os engenheiros chamaram a este erro de bug. A Figura 1 mostra a imagem do Mark I, o 1º computador digital construído pelos engenheiros da IBM e enviado para Harvard. Figura 1 | Mark I, o primeiro computador digital Aula 1 A HISTÓRIA E OS FUNDAMENTOS DA TESTAGEM EM SOFTWARES Evolução da testagem em softwares. 47 minutos Fonte: Flickr. O certo é que, quando qualquer problema de programação ou de sistema aparece, dizemos que o software “bugou”, ou seja, apresenta um erro que torna sua execução falha. No começo do desenvolvimento de softwares e programas, os desenvolvedores não se atentavam para a importância da testagem antes do término do processo, tanto que alguns programas e softwares chegaram a ir para o mercado sem sequer terem sido testados. Com isso, o número de falhas de programação aumentou signi�cativamente a ponto de a testagem começar a ser considerada um item essencial no desenvolvimento de softwares e programas. O primeiro livro que abordou este tema, com um capítulo inteiro dedicado ao assunto, foi Computer Programming Fundamentals, e o primeiro autor a escrever um livro totalmente dedicado a este assunto foi Glenford Mayers, com seu livro A arte do teste de software. A partir daí, os órgãos regulamentadores, como o IEEE (lemos I3E) e o IEC (lemos I E C, cada letra separadamente), passaram a desenvolver parâmetros para a testagem de softwares. Estes métodos e procedimentos garantiam que um software fosse testado antes de ser lançado no mercado, diminuindo o índice de falhas em programas de forma drástica. No início dos anos 2000, foi publicado o livro Teste de Software, de Emerson Rios e Trayahú Moreira, referência sobre o assunto no Brasil. A partir disso, várias empresas lançaram produtos para ajudar os desenvolvedores e programadores a realizar a testagem automática dos seus programas e softwares, tornando o trabalho mais con�ável e rápido. Um dos primeiros softwares de testagem, o Selenium®, que automatiza ferramentas web para a realização de testes, foi fabricado pela empresa ThoughtWorks, em Chicago. Atualmente, o Brasil realiza, através da Associação Latino- Americana de Teste de Software, um exame para emitir certi�cados para os pro�ssionais que querem uma quali�cação extra nesta área, a qual é emitida pelo International Software Testing Quali�cations Board (ISTQB), sendo que o 1º nível é chamado de Certi�ed Tester. Desta forma, os desenvolvedores de softwares, programas e aplicativos perceberam que um programa pode ter seu valor expandido em razões estratosféricas se ele chegar ao mercado com erros que poderiam ser percebidos e corrigidos antes do lançamento do produto e incorporaram a testagem de softwares como uma das etapas fundamentais no seu desenvolvimento. Outro importante ganho foi terem feito este procedimento segundo critérios apresentados e aplicados em normas de qualidade, o que fez com que a equipe de desenvolvimento de softwares tenha que trabalhar junto à equipe de qualidade, permitindo um ganho na descoberta de erros e falhas. VIDEOAULA: HISTÓRIA DA TESTAGEM DE SOFTWARES Neste vídeo, iremos nos aprofundar na história da testagem de softwares com a análise de algumas estatísticas sobre a ocorrência de falhas em programas, assim como apresentaremos alguns casos de códigos que foram lançados com inúmeras falhas que ajudaram a contribuir para a evolução da testagem. ETAPAS DA TESTAGEM DE SOFTWARES Primeiramente, de�niremos o que é um teste de software para, depois, estudarmos as etapas da testagem. Dias Neto (2016, p. 1) de�ne teste de software: Já Polo (2020, p. 7) de�ne que “testes de softwares têm a �nalidade de assegurar que um programa atende às necessidades dos seus usuários, como também servem para descobrir defeitos em seu funcionamento antes de disponibilizá-lo para uso”. Baseado nestas de�nições, temos que distinguir defeito de engano e de falha. Delamaro, Maldonado e Jino (2016, p. 2) de�nem defeito (do inglês, fault) como “sendo um passo, processo ou de�nição de dados incorretos”, e engano (do inglês, mistake) como “a ação humana que produz um defeito”. Para que estes erros aconteçam, o software não precisa estar sendo executado, por isso, estes erros são chamados de estáticos. Quando executamos o programa, este defeito ou engano pode ocasionar um erro (do inglês, error), “que se caracteriza por um estado inconsistente ou inesperado. Este estado pode levar a uma falha (failure)”, que é um resultado diferente daquele que queríamos, portanto a falha é uma saída do software que não deveria existir. É claro que todos estes termos são usados, muitas vezes, como sinônimos junto à palavra bug, mas devemos tentar entendê-los da forma correta. Resumidamente, temos o Quadro 1 para �xarmos melhor estes conceitos: Quadro 1 | Conceitos de erro, defeito e falha Videoaula: História da testagem de softwares Para visualizar o objeto, acesse seu material digital. Processo de execução de um produto para determinar se ele atingiu suas especi�cações e funcionou corretamente no ambiente para o qual foi projeto. O seu objetivo é revelar falhas em um produto, para que as causas dessas falhas sejam identi�cadas e possam ser corrigidas pela equipe de desenvolvimento antes da entrega �nal. Imprimir Programador comete um erro – sem querer – digitando um código errado ou entendendo uma informação de maneira errada. Fonte: Pixabay. Surge um defeito no software que pode ser executado ou não. Fonte: Pixabay. Quando o defeito é executado e o software responde de uma maneira incorreta, surge uma falha. Fonte: Pixabay. Fonte: Lorem ipsum dolor sit amet. Para descobrirmos todos estes problemas de programação, devemos conhecer as etapas da realização dos testes de softwares. Estas etapas são divididas, prioritariamente, em quatro categorias, que são: • Unidade. • Integração. • Sistema. • Manutenção. Como o próprio nome diz, o teste de unidade é feito na menor unidade de programação de um código, geralmente dado por uma rotina, como um if/else, um for ou um loop. Quando estamos escrevendo um código, devemos testá-lo ao terminarmos uma unidade,para que possamos encontrar erros nos algoritmos ou nas estruturas de dados e até mesmo na codi�cação em si. Delamaro, Maldonado e Jino (2016, p. 3) relatam que os testes de unidade podem ser feitos em “funções, procedimentos, métodos ou classes com o objetivo de identi�car erros relacionados a algoritmos, estruturas de dados incorretas ou simples erros de programação”. Já o teste de integração testa diferentes unidades, podendo ser de�nida uma rotina de testagem a cada incorporação de uma nova unidade ou a cada número �xo de unidades incorporadas, dependendo do tamanho do código. Este teste garante que as unidades funcionem de forma coordenada e em conjunto. Até aqui, os testes de software que envolvem os testes de unidade e de integração são, geralmente, feitos pelos próprios programadores, à medida que criam o código, para terem certeza de que ele está sendo desenvolvido de forma correta e integrada. O teste de sistema, além de testar o código como um todo e sua funcionalidade, também testa outros aspectos, como segurança, performance e robustez. Normalmente, ele é seguido de um teste de aceitação do programa pelo cliente. Finalmente, quando o produto estiver em fase de produção, devem ser feitos testes de manutenção, também chamados de testes de regressão, para se certi�car de que o programa está funcionando corretamente, que ainda é seguro contra o ataque de hackers e que as novas funcionalidades (atualizações) foram incorporadas de maneira correta. Para que estas divisões na testagem de softwares ocorram de maneira assertiva, ou seja, que os erros de programação ou de código sejam realmente identi�cados, precisa-se realizar um bom planejamento, projeto, execução e análise de dados em cada fase da testagem dos softwares. Não seria lógico que a mesma equipe que desenvolveu o código realizasse a testagem do software, pois o objetivo de um bom teste é encontrar erros, e não aprovar um código que acabou de ser criado. Muitas equipes se sentem ofendidas quando apontamos erros em seus códigos, o que nunca deve ser feito. Devemos nos lembrar que erros são da nossa natureza, e só erra quem trabalha no melhor programa. VIDEOAULA: ETAPAS DA TESTAGEM DE SOFTWARES Neste vídeo, estudaremos a diferença entre erro, defeito e falha, assim como perceberemos que os bugs que estão presentes nos códigos são feitos por humanos. Os programadores devem executar testes unitários e de integração. Depois, o setor da qualidade fará o teste de sistema e o aceite do cliente. OS REQUISITOS E AS VANTAGENS DE SE REALIZAREM TESTES EM TI A pior forma de realizarmos um teste de software é tentar testar o código atrás de todos os defeitos de uma só vez. Para que a procura por defeitos seja feita de maneira racional e viável, a testagem de softwares foi dividida em etapas. As principais etapas da testagem de softwares são: testes de unidade, de integração, de sistema e de manutenção. Para que estes testes funcionem de maneira correta, precisamos que cada uma destas etapas seja elaborada de acordo com a seguinte divisão de tarefas: • Planejamento. • Projeto. • Execução. • Análise de resultados. Estas etapas podem ser resumidas no anagrama PDCA, ilustrado na Figura 2, que retrata o Plan – Do – Check – Action, ou seja, planeje, aja, cheque e recomece novamente. Figura 2 | Ciclo PDCA Videoaula: Etapas da testagem de softwares Para visualizar o objeto, acesse seu material digital. Fonte: Wikimedia Commons. O cumprimento correto de todas estas tarefas garantirá que cada fase do teste foi corretamente executada e que teremos um software, programa ou aplicativo funcionando da forma correta. O planejamento é a parte do projeto que de�nirá os recursos envolvidos na elaboração do código, o tempo que a equipe terá para realizar esta atividade, considerando, inclusive, que, conforme um código está sendo criado, ele deve ser testado através do teste de unidade. Já o projeto de�nirá como será feita cada etapa da testagem, com enfoque redobrado nos testes de integração e de sistema, quais os dados �ctícios ou reais que serão utilizados no teste, quanto tempo este processo demorará e quais os equipamentos e recursos necessários que serão alocados para a execução dos testes propriamente ditos. A execução deve ser feita da forma mais abrangente possível, sempre pensando na testagem do que queremos e do que não queremos. Por exemplo, imaginaremos que estamos criando um programa de pontos para presentear nossos clientes mais �éis. Queremos identi�car quais são estes clientes e pontuá-los, mas não queremos que os clientes possam resgatar seus pontos duas vezes, ou que clientes com baixo número de pontos consigam resgatar itens aos quais não poderiam ter acesso. Depois de executados todos os testes, inclusive a situação que o programa deve recusar os pedidos dos usuários, devemos realizar a checagem dos resultados, com a análise dos dados e dos problemas encontrados. Esta etapa deve ser acompanhada pela equipe de qualidade ou pelo engenheiro de testes, porque ela deve apontar o que deve ser alterado no código, os responsáveis por executar estas correções e, depois, devemos realizar o teste novamente destas partes do código para que os erros não se repitam. Esta etapa deve ser feita com muito cuidado, porque, geralmente, não testamos o que estava funcionando e corremos o risco de, ao corrigir os erros no código, introduzir outros erros que nos fazem voltar à parte de erros de integração do software, ou seja, ao mudarmos uma parte especí�ca do código, esta alteração fará com que ele não funcione mais de forma integrada com as outras tarefas. Para isso, deve ser sempre testada a função que foi alterada em conjunto com uma integração posterior do código. Aqui, é importante conhecer dois caminhos possíveis para os testes de software: • Os testes caixa-preta. • Os testes caixa-branca. O teste caixa-preta trata o código como algo fechado, pronto e sem que seja possível acessá-lo e mudá-lo. Neste tipo de teste, são testadas todas as funcionalidades do programa, o que realmente queremos que aconteça, os desejos do cliente. Figura 3 | Teste caixa-preta Fonte: Wikimedia Commons. Já o teste caixa-branca trata do código, da sua estrutura e das suas con�gurações. Durante este tipo de teste, conseguimos acessar e corrigir o código. Nas fases de teste de integração e de unidade, o time de desenvolvimento deve realizar testes caixa- branca, e na fase de sistema e do aceite do cliente, testes caixa-preta, ou seja, deve ser veri�cado se o programa desenvolvido realmente entregou aquilo que o cliente contratou. Deste modo, podemos garantir que o cliente realmente �que satisfeito com o seu pedido e que o programa foi desenvolvido dentro de rigorosas técnicas que garantam não só a qualidade mas também a otimização dos recursos de processamento e de armazenamento que serão utilizados pelo código que ajudamos a desenvolver. VIDEOAULA: OS REQUISITOS E AS VANTAGENS DE SE REALIZAREM TESTES EM TI Neste bloco, ressaltaremos a importância de realização dos testes de software atendendo aos requisitos do PDCA, ou seja, cada etapa deve ser planejada, projetada, executada e avaliada visando à adoção da otimização do código. Conheceremos também as técnicas caixa-preta e caixa-branca, para sabermos diferenciar estes tipos de testes. ESTUDO DE CASO Imagine que você trabalha em uma empresa desenvolvedora de softwares e aplicativos para celulares e foi promovido, graças ao seu excelente trabalho no desenvolvimento de programas para o setor de qualidade e testagem de softwares, que vem enfrentando muitos contratempos quanto à demora na realização dos testes e na interpretação dos resultados. Um simples teste pode demorar mais de uma semana para ser executado devido aos computadores serem mais antigos do que o Videoaula: Os requisitos e as vantagens de se realizarem testes em TI Para visualizar o objeto, acesse seu material digital. do setor de desenvolvimentoe de não existir uma padronização no setor de testagem, pois o programa de qualidade da empresa ainda não chegou a este setor, o que faz com que os testes não detectem todos os bugs de programação existentes. O seu supervisor pediu para você elaborar um relatório apontando três causas na demora da realização dos testes e três propostas de melhorias ao setor para que este problema seja sanado, sendo que ele te deu carta branca para diagnosticar o que precisa ser feito para que o setor tenha bons resultados na testagem dos produtos e realize o trabalho em um prazo menor do que o que eles estão conseguindo entregar. RESOLUÇÃO DO ESTUDO DE CASO Como um pro�ssional aplicado, você organizou um roteiro de veri�cação para apontar os possíveis problemas que estão causando atrasos na execução da testagem dos programas, começando pela veri�cação dos equipamentos que o setor está utilizando para a testagem dos programas desenvolvidos pela equipe de develop. Nesta etapa, você veri�cou se os equipamentos utilizados para a testagem dos códigos são adequados, ou seja, iguais aos utilizados pelas equipes de desenvolvimento, e constatou que eles são obsoletos. Os equipamentos da equipe de testagem devem ter a mesma capacidade de processamento daqueles utilizados pela equipe de desenvolvimento, pois somente assim podemos garantir que os testes serão feitos em um tempo razoável. Depois de concluída esta etapa, você deve veri�car se a empresa utiliza softwares para automatizar o processo da testagem, pois, se o processo inteiro de testagem for feito de forma manual, ele pode demorar mesmo muito tempo sem a obtenção de resultados satisfatórios. Finalmente, você se certi�cará se a empresa segue as normas internacionais desenvolvidas pela IEEE, para que o processo de qualidade seja e�ciente e de alto nível. Deste modo, você poderá garantir que todos os colaboradores que trabalhem no departamento de teste de software sigam as mesmas rotinas de testagem, com os mesmos procedimentos, da mesma forma que você garantirá que os resultados da testagem sejam interpretados através da mesma métrica utilizada por todos e estabelecidas de acordo com as melhores práticas de testagem. Caso alguma destas etapas não esteja sendo seguida, você deve elaborar um cronograma de adequação do setor para que a etapa seja implementada e seguida à risca, pois somente com a adoção destas três metodologias é que você poderá garantir um setor de testagem de software com qualidade e e�ciência. Saiba mais O Capítulo 1 do livro Introdução ao Teste de Software nos mostra claramente as di�culdades na realização de testes de softwares através de um comando simples, como elevar um número x a um expoente y que seja maior do que zero. Somente para executar este teste, teríamos que realizar mais de 1 milhão de operações. Felizmente, o capítulo também descreve como podemos ultrapassar este obstáculo, testando exatamente se o programa fornecerá uma mensagem de erro para exponentes y inferiores a 0 e para um exemplo válido qualquer. Ao término Resolução do Estudo de Caso Para visualizar o objeto, acesse seu material digital. da leitura, você constatará que a testagem de softwares possui inúmeros obstáculos para ser realizada, mas que, através de técnicas padronizadas, a superação destes problemas será feita de forma tranquila e e�ciente. Disponível na Biblioteca Virtual da Kroton através do link: https://integrada.minhabiblioteca.com.br/reader/books/9788595155732/epubc�/6 /14%5B%3Bvnd.vst.idref%3Dchapter1.xhtml%5D!/4. Acesso em: 4 set. 2021. O artigo intitulado A Importância dos Testes Automatizados, de Bernardo e Kon, expõe algumas das di�culdades encontradas na realização da testagem de softwares por muitas empresas brasileiras que seguem a metodologia tradicional da elaboração de um software e propõe algumas dicas para que este mesmo processo possa ser feito através da automação dos testes, utilizando programas gratuitos que realizam o trabalho de testar algumas etapas do código, como o teste de estabilidade do sistema ao acesso de muitos usuários à plataforma, que são impossíveis de serem testados manualmente. Disponível em: http://ccsl.ime.usp.br/agilcoop/�les/A%20Importancia%20dos%20Testes%20Auto matizados.pdf. Acesso em: 4 set. 2021. No vídeo Teste de Software, podemos ter uma ideia clara do que faz um engenheiro de testes e das etapas de testagem de programas, com a descrição das pessoas envolvidas. Apesar de o áudio ser um pouco ruim devido às batidas do apresentador no microfone, as explicações são claras e concisas sobre o processo de testagem de software. Disponível em https://www.youtube.com/watch?v=DBw_GctgPqU. Acesso em: 4 set. 2021. No artigo Introdução a Teste de Software, Arilo Dias Neto traz uma abordagem bem didática dos principais tipos de testes de software que temos e das di�culdades que encontraremos para que o programa desenvolvido �que de acordo com a vontade do cliente. Para ilustrar este desencontro, ele usa a clássica �gura do balanço feito com um pneu e amarrado a uma árvore como sendo a vontade do cliente e as soluções oferecidas de vários modelos de escada pela equipe de desenvolvimento, que logicamente não funcionam nem atendem à vontade do cliente. Disponível em: https://edisciplinas.usp.br/plugin�le.php/3503764/mod_resource/content/3/Introd ucao_a_Teste_de_Software.pdf. Acesso em: 6 set. 2021. INTRODUÇÃO Aula 2 SISTEMAS DA QUALIDADE: DEFINIÇÃO E IMPORTÂNCIA NA TESTAGEM Qualidade na elaboração de um procedimento de teste e requisitos aplicáveis. 50 minutos https://integrada.minhabiblioteca.com.br/reader/books/9788595155732/epubcfi/6/14%5B%3Bvnd.vst.idref%3Dchapter1.xhtml%5D!/4 https://integrada.minhabiblioteca.com.br/reader/books/9788595155732/epubcfi/6/14%5B%3Bvnd.vst.idref%3Dchapter1.xhtml%5D!/4 http://ccsl.ime.usp.br/agilcoop/files/A%20Importancia%20dos%20Testes%20Automatizados.pdf http://ccsl.ime.usp.br/agilcoop/files/A%20Importancia%20dos%20Testes%20Automatizados.pdf https://www.youtube.com/watch?v=DBw_GctgPqU https://edisciplinas.usp.br/pluginfile.php/3503764/mod_resource/content/3/Introducao_a_Teste_de_Software.pdf https://edisciplinas.usp.br/pluginfile.php/3503764/mod_resource/content/3/Introducao_a_Teste_de_Software.pdf Boas-vindas ao estudo da disciplina Qualidade e Automação de Testes. Nesta unidade, vamos nos aprofundar no estudo dos sistemas da qualidade que são utilizados na testagem de softwares, principalmente, no TMMi, de�nição de Modelo de Maturidade de Teste. Este modelo estabelece os requisitos em que os testes devem ser elaborados para que sejam feitos com qualidade e apresentem, além de um resultado satisfatório, um desempenho otimizado dos sistemas e recursos utilizados para que o software funcione de maneira adequada. Finalmente, estudaremos também alguns softwares e aplicações para realizarmos testes de forma automatizada, recurso este muito necessário para uma ampla testagem do programa ou software a ser desenvolvido e muito valorizado no mercado de trabalho. Testes automatizados feitos por plataformas, além de con�áveis, podem simular algumas situações impossíveis de serem feitas através de um teste manual: como o acesso simultâneo de vários usuários a um site, tentativa de invasão por hackers, criação de diferentes usuários e per�s de acesso. Assim, você poderá programar uma outra parte do código ou até mesmo um outro programa enquanto testa aquela parte que já foi feita. Dessa forma, você se tornará um pro�ssional multitarefas. QUALIDADE NA ELABORAÇÃO DE UM PROCEDIMENTO DE TESTE E REQUISITOS APLICÁVEIS A qualidade do software, de acordo com Zanin et al. (2018, p. 11), pode ser de�nida “ de acordo com o quanto o software está em conformidade com o que o cliente solicitou”. Esta de�nição vai ao encontro da regra 10 de Myers, que diz que “o custo de se encontrar um defeito no sistema aumenta 10 vezes a cada etapa do processo em que esse erro avançar”. Figura 1 | Regra 10 de Myers Fonte: Zaninet al. (2018, p. 16). Uma de�nição de qualidade mais ampla é dada por Pressman (2021, p. 311) como sendo uma combinação de fatores entre “produto compatível + boa qualidade + entrega dentro do orçamento e do prazo previsto é igual à satisfação do usuário”. Um software que tenha uma excelente qualidade com um alto custo não é melhor que um de uma qualidade um pouco inferior, permanecendo dentro do orçamento. O grande problema é que os testes de software são caros para serem feitos com todos os cenários possíveis e, muitas vezes, justo um cenário não testado é o que apresentará uma falha. Os custos da qualidade devem ser avaliados quanto à prevenção de defeitos e à avaliação do software. Devemos investir tempo tanto testando o código à medida que o programamos quanto estabelecendo procedimentos para que a programação seja feita de uma forma correta já na primeira vez. Um estudo do IEEE demonstrou que o custo médio para corrigirmos um erro durante a etapa de elaboração do código é de, aproximadamente, US$ 977 por erro. Agora, para se corrigir este mesmo erro durante a fase de testes de sistema ,este custo se eleva para US$ 7.136 (CIGITAL, 2007). Existem dois sistemas considerados como iniciadores do processo de qualidade de software que temos hoje. O primeiro é conhecido como o triângulo de McCall. De acordo com Pressman (2021, p. 313), podemos dividir este triângulo em três fases: • Revisão do produto: nesta fase, são feitos os testes de software e de �exibilidade. • Transição do produto: nesta fase, é comprovado que o software possui interoperabilidade, reusabilidade e portabilidade. • Operação do produto: aqui, são feitas as correções para garantir a con�abilidade e a integridade do software, assim como é medida sua e�ciência real. Figura 2 | Fatores de qualidade de software de McCall Fonte: Pressman (2021, p. 313). O segundo sistema foi adotado pela HP (Hewlett-Packard Enterprise) e é conhecido pela sigla FURPS, do inglês Funcionality, Usability, Reability, Performance and Supportability. O software deve funcionar para ser utilizado segundo as especi�cações do cliente, ser reabilitado caso alguma atualização não funcione direito, ter a performance desejada pelo cliente e a arquitetura prevista para aquela aplicação e suportar o uso do sistema por diferentes usuários de forma simultânea. Existem vários softwares que podem nos auxiliar no gerenciamento da qualidade. Um deles é o SonarQube®, plataforma de código aberto, cujo download pode ser feito de forma gratuita através do link: https://www.sonarqube.org/downloads/. Este programa permite que o código seja inspecionado à medida que é criado, sendo que ele consegue, através de métricas pré-estabelecidas, medir a qualidade do código a partir de sete eixos, a saber: • Arquitetura de Projeto. https://www.sonarqube.org/downloads/ • Comentários. • Padrão de Codi�cação. • Defeitos Potenciais. • Complexidade. • Testes de Unidade. • Duplicações. Este software é um pouco complicado para ser instalado (a testagem não foi feita de forma e�ciente, pois ele apresenta alguns erros que precisamos corrigir para que sua instalação seja feita com sucesso). Primeiramente, devemos selecionar a opção Community (Comunidade) no site https://www.sonarqube.org/downloads/. Essa opção nos levará para a página https://www.sonarqube.org/success-download-community- edition/, na qual o download começará automaticamente. O arquivo baixado será em formato zip (compactado), chamado sonarqube-9.0.1.46107. Para que ele possa ser instalado no nosso computador, precisaremos ter a versão 11 do Java. Este arquivo pode ser baixado em https://www.oracle.com/java/technologies/downloads/#java11. O nome dele é Java SE Development Kit 11.0.12 (esta escolha, caro aluno, foi feita para o sistema operacional Windows de 64 bits; caso possua outro sistema operacional no seu computador, você deverá ajustar o Java versão 11 para os sistemas Linux ou Mac). O arquivo baixado será o jdk-11.0.12_windows-x64_bin. Para baixá-lo, é necessário que você faça um cadastro na Oracle® e con�rme o e-mail enviado por este provedor. Depois de instalar o Java na sua máquina, é necessário que você copie o endereço deste arquivo Java. No caso da minha máquina, foi o caminho C:\Program Files\Java\jdk-11.0.12. Feito esse procedimento, você precisa alterar o arquivo chamado wrapper.conf pertencente ao arquivo descompactado do SonarQube. Para isso, acesse o arquivo wrapper com o editor Bloco de Notas, coloque o símbolo # (comentário) na linha wrapper.java.command=java e retire este símbolo da linha acima, inserindo o caminho do Java versão 11 depois do sinal de igual. Depois disso, ainda precisamos digitar a frase “\java” depois de bin. Feito isso, salvamos o arquivo wrapper. A Figura 3 ilustra como �cará o arquivo wrapper depois dessa modi�cação. Figura 3 | Arquivo wrapper do software SonarQube modi�cado Fonte: elaborada pela autora. Agora, basta que executemos como administrador o item StartSonar dentro da pasta referente ao seu sistema operacional (no meu caso, o Windows de 64 bits). A localização deste arquivo está ilustrada na Figura 4. Figura 4 | Arquivo StartSonar.bat https://www.sonarqube.org/downloads/ https://www.sonarqube.org/success-download-community-edition/ https://www.sonarqube.org/success-download-community-edition/ https://www.oracle.com/java/technologies/downloads/#java11 Fonte: captura de tela. Quando o software estiver instalado, aparecerá uma mensagem de Process[es] is up no prompt de comando. Depois disso, no seu programa de acesso à internet (no caso, eu utilizo o Google Chrome), basta que você digite o link https://localhosts.mobi/9000 e acesse o ícone open hppt://localhost:9000 para acessar o software, conforme ilustra a Figura 5. Figura 5 | Acesso à pasta da internet localhost: 9000 Fonte: https://localhosts.mobi/9000. Acesso em: 22 fev. 2022. Os dados de login e senha para abertura do programa são: admin (na primeira vez, o próprio site pedirá para você alterar a senha). Depois de todo este processo, o site será aberto e possuirá a con�guração inicial retratada na Figura 6. Figura 6 | Página inicial do software SonarQube Fonte: https://localhosts.mobi/9000. Acesso em: 22 fev. 2022. Agora, é só começar a usar esta ferramenta e bom trabalho! VIDEOAULA: QUALIDADE NA ELABORAÇÃO DE UM PROCEDIMENTO DE TESTE E REQUISITOS APLICÁVEIS Abordaremos as principais de�nições de qualidade e o software SonarQube, utilizado na testagem automática. É dado o passo a passo com dicas para a sua instalação bem- sucedida, visto que este software vem com alguns bugs e necessita do Java na versão 11 instalado na máquina para funcionar corretamente. https://localhosts.mobi/9000 OS CUSTOS DA IMPLEMENTAÇÃO DE UM PROGRAMA DE QUALIDADE TMMI O TMMi (Test Maturity Model Integration – Integração do Modelo de Maturidade de Teste) possui cinco níveis de maturidade. A cada nível de maturidade que uma organização ultrapassa, seu processo de testagem torna-se melhor e mais otimizado. As indústrias que contratam empresas de desenvolvimento de softwares que possuem TMMi nível 5 têm a garantia de que seu programa será desenvolvido dentro das melhores práticas do mercado. Os cinco níveis do TMMi são: Nível 1: este é o nível inicial de uma empresa que não adota o programa TMMi. Neste nível, os testes de software não seguem nenhuma sequência padronizada e são feitos de forma aleatória, caso sejam realmente feitos. A partir da decisão de se adotar o TMMi, a empresa passa a possuir o nível 2. Nível 2: este nível é conhecido como nível gerenciado. Nele, é fundamental que uma empresa tenha: • Uma política e estratégia de teste. • Um planejamento de teste. • Um monitoramento e controle dos testes. • Um projeto para a execução de cada teste. • Um ambiente de testagem especí�co. Aqui, a empresa tomou a decisão de testar todos os códigos de uma forma padronizada, de quanti�car os resultados e adotar procedimentos para incorporarà correção dos erros de forma de�nida, com atribuições de tarefas fazendo com que o pessoal de desenvolvimento e de testagem comecem a trabalhar juntos. Como os procedimentos e padrões de testagem são iniciais neste nível, alguns erros podem não ser detectados, como estes documentos podem sofrer revisão em busca de uma versão que realmente funcione. Nível 3: é chamado de de�nido e é composto por • Uma organização do processo de testagem. • Um programa de treinamento para os desenvolvedores e engenheiros de testes. • Acompanhamento do ciclo de vida e integração dos softwares desenvolvidos. • Testes não funcionais. • Revisão por pares. Neste nível, os testes estão integrados à cultura da empresa, e a cultura de testagem de softwares já está consolidada na empresa como uma importante etapa no desenvolvimento de um programa. Além do mais, a cultura de que o teste de software é feito para encontrar defeitos, erros, e não a ausência deles, sem apontar culpados, é prática recorrente na empresa, assim como o feedback dos erros encontrados e o Videoaula: Qualidade na elaboração de um procedimento de teste e requisitos aplicáveis Para visualizar o objeto, acesse seu material digital. acompanhamento do processo de correção e retirada destes mesmos bugs. Aqui, a documentação já pode ser usada como uma ferramenta e�caz no processo de testagem dos softwares. Nível 4: é chamado de Gerenciado Quantitativamente e é de�nido pela presença de: • Medição constante dos testes realizados. • Avaliação da qualidade de softwares desenvolvidos. • Revisão por pares avançada. Nesta fase, os procedimentos já estão consolidados dentro das melhores práticas realizadas através de métricas acompanhadas constantemente para a localização de defeitos com porcentagens de erros mais comuns, localização destes erros, tempo que levaram para serem solucionados e disseminação destes cases na empresa. Os setores de vendas e de manutenção do software começam a participar de reuniões, nas quais são explanados os cases de erros, as soluções encontradas e as normas que foram melhoradas para que estes erros não se repitam. Os dados estatísticos já alimentam um banco de dados considerável para que o processo seja acompanhado de perto por todo o pessoal da empresa. Nível 5: é chamado de otimizado e composto por: • Prevenção de defeitos. • Otimização do processo de teste. • Controle de qualidade. Aqui, a empresa já incorporou, além de todas as técnicas do TMMi, as técnicas das Metodologias Ágeis, para minimizar o tempo de programação e testagem. A automação de testes é parte da cultura da empresa, e rotinas padronizadas, tanto de programação como de testagem, já estão consolidadas e são largamente utilizadas pelo departamento de desenvolvimento de programas, que trabalha integrado ao departamento de vendas e manutenção dos softwares. Existe um departamento de testagem de software e controle de qualidade que trabalha em conjunto com os demais setores da empresa. O processo de melhoria contínua e a troca de conhecimento entre os pro�ssionais é feita de maneira automática, permitindo que o ambiente da empresa seja leve e focado em resultados. VIDEOAULA: OS CUSTOS DA IMPLEMENTAÇÃO DE UM PROGRAMA DE QUALIDADE TMMI Apresentamos os cinco níveis do TMMi e o que os diferencia e os caracteriza, com uma explicação sobre cada etapa de cada nível. Depois, de�nimos que o teste é realizado para se encontrar erros, e não para provar que um programa foi feito isento deles. Videoaula: Os custos da implementação de um programa de qualidade TMMi Para visualizar o objeto, acesse seu material digital. DIFERENTES FORMAS DE TESTAGEM Pressman (2016, p. 466) de�ne teste como um “conjunto de atividades que podem ser planejadas com antecedência e executadas sistematicamente”. Adotar uma forma de testagem correta para cada aplicação faz com que economizemos tempo, e tempo é dinheiro. Uma das formas de testagem mais comuns é chamada de Veri�cação e Validação, e é conhecida pela sigla V & V. Pressman (2016, p. 467) também de�ne a veri�cação como “um conjunto de tarefas que garantem que o software implemente corretamente uma função especí�ca. Validação refere-se a um conjunto de tarefas que assegurem que o software foi criado e pode ser rastreado segundo os requisitos do cliente”. O primeiro teste, conhecido como teste unitário, deve ser feito ao longo do desenvolvimento do código. É claro que é inviável testarmos o código a cada linha de programa que desenvolvemos, mas devemos fazer isso, pelo menos, a cada sequência de comando criada e nas fronteiras destas sequências. É mais fácil e não exige tanto recurso computacional testar um bloco de código assim que ele é feito. Por exemplo, criamos uma sequência loop para repetir um comando três vezes, ou incrementamos a variável x de 1 unidade, então testamos estes comandos. Podemos também testar blocos de comando e deixá-los salvos na nossa máquina para que os utilizemos na elaboração do código quando precisarmos destes comandos especí�cos. Nesta fase, é muito importante que testes com resultado de erro também sejam avaliados. Por exemplo, se criamos um código para veri�car se um número é par e maior que zero, temos que testar este mesmo código com números ímpares e negativos. Somente assim teremos a certeza de que esta parte do código não apresentará defeitos e não aceitará os números ímpares e zero como entradas válidas. Depois, devemos testar um conjunto de códigos, o chamado teste de integração, para veri�carmos que todos os atributos solicitados pelo cliente estão presentes no código, como exemplo, podemos testar se foi feito cadastro dos usuários da forma correta, com suas respectivas permissões de acesso e modi�cação ao código. Até esta etapa, as boas práticas da qualidade garantem que a elaboração do software e sua testagem sejam realizadas pela equipe responsável pelo desenvolvimento do código. Eles devem testar, anotar e corrigir os erros de programação encontrados de maneira e�caz e con�ável. Quando algumas partes do código estiverem prontas, devemos realizar os testes de integração, que devem ser feitos por equipes ou colaboradores diferentes (geralmente, do setor da qualidade), porque não é correto que quem fez o projeto tenha que testá-lo, já que, inconscientemente, temos a tendência de proteger nossas criações, de não querermos ver seus defeitos. Neste momento, um setor de testagem independente terá uma visão mais clara do código. Entretanto, este teste só funcionará de maneira e�caz se os desenvolvedores passarem todas as informações para o pessoal da qualidade, se houver um brie�ng e�caz do desejo e das considerações feitas pelo cliente, porque é impossível para uma equipe aprender tudo sobre um código em poucas semanas, face à outra equipe, que levou meses trabalhando naquele código, conhecendo as especi�cações e os desejos do cliente. Podemos resumir este processo como se fosse uma espiral, partindo do menor teste para o maior, conforme nos mostra a Figura 7. Figura 7 | Espiral da testagem de software Fonte: Pressman (2016 p. 375). Na fase de validação, ou seja, na fase de testagem, se o software está de acordo com as características do cliente, é demonstrado que o código satisfaz ao que foi solicitado quanto à funcionalidade, ao desempenho e aos requisitos operacionais. Nesta fase, podemos a�rmar que o teste de software foi encerrado e, agora, a função da testagem é transferida ao usuário do programa. Isso signi�ca que aquele código será exposto a inúmeras situações. É importante a escolha de um time de suporte ao usuário que possa registrar estatisticamente os defeitos apresentados durante a utilização do software ou do programa, as medidas propostas para correção para se determinar quando é o melhor momento para lançarmos uma atualização do programa ou um upgrade daquele código. Somente assim podemos garantir que o programa ou o software permaneça constantemente atualizado ou apto a atenderde forma e�caz ao cliente. VIDEOAULA: DIFERENTES FORMAS DE TESTAGEM Discutimos as etapas de veri�cação e validação, nas quais são feitos os testes de unidade e de integração pela equipe de desenvolvimento do código. Abordamos a importância de um setor de testes de softwares separado para realizar a testagem do sistema geral e obter o aceite junto ao cliente. ESTUDO DE CASO Como vimos no Bloco 1 desta unidade, alguns programas são disponibilizados para o usuário com erros, como foi o caso do SonarQube, do próprio Windows, ou de um banco que bloqueou todas as contas dos seus clientes após uma atualização do software. Considere que você foi recém-contratado como Gerente de Qualidade pelo setor de qualidade da empresa fabricante do SonarQube, e sabe que a versão Community deste software está apresentando erro de Java, deixando os usuários bravos, fazendo com que eles reclamem no setor de atendimento ao cliente; Além Videoaula: Diferentes formas de testagem Para visualizar o objeto, acesse seu material digital. disso, diversos vídeos feitos por pro�ssionais do mercado retratam o software de uma maneira pejorativa. Quais providências você deveria adotar para que este tipo de erro não fosse mais encontrado no software? RESOLUÇÃO DO ESTUDO DE CASO Como gerente da qualidade da empresa SonarQube, você deveria, primeiro, disponibilizar uma nova versão do software com a correção do erro e informar ao usuário que a versão em uso necessita da instalação do Java 11, inserindo imediatamente um link para o programa instalador desta versão do Java na máquina do usuário. Depois de feito o link, você deverá gravar um vídeo pedindo desculpas pelo erro, realizando o procedimento de instalação, com o passo a passo em todos os idiomas dos países que baixem este software de maneira maciça, ou seja, em inglês, chinês e espanhol, pelo menos. Depois disso, você teria que reunir a equipe de desenvolvimento para atualizar o software, fazendo com que seja disponibilizada para o usuário uma nova versão do software já com o Java 11 incorporado ao programa, ou que ele tente reconhecer a versão do Java instalada no computador do usuário e informe, no momento da sua instalação, que o usuário deverá baixar a versão do Java nº 11, disponibilizando um link com o passo a passo para este download. Sua equipe deverá também veri�car a possibilidade de refazer o software para, ao invés de baixar uma versão compacta dele, ou seja, zipado, possa ser baixada uma versão .exe, para facilitar a instalação do software pelo usuário leigo. Finalmente, você deverá solicitar aos desenvolvedores que veri�quem a possibilidade de a plataforma disponibilizar uma versão on-line do programa, já que ele utiliza uma página da internet e um host para funcionar. Para terminar, você deve determinar a revisão imediata do procedimento de testagem para incluir testes com versões diferentes do software Java, para que se veri�que a funcionalidade ou não dos programas com esta plataforma. Saiba mais O livro Engenharia de Software, escrito por Pressman e Maxim, dedica o Capítulo 15, chamado de Conceitos de Qualidade, ao aprofundamento do entendimento do aluno em relação aos principais tópicos da qualidade de software. Disponível na Biblioteca Virtual da Kroton através do link: https://integrada.minhabiblioteca.com.br/reader/books/9786558040118/epubc�/6 /60%5B%3Bvnd.vst.idref%3DC19.xhtml%5D!/4%5BPRESSMAN_Completo-26%5D. Acesso em: 15 set. 2021. O artigo Qualidade, Qualidade de Software e Garantia de Qualidade de Software são as mesmas coisas, escrito por Fábio Martinho Campos, traz uma análise profunda sobre o termo “qualidade” (um conceito subjetivo, pois um produto pode ter qualidade para uma pessoa, e para outra, não. Exemplo disso é a eterna Resolução do Estudo de Caso Para visualizar o objeto, acesse seu material digital. https://integrada.minhabiblioteca.com.br/reader/books/9786558040118/epubcfi/6/60%5B%3Bvnd.vst.idref%3DC19.xhtml%5D!/4%5BPRESSMAN_Completo-26%5D https://integrada.minhabiblioteca.com.br/reader/books/9786558040118/epubcfi/6/60%5B%3Bvnd.vst.idref%3DC19.xhtml%5D!/4%5BPRESSMAN_Completo-26%5D briga entre os fãs de celulares Apple e Samsung), com de�nições e citações de trechos das normas ISO 9000 e do PMBOK, referências na adoção de sistemas de qualidade e de métricas para se realizar a testagem de softwares. Disponível em: http://www.linhadecodigo.com.br/artigo/1712/qualidade-qualidade-de-software-e- garantia-da-qualidade-de-software-sao-as-mesmas-coisas.aspx. Acesso em: 14 set. 2021. No vídeo feito pela T2Ti, chamado 03 – SonarQube – Download, Instalação e Execução, é mostrado o passo a passo da instalação do software SonarQube, desde como devemos fazer o download do software, do Java 11, alterarmos o item wrapper dentro do software, executarmos o item StartSonar e acessarmos a pasta da Internet Localhost 9000, até a colocação do login e da senha admin no software para termos acesso à sua página inicial. Disponível em: https://www.youtube.com/watch?v=TNEHX51L9Do. Acesso em: 14 set. 2021. INTRODUÇÃO Nesta unidade, daremos um maior enfoque às infraestruturas utilizadas para permitir que o teste unitário e de automação seja efetuado mesmo com o início da programação de um código, ou seja, com o código sem estar terminado. Isso é feito através de ferramentas, como stubs e drivers, que auxiliam na criação de per�s �ctícios para a testagem de comandos do código e das interfaces de integração entre partes do software. Estudaremos também alguns softwares gratuitos que analisam o código já em estágio mais avançado de programação através da análise dos grafos obtidos pelo �uxograma lógico, obtendo os caminhos principais que devem ser testados, ou seja, aquelas con�gurações que possuem mais chance de apresentar erros. PRINCÍPIOS DE TESTES UNITÁRIOS Devemos considerar os testes unitários como uma ferramenta auxiliar na etapa de programação. Cada estrutura for, if, loop, equação matemática e condição de verdadeiro ou falso deve ser testada para veri�car se na hora da programação o código não foi feito de maneira incorreta. O problema encontrado com esta exigência é: como testar e elaborar o código sem que um trabalho não comprometa o outro? Muitas vezes, não temos estrutura su�ciente para testar todas as condições, ou a Aula 3 DIFERENTES TIPOS DE TESTES Formular, aplicar e escolher o melhor tipo de teste aplicável a um programa entre os diferentes tipos de testes disponíveis no mercado. De�nir o melhor protocolo de comunicação a ser utilizado na testagem. 42 minutos http://www.linhadecodigo.com.br/artigo/1712/qualidade-qualidade-de-software-e-garantia-da-qualidade-de-software-sao-as-mesmas-coisas.aspx http://www.linhadecodigo.com.br/artigo/1712/qualidade-qualidade-de-software-e-garantia-da-qualidade-de-software-sao-as-mesmas-coisas.aspx https://www.youtube.com/watch?v=TNEHX51L9Do testagem de todas as condições demandaria muito tempo. Por exemplo, como testaremos se um tipo de per�l de usuário só acessa ou modi�ca aquela parte que foi especi�cada se não temos nenhum usuário cadastrado? Por isso, nesta parte do código, precisamos criar alguns sca�olding (do inglês andaime, ou “estruturas temporárias”), para podermos gerar um framework para realizar este teste. No caso do exemplo citado, precisamos criar usuários “fake”. Neste momento, precisaremos também criar pseudocontroladores (drivers ou stubs) para cada parte do texto. De acordo com Pressman e Maxim (2021, p. 379), “um pseudocontrolador usa a interface dos módulos subordinados, pode fazer uma manipulação de dados mínima, fornece uma veri�cação de entrada e retorna o controle para o módulo que está sendo testado”. A Figura 1 retrata a estrutura periférica que deve ser desenvolvida junto ao código para permitir a testagem ponto a ponto. Figura 1 | Ambiente de teste de unidade Fonte: Pressman e Maxim (2021, p. 379). É claro que elaborar estas estruturas para apoiar a testagem unitária demanda dinheiroe, muitas vezes, um tempo in�nito, que o projeto não tem. Por exemplo, imagine que estamos criando um aplicativo que simule um jogo de xadrez. Um teste para cada jogada possível em um jogo de xadrez poderia levar milhares de anos para ser executado. Pensando nisso, foram criadas con�gurações básicas que devem ser testadas no teste de unidade. A primeira con�guração é que devemos testar o �uxo de dados por meio de um componente. Um dado deve conseguir entrar em uma estrutura básica de código para poder ser veri�cado se aquela con�guração foi feita corretamente. Depois, deve-se testar as fronteiras entre os códigos, ou seja, se um comando for encerrado, o dado deve passar imediatamente para o próximo comando. Para isso, são criados caminhos de manipulação de erros. Muitos autores chamam esta abordagem de antidefeitos. Neste caso, são testados erros em potencial, como: • Descrição confusa do erro. • Erro apontado não corresponde ao erro encontrado. • Condição de erro não permite acesso ao sistema para sua correção. • Procedimento exceção – condição não está gerando um teste válido. • Descrição de erro vaga, não permitindo sua localização no código. Neste momento, devemos realizar o teste do caminho básico (um teste feito nos principais códigos do software) e o teste da estrutura de controle (um teste feito seguindo o �uxograma de programação – neste teste, veri�camos as condições falsas também). Para isso, os desenvolvedores do código devem ter um banco de dados criado para diferentes níveis de usuários. Se o cliente tiver este banco de dados de outro aplicativo, ele poderá ser utilizado para tornar este teste mais próximo da realidade. O teste do caminho básico deve executar, pelo menos uma vez, todas as estruturas do código, e ele é escolhido pelo projetista para as condições verdadeiras, ou seja, o menor caminho que permite ao usuário chegar ao �nal do programa. Ele utiliza uma notação de grafos para informar este caminho. Cada círculo é chamado de nó, e cada losango de ligação pode ser representado por um nó. As arestas ou ligações são os chamados �uxos de controle e representam as opções que uma tomada de decisão ou um atendimento a uma condição verdadeira ou falsa podem causar. Uma área de aresta e nós é chamada de região, conforme pode ser visualizado na Figura 2. Figura 2 | Representação de um �uxograma de um código (a) e seu respectivo grafo (b) Fonte: Pressman e Maxim (2021, p. 384). Alguns dos caminhos para este �uxograma são: • Caminho 01: 1 – 11. • Caminho 02: 1 – 2 – 3 – 4 – 5 – 10 – 1 – 11. • Caminho 03: 1 – 2 – 3 – 6 - 8 – 9 - 10 – 1 – 11. • Caminho 04: 1 – 2 – 3 – 6 - 7 – 9 - 10 – 1 – 11. Um bom exemplo de teste para este código seria testarmos os caminhos 1 e 4. Existem várias fórmulas de se calcular quantos caminhos críticos um código possui. Uma delas é dada através do cálculo da complexidade ciclomática, representada através da sigla V. Para um grafo de �uxo G, ela é calculada através da fórmula dada por V (G) = E – N + 2 (Equação 1) Onde: E é o número de arestas do grafo de �uxo. N é o número de nós. Neste caso, teríamos quatro caminhos críticos para serem testados. V (G) = 11 arestas – 9 nós + 2 = 4. Portanto, seriam necessários quatro casos de testes para executar um teste unitário satisfatório para o �uxograma ilustrado na Figura 2. VIDEOAULA: PRINCÍPIOS DE TESTES UNITÁRIOS No Bloco 1, aprenderemos sobre como realizar a análise de um teste unitário satisfatório para um �uxograma utilizando grafos, através do método matemático ciclomático para calcular quantas análises deveremos executar. Estudaremos também os stubs e drivers, ferramentas que fornecerão as condições necessárias para a realização deste teste. O TESTE DE AUTOMAÇÃO DOS SISTEMAS O teste de automação é um teste caixa-preta, focado nas interfaces do sistema. De acordo com Pressman e Maxim (2021, p. 381), o teste de automação tenta encontrar: • Funções incorretas ou ausentes; • Erros de interface; • Erros em estruturas de dados ou acesso a base de dados externos; • Erros de comportamento ou desempenho; • Erros de inicialização ou de término. Para este tipo de teste, é preciso termos estruturas prontas, e não somente o código de uma só estrutura. Ele precisa procurar erros na transição de uma estrutura para a outra, ou de uma interface para a outra. Neste tipo de teste, é preciso que se tenha pelo menos um per�l para cada tipo de usuário previsto, para que seja possível conferirmos se as permissões de acesso e de modi�cação ao sistema estão corretas por tipo de usuário. Este teste é chamado de caixa-preta, porque ele não se preocupa com o código em si (objeto do teste unitário, por isso, chamado também de caixa branca), e sim com as funcionalidades ou as respostas que o código deve apresentar para diversas situações reais, por exemplo, se o código está atendendo aos requisitos básicos solicitados pelo cliente no cadastramento de um novo usuário. O teste de interface, por exemplo, testa se o código aceita novas informações, como um novo usuário, e se ele armazena as informações deste novo usuário de forma adequada. Se estivermos desenvolvendo um jogo, este tipo de teste garantirá que o novo usuário entre em uma fase fácil, para que ele possa passar rapidamente por Videoaula: Princípios de testes unitários Para visualizar o objeto, acesse seu material digital. várias fases de forma a gostar do jogo. Não teria sentido um novo usuário já ser alocado em uma fase difícil do jogo, sem conseguir avançar, e desistir daquele aplicativo só porque foi inserido em uma janela (ponto de início) de forma errônea. Outro tipo de teste que pode ser aplicado nesta fase é o particionamento de equivalência, que pode testar se todas as senhas são criadas com caracteres numéricos, alfanuméricos ou símbolos, como @, $ de uma só vez. Durante a criação do código, recomenda-se que este tipo de teste já seja feito e se torne um padrão de testagem na empresa – podendo ser feito até em uma cópia do código original, quando a parte das senhas e do cadastramento de novos usuários já tenha sido terminada. Nesta parte, é necessário que se tenha ou se crie um banco de dados, por exemplo, se estivermos programando um software para um banco, este programa deve testar se cadastros de CPFs iguais utilizando nomes diferentes serão bloqueados pelo sistema e se cadastro de nomes iguais com CPFs diferentes e dados, como �liação, diferentes serão aceitos pelo sistema. A Análise do Valor Limite (chamada de BVA, por causa do seu nome em inglês, Boundary Value Analysis) é similar ao teste de equivalência, só que, desta vez, são testados os valores limites – tanto os inferiores quanto os superiores – para um dado código. Por exemplo, se estivermos fazendo um aplicativo de cotação de plano de saúde por faixas etárias, os preços para faixas etárias localizados na fronteira, ou seja, que levará um usuário a mudar de faixa, devem ser testados. Neste caso, é recomendado que testemos as fronteiras e um valor acima e um valor abaixo, para que o funcionamento das interfaces possa ser veri�cado de forma correta O�cialmente, segundo Pressman e Maxim (2021, p. 389), este postulado diz que “se uma condição de entrada especi�ca um intervalo limitado por valores a e b, deverão ser projetados casos de teste com os valores a e b e imediatamente acima e abaixo de a e b”. Deste modo, todas as interfaces ou valores fronteiriços devem ser testados. Esta condição é exigida atualmente porque a chance de códigos apresentarem erros na fronteira é maior do que no meio do intervalo. Deste modo, o teste de integração obterá resultados satisfatórios na detecção de erros. VIDEOAULA: O TESTE DE AUTOMAÇÃO DOS SISTEMAS No Bloco 2, estudaremos de forma mais detalhada o teste de integração e algumas maneiras para criação ou incorporação de bancos de dados que serão necessários para a realização deste tipo de teste. Aprenderemos também a diferenciar um testecaixa-branca (tipo o teste unitário) de um teste caixa-preta. TESTE PONTO A PONTO E A IMPORTÂNCIA NA INFRAESTRUTURA Para conseguirmos realizar o teste ponto a ponto com precisão, temos que criar ou escolher drivers e stubs de forma correta, pois estes dispositivos darão a infraestrutura de apoio para que o teste possa ser feito com o objetivo de Videoaula: O teste de automação dos sistemas Para visualizar o objeto, acesse seu material digital. encontrarmos bugs. O driver possuirá a função de fornecer todos os dados necessários para que possamos testar uma dada unidade e apresentar os dados de saída para que o responsável por este teste possa veri�car se ele foi bem-sucedido ou não. Por exemplo, para o cadastro de um novo usuário mediante um e-mail, este dispositivo fornecerá um modelo de e-mail válido, para que o programa acuse a digitação correta e envie um e-mail para o endereço fornecido e espere a con�rmação por parte do usuário de que este e-mail é gerenciado por uma pessoa, e não um robô. Já os stubs são ferramentas que auxiliam na simulação de comportamentos para uma dada unidade que ainda não foi desenvolvida, mas da qual dependemos para que esta parte do teste ponto a ponto possa ser feita de forma a encontrarmos seus defeitos. Na Figura 3, temos a representação das de�nições de drivers e stubs. Figura 3 | Representação de drivers e stubs Fonte: elaborada pela autora. A diferença entre o teste de unidade e o teste de integração dos stubs e drivers é que, no teste de unidade, eles são usados como módulos independentes, ou seja, só testamos um código em especí�co e, no teste de integração, eles se integram ao teste, permitindo que conectemos as diferentes partes do código, principalmente, as fronteiras. Essa diferença está retratada na Figura 4. Figura 4 | Diferença entre um teste de unidade e um teste de integração Fonte: elaborada pela autora. Existem algumas ferramentas on-line e softwares grátis que podem nos ajudar nestas etapas de testagem, como as ferramentas JaBUTi (Java Bytecode Understanding and Testing, disponível em: https://github.com/magsilva/jabuti). Para que o software JaBUTi funcione, é necessário que, antes, instalemos o programa Graphviz (Disponível em: https://graphviz.org/download/. Basta que o aluno escolha o programa do sistema operacional do computador dele), deste modo, este programa consegue ler os caminhos desenhados utilizando grafos. Este software proporciona a testagem de códigos feitos em Java e traz várias análises estatísticas através da sua página inicial. https://github.com/magsilva/jabuti https://graphviz.org/download/ Outro site muito utilizado é o EclEmma (disponível em https://marketplace.eclipse.org/content/eclemma-java-code-coverage). Este software pode ser instalado diretamente da versão Java Eclipse, pois ele foi desenvolvido especialmente para testar programas em Java feitos nesta plataforma. Outro site muito utilizado é o JUnit5, programa oriundo a partir do JUnit e disponível em https://junit.org/junit5/. Existem também comunidades que possibilitam o acesso a sites de testagem. Uma dessas comunidades é a TestProject, que pode ser encontrada no endereço: https://auth.testproject.io/auth/realms/TP/protocol/openid- connect/auth? client_id=tp.app&redirect_uri=https%3A%2F%2Fapp.testproject.io%2Fcallback.html&re sponse_type=id_token%20token&scope=openid%20pro�le&state=6faa66bf91534d00b 0f015bfef3b623d&nonce=7d5a9978753d421fbb51b1bd846e2e10. Neste site, é preciso somente fazer um cadastro através de uma conta Google ou Microsoft, con�rmar o e-mail e já começar a utilizá-lo – ele permite, inclusive, que cadastremos uma equipe. A vantagem destes sites é que podemos nos comunicar com desenvolvedores e testadores do mundo todo através das suas comunidades, ler artigos publicados na plataforma e até mesmo estudar algum material especí�co através de vídeos de aprendizagem disponibilizados pela própria desenvolvedora do software. VIDEOAULA: TESTE PONTO A PONTO E A IMPORTÂNCIA NA INFRAESTRUTURA Neste bloco, serão aprofundadas algumas ferramentas que podem ser utilizadas para o teste ponto a ponto, permitindo que seja criada uma infraestrutura automática para auxílio do programador na realização da testagem. Essas ferramentas são gratuitas e de fácil utilização, assim como é mostrado uma comunidade na internet dedicada a isso. ESTUDO DE CASO Você foi contratado como responsável pelo setor de desenvolvimento de códigos de uma startup brasileira que acabou de fechar uma parceria para assumir o desenvolvimento de um novo jogo, inspirado em um jogo muito famoso que os adolescentes adoram. Baseado nestas informações, você fez uma reunião de kick-o� (para iniciar o projeto e explicar as exigências do cliente para os seus colaboradores). Estas exigências são: • Cadastro com um e-mail válido. • Senha alfanumérica de 6 dígitos. • Jogador que trouxer mais 3 amigos ganha 10 vidas e 50 barras de ouro. • Jogador pode formar uma equipe com os seus 3 amigos. Videoaula: Teste ponto a ponto e a importância na infraestrutura Para visualizar o objeto, acesse seu material digital. https://marketplace.eclipse.org/content/eclemma-java-code-coverage https://junit.org/junit5/ https://auth.testproject.io/auth/realms/TP/protocol/openid-connect/auth?client_id=tp.app&redirect_uri=https%3A%2F%2Fapp.testproject.io%2Fcallback.html&response_type=id_token%20token&scope=openid%20profile&state=6faa66bf91534d00b0f015bfef3b623d&nonce=7d5a9978753d421fbb51b1bd846e2e10 https://auth.testproject.io/auth/realms/TP/protocol/openid-connect/auth?client_id=tp.app&redirect_uri=https%3A%2F%2Fapp.testproject.io%2Fcallback.html&response_type=id_token%20token&scope=openid%20profile&state=6faa66bf91534d00b0f015bfef3b623d&nonce=7d5a9978753d421fbb51b1bd846e2e10 https://auth.testproject.io/auth/realms/TP/protocol/openid-connect/auth?client_id=tp.app&redirect_uri=https%3A%2F%2Fapp.testproject.io%2Fcallback.html&response_type=id_token%20token&scope=openid%20profile&state=6faa66bf91534d00b0f015bfef3b623d&nonce=7d5a9978753d421fbb51b1bd846e2e10 https://auth.testproject.io/auth/realms/TP/protocol/openid-connect/auth?client_id=tp.app&redirect_uri=https%3A%2F%2Fapp.testproject.io%2Fcallback.html&response_type=id_token%20token&scope=openid%20profile&state=6faa66bf91534d00b0f015bfef3b623d&nonce=7d5a9978753d421fbb51b1bd846e2e10 https://auth.testproject.io/auth/realms/TP/protocol/openid-connect/auth?client_id=tp.app&redirect_uri=https%3A%2F%2Fapp.testproject.io%2Fcallback.html&response_type=id_token%20token&scope=openid%20profile&state=6faa66bf91534d00b0f015bfef3b623d&nonce=7d5a9978753d421fbb51b1bd846e2e10 Os pro�ssionais que trabalham para você relataram que, no projeto anterior que participaram, �zeram um código muito parecido com este e, por isso, não viam a necessidade de realizar a testagem do código. A única diferença é a senha alfanumérica, a qual, no projeto anterior, era uma senha numérica de 4 dígitos. Mediante a situação exposta pelos funcionários, que decisão você tomaria? RESOLUÇÃO DO ESTUDO DE CASO Primeiro, você deveria con�rmar esta informação e veri�car se o código entregue foi produzido sem erros nesta parte. Uma análise do relatório de testes do projeto anterior já resolveria esta situação. Constatada a veracidade da informação, você deveria determinar que um programador executasse a alteração no código para a sequência de senhas solicitadas e utilizasse o mesmo banco de dados do projeto anterior para testar o código unitário, veri�cando um caso verdadeiro e outro falso (como o cadastramento de uma senha numérica) para este requisito do código. Depois disso, você deve determinar que seja realizada a testagem de automação do código para veri�car se existe integração entre este cadastro e os itens pontuação por indicação de amigos e se o jogador pode escolher a sua equipe. Deve ser veri�cada também a boni�cação em barras de ouro – um teste caixa-preta com quatro usuários resolveria esta parte da testagem. Saibamais No Capítulo 4 do livro Introdução ao Teste de Software, são mostradas informações mais detalhadas da análise de códigos através de grafos e das telas de testagem fornecidas pelos programas de auxílio a estas formas de testes. Neste capítulo, é analisado o software POKE-TOOL, uma ferramenta que não tem capacidade de testar softwares comerciais, mas de muito auxílio para o estudo de testes ponto a ponto por parte de você, caro estudante. Disponível em: https://integrada.minhabiblioteca.com.br/reader/books/9788595155732/epubc�/6 /20%5B%3Bvnd.vst.idref%3Dchapter4.xhtml%5D!/4/2/2/2/2. Acesso em: 18 out. 2021. Artigo abordando a importância do ensino da criação do código e das ferramentas de testagem ao mesmo tempo. Os autores analisam a testagem baseada na ferramenta JaBUTi. Disponível em: https://pdfs.semanticscholar.org/ada8/6ab7011fb54fa3c2b2390a2cf0f9564d0fe9.p df. Acesso em: 18 out. 2021. Este vídeo traz uma explicação bem didática e simples do teste caixa-branca e caixa-preta, ressaltando as principais diferenças que podemos encontrar entre estes dois tipos de testagem. Disponível em: https://www.youtube.com/watch? v=QyXN_zAhqJA&t=266s. Acesso em: 18 out. 2021. Resolução do Estudo de Caso Para visualizar o objeto, acesse seu material digital. https://integrada.minhabiblioteca.com.br/reader/books/9788595155732/epubcfi/6/20%5B%3Bvnd.vst.idref%3Dchapter4.xhtml%5D!/4/2/2/2/2 https://integrada.minhabiblioteca.com.br/reader/books/9788595155732/epubcfi/6/20%5B%3Bvnd.vst.idref%3Dchapter4.xhtml%5D!/4/2/2/2/2 https://pdfs.semanticscholar.org/ada8/6ab7011fb54fa3c2b2390a2cf0f9564d0fe9.pdf https://pdfs.semanticscholar.org/ada8/6ab7011fb54fa3c2b2390a2cf0f9564d0fe9.pdf https://www.youtube.com/watch?v=QyXN_zAhqJA&t=266s https://www.youtube.com/watch?v=QyXN_zAhqJA&t=266s INTRODUÇÃO Seja muito bem-vindo à nossa aula sobre qualidade no processo de integração do software, da disciplina de Qualidade e Automação de Testes. Nesta aula, teremos a oportunidade de melhor compreender como a qualidade está diretamente relacionada ao desenvolvimento do software, passando pelas diversas fases que o compõe, bem como a integração que proporciona entre todos os envolvidos do time. É essencial também que a empresa participe de um programa ou siga métricas que façam a veri�cação e análise daquilo que se produz, sendo essencial para manter um padrão de qualidade, garantindo, assim, a con�ança e a credibilidade com o consumidor daquele software, que, neste caso, é o usuário. E aí, gostou do que leu até agora? Então, prepare-se, pois muito mais está por vir! Conhecimento gera conhecimento e, quanto mais sabemos, melhor nos tornamos como pro�ssionais deste vasto universo tecnológico. NORMAS PARA DESENVOLVIMENTO DE SOFTWARES COM QUALIDADE Agora, estudaremos a respeito das normas para desenvolvimento de softwares com qualidade. Durante esse primeiro momento, compreenderemos o que é importante para desenvolver um sistema, seja ele web, desktop ou app com qualidade. Utilizar-se de normas, padrões e métodos para desenvolver qualquer atividade, seja ela qual for, acarretará um resultado positivo e satisfatório. Assim também ocorre com a qualidade do software, que deve possuir suas diretrizes bem de�nidas para que o produto, no início, durante e no �nal do processo, possa estar de acordo com os anseios do cliente. Mas, antes de entrarmos no assunto propriamente dito, é importante conceituarmos o que signi�ca qualidade. Conforme expresso pela NBR ISSO 9000:2005, que a�rma que qualidade é o “grau no qual um conjunto de características inerentes satisfaz aos requisitos”, tornando-a como algo subjetivo, ou seja, não há uma padronização ou um conceito rígido, mas, sim, uma variação de produto para produto, serviço para serviço e de cliente para cliente. Indo mais além, Glass (1998) corrobora ao a�rmar que a relação deve ser intuitiva, apresentando a seguinte “fórmula”: “satisfação do usuário = produto compatível + boa qualidade + entrega dentro do orçamento e do prazo previsto”. Todos esses fatores, agregados à Aula 4 A QUALIDADE NO PROCESSO DE DESENVOLVIMENTO DE SOFTWARE compreender como a qualidade está diretamente relacionada ao desenvolvimento do software, passando pelas diversas fases que o compõe, bem como a integração que proporciona entre todos os envolvidos do time. 52 minutos seriedade e à agilidade em cada etapa do processo, deverão gerar entregas satisfatórias a todos os envolvidos, desde o time de desenvolvimento até o usuário �nal. Agora que você já está por dentro do assunto qualidade, podemos avançar nesse tema e entender como funciona e quais são as normas que auxiliam durante o processo de teste e validação do produto. Utilizar-se de normas e padrões garante que as organizações que realizam a mesma ação a façam de maneira similar, e que a comunicação entre elas ocorra de modo mais facilitado, isso graças aos protocolos uni�cados, que servem como parâmetros e embasamento de comparação e análise. Dentre as instituições detentoras das normas mais utilizadas, temos duas, sendo: • ISO: Organização Internacional para Padronização (International Organization for Standardization). • IEEE: Instituto de Engenheiros Eletricistas e Eletrônicos (Institute of Electrical and Electronics Engineers). Ambas se destacam no mercado mundial pelo alto grau de cobrança e de qualidade de seus programas, possuindo selos e títulos de acordo com o nível em que a empresa participante se encontra ou avança nas validações exigidas. Observe o Quadro 1, que apresenta as principais normas nacionais e internacionais na área da qualidade. Quadro 1 | Principais normas nacionais e internacionais de qualidade de software Normas Comentários ISO 9126 Características da qualidade de produtos de software. NBR 13596 Versão brasileira da ISO 9126. ISO 14598 Guias para a avaliação de produtos de software, baseados na utilização prática da norma ISO 9126. ISO 12119 Características de qualidade de pacotes de software (software de prateleira, vendido como um produto embalado). IEEE P1061 Standard for Software Quality Metrics Methodology. Norma que trata das metodologias para padronização da qualidade de software, incluindo algumas abordagens de medição. ISO 12207 Software Life Cycle Process. Norma para a qualidade do processo de desenvolvimento de software. NBR ISO 9001 Sistemas de qualidade – Modelo para garantia de qualidade em projeto, desenvolvimento, instalação e assistência técnica (processo). NBR ISO 9000-3 Gestão de qualidade e garantia de qualidade. Aplicação da norma ISO 9000 para o processo de desenvolvimento de software. Normas Comentários NBR ISO 10011 Auditoria de Sistemas de Qualidade (processo). CMMI Capability Maturity Model Integration. Modelo da SEI (Instituto de Engenharia de Software do Departamento de Defesa dos EUA) para avaliação da qualidade do processo de desenvolvimento de software. Não é uma norma ISO, mas é muito bem aceita no mercado. SPICE ISO 15504 Projeto da ISO/IEC para avaliação do processo de desenvolvimento de software. Ainda não é uma norma o�cial ISO, mas o processo está em andamento. Fonte: Morais (2010, [s. p.]). As normas citadas no Quadro 1 agregam valor a toda empresa que fará uso dela, bem como o fato de estar atualizado com o que há de melhor no mercado e estar à frente de seus concorrentes. Como destaque entre todas as normas, o padrão ISO 9126 é de grande relevância quando o assunto é qualidade do produto de software, pois foi desenvolvido como uma tentativa de identi�car os atributos fundamentais de qualidade para software de computador (PRESSMAN; MAXIM, 2021). Os seis atributos fundamentais de qualidade que o padrão estabelece podem ser encontrados no Quadro 2. Quadro 2 | Categorias de características e subcaracterísticas de qualidade de software CARACTERÍSTICAS SUBCARACTERÍSTICAS SIGNIFICADO Funcionalidade O conjunto de funções satisfazem as necessidades explícitas e implícitas paraa �nalidade a que se destina o produto? Adequação Propõe-se a fazer o que é apropriado? Acurácia Gera resultados corretos ou conforme acordados? Interoperabilidade É capaz de interagir com os sistemas especi�cados? Segurança de acesso Evita o acesso não autorizado, acidental ou deliberado a programas e dados? Conformidade Está de acordo com normas e convenções previstas em leis e descrições similares? CARACTERÍSTICAS SUBCARACTERÍSTICAS SIGNIFICADO Con�abilidade O desempenho se mantém ao longo do tempo e em condições estabelecidas? Maturidade Com que frequência apresenta falhas? Tolerância a falhas Ocorrendo falhas, como ele reage? Recuperabilidade É capaz de recuperar dados após uma falha? Usabilidade É fácil utilizar o software? Inteligibilidade É fácil entender os conceitos utilizados? Apreensibilidade É fácil aprender a usar? Operacionalidade É fácil de operar e controlar a operação? E�ciência Os recursos e os tempos utilizados são compatíveis com o nível de desempenho requerido para o produto? Comportamento em relação ao tempo Qual é o tempo de resposta e de processamento? Comportamento em relação aos recursos Quanto recurso utiliza? Manutenibilidade Há facilidade para correções, atualizações e alterações? Analisabilidade É fácil encontrar uma falha quando ocorre? Modi�cabilidade É fácil modi�car e remover defeitos? Estabilidade Há grandes riscos de bugs quando se faz alterações? Testabilidade É fácil testar quando se faz alterações? CARACTERÍSTICAS SUBCARACTERÍSTICAS SIGNIFICADO Portabilidade É possível utilizar o produto em diversas plataformas com pequeno esforço de adaptação? Adaptabilidade É fácil adaptar a outros ambientes sem aplicar outras ações ou meios além dos fornecidos para esta �nalidade no software considerado? Capacidade para ser instalado É fácil instalar em outros ambientes? Capacidade para substituir É fácil substituir por outro software? Conformidade Está de acordo com padrões ou convenções de portabilidade? Fonte: Morais (2010, [s. p.]). Nesse primeiro momento, identi�camos o que é necessário para que um software possa ser construído com qualidade. Veri�camos também quais são as principais normas que auxiliam nesse processo, garantindo os padrões exigidos pelo mercado. Até mais! VIDEOAULA: NORMAS PARA DESENVOLVIMENTO DE SOFTWARES COM QUALIDADE Neste vídeo, serão retratados os fatores fundamentais envolvidos para a construção de softwares com qualidade, utilizando-se das principais normas nacionais e internacionais para auxiliar nesse processo, garantindo os padrões de qualidade exigidos pelo mercado. Assim, você obterá conhecimento e visão crítica su�cientes para a sequência de conteúdos que serão estudados na disciplina. O DILEMA DA QUALIDADE DE SOFTWARE Aqui, estudaremos a respeito de como sabemos se um software possui ou não qualidade. Você nunca se perguntou como essa classi�cação é realizada? Agora, terá a oportunidade de melhor compreender esse processo importante no ciclo de desenvolvimento do software. Primeiramente, faço uma pergunta: devemos produzir o melhor software, ou um software bom o su�ciente? Antes de tratarmos da resposta e discutirmos um pouco mais sobre o assunto, veja o que Bertrand Meyer mencionou durante uma entrevista, o que conhecemos como “dilema da qualidade”: Videoaula: Normas para desenvolvimento de softwares com qualidade Para visualizar o objeto, acesse seu material digital. E agora, depois da leitura dessa citação, a sua resposta continua a mesma que antes? Certamente, tudo o que �zermos deve conter o melhor de nós, não é mesmo? Se cortamos a grama do jardim de casa, aquele deve ser o melhor corte já realizado em sua vida. A mesma coisa deve ocorrer durante a análise, criação e testagem de um software, seja ele aplicativo para mobile ou um programa local (desktop) ou on-line. O esforço concentrado para realização daquela tarefa deve ser o maior possível, haja vista que outras pessoas serão impactadas direta ou indiretamente se tudo que você �zer der certo ou errado. De acordo com Pressman e Maxim (2021, p. 421), não há nenhum problema ao produzir um software “bom o su�ciente”, pelo contrário, isso é aceitável e tolerável, pois as empresas de software já adotam essa prática há muito tempo, inclusive, estão fazendo isso neste momento. Basicamente, o que acontece é que as empresas desenvolvedoras de software criam seus produtos com erros (bugs) já conhecidos, os quais não impedem, em parte, o usuário de trabalhar. Como a demanda costuma ser grande e a equipe de trabalho não é su�cientemente grande o bastante para atender a essa demanda, o software passa a ser “bom o su�ciente”, ou seja, é entregue o essencial e crucial para atender a X função solicitada pelo usuário, devendo os aspectos secundários serem avaliados posteriormente, em novas versões. Portanto, o software “bom o su�ciente”, para Pressman e Maxim (2021, p. 421), “fornece funções e características de alta qualidade que os usuários desejam, mas, ao mesmo tempo, fornece outras funções e características mais obscuras ou especializadas que contêm erros conhecidos”. Desta forma, a empresa espera que o usuário foque apenas na função que foi solicitada e entregue, permanecendo os defeitos e erros esquecidos ou com menor relevância para aquele momento. Entretanto, utilizar-se dessa prática pode ser um tanto quanto perigoso, já que tudo depende do tamanho e da estrutura que a empresa possui e do tipo de aplicação e tecnologia que ela trabalha. Empresas de grande porte podem investir em marketing, além de já estarem estruturadas no mercado, o que acaba criando uma referência para o setor. Outro ponto importante é determinar o custo da qualidade, o qual, para Pressman e Maxim (2016, p. 422), pode ser dividido em custos associados à prevenção, à avaliação e às falhas, como mostra o Quadro 3. Quadro 3 | Tipo de custo da qualidade Se produzimos um sistema de software de péssima qualidade, perdemos porque ninguém vai querer comprá-lo. Se, por outro lado, gastamos um tempo in�nito, um esforço extremamente grande e grandes somas de dinheiro para construir um software absolutamente perfeito, então ele levará muito tempo para ser concluído, e o custo de produção será tão alto que iremos à falência. — . (VENNERS, 2003, [s. p.] apud PRESSMAN; MAXIM, 2016, p. 420) TIPO DE CUSTO DESCRIÇÃO Prevenção a) O custo de atividades de gerenciamento necessárias para planejar e coordenar todas as atividades de controle e garantia da qualidade. b) O custo de atividades técnicas adicionais para desenvolver modelos completos de requisitos e de projeto. c) Os custos de planejamento de testes. d) O custo de todo o treinamento associado a essas atividades. Avaliação a) O custo da realização de revisões técnicas. b) O custo dos artefatos de engenharia de software. c) O custo da coleta de dados e avaliação de métricas. d) O custo dos testes e depuração. Avaliação a) O custo da realização de revisões técnicas. b) O custo dos artefatos de engenharia de software. c) O custo da coleta de dados e avaliação de métricas. d) O custo dos testes e depuração. Falhas São divididas em duas, sendo: 1. Falhas internas: a) O custo necessário para realizar reformulações (reparos) para corrigir um erro. b) O custo que ocorre quando reformulações geram, inadvertidamente, efeitos colaterais que devem ser reduzidos. c) Os custos associados à reunião de métricas de qualidade que permitam a uma organização avaliar os modos de falha. 2. Falhas externas: a) Defeitos encontrados após o produto ter sido entregue ao cliente. Fonte: adaptado de Pressman e Maxim (2016, p. 422). Outra informação bastante relevante, é que o custo para a correção de erros e falhas aumenta signi�cativamente à medida que as etapas do ciclo de vida do software avançam, sendo mais oneroso quando o software já está sendo utilizado pelo cliente. Essa informação pode ser comprovadacom os dados coletados por Boehm e Basili (2001 apud PRESSMAN; MAXIM, 2016), como demostrado na Figura 1. Figura 1 | Custo relativo para correção de erros e defeitos Fonte: Boehm e Basili (2001 apud PRESSMAN; MAXIM, 2016, p. 423). Analisando a Figura 1, temos a dimensão que o custo médio para corrigir um defeito durante a geração de código é de, aproximadamente, US$ 977 por erro. Para a correção do mesmo erro, mas durante os testes do sistema, o custo passa a ser de US$ 7.136 por erro. Essa estatística considerou uma grande aplicação com introdução de 200 erros durante a codi�cação. Nesse segundo momento, você compreendeu como é delicado quando precisamos mensurar se software possui ou não qualidade, demandando tempo e estudo em cada caso. Outro ponto é o custo �nanceiro para que aquele erro ou falha possa ser identi�cado e corrigido, demandando valores mais altos quando a aplicação já está no cliente. VIDEOAULA: O DILEMA DA QUALIDADE DE SOFTWARE Neste vídeo, serão retratados os pontos necessários para considerar ou não que um software possua qualidade, sendo considerada a utilização do software “bom o su�ciente” por empresas do setor. Outro ponto importante é quanto ao custo para que defeitos e erros sejam corrigidos, apresentando um valor mais elevando se o produto já estiver no cliente. GARANTIA DA QUALIDADE DE SOFTWARE Aqui, estudaremos sobre os aspectos para garantir a qualidade de software, sendo de extrema importância para o seu ciclo de vida, com relação direta na manutenção e integridade da qualidade atingida pelo produto. Durante esse bloco de estudo, teremos a chance de melhor compreender o quanto é importante a permanência do processo de qualidade. Garantir aquilo que se produz não é uma tarefa nada fácil, visto que envolve uma série de processos e tempo para aperfeiçoamento do produto, entretanto são essenciais para a competitividade e a permanência da empresa no mundo dos negócios. Pressman e Maxim (2021, p. 477) relatam que: Videoaula: O dilema da qualidade de software Para visualizar o objeto, acesse seu material digital. A importância de terceiros validarem uma nova funcionalidade do software cria um ambiente seguro e con�ável, pois novas pessoas (testes manuais), as quais não tiveram envolvimento com o desenvolvimento, terão a chance de tomar conhecimento sem nenhum vício, ou seja, as chances de falhas, defeitos ou erros serem encontrados é grande, pois um olhar novo poderá se deparar com situações até então desconhecidas. Foi Bell Labs, em 1916, que introduziu a primeira função formal da garantia e do controle da qualidade, espalhando-se rapidamente por todo o mundo da manufatura. Posteriormente, já em 1940, novos conceitos formais foram criados, com foco em medições e aprimoramento contínuo do processo (DEMING, 1986). Quanto ao desenvolvimento de software, os padrões para a garantia da qualidade ocorreram por iniciativa de algumas empresas terceirizadas pela indústria militar, no ano de 1970, ganhando o mundo do software comercial rapidamente. Deste modo, podemos entender que a garantia de qualidade de software, segundo Schulmeyer e McManus (1998 apud PRESSMAN; MAXIM, 2016, p. 449), é um “padrão de ações planejado e sistematizado”, necessário para garantir alta qualidade no software. Uma das formas de veri�cação da qualidade é através do grupo de SQA (Software Quality Assurance, ou Garantia da Qualidade de Software), que funciona como um serviço de defesa do cliente, pois examina o software sob o ponto de vista do cliente. A garantia de qualidade de software é um universo de possibilidades, com foco em atividades de gestão da qualidade de software. Para Horch (2003), os elementos podem ser sintetizados de acordo com o Quadro 4. Quadro 4 | Elementos de garantia de qualidade de software ELEMENTO DESCRIÇÃO Padrões IEEE, ISO e outras organizações de padronizações produziram uma ampla gama de padrões para engenharia de software e documentos relacionados. Tais práticas podem ser adotadas voluntariamente ou impostas pelo cliente ou outros envolvidos. A SQA garante que os padrões adotados sejam seguidos, e seus produtos estejam em conformidade com eles. Revisões e auditorias Com foco em revelar erros, as atividades de controle de qualidade são realizadas por engenheiros de software para engenheiros de software. As auditorias realizadas pela SQA têm o intuito de assegurar que as diretrizes de qualidade estejam sendo seguidas no trabalho de engenharia de software. Antes do século XX, o controle de qualidade era responsabilidade exclusiva do artesão que construía um produto. À medida que o tempo foi passando e técnicas de produção em massa tornaram-se comuns, o controle de qualidade tornou-se uma atividade realizada por outras pessoas, e não por aquelas que constroem o produto. ELEMENTO DESCRIÇÃO Testes É uma função de controle de qualidade, com o objetivo principal de encontrar erros. O papel da SQA é garantir que os testes sejam planejados apropriadamente e conduzidos e�cientemente, de modo que se tenha a maior probabilidade possível de alcançar seu objetivo primário. Coleta e análise de erros/defeitos A SQA reúne e analisa dados de erros e defeitos para melhor compreender como os erros são introduzidos e quais atividades de engenharia de software são as mais adequadas para sua eliminação. Gerenciamento de mudanças A SQA garante que práticas adequadas de gerenciamento de mudanças tenham sido instituídas. Educação A SQA assume a liderança no processo de aperfeiçoamento do software, sendo um proponente fundamental e patrocinador de programas educacionais. Gerência dos fornecedores O grupo de SQA deve garantir software de alta qualidade por meio da sugestão de práticas especí�cas de garantia da qualidade, que o fornecedor deve (sempre que possível) seguir e incorporar exigências de qualidade como parte de qualquer contrato com um fornecedor externo. Administração da segurança Proteção por meio de �rewalls para os aplicativos móveis e garantia de que o software não tenha sido alterado internamente sem autorização são exemplos de administração de segurança. A SQA garante o emprego de processos e tecnologias apropriados para se ter a segurança de software desejada. Proteção A SQA pode ser responsável por avaliar o impacto de falhas de software e por iniciar as etapas necessárias para redução de riscos. Gestão de riscos Apesar de a análise e a redução de riscos serem atribuições dos engenheiros de software, a SQA garante que as atividades de gestão de riscos sejam conduzidas apropriadamente e que planos de contingência relacionados a riscos tenham sido estabelecidos. Fonte: adaptado de Horch (2003). Como visto no Quadro 4, vários são os elementos que auxiliam no controle e na garantia de qualidade de software, além de serem associados a dois elementos distintos: os engenheiros de software, os quais realizam o trabalho técnico, e um grupo de SQA, que é responsável pelo planejamento, pela supervisão, pela manutenção de registros, pela análise e pelos relatórios referentes à garantia da qualidade (PRESSMAN; MAXIM, 2021, p. 343). Sendo normalmente orientado a dados, a garantia de qualidade de software moderna apresenta um ciclo, como pode ser observado na Figura 2. Neste processo, os envolvidos devem de�nir metas e medidas de qualidade, identi�car áreas problemáticas, mensurar indicadores e determinar se alterações no processo são ou não necessárias. O papel do engenheiro de software é aplicar medidas e métodos técnicos consistentes, conduzindo as revisões técnicas e realizando testes de software bem planejados, para garantir sua qualidade. Figura 2 | Garantia de qualidade de software Fonte: Pressman e Maxim (2021, p. 343). Como atribuição, a SQA tem a tarefa de obter um produto de alta qualidade, em parceria com a equipe de software. As atividades de SQA dizem respeito ao planejamento, à supervisão, à manutenção de registros, à análise e aos relatóriosrelativos à garantia da qualidade. De acordo com Pressman e Maxim (2021), essas atividades são realizadas (ou facilitadas) por um grupo de SQA independente, que deve: preparar um plano de SQA para um projeto; participar do desenvolvimento da descrição da gestão de qualidade do projeto; revisar as atividades de engenharia de software para veri�car sua conformidade com a gestão de qualidade de�nida; auditar os artefatos de software designados para veri�car sua conformidade com aqueles de�nidos como parte da gestão de qualidade; garantir que os desvios no trabalho de software e artefatos sejam documentados e tratados de acordo com um procedimento documentado; registrar qualquer não conformidade e relatar à alta direção. Chegamos ao �nal deste bloco. Você compreendeu melhor como ocorre a garantia da qualidade de software, não sendo de responsabilidade apenas de alguém ou de um grupo, mas de muitos envolvidos, garantindo a con�abilidade necessária ao usuário. VIDEOAULA: GARANTIA DA QUALIDADE DE SOFTWARE Neste vídeo, serão retratados os aspectos necessários para a garantia da qualidade de software, com destaque para as práticas e os processos necessários para que o software obtenha a qualidade desejada. ESTUDO DE CASO Agora chegou a hora de colocar tudo em prática! Para este estudo de caso, imagine o seguinte cenário: Há pouco tempo, a prefeitura de sua cidade adquiriu um app para realizar o cadastro de solicitações para alvará de estabelecimentos comerciais e situações que se �zerem necessárias. A plataforma permite, conforme a empresa ganhadora da licitação prometeu, a solicitação do primeiro alvará, renovação, acompanhamento do pedido, anexo de documentos e impressão do novo alvará. Acontece que, desde a implantação da ferramenta, alguns problemas vêm ocorrendo, além do relato de diversos munícipes que não conseguem a renovação do seu alvará através do aplicativo. Os relatos são inúmeros, como perda de conexão, sistema lento, dados não encontrados no banco de dados, entre outros. Ciente de todos esses problemas, a prefeitura resolveu instaurar uma comissão para averiguar o que estava, de fato, ocorrendo. Como é necessário realizar uma avaliação técnica do aplicativo e de sua estrutura, você foi convidado a integrar o corpo técnico do setor de tecnologia. Deste modo, você deverá investigar: a. Reclamações do usuário. b. Existência ou não de qualidade no desenvolvimento do aplicativo. c. Elencar possíveis prejuízos com os problemas do aplicativo à prefeitura. d. Confeccionar um plano de ação, sugerindo melhorias e aperfeiçoamento no aplicativo. Sua missão é de extrema importância e será impactante no dia a dia de inúmeras pessoas. Deste modo, não deixe passar nada. Seja extremamente criterioso e aponte tudo o que estiver fora das boas normas que o mercado pede. Então, mãos à obra! RESOLUÇÃO DO ESTUDO DE CASO lorePara a resolução deste estudo de caso, devemos utilizar o material dos três blocos, sendo: a qualidade no processo de desenvolvimento de software (Bloco 1), o impasse da qualidade do software (Bloco 2) e a qualidade de software (Bloco 3). Todo esse material servirá de base para o relatório que deverá ser desenvolvido para o cumprimento dessa atividade muito signi�cativa, que é a avaliação técnica do aplicativo e de sua estrutura. Para que a conferência possa ser executada e que nada seja esquecido, procure considerar os seguintes aspectos: Videoaula: Garantia da qualidade de software Para visualizar o objeto, acesse seu material digital. a) Coletar o máximo de reclamações, utilizando-se de imagens para comprovar a falha. b) Quais as normas de qualidade utilizadas no ciclo de vida do aplicativo pela empresa desenvolvedora? c) Avaliar o aplicativo conforme os seis atributos de qualidade da norma ISO 9126. d) Indicar os possíveis custos para ajuste e o que isso já interferiu (desgaste) desde o relato dos primeiros problemas. Pronto! Agora é só realizar a veri�cação e transcrever todas as informações para um relatório técnico e muito bem detalhado. Saiba mais Caro aluno, como sugestão para aprofundar seus estudos, sugiro o livro indicado a seguir, com o qual você obterá mais conhecimento sobre qualidade de software, através de um material fascinaste e super atual. Vale a pena conferir! GALLOTTI, G. M. A. Qualidade de software. São Paulo, SP: Pearson Education do Brasil, 2016. Disponível em: https://plataforma.bvirtual.com.br/Acervo/Publicacao/124148. Acesso em: 1º fev. 2022. Resolução do Estudo de Caso Para visualizar o objeto, acesse seu material digital. Aula 1 BERNARDO, P. C.; KON, F. A importância dos testes automatizados: controle ágil, rápido e con�ável de qualidade. Engenharia de Software Magazine, v. 1, n. 3, p. 54- 57, 2008. Disponível em: http://ccsl.ime.usp.br/agilcoop/�les/A%20Importancia%20dos%20Testes%20Automati zados.pdf.Acesso em: 4 set. 2021. BLANCO, M. Z. Documentação de teste baseado na norma IEEE 829 – estudo de caso: sistema de apoio a tomada de decisão. Revista Tecnologias, Infraestrutura e Software, São Carlos, v. 1, n. 1. p. 91-97, jul. 2021. Disponível em: http://revistatis.dc.ufscar.br/index.php/revista/article/view/18/22 . Acesso em: 5 set. 2021. REFERÊNCIAS 15 minutos https://plataforma.bvirtual.com.br/Acervo/Publicacao/124148 http://ccsl.ime.usp.br/agilcoop/files/A%20Importancia%20dos%20Testes%20Automatizados.pdf http://ccsl.ime.usp.br/agilcoop/files/A%20Importancia%20dos%20Testes%20Automatizados.pdf http://revistatis.dc.ufscar.br/index.php/revista/article/view/18/22 DELAMARO, M. E.; MALDONADO, J. C.; JINO, M. Introdução ao teste de software. 2. ed. Rio de Janeiro, RJ: Elsevier, 2016. Disponível em: https://integrada.minhabiblioteca.com.br/reader/books/9788595155732/epubc�/6/2% 5B%3Bvnd.vst.idref%3Dcapa.xhtml%5D!/4/2/2/4%5B959c907a-71f3-426e-db7c- 9d57809eec41%5D%4050:79 . Acesso em: 4 set. 2021. DIAS NETO, A. C. Introdução a testes de software. Engenharia de Software Magazine, n. 1, p. 54-59, jun. 2016. Disponível em: https://edisciplinas.usp.br/plugin�le.php/3503764/mod_resource/content/3/Introduca o_a_Teste_de_Software.pdf. Acesso em: 5 set. 2021. POLO, R. C. Validação e teste de software. Curitiba, PR: Contentus, 2020. PRESSMAN, R. S.; MAXIM, B. R. Engenharia de Software: uma abordagem pro�ssional. Trad. João Eduardo Nóbrega Tortello. Porto Alegre, RS: AMGH, 2016. TESTE DE SOFTWARE. [S. l.: s. n.], 2015. 1 vídeo (11min47s). Publicado pelo canal Pedro Carvalho. Disponível em: https://www.youtube.com/watch?v=DBw_GctgPqU. Acesso em: 4 set. 2021. Aula 2 CAMPOS, F. M. Qualidade, Qualidade de Software e Garantia da Qualidade de Software são as mesmas coisas? Linha de Código, [s. d.]. Disponível em: http://www.linhadecodigo.com.br/artigo/1712/qualidade-qualidade-de-software-e- garantia-da-qualidade-de-software-sao-as-mesmas-coisas.aspx. Acesso em: 14 set. 2021. CIGITAL. Case study: Finding Defects elarlier yields enourmous savings. Cigital Archive, 2007. Disponível em: http://web.archive.org/web/20071003044003/http://www.cigital.com/solutions/roi- cs2.php . Acesso em: 8 set. 2021. PRESSMAN, R. S.; MAXIM, B. R. Engenharia de Software: uma abordagem pro�ssional. Porto Alegre, RS: AMGH, 2016. PRESSMAN, R. S.; MAXIM, B. R. Engenharia de Software: uma abordagem pro�ssional. Porto Alegre, RS: AMGH, 2021. ZANIN, A. et al. Qualidade de software. Porto Alegre, RS: SAGAH, 2018. 03 – SONARQUBE – DOWNLOAD, INSTALAÇÃO E EXECUÇÃO. [S. l.: s. n.], 2020. 1 vídeo (11min49s). Publicado pelo canal T2Ti. Disponível em: https://www.youtube.com/watch?v=TNEHX51L9Do. Acesso em: 14 set. 2021. Aula 3 CORTE, C. K. D. Ensino integrado de fundamentos de programação e teste de software. 2006. Dissertação (Mestrado em Ciências de Computação e Matemática Computacional) – Universidade de São Paulo, São Carlos, 2006. Disponível em: https://pdfs.semanticscholar.org/ada8/6ab7011fb54fa3c2b2390a2cf0f9564d0fe9.pdf . Acesso em: 18 out. 2020. https://integrada.minhabiblioteca.com.br/reader/books/9788595155732/epubcfi/6/2%5B%3Bvnd.vst.idref%3Dcapa.xhtml%5D!/4/2/2/4%5B959c907a-71f3-426e-db7c-9d57809eec41%5D%4050:79https://integrada.minhabiblioteca.com.br/reader/books/9788595155732/epubcfi/6/2%5B%3Bvnd.vst.idref%3Dcapa.xhtml%5D!/4/2/2/4%5B959c907a-71f3-426e-db7c-9d57809eec41%5D%4050:79 https://integrada.minhabiblioteca.com.br/reader/books/9788595155732/epubcfi/6/2%5B%3Bvnd.vst.idref%3Dcapa.xhtml%5D!/4/2/2/4%5B959c907a-71f3-426e-db7c-9d57809eec41%5D%4050:79 https://edisciplinas.usp.br/pluginfile.php/3503764/mod_resource/content/3/Introducao_a_Teste_de_Software.pdf https://edisciplinas.usp.br/pluginfile.php/3503764/mod_resource/content/3/Introducao_a_Teste_de_Software.pdf https://www.youtube.com/watch?v=DBw_GctgPqU http://www.linhadecodigo.com.br/artigo/1712/qualidade-qualidade-de-software-e-garantia-da-qualidade-de-software-sao-as-mesmas-coisas.aspx http://www.linhadecodigo.com.br/artigo/1712/qualidade-qualidade-de-software-e-garantia-da-qualidade-de-software-sao-as-mesmas-coisas.aspx http://web.archive.org/web/20071003044003/http://www.cigital.com/solutions/roi-cs2.php http://web.archive.org/web/20071003044003/http://www.cigital.com/solutions/roi-cs2.php https://www.youtube.com/watch?v=TNEHX51L9Do https://pdfs.semanticscholar.org/ada8/6ab7011fb54fa3c2b2390a2cf0f9564d0fe9.pdf DELAMARO, M. E.; MALDONADO, J. C.; JINO, M. Introdução ao teste de software. 2. ed. Rio de Janeiro, RJ: Elsevier, 2016. PRESSMAN, R. S.; MAXIM, B. R. Engenharia de software: uma abordagem pro�ssional. 9. ed. Porto Alegre, RS: AMGH, 2021. TESTES DE SOFTWARE – TESTE CAIXA-BRANCA E CAIXA-PRETA. [S. l.: s. n.], 2017. 1 vídeo (4min34s). Publicado pelo canal Canal TI. Disponível em: https://www.youtube.com/watch?v=QyXN_zAhqJA&t=266s. Acesso em: 18 out. 2021. Aula 4 ASSOCIAÇÃO BRASILERIA DE NORMAS TÉCNICAS. NBR ISO 9000. Sistema de gestão da qualidade – Fundamentos e vocabulário. Rio de Janeiro, RJ: ABNT, 2005. BOEHM, B. W., BASILI, V.R. Software Defect Reduction Top 10 List. IEEE Computer, v. 34, n. 1, p. 135-137, jan. 2001. Disponível em: https://ieeexplore.ieee.org/document/962984/citations#citations. Acesso em: 14 mar. 2022. DEMING, W. Out of the Crisis. Cambridge: MIT Press, 1986. GLASS, R. De�ning Quality Intuitively. IEEE Software, p. 103-104, maio 1998. HORCH, J. Practical Guide to software Quality Management. 2. ed. Londres; Norwood: Artech House, 2003. PRESSMAN, R. S.; MAXIM, B. R. Engenharia de software: uma abordagem pro�ssional. 8. ed. Porto Alegre, RS: AMGH, 2016. PRESSMAN, R. S.; MAXIM, B. R. Engenharia de software: uma abordagem pro�ssional. 9. ed. Porto Alegre, RS: AMGH, 2021. MORAIS, L. Qualidade de software. Revista Engenharia de Software, ed. 29, 2010. Disponível em: https://www.devmedia.com.br/qualidade-de-software-engenharia-de- software-29/18209. Acesso em: 14 mar. 2022. SCHULMEYER, G.; MCMANUS, J. (eds.). Handbook of Software Quality Assurance. ed. [S. l.]: Prentice Hall, 1998. VENNERS, B. Design by Contract: a conversation with Bertrand Meyer. Artima Developer, 2003. Disponível em: https://www.artima.com/articles/design-by-contract . Acesso em: 14 mar. 2022. https://www.youtube.com/watch?v=QyXN_zAhqJA&t=266s https://ieeexplore.ieee.org/document/962984/citations#citations https://www.devmedia.com.br/qualidade-de-software-engenharia-de-software-29/18209 https://www.devmedia.com.br/qualidade-de-software-engenharia-de-software-29/18209 https://www.artima.com/articles/design-by-contract Imprimir INTRODUÇÃO A engenharia de software evoluiu muito nos últimos anos e trouxe consigo uma disciplina essencial ao ciclo de desenvolvimento dos programas e à qualidade do produto de software, visto que, na atualidade, não é mais opcional realizar testes para garantir a qualidade e a melhor experiência de uso dos produtos de softwares. A disciplina de testes passou a ser mandatória no processo de desenvolvimento de aplicações e soluções de software e foi incorporada à vida dos desenvolvedores e engenheiros de software. Nessa aula, você aprenderá sobre os conceitos e o surgimento das necessidades dos testes de aplicações de software, os tipos de testes e como aplicá-los no processo de validação das aplicações. Acompanhando essa aula e assistindo aos vídeos, você terá a compreensão sobre as formas de testes em soluções de software e como utilizá-las no seu dia a dia pro�ssional. OS DIFERENTES NÍVEIS DA AUTOMAÇÃO DE UM PROCESSO O desenvolvimento de uma solução de software tem como objetivo principal atender a uma necessidade ou resolver um problema. Nesse sentido, podemos ter, por exemplo, uma aplicação de software que realiza a automação de um processo até então realizado de forma manual, ou um aplicativo de celular que se propõe a substituir um processo de agendamento de consultas médicas que é realizado de forma manual e através de ligações telefônicas. Tendo estes cenários em mente, a partir do desenvolvimento de uma aplicação de software, surgem as necessidades de realização de testes e validações nesses sistemas de acordo com os vários níveis de automação que os programas trazem em decorrência da substituição e da modernização de um processo existente. Historicamente, as indústrias iniciaram o uso da automação de processos buscando acelerar tarefas e diminuir os prazos de entrega de seus produtos e serviços. Assim, surgiu o chamado controle de qualidade, o qual, através de inspeções de amostras, evoluiu para o controle de inspeções automáticas. Fazendo uma comparação com a área de tecnologia, mesmo tendo resolvido um problema quando tarefas manuais são substituídas por instruções de códigos de programação, estes programas precisam ser testados e validados para garantir a qualidade mínima no produto de software. A automação de processos manuais através da criação e do desenvolvimento de sistemas de informação pode ser aplicada como solução de automação de tarefas manuais sujeitas a erros humanos, cujo uso da tecnologia passa a trazer o benefício de minimizar falhas e reduzir custos para as empresas. Dentre os benefícios que a automação de processos oferece, podemos citar: • Redução de custos: automatizar processos demanda um número menor de colaboradores para as empresas, já que as tarefas passam a ser executadas por programas ou aplicações de software e com maior velocidade. • Maior produtividade: processos automatizados podem ser executados 24 horas por dia, sete dias por semana, gerando um resultado superior em relação à produtividade de tarefas executadas de forma manual. • Melhora na qualidade: a automação de um processo cria padrões de desenvolvimento, de testes e de implantação de soluções, permitindo às empresas investirem na melhoria contínua dos produtos, serviços e experiência do cliente. Aula 1 FORMAS DE TESTE DE SOFTWARE De�nir o nível de automação ou a característica de equipamentos para executar um programa ou software e con�gurar um sistema de automação que obtenha bons resultados na aplicação do teste. 37 minutos É importante destacar que a engenharia de software possui vários modelos de desenvolvimento de aplicações, como: prescritivo, uni�cado, XP e ágil (MASCHIETTO et al., 2020), sendo que cada modelo traz uma ou mais etapas de testes da solução de software. Um destes modelos de desenvolvimento é conhecido como Test-Driven Development (TDD), ou modelo de desenvolvimento orientado por testes. Neste método de desenvolvimento, os cenários de testes são escritos e executados antes da codi�cação que o caso de teste validará, sendo dividido em três etapas: escrever o caso de teste, criar o código que passará no teste e refatoração do código (MASCHIETTO et al., 2020). VIDEOAULA: OS DIFERENTES NÍVEIS DA AUTOMAÇÃO DE UM PROCESSO Neste vídeo, você conhecerá em mais detalhes o modelo de desenvolvimento Test-Driven Development (TDD), ou modelo de desenvolvimento orientado por testes. Você verá como esse método pode ser utilizado e compreenderá o seu funcionamento e sua simplicidade através de um exemplo com a codi�cação do caso de teste e do programa que será validado. AS DIFERENTES ETAPAS NA ELABORAÇÃO DE UM SOFTWARE QUE PODEM SERTESTADAS Como vimos no bloco anterior, a engenharia de software possui vários métodos de desenvolvimento, os quais possuem suas próprias etapas de testes. Dentre eles, falaremos de dois exemplos bastante conhecidos: modelo V e modelo ágil. • Modelo V: muito utilizado na década de 1980, é conhecido também como modelo em cascata (waterfall), a partir do qual grandes empresas construíram seus principais sistemas, que continuam em funcionamento até os dias atuais. Este modelo de desenvolvimento de software possui etapas sequenciais, como modelagem de requisitos, arquitetura do sistema, componentização e codi�cação, sendo que para cada uma dessas etapas existe uma etapa de testes correspondente (MASCHIETTO et al., 2020), conforme segue: - Modelagem de requisitos > Testes de aceite do usuário. - Arquitetura > Testes de sistema. - Componentes > Testes de integração. - Codi�cação > Testes unitários. Note que cada etapa de testes depende da conclusão da fase de desenvolvimento correspondente. Por exemplo, para realizar testes unitários, é necessário que a codi�cação dos programas tenha sido concluída. • Modelo ágil: o método ágil trouxe uma quebra de paradigmas em relação aos modelos tradicionais (conhecidos também como modelos em cascata, ou waterfall) de desenvolvimento de software. Nesse modelo de desenvolvimento, os times são multidisciplinares, incluindo área de negócios, arquitetura e engenharia numa mesma equipe, e a organização das tarefas é baseada em ciclos de entrega menores (releases), que duram entre dois e três meses, cujo objetivo é garantir entregas menores e frequentes. Esses ciclos são distribuídos em iterações de uma a quatro semanas, e as equipes envolvidas possuem autonomia para executar as tarefas planejadas. A metodologia ágil prevê a realização de cerimônias, que são as reuniões diárias rápidas, as quais devem durar, no máximo, 15 minutos, e as reuniões de início e �m das iterações (MASCHIETTO et al., 2020). Em relação à realização de testes, a metodologia ágil trata os vários tipos de testes de sistemas como parte do ciclo de desenvolvimento e, apesar de não existir uma etapa especí�ca para a realização dos testes, esta tarefa de testes e validações é mandatória para a conclusão da entrega de soluções ou funcionalidades que demandaram a codi�cação de novos programas ou alterações em aplicações de software já existentes. Um dos métodos ágeis mais populares e mais utilizado atualmente é o Scrum. Ele está baseado na cultura ágil, e a organização dos times prevê a de�nição de papéis e responsabilidades bem claros (MASCHIETTO et al., 2020), trata as iterações como sprints e recomenda sua duração entre uma a quatro semanas. Outro ponto relevante sobre o Scrum é que ele possui três pilares: transparência, inspeção e adaptação (MASCHIETTO et al., 2020). No pilar da inspeção, deve residir o mindset do time em realizar os testes e as validações em códigos de programas produzidos e alterados pela própria equipe, ou seja, no Scrum, não Videoaula: Os diferentes níveis da automação de um processo Para visualizar o objeto, acesse seu material digital. existe uma etapa especí�ca de testes, e sim um pilar cultural, para que o time valide e teste tudo que será entregue. VIDEOAULA: AS DIFERENTES ETAPAS NA ELABORAÇÃO DE UM SOFTWARE QUE PODEM SER TESTADAS Neste vídeo, você conhecerá, primeiramente, o método V de desenvolvimento de software e entenderá porque este método possui esse nome. Na segunda parte, você acompanhará uma comparação entre o método tradicional de desenvolvimento de software conhecido como cascata e o método ágil Scrum, amplamente utilizado no mercado da Tecnologia da Informação. ELABORAÇÃO DE REQUISITOS MÍNIMOS PARA A EXECUÇÃO DO SOFTWARE, PÚBLICO-ALVO E OBJETIVO De�nir os requisitos de um sistema ou solução de software é uma das etapas mais cruciais no ciclo de desenvolvimento dentro da engenharia de software, porque existem requisitos de negócios, funcionais, de qualidade ou não funcionais. Desta forma, pessoas de áreas diferentes, como negócio, arquitetura e tecnologia, precisam estar próximas para que os requisitos de�nidos sejam o mais coerentes possível com as necessidades apresentadas pelos clientes e potenciais usuários. O levantamento de requisitos de um software pode ser realizado através de reuniões ou entrevistas com os usuários das áreas de negócios ou os demandantes da necessidade ou do problema que se quer resolver. É possível também realizar o levantamento de requisitos analisando um sistema ou processo já existente em funcionamento. Os resultados desses levantamentos devem ser registrados em formas de casos de uso descritivos e grá�cos para as metodologias tradicionais (cascata ou waterfall), ou os registros podem ser feitos através de histórias de usuários, quando se estiver utilizando práticas ágeis. • Casos de uso: os casos de uso, ou use cases, são instrumentos utilizados para documentar o levantamento de cenários de utilização de um processo ou necessidade de uma área ou grupo de usuários. Na sua forma grá�ca, um use case mostra as ações de usuários, suas interações com outras áreas ou sistemas, bem como o �uxo de trabalho dos componentes e demais processos envolvidos no cenário descrito pelo caso de uso (REINEHR, 2020). Nos casos de uso, existem duas seções que ajudam na qualidade da entrega do produto de software para o cliente: a seção pós-condição, que serve para descrever o estado esperado do software ao �nal da execução do caso de uso, e a seção �uxo de exceção, na qual devem ser mapeados todos os eventos e possibilidades de falhas e erros na execução dos �uxos daquele caso de uso. • Histórias de usuário: muito semelhantes aos use cases, as histórias de usuário são utilizadas em metodologias ágeis, como o Scrum, no qual o registro dos requisitos da solução de software segue um padrão de escrita semelhante a um pedido. É através das histórias de usuário que as tarefas da demanda serão criadas, ou seja, codi�cação da história, testes da história, e assim com as demais tarefas necessárias para concluir a história de usuário. As histórias de usuários devem ter o seguinte formato: “Como um <tipo de usuário ou cliente> eu quero/preciso <o que é necessário> para <motivo ou valor da demanda>” Exemplo: Como um cliente do banco ABC eu preciso receber meu cartão de crédito para realizar compras. Em geral, no Scrum, o Product Owner (PO) é o responsável por escrever as histórias de usuários com base nas conversas e nos levantamentos realizados junto às áreas de clientes ou de negócios. As histórias de usuários possuem uma seção chamada critério de aceite, em que a equipe registra o que deve ser testado e validado quando a história for concluída. Videoaula: As diferentes etapas na elaboração de um software que podem ser testadas Para visualizar o objeto, acesse seu material digital. VIDEOAULA: ELABORAÇÃO DE REQUISITOS MÍNIMOS PARA A EXECUÇÃO DO SOFTWARE, PÚBLICO-ALVO E OBJETIVO Neste vídeo, você verá um exemplo de um use case de um cenário de uso de serviços bancários, em que será comentado como essa ferramenta auxilia no levantamento de requisitos de software. Você verá também alguns exemplos de histórias de usuário com suas partes principais, mostrando a forma de utilização dessa ferramenta para o levantamento de requisitos em projetos ágeis. ESTUDO DE CASO Considere o cenário a seguir para o estudo de caso dessa aula. Você foi contratado recentemente por uma empresa de soluções de software e está participando das discussões sobre a modernização de um dos principais produtos da empresa. Na semana passada, durante a reunião de checkpoint, �cou de�nido que a nova versão do software precisa seguir as práticas ágeis com o método Scrum e que deve ser considerado que nem todos os envolvidos têm conhecimento dessa metodologia. No �nal da reunião, seu gestor solicitou a você um levantamento e uma avaliação sobre os seguintes pontos críticos relacionados ao projeto de modernização:1. É necessário que você prepare um resumo com as vantagens e desvantagens sobre o uso das práticas ágeis com Scrum nesse projeto de modernização. 2. Durante a reunião, algumas pessoas trouxeram a sugestão de criar use cases (casos de uso) para mapeamento dos requisitos já existentes na versão atual do software. Seu gestor está preocupado e quer saber de você se essa sugestão pode gerar algum con�ito com a adoção do ágil. RESOLUÇÃO DO ESTUDO DE CASO Considerando a necessidade de modernização da solução de software. 1. É necessário que você prepare um resumo com as vantagens e desvantagens sobre o uso das práticas ágeis nesse projeto de modernização. O desenvolvimento ágil com Scrum tem sido usado largamente na área de tecnologia da informação, suportando todo o ciclo de desenvolvimento de software. Seguem algumas vantagens e desvantagens: Vantagens: • O Scrum como método ágil permite realizar entregas de software menores e com maior frequência através de iterações curtas com duração entre uma e quatro semanas. • Equipes multidisciplinares, incluindo negócio, arquitetura e engenharia. • Cerimônias diárias e no início e �m de cada sprint. • Histórias de usuários para registro dos requisitos da versão existente do software que será modernizado. • Critérios de aceitação das histórias que permitem testar e validar a história antes da entrega. Desvantagens: • Mudança cultural. • Novos processos e novas ferramentas. 2. Durante a reunião, algumas pessoas trouxeram a sugestão de criar use cases (casos de uso) para mapeamento dos requisitos já existentes na versão atual do software. Seu gestor está preocupado e quer saber de você se essa sugestão pode gerar algum con�ito com a adoção do ágil. Apesar de não ser muito habitual, não há qualquer impedimento em utilizar use cases para levantamento de requisitos aliado às práticas ágeis do Scrum. Nesse caso, pode ser necessário organizar o time de uma forma não totalmente como recomenda o ágil por conta dos papéis bem de�nidos pelo Scrum; outra opção seria incluir no planejamento das sprints o levantamento dos requisitos utilizando use cases. Videoaula: Elaboração de requisitos mínimos para a execução do software, público-alvo e objetivo Para visualizar o objeto, acesse seu material digital. Saiba mais A disciplina de testes de software tem evoluído muito nos últimos anos, porque é através dos testes que se garante a qualidade da aplicação ou do sistema de software que será utilizado pelos clientes de uma empresa. Nesse cenário, surge o analista de testes. Você sabe o que faz ou como se tornar um analista de testes? Saiba mais, acessando: https://www.zup.com.br/blog/como-se-tornar-analista-de-testes. Acesso em: 30 jan. 2022. Resolução do Estudo de Caso Para visualizar o objeto, acesse seu material digital. INTRODUÇÃO Garantir que o aplicativo de celular ou o site de vendas de produtos esteja funcionando adequadamente e que as várias transações on-line entre pagamentos e entregas de produtos estejam sendo efetivadas com sucesso são exemplos dos desa�os que obrigam as empresas de tecnologia a adotarem processos de qualidade em suas soluções e aplicações de software. Essa qualidade de software exigida e esperada pelos clientes somente pode ser garantida através da não tolerância a falhas ou erros nos programas e aplicações construídos, sendo necessário a execução dos testes de software. Nessa aula, você aprenderá sobre as etapas e os tipos de testes de aplicações de software e como aplicá-los no processo de validação das aplicações. Acompanhando essa aula e assistindo aos vídeos, você terá a compreensão sobre as etapas de testes de software e como utilizá-las no seu dia a dia pro�ssional. TESTES DE APLICATIVOS E SOFTWARES: ETAPAS DE TESTAGEM Desenvolver soluções de software com qualidade não é mais uma opção para as empresas de tecnologia. De fato, aplicativos de celular e sites de comércio eletrônico, por exemplo, que apresentam falhas intermitentes, erros de acessos ou até uma experiência ruim de navegação, tendem a perder usuários e clientes por não apresentarem um nível aceitável de qualidade e, por consequência, perda de receita. Diante desse cenário, desenvolver e manter soluções de software se tornou um verdadeiro desa�o para as empresas que utilizam a tecnologia para os seus negócios. Para vencer este desa�o de entregar aplicações e soluções de software com qualidade, as áreas de tecnologia dessas empresas passaram a implementar os testes de software. Os testes de software têm como principal objetivo garantir que a versão do software que será liberado para uso está em acordo com as expectativas e necessidades do cliente. Os testes possuem algumas etapas a serem executadas, cujo objetivo é eliminar erros, falhas ou defeitos antes que a aplicação ou o sistema de software seja lançado para uso pelos clientes ou usuários. Erro, falha e defeito, muitas vezes, são conhecidos como bugs, e apesar de serem termos parecidos, possuem signi�cados um pouco diferentes: • Erro: código escrito por um programador e que gerou um programa com falha. • Falha: ocorre quando um programa com erro é executado e interfere no funcionamento esperado. • Defeito: uma ação inesperada do sistema ou solução de software, geralmente, decorrente de uma falha. Aula 2 TESTES DE PROGRAMAÇÃO E TESTES DE CAMPO Analisar o nível de interação que os testes de aplicativos e softwares devem ter com os usuários para serem validados, a duração da testagem e os objetivos a serem alcançados. 40 minutos https://www.zup.com.br/blog/como-se-tornar-analista-de-testes As etapas de testes estão associadas à codi�cação e ao ciclo de desenvolvimento da solução de software, ou seja, cada etapa de testes de software garante a qualidade da parte da solução que estiver sendo testada. As etapas de testes de software estão divididas em duas categorias: testes de veri�cação e testes de validação, conforme descrito a seguir: • Testes de veri�cação: são testes realizados sem a execução da aplicação ou do software. Por exemplo, veri�cação de documentações ou desenhos da solução. Suas etapas são: - Testes do modelo de negócios: veri�cação se o modelo de negócios está aderente às necessidades do cliente. - Testes dos requisitos: veri�cação da aderência dos requisitos ao modelo de negócios. - Testes da análise e modelagem: veri�cação se a modelagem atende aos requisitos de�nidos. - Testes da implementação: veri�cação se os processos para implementação estão aderentes às necessidades e aos requisitos de�nidos para a solução. • Testes de validação: são testes que garantem a qualidade do produto de software, ou seja, são validados os códigos de programas, os serviços e as funcionalidades do sistema. - Testes de unidade: validação isolada de um programa ou trecho de código, conhecidos também como testes unitários. - Testes de integração: validação das partes menores do software ou de componentes internos ou externos de forma integrada. - Testes de sistema: validação do sistema como um todo ou de funcionalidades. - Testes de aceitação: validação do cliente e dos requisitos do software. Nem todas as etapas de testes precisam ser executadas, o que signi�ca que, de acordo com a criticidade ou complexidade da aplicação de software, pode-se executar mais ou menos etapas de testes. VIDEOAULA: TESTES DE APLICATIVOS E SOFTWARES: ETAPAS DE TESTAGEM Neste vídeo, você conhecerá mais detalhes sobre os testes unitários. Será mostrado como eles se relacionam com os demais tipos de testes, quem os executa e qual o impacto destes testes na entrega da solução �nal. Você verá também um exemplo de código de teste unitário escrito para a linguagem Java. TÉCNICAS DE TESTES DE SOFTWARE Testar soluções de software signi�ca validar cada funcionalidade, programa ou trecho de código com a �nalidade de encontrar erros ou bugs e corrigi-los antes da entrega do produto de software para o cliente. Para garantir a qualidade do software a serentregue para uso pelo cliente, as etapas de testes devem ser executadas e, dentro delas, existem algumas técnicas que podem ser aplicadas de acordo com a necessidade da parte da solução ou da funcionalidade do sistema que será validada. As técnicas de testes de software mais conhecidas e mais utilizadas são: • Caixa branca: nessa técnica, o teste é realizado pelo próprio desenvolvedor e recebe esse nome de caixa branca por utilizar o código da aplicação que está sendo testada. Nos testes caixa branca, o desenvolvedor utiliza diretamente o código da solução para realizar os testes e as validações. A técnica dos testes caixa branca pode ser aplicada na execução dos testes de unidade, conhecidos também como testes unitários. Os testes unitários podem ser escritos de forma manual ou automática, utilizando ferramentas, como JUnit, Jasmine ou NUnit, dentre várias outras disponíveis. • Caixa preta: conhecida também como teste funcional, por possuir em seu contexto a validação de funcionalidades da aplicação de software. Essa técnica de testes recebe esse nome porque, na execução dos testes, não se sabe o conteúdo dos componentes ou as funcionalidades que estão sendo testados. O objetivo dos testes caixa preta é validar uma funcionalidade ou um componente de software sem se preocupar com o código escrito para esta parte da solução de software que está sendo validada. A técnica dos testes de caixa preta pode ser aplicada na execução dos testes de integração ou testes integrados e nos testes de Videoaula: Testes de aplicativos e softwares: etapas de testagem Para visualizar o objeto, acesse seu material digital. performance e desempenho da solução de software. Estes últimos são conhecidos também como testes não funcionais, já que performance e desempenho, geralmente, são requisitos não funcionais da aplicação de software. • Caixa cinza: essa técnica é uma combinação entre as técnicas de caixa branca e caixa preta, ou seja, algumas partes do código são conhecidas, estão acessíveis e podem ser validadas, enquanto outras partes ou outros componentes que fazem parte da execução do teste caixa cinza são testados como a técnica da caixa preta. A técnica dos testes de caixa cinza pode ser aplicada em cenários de testes de integração, em que a validação do código também é necessária. Outro cenário onde se pode utilizar a técnica de caixa cinza é nos testes de validações de informações atualizadas em banco de dados, em que parte da validação exige a execução de consultas ou ações na base de dados através de código. Existem outras técnicas de testes menos populares que são mais especí�cas para os tipos de soluções de software, como os testes de regressão, os quais permitem que, através de ferramentas de automação, seja garantido que novas versões de um software não implantem falhas ou defeitos em componentes não modi�cados. Nos cenários de aplicativos de celular e de jogos, as técnicas de testes, além de seguirem o ciclo de desenvolvimento de software, incluem ainda os usuários na realização de testes através de técnicas, como premiação por etapas superadas, por horas de uso, recompensas e bônus. VIDEOAULA: TÉCNICAS DE TESTES DE SOFTWARE Neste vídeo, serão apresentadas as técnicas de testes caixa branca e caixa preta, ilustrando e exempli�cando o uso delas no processo de validação de soluções de software e uma comparação entre as duas formas de testes. Será apresentada, ainda, a técnica de testes caixa cinza como uma combinação entre os testes caixa branca e caixa preta. TESTES ALPHA, BETA, GAMA E DE PERFORMANCE O produto de software, para ser liberado para o usuário �nal, precisa passar por várias etapas de testes, que incluem os processos de veri�cação e validação da aplicação. Para ajudar a conduzir o processo de validação, a aplicação ou solução de software é liberada em versões ou releases-versão consolidadas de um software disponibilizadas para utilização, em que cada versão liberada para testes tem o objetivo de garantir a melhor qualidade do produto através da correção de erros e bugs identi�cados pelos testes realizados. A primeira versão liberada para testes é chamada de alpha, na qual se origina o nome de testes alpha, nesse cenário um número reduzido de usuários, normalmente desenvolvedores ou testadores executam testes de caixa branca ou de caixa preta e registram as falhas e defeitos para que as equipes de desenvolvedores responsáveis pela liberação da versão alpha que está em teste possam realizar as correções e ajustes necessários. Após a correção dos eventuais bugs da versão alpha, a equipe responsável pela aplicação está pronta para a liberação da versão beta da aplicação para testes. Quando a versão beta é liberada, o público-alvo de testadores passa a ser, em geral, um grupo de usuários da aplicação externos, porém em número reduzido. Em seguida, inicia-se o ciclo de testes beta com os usuários reportando os bugs e problemas identi�cados. Esses bugs são direcionados às equipes de desenvolvedores da aplicação, para que as correções sejam realizadas, e uma nova versão beta será liberada com essas correções. Da mesma forma que ocorre com os testes alpha, os testes beta são encerrados somente quando todos os bugs da versão beta estiverem corrigidos pelos desenvolvedores e validados pelos usuários que participam dessa etapa de validação. Existem, ainda, os chamados testes gama, que se referem a uma versão de software liberada para o usuário �nal, geralmente de forma pouco validada, com o objetivo intencional e de forma não planejada que os usuários encontrem erros e reportem aos desenvolvedores para serem corrigidos. Videoaula: Técnicas de testes de software Para visualizar o objeto, acesse seu material digital. Para a validação do desempenho da aplicação ou solução de software, algumas técnicas de testes podem ser aplicadas. Os testes de performance, por exemplo, podem validar a estabilidade do sistema ou solução de software, a capacidade máxima e mínima de cargas de processamento e o desempenho e tempo de resposta, ou se esse desempenho se mantém aceitável diante da execução de cenários de alto volume de transações e de processamento. É possível criar painéis para acompanhamento do desempenho e da performance das aplicações para simpli�car o trabalho dos desenvolvedores, assim, quando uma versão do software é liberada para testes alpha ou beta, estes painéis de monitoração auxiliarão os desenvolvedores envolvidos no processo de desenvolvimento da solução de software a visualizar e analisar os resultados dos testes de performance, permitindo a estes desenvolvedores atuar nos ajustes e correções dos programas que foram liberados para testes. VIDEOAULA: DIFERENTES FORMAS DE TESTAGEM Neste vídeo, será apresentado o conceito de teste alpha e de teste beta e as principais aplicações do uso desses tipos de testes nas aplicações de software. Será mostrado e comentado o �uxo de desenvolvimento de softwares e a relação com os testes alpha e beta até que o software seja liberado na sua versão �nal. ESTUDO DE CASO Considere o cenário a seguir para o estudo de caso dessa aula. A empresa Beleza & Beleza Cosméticos S.A. possui, atualmente, uma solução de software que permite aos seus parceiros (revendedores) acessar o portal pela internet e registrar seus pedidos, gerenciar sua carteira de clientes e fazer indicações de novos revendedores para conquistar bônus. A empresa está planejando lançar um aplicativo de celular para facilitar o trabalho de seus parceiros, mas se preocupa muito com a qualidade desse aplicativo, já que o site funciona sem grandes problemas. A empresa de tecnologia Softwares e Testes Ltda., onde você trabalha como analista de testes, está concluindo a proposta para fechar o negócio com a Beleza & Beleza Cosméticos S.A. para a construção e a implantação do aplicativo. Com seus conhecimentos sobre testes de software, você �cou responsável por preencher a parte da proposta que trata de qualidadedo aplicativo de software. Elabore uma proposta sobre qualidade do aplicativo, incluindo as etapas e os tipos de testes que sua empresa adota e como estes testes podem garantir a qualidade do software que será entregue à empresa Beleza & Beleza Cosméticos S.A. RESOLUÇÃO DO ESTUDO DE CASO Para garantir a qualidade do aplicativo, será necessário submetê-lo aos processos de testes de veri�cação e de validação de software. Estes processos possuem etapas que fazem parte do ciclo de desenvolvimento de software, o que signi�ca que os testes serão realizados durante todo o desenvolvimento da solução de software. No processo de veri�cação, toda a documentação produzida sobre requisitos, �uxo de dados e arquitetura da solução é analisada com o objetivo de rati�car tudo que foi de�nido para a construção e implantação do aplicativo de software. No processo de validação, sendo considerado o código já concluído, podemos destacar a realização das etapas dos testes unitários e dos testes de integração, em que cada trecho de código pode ser avaliado, testado e corrigido, se necessário, bem como os testes de integração garantem a comunicação entre os componentes da aplicação. Ainda no processo de validação, podemos incluir a etapa de liberação das versões alpha e beta, sendo que, nos testes beta, os parceiros da Beleza & Beleza Cosméticos S.A. podem ser incluídos no plano de testes das novas versões do aplicativo, para identi�car e reportar falhas ou bugs. Videoaula: Diferentes formas de testagem Para visualizar o objeto, acesse seu material digital. Saiba mais Garantir a qualidade dos produtos de software não é uma tarefa fácil para as empresas de tecnologia. Prover a melhor experiência de uso para seus clientes tem sido a prioridade número 1 das empresas que entregam serviços de tecnologia através de aplicativos e soluções de software. Nesse sentido, a Net�ix é um exemplo de empresa que vem criando e elevando os padrões de qualidade e de melhoria na experiência dos clientes no uso de seu produtos e serviços. O serviço “Chaos Monkey”, criado pela Net�ix em 2010, é um bom exemplo dessa ruptura de evolução nos modelos e padrões de qualidade. Saiba mais, acessando: • SEROTER, R.; SANT’ANNA, T. Chaos Monkey: mais um projeto open source da Net�ix. InfoQ, 2012. Disponível em: https://www.infoq.com/br/news/2012/08/net�ix-chaos-monkey/. Acesso em: 5 fev. 2022. • CHAOS MONKEY. Disponível em: https://net�ix.github.io/chaosmonkey/. Acesso em: 5 fev. 2022. Resolução do Estudo de Caso Para visualizar o objeto, acesse seu material digital. INTRODUÇÃO Entregar um produto de software com qualidade é a garantia de que os clientes e usuários terão uma ferramenta con�ável e segura para atender às suas necessidades. Em busca dessa qualidade, pro�ssionais de tecnologia da informação, como engenheiros, arquitetos, desenvolvedores e testadores, possuem um papel fundamental nessa jornada de construir e entregar aos clientes soluções de softwares que ofereçam a melhor experiência. Uma forma efetiva de alcançar esse objetivo de produzir e entregar software com qualidade é através dos métodos de testes das aplicações. Nesta aula, você aprenderá sobre os métodos de testes de software e como a combinação desses métodos pode elevar o nível dos resultados dos testes. Você verá também a relevância do envolvimento dos clientes e usuários �nais nos processos de testes de software e a importância dos treinamentos sobre o uso da aplicação e do suporte e atendimento aos usuários. COMO OS DIFERENTES MÉTODOS DE TESTAGEM PODEM OTIMIZAR O ESPAÇO E O DESEMPENHO DE UM PROGRAMA Muitas são as técnicas de testes de software que podem ser aplicadas e combinadas para tornar a aplicação uma solução de software com alto padrão de qualidade. Algumas dessas técnicas de testagem são descritas a seguir: Aula 3 IMPORTÂNCIA DE COMBINARMOS VÁRIOS MÉTODOS DE TESTAGEM Nesta aula, você aprenderá sobre os métodos de testes de software e como a combinação desses métodos pode elevar o nível dos resultados dos testes. 35 minutos https://www.infoq.com/br/news/2012/08/netflix-chaos-monkey/ https://netflix.github.io/chaosmonkey/ • Test-Driven Development (TDD): essa técnica é conhecida como desenvolvimento orientado a testes. Nela, o desenvolvedor cria primeiro o código de teste e, depois, o código da aplicação para o teste que foi criado. Para muitos desenvolvedores, pode soar estranho ter que construir primeiro os testes e somente depois codi�car a aplicação e os componentes, mas, apesar disso, essa técnica é muito utilizada, e sua proposta é que o código da aplicação já esteja validado quando for construído. • Testes de regressão: nessa técnica, os testes são realizados sempre que ocorre uma mudança em partes do código da aplicação e as demais funcionalidades não alteradas precisam ser testadas e validadas para garantir que as alterações de código realizadas não afetaram as partes não modi�cadas da aplicação. Apesar de garantir a qualidade de todo o software, essa técnica torna-se muito demorada e eleva os custos de desenvolvimento da solução de software. • Testes smells: essa técnica se utiliza dos smells, ou cheiros (no sentido de suspeitas), de que algo não parece bem no código dos testes unitários que foram escritos. O objetivo é evitar que se tenham casos de testes mal de�nidos ou mal construídos que introduzam erros e falhas na aplicação de software. • Code smells: semelhante à técnica dos testes smells, com a diferença que o smell vem do código da aplicação. Aqui, o objetivo é que algo que pareça estranho no código da aplicação seja corrigido, removido ou, no mínimo, veri�cado, para garantir que o código da solução de software continue sendo executado com qualidade. • Cobertura de testes: é uma métrica utilizada para garantir que um programa, classe ou parte de uma aplicação possua um número ou percentual de execução de testes unitários bem-sucedidos. A fórmula básica para esse cálculo considera o seguinte: Percentual de cobertura = quantidade de comandos de testes / quantidade de comandos do programa. Não existe um percentual padrão para que a cobertura de testes seja considerada aprovada. Alguns desenvolvedores, por exemplo, consideram uma cobertura de testes válida quando o percentual está entre 90% e 100%. • Testes mocados: essa técnica permite simular validações nos códigos de testes sem a necessidade de adequação no código da aplicação ou nas classes de testes unitários. É muito utilizada nos cenários em que há di�culdade de produzir o contexto real de um ambiente produtivo. É importante considerar que as técnicas mostradas podem ser combinadas entre si de acordo com o ambiente onde a aplicação é executada, bem como considerando-se o prazo, os custos e o nível e a qualidade que se busca na entrega da solução de software. VIDEOAULA: COMO OS DIFERENTES MÉTODOS DE TESTAGEM PODEM OTIMIZAR O ESPAÇO E O DESEMPENHO DE UM PROGRAMA Neste vídeo, você entenderá em mais detalhes o uso da técnica dos testes de regressão, qual a sua importância para a qualidade do software e quais as implicações em utilizá-la. Será apresentado o impacto sobre os custos e os prazos de entrega do software quando se adota a técnica dos testes de regressão. A IMPLEMENTAÇÃO DO PROGRAMA E A TESTAGEM POR USUÁRIOS REAIS O ciclo de desenvolvimento de software permite que a implementação do código de uma solução de software seja realizada por um ou mais desenvolvedores, dependendo do porte da aplicação ou mesmo da metodologia de desenvolvimento adotada. As equipes de desenvolvimento, em geral, possuem autonomia para de�nir a linguagem de programação a ser utilizada, considerando complexidade, curva de aprendizagem, maturidade da equipe e implementação dos casos de testes. Além da linguagem de programação, a equipe, em conjunto com a engenharia e a arquitetura de software, pode de�nir o ambiente de execução da aplicação e se, por exemplo, a aplicação será executada em ambiente tradicional (virtualizado)ou em ambiente de nuvem, se utilizará uma solução de contêineres ou servidores virtuais, en�m, é importante lembrar que para cada decisão na estratégia de desenvolvimento haverá a necessidade da realização dos testes de software nos programas que serão construídos. Videoaula: Como os diferentes métodos de testagem podem otimizar o espaço e o desempenho de um programa Para visualizar o objeto, acesse seu material digital. Seguindo a necessidade dos testes de software, para cada trecho de código escrito será necessário um caso de teste de unidade ou teste unitário para validar esse código que foi produzido. Nesse sentido, podemos perceber a importância dos testes unitários para a aplicação como um todo. Testes unitários são do tipo caixa branca. Os testes caixa branca recebem esse nome porque permitem a validação do código escrito durante a execução dos testes, ou seja, validar o código é parte do processo de execução de testes caixa branca. Nesse tipo de teste, os usuários da aplicação ou sistema não são envolvidos, visto que o objetivo é validar as unidades de códigos construídas para a solução �nal. Outros aspectos importantes dos testes unitários são em relação à quantidade e à automação. Normalmente, os testes unitários são em maior número do que os demais tipos de testes, como os de integração ou funcionais, cuja criação e execução podem utilizar ferramentas que minimizam o esforço e podem fazer a geração desses testes unitários de forma automática. Além dos testes de unidade, podemos destacar os testes de integração e os testes funcionais. Os testes integrados são do tipo caixa preta, cuja validação tem foco na execução de um componente de software e de seu comportamento sem que haja preocupação em validar o código que é executado naquele componente que está em validação. Em geral, nos testes de integração, os usuários da aplicação ou sistema ainda não são envolvidos, porque este tipo de teste tem um caráter mais técnico do que funcional. Com relação aos testes funcionais, estes também são do tipo caixa preta, ou seja, não há validação de código da aplicação, e os usuários da aplicação ou sistema são envolvidos para que as funcionalidades desenvolvidas sejam validadas com a visão de um usuário real do sistema. Uma outra forma de envolver usuários reais para validação de aplicações e sistemas é fazendo o lançamento da versão beta da solução, aquela em que nem todas as funcionalidades do sistema foram testadas e validadas, mas a equipe responsável entendeu que é o momento de envolver os usuários e clientes para a validação daquela versão beta. Em cenários como esse, dizemos que a aplicação está em fase de testes beta. VIDEOAULA: A IMPLEMENTAÇÃO DO PROGRAMA E A TESTAGEM POR USUÁRIOS REAIS Neste vídeo, será ilustrado o cenário de liberação de software para utilização pelos usuários e quais as implicações. Será comentado sobre o envolvimento dos usuários na realização dos testes funcionais e nos testes beta. A IMPORTÂNCIA DO TREINAMENTO E DA EQUIPE DE SUPORTE Uma das etapas mais aguardadas pelas equipes de desenvolvimento de software e pelos usuários e clientes é o momento de lançamento ou liberação da solução de software. Depois de vencidas todas as etapas de validação da solução como um todo, chega o momento de publicar a aplicação e acompanhar de forma atenta os usuários na utilização do sistema. E para tornar esse momento possível, as equipes envolvidas na entrega da solução de software precisam estar preparadas para transferir, o quanto antes, o conhecimento sobre o uso do sistema para o cliente da aplicação que está sendo entregue. Uma forma muito e�ciente de realizar essa transferência do conhecimento sobre a aplicação é oferecendo treinamentos aos usuários. Esses treinamentos podem ser formais, com agendas recorrentes para alcançar o maior número possível de usuários, ou podem ser treinamentos através de vídeos curtos gravados, de cinco a sete minutos, explicando o uso da aplicação, detalhando as principais funcionalidades e informações de dicas de uso da aplicação de software. As documentações com passo a passo de uso de funcionalidades podem ser uma forma alternativa de treinamento, buscando oferecer, junto às demais opções, a melhor experiência aos clientes. Um documento muito utilizado como apoio para os usuários é a Frequently Asked Questions (FAQ), ou questões frequentemente perguntadas. Neste tipo de documento, são registradas as principais dúvidas e perguntas dos usuários com suas respectivas respostas. Essa lista de perguntas e respostas �ca publicada em alguma página de um site ou blog da aplicação, ou é disponibilizada para consulta de quem precisa de auxílio na utilização da solução de software que está disponível para utilização. Videoaula: A implementação do programa e a testagem por usuários reais Para visualizar o objeto, acesse seu material digital. São os treinamentos e a capacitação que habilitarão o colaborador da empresa a utilizar o software da melhor forma, permitindo a essa pessoa realizar suas tarefas de forma mais rápida e com mais con�ança enquanto utiliza o sistema. Os treinamentos, de um modo geral, podem oferecer um canal de aproximação com o cliente, inclusive, para receber seus feedbacks sobre a solução de software. Parte do treinamento deve ser voltada a instruir os usuários em como obter suporte nos casos de dúvidas ou problemas, então, além dos treinamentos, é necessário que haja uma equipe de suporte para orientar e responder às solicitações dos usuários, disponíveis em vários canais de atendimento, como chat, e-mails ou ferramentas de controle de chamados. Essa equipe de suporte pode estar estruturada em dois ou três níveis de atendimento. O nível 1 responde a dúvidas ou problemas simples, já para os problemas mais complexos, como bugs ou falhas, o nível 2 ou 3 de atendimento estará pronto para responder às demandas e necessidades dos usuários. Nesses atendimentos aos usuários, é fundamental que haja a preocupação nas equipes de suporte com a experiência oferecida aos usuários, de forma que possam ser coletados os feedbacks dos usuários com relação à experiência no atendimento recebido. VIDEOAULA: A IMPORTÂNCIA DO TREINAMENTO E DA EQUIPE DE SUPORTE Neste vídeo, será mostrado e comentado sobre a importância da documentação de usuário e suas formas de utilização. Serão mostrados os exemplos do guia de usuário da ferramenta JUnit e da FAQ do produto S3 da AWS- Amazon Web Services. ESTUDO DE CASO Considere o cenário a seguir para o estudo de caso dessa aula. A equipe de sustentação das aplicações que suportam o negócio da empresa onde você trabalha tem atuado no suporte aos usuários e nas correções de bugs. Seu gestor reuniu a equipe de suporte da qual você faz parte e compartilhou a preocupação de que os atendimentos e o suporte aos usuários aumentaram muito e solicitou que vocês de�nam um plano de ação detalhado para identi�car as possíveis causas desse aumento de chamados pelos clientes e possíveis soluções para este problema. Algumas pessoas da equipe argumentaram que é provável que a falta de documentação ou de treinamentos pode estar causando esse aumento de acionamentos dos clientes à equipe de suporte. Com base em seus conhecimentos sobre qualidade, testes e suporte ao usuário, elabore o plano de ação detalhado solicitado pelo seu gestor. RESOLUÇÃO DO ESTUDO DE CASO Elaboração do plano de ação detalhado solicitado pelo seu gestor para identi�car as prováveis causas e soluções possíveis para o problema de aumento de atendimentos realizados pela equipe de suporte da qual você faz parte. Após a análise dos atendimentos concluídos, foram identi�cadas as causas e suas soluções conforme segue: • Causa 1: uma nova versão do software pode ter sido liberada sem passar pelos testes beta. • Solução 1: retornar à versão anterior do software e submeter a versão atual com falhas aos testes alpha e beta. • Causa 2: falta de documentação de novas funcionalidadese de alterações de con�gurações da versão atual do software. • Solução 2: encaminhar o problema e a análise realizada para a equipe de desenvolvedores e testadores, sugerindo a criação e a divulgação da documentação das novas funcionalidades e das con�gurações da aplicação que foram alteradas. Videoaula: A importância do treinamento e da equipe de suporte Para visualizar o objeto, acesse seu material digital. • Causa 3: instabilidade ou mudanças na infraestrutura onde a aplicação é executada. • Solução 3: levantamento sobre as mudanças realizadas no ambiente de execução da aplicação e ajustes na infraestrutura para estabilizar o ambiente que apresentou problemas. Saiba mais Um termo utilizado por Kent Beck, em meados de 1990, e que mais tarde se popularizou através de Martin Fowler, em seu livro Refactoring: improving the design of existing code, continua sendo utilizado entre os desenvolvedores atualmente. Você sabe o que é code smell? Saiba mais, acessando: https://coodesh.com/blog/dicionario/o-que-e-code-smell/. Acesso em: 9 fev. 2022. Resolução do Estudo de Caso Para visualizar o objeto, acesse seu material digital. INTRODUÇÃO Um produto de software, como aplicativos de celular, sites de comércio eletrônico, sistemas de serviços bancários, entre várias outras soluções, possui um ciclo de vida de existência. Durante esse ciclo de vida, o sistema ou a aplicação de software passa por várias etapas, como concepção, manutenção, redesenho da solução, modernização e, por último, desligamento ou descontinuidade. Nessa aula, você aprenderá sobre o ciclo de vida e a existência de uma solução de software, suas etapas, os tipos de manutenção, a necessidade de atualizações e a substituição ou desativação de um sistema ou aplicação de software. Acompanhando essa aula e assistindo aos vídeos, você entenderá como uma solução de software é criada, mantida, evoluída, substituída ou desligada. CICLO DE VIDA DE UM PROGRAMA, ELABORAÇÃO, UTILIZAÇÃO, ATUALIZAÇÃO E FIM DE VIDA No início do ciclo de vida de uma solução de software, as etapas de desenvolvimento do software são executadas iniciando pelo levantamento dos requisitos, cujo objetivo é mapear e registrar as necessidades dos usuários e clientes que serão implementadas no software. Os requisitos de software podem ser registrados em ferramentas, como casos de uso (use cases), ou histórias de usuários, dependendo da metodologia adotada para o desenvolvimento da aplicação. Em seguida, após o levantamento dos requisitos, o desenho da solução deve ser elaborado com o apoio das equipes de arquitetura e engenharia de sistemas. Após essa etapa, inicia-se a construção ou codi�cação da aplicação, e todo o processo de testes e validações se iniciam junto à codi�cação do sistema. Após as validações, incluindo a validação e aceitação do usuário, o sistema ou aplicação está pronto para ser implantado. Nesse momento, a solução está pronta para publicação e entra na etapa de utilização do software. Durante a etapa de utilização do software, os usuários passam a consumir as funcionalidades e os serviços disponíveis na aplicação. Ao utilizar o software, eles podem encontrar di�culdades, podem ocorrer falhas e erros que devem ser reportados à equipe de suporte do sistema, a qual, por sua vez, é responsável por Aula 4 TEMPO DE DURAÇÃO DE UM PROGRAMA E A IMPORTÂNCIA DE SUA ATUALIZAÇÃO Nessa aula, você aprenderá sobre o ciclo de vida e a existência de uma solução de software, suas etapas, os tipos de manutenção, a necessidade de atualizações e a substituição ou desativação de um sistema ou aplicação de software. 39 minutos https://coodesh.com/blog/dicionario/o-que-e-code-smell/ solucionar os problemas identi�cados, atender às solicitações dos usuários e realizar as correções de falhas e bugs. Todos os problemas, falhas e bugs reportados pelos usuários do sistema depois de analisados são priorizados e corrigidos. Esse processo gerará uma nova versão de atualização da aplicação com as correções realizadas pela equipe de suporte. Este ciclo de análise, priorização, correção e geração de nova versão ocorre de forma contínua, e o objetivo é manter o produto de software em funcionamento de forma que continue atendendo às necessidades de uso dos usuários e clientes. Um outro cenário em que as aplicações podem sofrer atualização ocorre quando surge a necessidade de atualização tecnológica, ou seja, nos casos em que algum componente do software entra em processo de descontinuação (deprecated). Muitos componentes de uma solução de software podem ser descontinuados (deprecated): linguagens de programação utilizadas na codi�cação, versões do sistema operacional para a execução da aplicação, dependências e bibliotecas de código consumidas pela aplicação são exemplos de componentes da solução de software que podem, ao longo do tempo ou por questões de falhas e bugs, precisar de atualização, o que re�ete diretamente na atualização ou na necessidade de testes e validações da sua solução de software. Quando a solução de software deixa de atender às necessidades dos seus usuários ou quando os custos de manutenção se tornam elevados, o software, enquanto produto, pode entrar no processo de desativação. O processo de desativação ou desligamento de uma solução de software pode exigir das equipes envolvidas um esforço considerável, de acordo com a complexidade do software existente. Devem ser avaliadas as alternativas, como: substituição do software atual por outra solução mais moderna, transferência de funcionalidades para outros sistemas ou simplesmente o desligamento da aplicação. VIDEOAULA: CICLO DE VIDA DE UM PROGRAMA, ELABORAÇÃO, UTILIZAÇÃO, ATUALIZAÇÃO E FIM DE VIDA Neste vídeo, será apresentado o ciclo de vida de uma solução de software com uma ilustração mostrando as principais etapas do desenvolvimento e da manutenção do software. Será apresentada também a etapa de desativação ou desligamento de um software e quando ela pode ocorrer no ciclo de vida do software. A IMPORTÂNCIA DA ATUALIZAÇÃO PARA CORREÇÃO DE BUGS Quando um software está em uso, costuma-se dizer que ele está produtivo. Este termo é uma referência ao fato de o software possuir uma versão em execução no ambiente de produção, assim, ambiente produtivo ou de produção é onde as aplicações de software são disponibilizadas para utilização pelos usuários. Uma aplicação produtiva, por mais que tenha passado pelas etapas de testes e validações, pode apresentar falhas ou bugs. Estes problemas, muitas vezes reportados pelos usuários da aplicação, precisam ser corrigidos; além disso, existem necessidades de evolução ou ajustes em funcionalidades existentes ou adequações da aplicação a novos ambientes. Todas essas tarefas são caracterizadas como atividades de manutenção do software, ou seja, são atividades essenciais que mantêm a estabilidade e o bom funcionamento das aplicações. As manutenções de software podem ser: corretivas, adaptativas e evolutivas, conforme descritas a seguir: • Corretivas: são manutenções que incluem correções de erros ou falhas identi�cadas em funcionalidades do sistema e incluem correção de código, documentações ou con�gurações e procedimentos recomendados aos usuários da aplicação. Normalmente, são manutenções emergenciais que resolvem problemas mais urgentes que podem estar causando impacto para os usuários e clientes �nais. • Adaptativas: esse tipo de manutenção surge quando há a necessidade de atualização de algum componente no ambiente de execução da aplicação, por exemplo, mudanças de con�gurações de servidores, novas versões de sistemas operacionais, alterações de hardware dos servidores ou atualizações recomendadas pelos fabricantes de software de infraestrutura de tecnologia, como telecom (telecomunicações) ou rede. Videoaula: Ciclo de vida de um programa, elaboração, utilização, atualização e �m de vida Para visualizar o objeto, acesse seu material digital. • Evolutivas: em geral, são manutenções planejadas,solicitadas pelos usuários do sistema ou por áreas envolvidas com a solução de software. As manutenções evolutivas têm um caráter de tornar a aplicação mais adequada ao seu uso, melhorando a experiência do usuário. Outra característica de manutenções evolutivas são as atualizações de funcionalidades existentes, melhorando a performance ou o tempo de resposta dessas funcionalidades. Todos esses tipos de manutenções de software geram a necessidade de novos testes e validações, como testes unitários, testes de integração e testes funcionais. Após essas validações, novas versões com essas mudanças realizadas pelas manutenções serão implantadas em ambiente produtivo. Seja qual for o tipo de atividade executada através das manutenções de software, é importante perceber que essas manutenções são cruciais para a sobrevivência de uma solução de software, porque é através delas que os sistemas sofrem adequações para continuar atendendo às necessidades dos usuários. Um ponto de atenção em relação às manutenções de software é quanto ao volume dessas manutenções. Se a quantidade de manutenções estiver tomando a maior parte da capacidade produtiva das equipes de suporte e desenvolvimento, isso pode signi�car que a empresa está gastando muito para manter o software funcionando, o que pode ser um indicador para avaliação de substituição, modernização ou desativação da solução de software ou de parte dela. VIDEOAULA: A IMPORTÂNCIA DA ATUALIZAÇÃO PARA CORREÇÃO DE BUGS Neste vídeo, serão apresentados os tipos de manutenção e software e será comentado sobre a relevância de cada um deles e como são utilizados. Será mostrada, ainda, a relação das manutenções com o ciclo de vida de um software. A RETIRADA DO PROGRAMA DE OPERAÇÃO E SUA SUBSTITUIÇÃO POR OUTRO Depois de algum tempo em uso, uma solução de software ganha maturidade, e seu ciclo de vida contínuo permanece em execução. O processo de manutenção de um software garante sua existência e mantém o sistema em execução, corrigindo erros e falhas, evoluindo suas funcionalidades e adaptando a aplicação e seus componentes às evoluções tecnológicas. Esse ciclo de execução das manutenções de software no sistema, apesar de garantir a sobrevivência e existência do sistema e manter suas funcionalidades, não é su�ciente para que a solução como um todo entre num processo de descontinuação. A obsolescência das tecnologias utilizadas pelo sistema, as funcionalidades do sistema que caem em desuso, os custos elevados de operação e manutenção e as decisões estratégicas da empresa são exemplos dos principais motivadores para a descontinuação de uma solução de software, conforme descritos a seguir: • Obsolescência: as várias tecnologias que suportam uma solução de software, como linguagem de programação, sistema operacional, bibliotecas genéricas, itens de hardware, entre outros, podem sofrer atualizações pelos seus fabricantes, e sua solução de software deve acompanhar essa evolução e realizar as atualizações, porém muitas versões antigas são descontinuadas e deixam de receber suporte do fornecedor daquela tecnologia ou ferramenta que sua aplicação utiliza, obrigando a sua aplicação a ser descontinuada ou substituída. • Funcionalidades em desuso: muitas funcionalidades da aplicação deixam de ser utilizadas pelos usuários e caem em desuso, justi�cando a desativação ou substituição dessas funcionalidades por outras existentes em outros sistemas ou aplicações. Dessa forma, se muitas funcionalidades ou atividades que anteriormente eram consideradas críticas caem em desuso, isso pode justi�car a descontinuação ou desativação desse sistema ou solução de software. • Custos elevados: na linha do tempo de existência de uma solução de software, as empresas responsáveis por essas soluções acompanham a evolução dos custos de manutenção desse sistema. Assim, o cenário no qual esses custos para manter e operar um software consome um percentual acima do planejado para manutenções, o que pode justi�car a descontinuação ou desativação desse software. Videoaula: A importância da atualização para correção de bugs Para visualizar o objeto, acesse seu material digital. • Decisões estratégicas: não é incomum que decisões estratégicas da empresa, como modernização de plataformas, redução de custos, investimentos em outros ramos de atividade da empresa, aquisições ou fusões, direcionem a descontinuidade ou desativação de soluções de softwares que não atenderão aos cenários futuros da visão estratégica da empresa. Seja qual for o motivador para a descontinuação de uma solução de software, é importante perceber que o processo de desativação pode ser simples, como apenas desinstalar aplicativos de celular ou desligar servidores, ou pode ser complexo e exigir o planejamento do desenvolvimento de uma nova solução ou compra de uma solução de mercado (solução de fornecedor externo à empresa que já possui um ou mais produtos de software equivalentes), o que pode consumir meses e até anos para a conclusão da substituição. Esse planejamento pode precisar considerar os cenários de migração de bases de dados para a nova solução ou arquivamento e guarda dos dados no caso de desativação. Além disso, deve-se considerar o impacto para os usuários durante a transição entre a solução atual e a nova solução de software. VIDEOAULA: A RETIRADA DO PROGRAMA DE OPERAÇÃO E SUA SUBSTITUIÇÃO POR OUTRO Neste vídeo, você entenderá com mais detalhes os cenários que motivam a descontinuação ou desativação de uma solução de software. Será comentado quais são as implicações da descontinuidade ou do desligamento de uma aplicação e de suas funcionalidades. ESTUDO DE CASO Você é o líder técnico de uma equipe que desenvolve e realiza o suporte de uma solução de software responsável por efetivar pagamentos. Utilizando essa solução, os clientes esperam ter sempre a melhor experiência, podendo realizar seus pagamentos de forma segura, rápida e que não haja problemas ou falhas durante as transações. Nos últimos meses, o volume de transações tem aumentado muito, e você percebeu que a aplicação tem respondido de forma satisfatória, sem grandes problemas ou impactos para os clientes. Mesmo com esse cenário favorável, você tem sido cobrado pelos gerentes para que a solução ou parte dela seja substituída por uma solução de mercado. Os gerentes alegam que dois concorrentes de vocês já utilizam essa nova solução e alcançaram bons resultados. Diante desse cenário, você, como líder técnico, se reuniu com a equipe para analisar e dar um parecer para os gerentes sobe a adoção dessa outra solução de software. Considerando os motivadores para a descontinuação de um software, elabore um relatório inicial com as suas considerações e da sua equipe sobre a possibilidade de substituir a solução atual, parte dela ou evoluir e modernizar a solução atual já mantida pela sua equipe. RESOLUÇÃO DO ESTUDO DE CASO Considerando os motivadores para descontinuação de um software, que são: obsolescência, custos elevados, funcionalidades em desuso e decisões estratégicas, segue o relatório inicial: • Obsolescência: caso algum componente da solução atual esteja obsoleto ou sem suporte de fornecedores, é necessário avaliar a complexidade e os custos de se fazer essa atualização. Essa avaliação deve ser considerada junto às demais avaliações para a decisão de descontinuação do software atual. • Custos elevados: levantar os custos realizados dos últimos seis meses para avaliar frente ao orçado do mesmo período. Esse resultado é bem relevante, pois a questão de recursos �nanceiros é sempre um requisito com maior peso na tomada de decisões. • Funcionalidades em desuso: a identi�cação de funcionalidades que caíram em desuso é fundamental para medir a efetividade dos serviços mantidos pela solução atual. • Decisões estratégicas: avaliar em conjunto com os gerentes que têm a visão do que os concorrentes já estão utilizando ajudará a entender melhor a estratégia da empresa quanto a esse pedidode avaliação da substituição da solução atual. Videoaula: A retirada do programa de operação e sua substituição por outro Para visualizar o objeto, acesse seu material digital. Conclusão: considerando essas avaliações e os levantamentos sugeridos, será possível avaliar a viabilidade da substituição parcial ou total da solução atual, ou mesmo se um projeto de modernização pode atender às expectativas da visão estratégica dos gerentes e demais gestores da empresa frente à concorrência. Saiba mais As práticas ágeis no desenvolvimento de software têm transformado os ambientes de trabalho e provocado mudanças culturais nas equipes que participam dessa transformação. Saiba mais, acessando: https://blog.geekhunter.com.br/o-que-e-desenvolvimento-agil/. Acesso em: 13 fev. 2022. Resolução do Estudo de Caso Para visualizar o objeto, acesse seu material digital. Aula 1 EQUIPE TOTVS. Metodologia ágil: o que é e como implementar. TOTVS, 2021. Disponível em: https://www.totvs.com/blog/negocios/metodologia-agil/ . Acesso em: 29 jan. 2022. FERNANDES FILHO, G. E. F. Automação de Processos e de Sistemas. São Paulo, SP: Saraiva, 2014. Disponível em: https://integrada.minhabiblioteca.com.br/#/books/9788536518138/ . Acesso em: 28 jan. 2022. GAZOLA, R. Guia completo de automação de processos em TI. ADDEE, 2020. Disponível em: https://addee.com.br/blog/automatizacao-de-processos/ . Acesso em: 27 jan. 2022. GUEDES, G. T. A. UML: uma abordagem prática. São Paulo, SP: Novatec, 2006. MASCHIETTO, L. G. et al. Processos de Desenvolvimento de Software. Porto Alegre, RS: Grupo A, 2020. Disponível em: https://integrada.minhabiblioteca.com.br/#/books/9786556900520/ . Acesso em: 28 jan. 2022. MASCHIETTO, L. G. et al. Desenvolvimento de Software com Metodologias Ágeis. Porto Alegre, RS: Grupo A, 2021. Disponível em: https://integrada.minhabiblioteca.com.br/#/books/9786556901824/ . Acesso em: 29 jan. 2022. O QUE são metodologias ágeis e quais as vantagens? Robson Camargo, 2018. Disponível em: https://robsoncamargo.com.br/blog/O-que-sao-metodologias-ageis-e-quais-as-vantagens . Acesso em: 29 jan. 2022. REINEHR, S. Engenharia de Requisitos. Porto Alegre, RS: Grupo A, 2020. Disponível em: https://integrada.minhabiblioteca.com.br/#/books/9786556900674/ . Acesso em: 29 jan. 2022. Aula 2 CAMPOS, F. M. Qualidade, Qualidade de Software e Garantia da Qualidade de Software são as mesmas coisas? Linha de Código, [s. d.]. Disponível em: http://www.linhadecodigo.com.br/artigo/1712/qualidade-qualidade- de-software-e-garantia-da-qualidade-de-software-sao-as-mesmas-coisas.aspx. Acesso em: 14 set. 2021. CIGITAL. Case study: Finding Defects elarlier yields enourmous savings. Cigital Archive, 2007. Disponível em: http://web.archive.org/web/20071003044003/http://www.cigital.com/solutions/roi-cs2.php . Acesso em: 8 set. 2021. PRESSMAN, R. S.; MAXIM, B. R. Engenharia de Software: uma abordagem pro�ssional. Porto Alegre, RS: AMGH, 2016. PRESSMAN, R. S.; MAXIM, B. R. Engenharia de Software: uma abordagem pro�ssional. Porto Alegre, RS: AMGH, 2021. REFERÊNCIAS 15 minutos https://blog.geekhunter.com.br/o-que-e-desenvolvimento-agil/ https://www.totvs.com/blog/negocios/metodologia-agil/ https://integrada.minhabiblioteca.com.br/#/books/9788536518138/ https://addee.com.br/blog/automatizacao-de-processos/ https://integrada.minhabiblioteca.com.br/#/books/9786556900520/ https://integrada.minhabiblioteca.com.br/#/books/9786556901824/ https://robsoncamargo.com.br/blog/O-que-sao-metodologias-ageis-e-quais-as-vantagens https://integrada.minhabiblioteca.com.br/#/books/9786556900674/ http://www.linhadecodigo.com.br/artigo/1712/qualidade-qualidade-de-software-e-garantia-da-qualidade-de-software-sao-as-mesmas-coisas.aspx http://www.linhadecodigo.com.br/artigo/1712/qualidade-qualidade-de-software-e-garantia-da-qualidade-de-software-sao-as-mesmas-coisas.aspx http://web.archive.org/web/20071003044003/http://www.cigital.com/solutions/roi-cs2.php ZANIN, A. et al. Qualidade de software. Porto Alegre, RS: SAGAH, 2018. 03 – SONARQUBE – DOWNLOAD, INSTALAÇÃO E EXECUÇÃO. [S. l.: s. n.], 2020. 1 vídeo (11min49s). Publicado pelo canal T2Ti. Disponível em: https://www.youtube.com/watch?v=TNEHX51L9Do. Acesso em: 14 set. 2021. Aula 3 GONÇALVEZ, P. de F. et al. Testes de software e gerência de con�guração. Porto Alegre, RS: Grupo A, 2019. Disponível em: https://integrada.minhabiblioteca.com.br/#/books/9788595029361 . Acesso em: 8 fev. 2022. LENZ, T. A. Conceitos básicos sobre Mockito. Contabilizei, 2019. Disponível em: https://inside.contabilizei.com.br/conceitos-basicos-sobre-mockito-73b931ce0c2c . Acesso em: 8 fev. 2022. SOFTWARE UNIT TEST SMELLS. Disponível em: https://testsmells.org/ . Acesso em: 8 fev. 2022. TANOUE, B.; ORTIZ, V. Testes de Regressão Visual: Obtendo olhos à prova de erros. Ship it!, 2 abr. 2018. Disponível em: http://shipit.resultadosdigitais.com.br/blog/testes-de-regressao-visual-obtendo-olhos-a-prova- de-erros/. Acesso em: 11 mar. 2022. VALENTE, M. T. Engenharia de Software Moderna. [S. l.: s. n.], 2020. Disponível em: https://engsoftmoderna.info/cap8.html. Acesso em: 8 fev. 2022. ZANIN, A. et al. Qualidade de software. Porto Alegre, RS: Grupo A, 2018. Disponível em: https://integrada.minhabiblioteca.com.br/#/books/9788595028401/ . Acesso em: 8 fev. 2022. Aula 4 COMO desativar efetivamente um sistema. DEVMEDIA, 2013. Disponível em: https://www.devmedia.com.br/como-desativar-efetivamente-um-sistema/29573 . Acesso em: 13 fev. 2022. EQUIPE TOTVS. Metodologia ágil: o que é e como implementar. TOTVS, 2021. Disponível em: https://www.totvs.com/blog/negocios/metodologia-agil/ . Acesso em: 12 fev. 2022. MASCHIETTO, L. G. et al. Processos de Desenvolvimento de Software. Porto Alegre, RS: Grupo A, 2020. Disponível em: https://integrada.minhabiblioteca.com.br/#/books/9786556900520/ . Acesso em: 12 fev. 2022. MASCHIETTO, L. G. et al. Desenvolvimento de Software com Metodologias Ágeis. Porto Alegre, RS: Grupo A, 2021. Disponível em: https://integrada.minhabiblioteca.com.br/#/books/9786556901824/ . Acesso em: 12 fev. 2022. REINEHR, S. Engenharia de Requisitos. Porto Alegre, RS: Grupo A, 2020. Disponível em: https://integrada.minhabiblioteca.com.br/#/books/9786556900674/ . Acesso em: 13 fev. 2022. https://www.youtube.com/watch?v=TNEHX51L9Do https://integrada.minhabiblioteca.com.br/#/books/9788595029361 https://inside.contabilizei.com.br/conceitos-basicos-sobre-mockito-73b931ce0c2c https://testsmells.org/ http://shipit.resultadosdigitais.com.br/blog/testes-de-regressao-visual-obtendo-olhos-a-prova-de-erros/ http://shipit.resultadosdigitais.com.br/blog/testes-de-regressao-visual-obtendo-olhos-a-prova-de-erros/ https://integrada.minhabiblioteca.com.br/#/books/9788595028401/ https://www.devmedia.com.br/como-desativar-efetivamente-um-sistema/29573 https://www.totvs.com/blog/negocios/metodologia-agil/ https://integrada.minhabiblioteca.com.br/#/books/9786556900520/ https://integrada.minhabiblioteca.com.br/#/books/9786556901824/ https://integrada.minhabiblioteca.com.br/#/books/9786556900674/ Imprimir INTRODUÇÃO Assim como qualquer produto, um software também precisa das etapas de controle de qualidade, que envolvem os seus testes. Os testes em softwares são importantes, pois detectam bugs antecipadamente, evitando retrabalhos. Testar não é custoso, mas, sim, produtivo, e evita custos desnecessários. O resultado esperado dessa aula é que você entenda a importância da aplicação de metodologias ágeis aplicadas no desenvolvimento e nos testes de softwares. O conceito por trás dessas metodologias é conduzir projetos que entreguem resultados esperados aos clientes, de forma rápida, como o próprio nome diz. Pense que, ao contrário dos métodos tradicionais utilizados em projetos, em que há uma ordem pré-de�nida de ações a serem de�nidas, com foco muito especí�co no projeto, as metodologias ágeis eliminam as burocracias e as amarras, para entregarem resultados mais rápidos, com foco no cliente, e isso pode serum diferencial em sua atuação pro�ssional. INTRODUÇÃO AO CONCEITO DE METODOLOGIAS ÁGEIS Uma das formas gerenciar testes em softwares, ou mais amplamente, gerir um projeto, é utilizar as metodologias ágeis. De acordo com Sbrocco e Macedo (2012), a partir do início dos anos de 1980, metodologias utilizadas em projetos começaram a incomodar as corporações, principalmente as que trabalhavam com projetos de forma intensiva. Com essa necessidade criada, surgiram diversos novos modelos de desenvolvimento e gestão de projetos. Segundo os autores, nesse período surgiram as “Metodologias de Desenvolvimento Ágeis” para o projeto de diversos produtos, inclusive, de softwares. Basicamente, as metodologias ágeis dividem o grande projeto em projetos menores, em curtos períodos, com maiores iterações e, consequentemente, riscos e custos reduzidos, devido à possibilidade de identi�car e corrigir problemas mais rapidamente, devido ao maior número de iterações do que uma gestão de projetos tradicional. Mais adiante, veremos mais detalhes das metodologias ágeis e sua aplicação na Engenharia de Software, bem como testes delas. Um outro ponto a se destacar aqui é que, com o surgimento e a criação de diferentes métodos ágeis, em 2001, especialistas criaram o que se convencionou a chamar de “Manifesto Ágil” (SBROCCO; MACEDO, 2012). O Quadro 1 mostra, de forma resumida, as premissas desse manifesto. Quadro 1 | Considerações do Manifesto Ágil versus Metodologias tradicionais Manifesto Ágil Metodologias Tradicionais Pessoas e interação entre a equipe Foco em processos e ferramentas Software executável Extensa documentação, nem sempre clara Interação e colaboração do cliente Frequentes negociações de contratos Respostas rápidas para mudanças Planos previamente de�nidos Fonte: adaptado de Sbrocco e Macedo (2012, p. 13). Os resultados práticos observados em empresas – aqui, de qualquer ramo – que implementaram as metodologias ágeis são: menores custos, melhoria da qualidade, cumprimento dos prazos de entrega e con�abilidade. Na prática, tudo o que uma empresa quer para ser competitiva, certo? Aula 1 METODOLOGIAS ÁGEIS E AUTOMAÇÃO DE TESTES Analisar a aplicação da Metodologia Ágil no processo de testagem do software, baseado em dados de usuário, valores �nanceiros e estatísticos. 35 minutos O conceito de metodologias ágeis em softwares surgiu em meados da década de 1990, como alternativa aos métodos tradicionais. Ao todo, são doze princípios desse manifesto, sempre citado por diversos autores (ANDERLE, 2015; BECK et al., 2001; SBROCCO; MACEDO, 2012): 1. A prioridade é a entrega antecipada e contínua do software ao cliente, de forma a deixá-lo satisfeito. 2. Mudanças nos requisitos, mesmo que tardias, são bem-vindas, pois trazem vantagens competitivas para o cliente. 3. Entregas frequentes do software em funcionamento, em escala de semanas ou poucos meses. 4. Os desenvolvedores devem trabalhar no projeto em conjunto com pessoas de outras áreas, como a de negócios. 5. O ambiente deve ser motivador a todos os envolvidos no projeto, além de trazer suporte e con�ança a eles. 6. A comunicação deve ser e�ciente e e�caz e feita direta e pessoalmente entre os envolvidos. 7. O progresso é medido através de softwares que funcionam. 8. O desenvolvimento sustentável tem grande ligação com as metodologias ágeis. 9. A agilidade do método é favorecida pela excelência técnica e pelo design. 10. Simplicidade é essencial. Todo trabalho ou rotina não necessário deve ser descartado. 11. As equipes auto-organizáveis geram os melhores projetos, designs e arquiteturas. 12. A equipe busca continuamente formas de se tornar mais e�caz e coloca em prática essas formas. VIDEOAULA: INTRODUÇÃO AO CONCEITO DE METODOLOGIAS ÁGEIS O vídeo apresenta os conceitos básicos de metodologias ágeis, o que motivou seu surgimento, as principais características e sua comparação com as metodologias tradicionais. O vídeo apresenta os primeiros conceitos de aplicação das metodologias ágeis em gestão de projetos, inclusive, em projetos de controle de qualidade de softwares. O FUTURO DO GERENCIAMENTO DE PROJETOS EM TI E O USO DAS METODOLOGIAS ÁGEIS (MÉTODOS SCRUM E KANBAN) Os modelos tradicionais de desenvolvimento de software envolvem uma sequência comum, como segue: Figura 1 | Modelo linear de engenharia de desenvolvimento de software Fonte: Pressman (2002 apud SBROCCO; MACEDO, 2012, p. 60). Esse modelo serve, basicamente, para projetar qualquer tipo de software, e é conhecido como o modelo linear dentro da engenharia de software. A engenharia de sistemas entra apenas no início do processo. Na metodologia tradicional, os testes de software sucedem a geração do código, que é a interpretação do programa para a linguagem de máquina. Com o código gerado, o programa é testado. Percebe-se, dessa forma, uma necessidade latente em processos de desenvolvimento e testes de softwares que sejam mais rápidos e que gerem resultados com maior assertividade, excelência e qualidade. Dentre as metodologias ágeis, o Scrum se destaca. Esse nome vem do método utilizado no jogo de rugby, quando a bola sai do campo e é necessário reunir todos os jogadores, ou seja, no Scrum, atua-se em conjunto, de forma integrada, visando a um objetivo comum. Videoaula: Introdução ao conceito de metodologias ágeis Para visualizar o objeto, acesse seu material digital. A metodologia Scrum segue as doze premissas do manifesto ágil, além de possuir seis características (SBROCCO; MACEDO, 2012, p. 161): “�exibilidade de resultados, �exibilidade de prazos, times pequenos, revisões frequentes, colaboração e orientação a objetos”. As aplicações do Scrum atendem a muitas demandas de agilidade de projetos, inclusive, de desenvolvimento e testes de softwares, pois sua utilização abrange: • Projetos complexos e com mudanças frequentes – o que costuma ser comum em encomendas de software, em que o cliente pode solicitar mudanças no projeto ao longo do seu desenvolvimento. • Gerenciamento de tarefas de trabalho. • Formação de equipes autogerenciáveis. • Implementação de processos iterativos e incrementais, em que o produto é construído em partes. • Análise das causas de problemas para eliminar impedimentos. • Valorização de cada indivíduo da equipe. Com base nessas premissas, vemos que as metodologias ágeis, em todas as fases de desenvolvimento de software, incluindo os testes, trazem um nível de informalidade que agiliza o processo e retira muitas das burocracias existentes em processos tradicionais formais. Você observou que elas focam muito nas pessoas, na ajuda mútua, nas prioridades e no cliente? O Kanban é um método comumente aplicado a projetos e que pode ser utilizado dentro da engenharia de software, junto às metodologias ágeis. Alguns autores, como Marioti (2017) e Duarte (2021), costumam chamar o método de “ágil adaptativo”. O Kanban é um cartão (físico ou virtual) que sinaliza e controla os �uxos de tarefas em diversas áreas, inclusive, em projetos de software. Anderson (2003) chegou à conclusão de que o Kanban pode ser utilizado no desenvolvimento de softwares, observando equipes dependentes de outros departamentos, o que atrasava a entrega. A necessidade de que a equipe e a liderança se adaptassem a cada encomenda fez com que se adotasse o Kanban como método dentro das equipes de desenvolvimento de software, para que o time evoluísse de forma incremental. Além disso, o Kanban tem como uma das principais características ser um sistema puxado de produção, o que evita o acúmulo, no caso de desenvolvimento de softwares, de tarefas inacabadas, reduzindo, assim, as tarefas em andamento. Como é a equipe quem dita o ritmo de trabalho, a adoção conjunta com os sistemas ágeis enfrenta menores resistências e potencializa a aplicação e os resultados das metodologias ágeis no gerenciamento e desenvolvimento em Tecnologia da Informação. VIDEOAULA: O FUTURO DO GERENCIAMENTO DE PROJETOS EM TI E O USO DAS METODOLOGIASÁGEIS (MÉTODOS SCRUM E KANBAN) De forma geral, as metodologias ágeis apresentam grandes vantagens em relação às metodologias tradicionais. Elas reduzem ao máximo a necessidade de documentações. O Scrum foca em reuniões rápidas da equipe com foco no resultado de cada etapa. Quando juntamos o Kanban, temos uma potencialização das metodologias ágeis. O FUTURO DA TESTAGEM COM O AVANÇO DAS METODOLOGIAS ÁGEIS As metodologias ágeis foram um grande avanço, nos anos de 1990, em relação às metodologias tradicionais para a testagem de softwares (SOMMERVILLE, 2007), pois permitiram menor tempo de resposta e de entrega, com softwares mais con�áveis e de melhor qualidade. Uma metodologia preditiva (tradicional) signi�ca que todos os pontos que podem vir a ocorrer durante o planejamento e a execução do projeto são expostos no início do processo. Já a metodologia adaptativa, como o próprio nome diz, permite que o projeto seja adaptado ao longo de toda a sua execução e o seu desenvolvimento. Além disso, as metodologias ágeis respondem mais rápido às mudanças, o que é bené�co, por exemplo, em ambientes onde as mudanças são frequentes, como a programação para a web e muitos outros projetos na área hoje e no futuro. Pinheiro et al. (2015) reforçam, em seu trabalho, as vantagens da execução de testes automatizados, pois existe, entre as equipes, um esforço na tarefa de implementar scripts. Videoaula: O futuro do gerenciamento de projetos em TI e o uso das metodologias ágeis (métodos Scrum e Kanban) Para visualizar o objeto, acesse seu material digital. Ele destaca: Segundo Sommerville (2007), um dos grandes desa�os para a implementação de testes automatizados com utilização de metodologias ágeis é a sua utilização em sistemas e empresas de grande porte. Geralmente, as metodologias ágeis funcionam muito bem com projetos considerados de pequeno e médio porte, mas ainda precisam avançar para projetos de grande porte, o que é uma tendência, visto a citação de Pinheiro et al. (2015), a qual diz que as aplicações multiplataformas se tornam cada vez mais comuns, a concorrência aumenta, exigindo softwares com maior excelência, além de necessidade de softwares mais seguros e que possuem preocupação com a privacidade dos dados. Com a crescente competitividade entre as empresas e as margens de lucro diminuindo cada vez mais, exigindo escalabilidade de produção e de processos, buscam-se formas cada vez mais ágeis e e�cientes de resolver problemas, gerir projetos e controlar a qualidade. Você já pensou sobre esse assunto? Quando falamos em software, o processo é o mesmo. As big techs precisam cada vez mais lançar novidades no mercado para que o público �el seja mantido. E quando se fala na área de tecnologia, inclusive de software, as mudanças são mais rápidas do que em outros setores da economia. Isso vale não somente para as grandes empresas de tecnologia mas também para as médias e pequenas. VIDEOAULA: O FUTURO DA TESTAGEM COM O AVANÇO DAS METODOLOGIAS ÁGEIS A testagem de software se torna mais importante. A automatização de testes com metodologias ágeis funciona muito bem para pequenos e médios projetos, assim como pequenas e médias empresas. O desa�o para o futuro é desenvolver a metodologia automatizada para que ela atenda, com qualidade, a aplicações multiplataformas, por exemplo. ESTUDO DE CASO Você é um alto executivo de uma grande empresa de tecnologia, que está presente no mercado desde os anos de 1970. O desenvolvimento de seus softwares sempre fora direcionado para grandes bancos brasileiros, para uso exclusivamente de processos internos, não havendo, nesse caso, uma ligação direta com o cliente �nal. Ainda hoje, a linguagem de programação usada para esse �m foi a COBOL, muito tradicional no meio �nanceiro. Mesmo assim, a empresa possui canais digitais com seus clientes, inclusive, com aplicativos de celular, nos quais se utiliza a linguagem Java para desenvolver suas aplicações. No entanto, todos esses projetos sempre foram conduzidos através de metodologias tradicionais. Um dos bancos, cliente da empresa que você trabalha, quer abrir uma plataforma mais popular, no formato de “carteira digital”, que vem se difundindo muito no país. Essas carteiras se diferenciam dos aplicativos tradicionais por oferecerem diferentes opções de transações, promoções e cupons, a cada semana. Em outras palavras, é uma plataforma dinâmica. Sua tarefa é convencer, com argumentos sólidos e aprofundados, os CEOs de sua empresa de tecnologia a mudarem o paradigma e utilizarem metodologias ágeis para o desenvolvimento, os testes e a manutenção de seus aplicativos mobile. Utilize, para tanto, os conhecimentos aqui adquiridos, bem como a comparação de aplicação entre as metodologias tradicionais e as metodologias ágeis. RESOLUÇÃO DO ESTUDO DE CASO Com a análise dos fatores ambientais de teste e repetições de testes pode-se observar um impacto na decisão em utilizar ou não a automatização dos testes de aceitação. Entretanto, frente à necessidade de ter aplicações cada vez mais multiplataformas, a segurança provida pelo teste automatizado de aceitação se mostra efetiva para a empresa de software que propõe fornecer um produto de excelência, cumprir prazos estabelecidos com o cliente, reduzir o esforço de teste manual, tornar o desenvolvimento do software mais participativo entre todos os envolvidos e, consequentemente, aumentar a satisfação com seus clientes e usuários �nais. — (PINHEIRO et al., 2015, p. 267) Videoaula: O futuro da testagem com o avanço das metodologias ágeis Para visualizar o objeto, acesse seu material digital. Para a solução do estudo de caso, comece fazendo uma tabela comparando o produto que sua empresa produz hoje com o novo produto a ser desenvolvido. Nessa tabela, insira o tempo previsto para a realização das etapas e o tempo previsto de reformulação e/ou ajuste de cada um dos softwares. Faça também um resumo comparativo entre os tipos de metodologia e procure no mercado empresas semelhantes que já utilizam metodologias ágeis para casos parecidos. Competências, como comunicação verbal clara e simples, técnicas de negociação e uma apresentação de slides bem conduzida, são essenciais. Saiba mais Quando falamos de metodologias ágeis, não estamos nos referindo apenas a um compêndio de várias técnicas que foram compiladas em um único método, por exemplo, Lean Manufacturing. Dentre as metodologias ágeis, podemos citar: Feature Driven Development (FDD), Dynamic Systems Development Methodology (DSDM), Adaptative Software Development (ASD), Crystal, Extreme Programming (XP), SCRUM e Iconix Process. Utilize a referência indicada a seguir e sites especializados em tecnologia na internet para pesquisar mais sobre as semelhanças e diferenças entre essas metodologias. SBROCCO, J. H.; MACEDO, P. C., Metodologias Ágeis: engenharia de software sob medida. São Paulo, SP: Érica, 2012. 256p. Resolução do Estudo de Caso Para visualizar o objeto, acesse seu material digital. INTRODUÇÃO As ferramentas CASE (sigla para Computer Aided Software Engineering) auxiliam no processo de criação e testes de software ou, de forma mais ampla, são ferramentas da Engenharia de Software. Aqui, veremos quais são essas ferramentas, como elas são utilizadas e apresentar casos de sucesso e de fracasso. Os testes de software existentes se dividem em três tipos: Testes de Unidade Automatizada, em que o teste é realizado no nível do código, e os problemas são identi�cados nas rotinas escritas nas linhas de programação; Testes API (Application Programming Interface, ou Interface de Programação de Aplicativo), em que são testadas a segurança e a funcionalidade do software; testes de GUI (Graphical User Interface), em que são testadas as interfaces de usuário do software (ou aplicativo) (TESTES..., 2019). ATUALIZAÇÕES CONSTANTES DE PROGRAMAS MANTENDO OS ANTIGOS Frequentemente, usuários se deparam com atualizações de softwares em mensagens dadas por seus sistemasoperacionais, enquanto outros ainda utilizam planilhas eletrônicas de mais de 10 anos. O que parece um tormento, muitas vezes, é uma tarefa necessária de ser realizada. Isso vale também para os aplicativos mobile, softwares de usuários �nais em empresas e softwares de equipamentos de produção, por exemplo. O motivo, em todos os casos descritos, segundo Campos (2021), é a relação custo-benefício e a necessidade do aumento de segurança de dados. A simples atualização de segurança de um software, por si só, requer tempo. Um administrador de tecnologia da informação em uma empresa, por exemplo, para realizar esse tipo Aula 2 FERRAMENTAS CASE PARA AUTOMAÇÃO DE TESTES Entender como casos de sucesso e de fracasso contribuíram para o avanço dos testes e da qualidade dos programas ou softwares. 37 minutos de atualização, deve se programar e mobilizar sua equipe, dependendo do software utilizado. Já a troca de software por versões mais novas, muitas vezes, requerem a compra de novas licenças, o que, dependendo do core business da empresa e de seu tamanho, pode ser muito custoso. Diante disso, algumas empresas acabam por manter softwares mais antigos em utilização, porém atualizados, e reforçar a segurança dos sistemas existentes. Manter um software antigo, porém atualizado, em uso, também pode ser vantajoso em determinadas situações. De acordo com Campos (2021), em automação industrial, isso pode ocorrer com frequência alta, pois: • O custo é elevado para a manutenção de computadores, principalmente os industriais, já que, frequentemente, um novo software requer um hardware mais potente do que o atual. • Hardwares novos e mais potentes possuem custos elevados. • Além da possível necessidade de novo hardware, esse equipamento precisa ser construído com um sistema e periféricos compatíveis com os sistemas do fabricante das máquinas, além de conexões, placas, drivers, etc. compatíveis. Diante do exposto, o que você faria? O mais adequado seria manter um software antigo atualizado no limite disponibilizado pelo desenvolvedor ou substituí-lo? A resposta dependerá, principalmente, da relação custo x benefício, tanto para pessoas como para empresas. Por outro lado, a atualização de softwares administrativos pode ser tão custosa quanto a implementação de um sistema totalmente novo. Valentim et al. (2014) descreve um estudo comparativo do uso de recursos, entre a implementação e a atualização de um sistema ERP (Enterprise Resource Planning, ou Planejamento de Recursos Empresariais, em tradução livre), em uma empresa de bebidas. Tanto a implementação de um novo sistema como a atualização envolvem toda a companhia. Ainda segundo o autor, os sistemas ERPs são constantemente atualizados. Os softwares podem apresentar desde mudanças na interface do usuário como também incorporar correções ou maiores camadas de segurança das informações e outros diferenciais. No caso apresentado, apesar de a atualização ser implementada com sucesso (ao invés de um novo sistema), o processo envolveu todas as etapas de implementação de um novo sistema. Como responsável por conduzir um projeto de atualização como este, você manteria o sistema antigo atualizado? Se o uso de recursos e os custos envolvidos são os mesmos, a mudança para um novo sistema seria mais vantajoso. Esse é um caso complexo, pois envolvem diversos softwares de um sistema ERP de uma empresa, bem como treinamentos, backups e implementação. O mesmo não ocorreria para sistemas mais simples, obviamente, mas teríamos em comum, nos dois casos, um software mais seguro e atual. VIDEOAULA: TATUALIZAÇÕES CONSTANTES DE PROGRAMAS MANTENDO OS ANTIGOS O vídeo versa sobre as vantagens e desvantagens em utilizar um software novo ou fazer a atualização do software. Além da apresentação de um estudo de caso real para o sistema ERP, o vídeo mostra que especialistas indicam a atualização e, se possível, a troca, dependendo da aplicação, dentro do período de dois a cinco anos. CASES DE SUCESSO E CASES DE FRACASSO Em todo projeto de produto, é esperado sempre que os resultados sejam minimamente satisfatórios e que o produto possa ser colocado no mercado o quanto antes. Isso acontece pois estamos em um mundo onde as mudanças ocorrem cada vez mais rápidas e a concorrência cresce rapidamente. Na área de softwares, isso não é diferente. Inclusive, é muito mais intenso, visto que a área de desenvolvimento de softwares é uma área extremamente tecnológica, em que o consumidor, principalmente o �nal, quer sempre novidades. Soma-se a isso a necessidade de empresas e pessoas possuírem softwares seguros, em um mundo cada vez mais exposto a ataques cibernéticos. Para tanto, não basta a criação do software, a veri�cação de sua capacidade de execução. Os testes também são necessários, para evitar fracassos de adesão ao produto e de vendas. Segundo Bernardo (2011), a área de testes de softwares é uma área em franco crescimento, e a necessidade de testes automatizados se faz presente, devido à agilidade desse processo. Ainda segundo o autor, erros de escrita, manutenção e testes automatizados de baixa qualidade agem de forma negativa sobre o controle de Videoaula: Atualizações constantes de programas mantendo os antigos Para visualizar o objeto, acesse seu material digital. qualidade desses produtos, prejudicando, inclusive, o tempo de desenvolvimento desse software. Glass (2006), em seu artigo, relata a crise no desenvolvimento de softwares, chegando a mencionar uma taxa elevada de falhas, girando em torno de 70% à época. Ele relata também o caso de uma aplicação utilizada pelo governo dos Estados Unidos, na década de 1980, para gerenciar a contabilidade. O problema residia na coleta de dados feita pelo software em questão. O caso gerou muita discussão à época entre os técnicos da área e, uma vez identi�cado o problema, a questão da “crise do software” �cou mais visível. Um dos casos de falha bem conhecidos foi a apresentação do Windows 98, em abril de 1998, realizada pela Microsoft. Durante a execução de uma das tarefas do sistema operacional, relacionada com a tecnologia plug and play, a conhecida “tela azul” de erro apareceu para todos os que estavam assistindo ao congresso de tecnologia COMDEX. Conforme Rebêlo (2008), a Microsoft corrigiu os problemas e acabou lançando no ano seguinte o Windows 98SE (Segunda edição). Apesar de outros problemas que o sistema apresentou, esse sistema operacional se tornou um dos mais utilizados no mundo. Assim como esse caso, a Microsoft teve problemas de execução na apresentação do software Hololens 2, em 2019, e não foram explicados os motivos das falhas. A partir desses três exemplos, a pergunta que você deve estar fazendo é: esses softwares foram testados à exaustão? Qual o método utilizado? Os testes foram automatizados? Esses problemas poderiam ser evitados durante o lançamento? Um case de sucesso de software que envolveu a utilização de testes automatizados é o caso de uma empresa brasileira, cujo terminal de autoatendimento precisou de rápidas atualizações para receber novas funcionalidades, o que poderia aumentar a frequência de erros, devido ao aumento dos números de processos sendo executados. Bartie (2008) relata que a área de Tecnologia da Informação da empresa se deparou com um gargalo em seus processos de testes e homologação de software. A proposta inicial era colocar uma equipe em campo para testar tais softwares diretamente nas máquinas de autoatendimento, o que seria uma maneira demorada e não produtiva de tentar resolver problemas. A empresa, então, optou por adotar testes automatizados nos softwares dos terminais. Com a automação, foi possível executar todos os tipos de testes e de forma contínua, o que fez diminuir o prazo de homologação do software pela metade e aumentar o nível de cobertura desses testes para mais de 20 vezes. VIDEOAULA: CASES DE SUCESSO E CASES DE FRACASSO Um sistema operacional possui uma construção muita mais complexa do que outros softwares.A questão é dimensionar a quantidade de testes automatizados a serem realizados e analisar a necessidade de a empresa em lançar novos produtos no mercado. Uma grande empresa possui estratégias diferentes de empresas com terminais de autoatendimento. FERRAMENTAS ORIENTADAS A OBJETOS, UPPER E LOWER CASE, TESTES DE SOFTWARE COM USO DE REALIDADE VIRTUAL (RV) Ferramentas CASE: características e categorias Ramos (2011, p. 27) descreve a ferramenta CASE como “um conjunto de técnicas e ferramentas informatizadas que auxiliam o engenheiro de software no desenvolvimento de aplicações”. As aplicações aqui mencionadas são os sistemas e os softwares. As ferramentas CASE têm como objetivo melhorar a e�ciência no desenvolvimento de softwares, para a obtenção de softwares com melhor qualidade. Ela permite, durante o desenvolvimento de software, automatizar as atividades, como os próprios testes de execução de software e identi�cação de problemas. Mais especi�camente, as ferramentas CASE são muito importantes para empresas que trabalham com engenharia de software, pois tratam de todo o ciclo de desenvolvimento, que inclui a análise do projeto, o projeto propriamente dito, a implementação e a realização de testes (RAMOS, 2011). Chikofsky (1993) descreve uma série de vantagens na utilização das ferramentas CASE, dentre elas: • Padronização dos processos. • Reutilização de ferramentas ao longo do projeto, com consequente aumento de produtividade. Videoaula: Cases de sucesso e cases de fracasso Para visualizar o objeto, acesse seu material digital. • Automatização das atividades (inclusive, é a principal característica dessas ferramentas). • Tempos de desenvolvimento otimizados. • Integração entre as diversas etapas e equipes de desenvolvimento. • Foco em testes e correção do software. • Qualidade superior para o produto. De acordo com Farias (2001), as ferramentas CASE são classi�cadas em três categorias: Lower CASE (back- end), Upper CASE (front-end) e Integrated CASE, união das duas ferramentas anteriores. Peloso (2014) de�ne cada uma das categorias da seguinte forma: • As ferramentas da categoria Lower CASE trabalham em ambientes mais simples, auxiliando na criação dos códigos dos softwares, nos seus testes, na depuração e na manutenção deles. • As ferramentas da categoria Upper CASE trabalham em ambientes mais complexos. As tarefas de análise, de projetos e de geração de código são mais automatizadas do que na categoria Lower • As ferramentas da categoria Integrated CASE trabalham integradas em ambientes que relacionam entradas e saídas. Isso permite o controle dos dados de forma consistente. Ferramentas de testes orientadas a objetos Conforme Martins e Tschannerl (2021), a programação orientada a objetos é muito próxima à forma de pensamento humana, assim como os testes orientados a objetos. Apesar de mais complexos, os testes orientados a objetos são mais e�cientes, pois aproveitam informações e rotinas de testes já realizados. A complexidade de testes orientados a objetos se dá em função da hierarquia de classes, do aproveitamento das rotinas já realizadas, comumente chamada de herança, e do polimor�smo. Códigos construídos a partir de linguagens orientadas a objetos apresentam, em geral, algoritmos menos complexos, o que facilita os procedimentos de teste. Isso ocorre porque os códigos orientados a objetos possuem maior facilidade de interpretação. No entanto, o polimor�smo e o relacionamento de comandos mais complexos podem di�cultar a realização de testes assim construídos. Testes de software com uso de realidade virtual (RV) De acordo com Souza (2017), os testes de software de realidade virtual focam, principalmente, na fase de desenvolvimento grá�co e na interface com o usuário. Os testes para esse tipo de software utilizam estruturas de análise de dados em árvore. Nesse tipo de estrutura, o teste começa desde o nó raiz, passando pelos nós folhas, até o �nal do processo (cada nó representa uma parte ou um conjunto de informações, por exemplo, cores, movimento, iluminação, entre outras variáveis, para que sejam testados. Processos interativos de testes também podem ser realizados, além da utilização de sistemas distribuídos, visto a complexidade do programa. A importância desses testes para esse tipo de produto é garantir a máxima qualidade, visto que boa parte desses sistemas já é frequentemente utilizada em aplicações médicas (SOUZA, 2017). VIDEOAULA: FERRAMENTAS ORIENTADAS A OBJETOS, UPPER E LOWER CASE, TESTES DE SOFTWARE COM USO DE REALIDADE VIRTUAL (RV) A automatização dos testes através das ferramentas CASE, junto a metodologias ágeis, possibilita testar exaustivamente um software. Uma forma de teste recente é realizada com softwares de realidade virtual. Eles são utilizados em simulações simples, como jogos, ou complexas, como simuladores na Medicina. Os testes são imprescindíveis no último caso. ESTUDO DE CASO Você é um dos engenheiros de software de uma indústria que produz softwares de realidade virtual para Medicina e para testes em automóveis. A princípio, a construção de um software para esses �ns é semelhante à construção de softwares para �ns menos complexos ou que não envolvem segurança e vidas humanas. Você, junto à sua equipe, precisa desenvolver e testar, antes de enviar para o cliente que encomendou um Videoaula: Ferramentas orientadas a objetos, Upper e Lower CASE, testes de software com uso de realidade virtual (RV) Para visualizar o objeto, acesse seu material digital. software para que médicos possam realizar cirurgias trabalhando com realidade virtual. Elabore um �uxo de ações e detalhe cada uma delas para a construção desse software. Você considera a necessidade de ter uma equipe multidisciplinar para trabalhar junto à sua equipe? Será necessário que o cliente participe da construção desse software? Explique de forma detalhada essas duas questões. RESOLUÇÃO DO ESTUDO DE CASO Para a resolução do Estudo de Caso, o aluno deve, inicialmente, re�etir sobre o grau de exigência de testes que devem ser realizados nesse software. Será necessário a utilização de ferramentas automatizadas e alguma metodologia ágil para o teste desse software? Além disso, na construção do �uxograma detalhado, o aluno deve inserir todas as fases de levantamento de dados e as necessidades junto ao cliente, os nós onde ocorrem os testes e onde o cliente entra em cena para o desenvolvimento deles, porque o cliente, além de uma equipe multidisciplinar, deve participar da construção e dos testes desse produto. Saiba mais Os testes de software começaram a ganhar força com a popularização do computador pessoal, na década de 1980, e se intensi�cou quando as grandes empresas de tecnologia começaram a ter maior visibilidade, antes voltada para empresas tradicionais, de alimentos ou de automóveis. Hoje, os maiores faturamentos estão nessas empresas, também conhecidas como big techs, a maioria localizada no Estado norte-americano da Califórnia, no Vale do Silício. A necessidade de entregar softwares cada vez mais rápidos, e�cientes e com interfaces grá�cas atraentes aumentou muito, devido à concorrência, principalmente, de sistemas operacionais para aplicações mobile (smartphones) e softwares de uso pessoal, como os editores de texto, apresentações e planilhas. Como sugestão, procure na internet, através de buscadores, sobre a evolução dos softwares, o intervalo de lançamento e de atualizações, bem como o faturamento anual das maiores empresas de tecnologia, comparadas às empresas de outros ramos. O que podemos concluir com isso? O futuro será determinado por essas grandes empresas, e seus softwares serão poderosos? As atualizações e os lançamentos passarão a ser mais frequentes, exigindo cada vez mais testagens rápidas? Resolução do Estudo de Caso Para visualizar o objeto, acesse seu material digital. INTRODUÇÃO Quando estudamos a qualidade e automação de testes, alguns conceitos importantes devem ser abordados, comoa escolha da melhor linguagem de programação para o projeto, que é composto de apenas um ou um conjunto de softwares. Entender o escopo dos projetos de programas, para compreender como funciona a engenharia de software, desde a escolha do método de desenvolvimento (se tradicional ou ágil), mas sem deixar de destacar que os softwares devem ser testados e que a forma mais atual e e�ciente de testes de software é o automatizado. É importante entender também como funciona a implantação do projeto de software em diversos tipos de empresa. Você pode se deparar, em sua carreira, desenvolvendo softwares customizados para os mais diferentes tipos e tamanhos de empresas. Veja só que interessante: o desenvolvimento e teste de software Aula 3 PRINCIPAIS ETAPAS DE ELABORAÇÃO DE UM PROGRAMA OU SOFTWARE Entender o escopo dos projetos de programas, para compreender como funciona a engenharia de software. 35 minutos não é um trabalho individual ou de uma equipe isolada, mas, sim, de uma equipe multidisciplinar. Vamos entender isso tudo? ESCOLHA DAS DIFERENTES LINGUAGENS DE PROGRAMAÇÃO E EXPLICAÇÃO POR LINHA DE CÓDIGO De acordo com Sommerville (2008), quando se estuda ou se trabalha com engenharia de software, mais especi�camente o projeto e a testagem dele, é difícil de�nir uma linguagem de programação especí�ca. Existem diversas linguagens de programação com diferentes abordagens para o desenvolvimento de um software. Nessas situações, o que prevalece é o que o autor chama de “Engenharia de Con�ança”, cujo signi�cado é a utilização de boas práticas de programação aceitas mundialmente. Em outras palavras, a escolha da linguagem de programação deve ser adequada ao propósito esperado para o software solicitado. Conforme Schach (2008), é na fase de implementação, quando o projeto do software é convertido em código, que se deve utilizar de práticas consagradas (e adequadas) de codi�cação. Nesse momento, é escolhida também a linguagem de programação, seguindo determinadas regras, dentre as quais: • Utilizar a linguagem de programação escolhida pelo cliente. No caso de o cliente não especi�car a linguagem, a equipe deve escolher a linguagem a que está acostumada e que esteja adequada aos propósitos, como já mencionado. • A escolha do nome das variáveis deve estar condizente com a sua função dentro do programa. Isso facilita e agiliza a programação, os testes e as possíveis manutenções que o software poderá passar com o tempo de uso e possíveis atualizações. • A documentação referente ao código deve ser detalhada e clara, incluindo as últimas modi�cações ocorridas, a identi�cação das pessoas da equipe que trabalharão no projeto e a descrição da função do software e de suas partes. Boa parte da documentação deve explicar as linhas de código, caso o projeto permita ou seja uma documentação exclusiva da empresa desenvolvedora. Para a escolha da linguagem de programação, Zapalowski (2011) cita três métricas, que são: • Quantidade de linhas do código. • Tempo de execução do algoritmo. • E�ciência do software nas diversas linguagens. Para essa comparação, o autor utilizou como exemplo as linguagens C, C++, PHP, Java, Ruby e Python. A partir de seus testes, observou-se que as linguagens C e C++ eram mais e�cientes para a execução, e as demais, apesar de menos e�cientes sob o ponto de vista de compilação, possuíam desenvolvimento menos complexo. A partir de um exemplo como esse, �ca complicado escolher a linguagem, não é mesmo? De fato, o desenvolvedor deve escolher a linguagem solicitada pelo cliente, ou a que ele possui maior “�uência”. As linhas do código são pontos importantes na análise e na documentação do software. Segundo Seabra, Drummond e Gomes (2018), o código produzido no projeto do software pode ser analisado sob o ponto de vista de sua complexidade e de sua e�ciência. No processo de compilação de um programa, temos duas etapas: análise e síntese. Na etapa de análise, é veri�cado se o programa está coerente com a linguagem utilizada, para que, na etapa de síntese, na qual são gerados e otimizados os códigos do programa, este seja analisado quanto à e�ciência e à presença de erros (GESSER, 2003). VIDEOAULA: ESCOLHA DAS DIFERENTES LINGUAGENS DE PROGRAMAÇÃO E EXPLICAÇÃO POR LINHA DE CÓDIGO A escolha de uma linguagem de programação especí�ca de um projeto pode estar ligada a uma especi�cação do cliente. Caso essa especi�cação não exista, a melhor linguagem a ser escolhida é aquela que atende aos propósitos do projeto e ao que a equipe esteja mais familiarizada. A IMPORTÂNCIA DA DEFINIÇÃO DE ESCOPO DE DESENVOLVIMENTO DE UM PROGRAMA Videoaula: Escolha das diferentes linguagens de programação e explicação por linha de código Para visualizar o objeto, acesse seu material digital. Para muitas pessoas, a de�nição de software é simplesmente um programa de computador. No entanto, dentro da Engenharia de Software, o desenvolvimento envolve não somente escrever linhas de programação em uma determinada linguagem, mas também produzir toda a documentação relativa ao programa, bem como o manual de con�gurações necessárias para que o programa funcione corretamente. Em outras palavras, um desenvolvedor pode escrever um programa para uma determinada função, sem um projeto especí�co, ou existir o projeto solicitado por um cliente, que requer um escopo de desenvolvimento, além de toda a documentação necessária. Segundo Debastiani (2016), na década de 1980, quando as aplicações eram mais modestas sob o ponto de vista de suas funcionalidades, os sistemas não eram integrados, a forma de processamento não era distribuída, e o projeto era essencialmente baseado nas entradas e saídas que o cliente solicitava. As equipes de projeto de softwares ou sistemas não enxergavam a grande necessidade de planejamento e do desenvolvimento de escopos do projeto. Hoje, com o aumento visível das demandas e da complexidade de um programa, bem como a concorrência, temos uma nova dinâmica para as equipes de desenvolvimento: maior integração e de�nição dos escopos. Ainda de acordo com Debastiani (2016), o aumento de demandas de qualidade, complexidade dos sistemas, agilidade e tempo obrigou as companhias a trabalhar com padrões especí�cos de funcionamento. A padronização das atividades do projeto deve focar em etapas, como formulação de funcionalidades do software, de�nição e tratamento de base de dados e testes de funcionamento. Sbrocco e Macedo (2012, p. 41) traz a seguinte de�nição para escopo em projetos de software: Ainda segundo os autores, o escopo leva à produção de uma lista de requisitos que englobam as necessidades dos clientes. Esses requisitos, por sua vez, trazem os atributos relacionados às funcionalidades. Dentre os requisitos, destacam-se: • Prioridade: ordena as funcionalidades de acordo com sua relevância para o projeto. Ela é dividida em prioridade crítica, cuja funcionalidade deve ser inserida na próxima atualização ou versão do software; prioridade importante, cuja funcionalidade possui grau de importância, mas pode ter sua implementação adiada no caso de problemas técnicos; prioridade útil, cuja não implementação em uma próxima versão pode ser adiada e não trará prejuízos ao funcionamento do software. • Complexidade: pode ser dividida em baixa, média e alta, e está relacionada com a di�culdade de implementação de uma ou mais funcionalidades solicitadas pelo cliente. É uma medida, segundo os autores, dos recursos gastos para desenvolver as funcionalidades que estão no escopo do projeto. • Risco: é um requisito que auxilia na de�nição das prioridades dentro do escopo. A partir da análise de riscos, são identi�cadas as funcionalidades críticas e que precisam de mais atenção. Geralmente, as funcionalidades mais críticas são colocadas primeiro dentro do cronograma do projeto. • Esforço-tempo: requisito de fundamental importância para a de�nição do orçamento do software. É medido a partir do número de integrantes do projeto versus tempo, porisso, é chamado esforço-tempo. As variáveis que devem ser analisadas são: o tamanho do projeto, o tempo total para execução do projeto, o número de pessoas no projeto e as ferramentas utilizadas. Quando se utilizam as metodologias tradicionais, é mais difícil prever as métricas de cada um dos requisitos citados logo no início do processo. Já na utilização de metodologias ágeis, o escopo do projeto pode sofrer alterações ou, em outras palavras, as alterações são esperadas e fazem parte da rotina de condução do projeto e do desenvolvimento do software. O escopo de um projeto de desenvolvimento de software possui várias de�nições. Sob o ponto de vista da análise de requisitos, podemos dizer que ele representa uma lista de funcionalidades que devem estar presentes no sistema de software. Quando dividimos o desenvolvimento do software em várias fases, e as fases em iterações, podemos denominar o escopo de desenvolvimento das iterações como uma baseline ou linha de base dos requisitos. VIDEOAULA: A IMPORTÂNCIA DA DEFINIÇÃO DE ESCOPO DE DESENVOLVIMENTO DE UM PROGRAMA A produção de um escopo de projeto auxilia no planejamento das atividades que serão realizadas durante a sua execução. A partir do escopo, é possível de�nir o orçamento do software, as etapas prioritárias e até o tamanho da equipe envolvida. CASOS DE SUCESSO DE PROJETOS DE IMPLANTAÇÃO DE SISTEMAS Existem diversos casos e estudos de caso de sucesso na implantação de sistemas automatizados em diferentes áreas. Aqui, serão apresentados três deles, vindo de estudos de pesquisadores de diferentes partes do mundo, em diferentes situações e tamanhos de empresas. No caso, os nomes das empresas não serão citados por questões de sigilo. Um dos casos é de uma empresa de transportes aéreos chineses (LIU et al., 2014). Trata-se de um caso de implantação de um projeto de sistema automatizado de testes dos softwares de segurança da empresa, mais especi�camente testes de con�abilidade desses sistemas. No caso, a ferramenta utilizada se chama SRTAT – software reliability test & assessment tool-suite, ou ferramentas de teste e avaliação de con�abilidade de software, em tradução livre. Os estudos mostraram que a implementação dessa ferramenta permitiu tarefas antes consideradas impossíveis de serem realizadas em tempo hábil, como veri�car a con�abilidade de todos os sistemas manualmente, o que era possível através da automatização de testes. Outro caso de projeto de implantação de sistemas especí�cos para melhorar processos é o de uma empresa de contabilidade (KURNIAWAN et al., 2017). Foi implementado o que eles chamaram de “Sistema de Informação Contábil”, que permitiu coletar, analisar e conciliar dados para gerar informações que trouxeram impactos econômicos mensuráveis, além de benefícios intangíveis para a empresa. O caso foi estudado diretamente em uma empresa da Indonésia, através de levantamento de dados do software implementado em execução. Além dos benefícios já mencionados, o software permitiu sanar de�ciências percebidas em outros momentos. E os casos de implantação de softwares ou sistemas considerados prontos, “de prateleira”? Muitas empresas, principalmente as de pequeno porte, acabam implementando softwares não encomendados para informatizar suas atividades. A princípio, pode trazer certa insegurança, mas, nesses casos, é necessário realizar testes de implementação e veri�car as suas saídas. Dois pesquisadores do Babson College, em Babson Park, Massachusetts, analisaram os resultados, de curto e longo prazos, do projeto de implantação de um sistema de prateleira em uma empresa, através de testes em campo (CALE; ERIKSEN, 1994). O sistema recebeu ajustes iniciais que foram propostos tanto pela alta administração como pelos usuários �nais, além da equipe de Tecnologia da Informação. As conclusões a curto prazo são que o sistema teve sucesso na implementação, determinado, principalmente, por três fatores: o custo-benefício relativo do sistema para o usuário �nal, a compatibilidade do sistema com as normas de trabalho e os processos da empresa e a facilidade de uso do sistema, por sua baixa complexidade. No longo prazo, veri�caram que não ocorreram problemas, e eles atribuem isso aos ajustes iniciais, ao entendimento das necessidades dos usuários �nais (e se o sistema é adaptável à equipe) e à adaptação de seu uso e manutenção pela equipe de suporte de Tecnologia da Informação, que deve possuir as competências necessárias e ser capaz de manter o sistema em pleno funcionamento. Segundo os pesquisadores, eles consideram que os resultados se assemelham ao sucesso de implementação de sistemas customizados. Com isso, vemos que tanto sistemas customizados como sistemas prontos podem ser implementados em empresas, obviamente, analisando sua aplicação, o porte da empresa, quem utilizará e a equipe de suporte. VIDEOAULA: CASOS DE SUCESSO DE PROJETOS DE IMPLANTAÇÃO DE SISTEMAS O sucesso da implementação de projeto de sistemas dependerá sempre de uma análise prévia dos requisitos, além de um planejamento feito através de um escopo, junto à equipe que utilizará o sistema ou software, tanto para empresas de pequeno, médio ou grande porte das mais diversas áreas. Videoaula: A importância da de�nição de escopo de desenvolvimento de um programa Para visualizar o objeto, acesse seu material digital. Videoaula: Casos de sucesso de projetos de implantação de sistemas Para visualizar o objeto, acesse seu material digital. ESTUDO DE CASO Você é o gerente de Tecnologia da Informação de uma média empresa do ramo de laticínios. Com o crescimento da empresa, da carteira de clientes e da necessidade de uma logística mais otimizada, o CEO da empresa solicitou a você a análise e implantação de um sistema semelhante a um ERP para controlar todas essas áreas. No mercado, existem sistemas prontos adaptáveis (“de prateleira”) e empresas que podem desenvolver um sistema customizado. Você deve decidir, baseado nas etapas de implementação do projeto, qual sistema será implantado. No caso da escolha do sistema pronto, que etapas de implantação e quais cargos serão envolvidos? Haverá muitas adaptações a serem feitas? Sua equipe (de TI) será treinada? No caso da escolha do sistema customizado, quais parâmetros devem ser colocados? Há uma linguagem especí�ca que a equipe de TI de sua empresa pre�ra trabalhar? O que você solicitará na documentação do código desse sistema? RESOLUÇÃO DO ESTUDO DE CASO A solução para esse caso dependerá de alguns fatores, como: quem utilizará o sistema (customizado ou não) tem familiaridade com informática? Se não possui, a equipe de TI, junto aos gestores, deverão treiná-los. Qual o orçamento disponível para a compra do sistema? Ele permite a compra de um sistema customizado ou de prateleira? O sistema de prateleira é mais simples de ser implementado e pode trazer os mesmos resultados de um customizado? Qual a projeção de tempo de uso desse sistema pela empresa? Qual sistema atende esse tempo apenas com pequenas atualizações e manutenção? Todas as respostas a essas perguntas ajudarão você a escolher o sistema. Como vimos nos casos de sucesso, há um em que a implantação de um sistema de prateleira foi su�ciente, fácil e rápido, mas, talvez, a taxa de crescimento de sua empresa e sua complexidade não permitam sistemas assim. Saiba mais A prática da programação está cada vez mais difundida. Apesar disso, existem, hoje, muitas linguagens de programação e códigos, para as mais diversas aplicações. Um repositório de exemplos nas mais diversas linguagens pode ser encontrado em https://github.com/, o famoso GitHub, em que muitos desenvolvedores colocam suas linhas de código, e boa parte deles (dos códigos) é explicada. Resolução do Estudo de Caso Para visualizar o objeto, acesse seu material digital. INTRODUÇÃO Nesta aula, você conhecerá o conceito original de hackers, de onde vem essa expressão, como os hackers do bem podem ser importantes para aumentar a segurançacibernética das empresas cada vez mais digitais, os principais tipos de invasões e ataques e os prejuízos gerados pelos hackers criminosos. Quando ouvimos a expressão hacker, remetemos a uma pessoa criminosa, mas, dentro do mundo digital, existem pessoas que utilizam seus conhecimentos profundos de computação e redes para o bem, enquanto outras, para o mal. Aula 4 FALHAS EM PROGRAMAS VERSUS IMPORTÂNCIA DE HACKERS PARA DETECÇÃO DAS FALHAS Determinar as principais falhas e bugs apontados pelos usuários e testes encomendados para otimizar o programa ou o software. 35 minutos https://github.com/ Como cada vez mais as empresas estão conectadas, com e-commerces em franco crescimento, os dados sensíveis também estão, assim como a possibilidade de invasões de criminosos cibernéticos. A importância de conhecer as brechas de sistemas é de fundamental importância para as empresas se precaverem e evitarem grandes prejuízos. INVASÃO HACKER Talvez, a de�nição de hacker ainda traga estranheza e descon�ança. Para entendemos o conceito de invasão hacker, começaremos entendendo o que são hackers, como surgiram, a diferença dessas pessoas para os crackers, entre outras de�nições na área de segurança cibernética e qual a sua relação com os testes de softwares e sistemas. O termo hacker tem como origem os carpinteiros que faziam móveis com machados. Na década de 1960, o termo passou a ser utilizado dentro do contexto da informática para descrever projetos acadêmicos que exigiam muita dedicação e concentração dos estudantes, em especial do Massachusetts Institute of Technology (MIT), onde jovens estudantes começaram a interagir com computadores e programação ou, em outras palavras, podemos dizer que o termo foi inicialmente designado dentro da informática para especialistas em computação e programação (ULBRICH; DELLA VALE, 2004). Por conta de criminosos que começaram a utilizar esses conhecimentos mais profundos de informática para cometer ataques e crimes cibernéticos, a própria comunidade hacker criou o termo cracker para de�nir essas pessoas. De acordo com McClure, Scambray e Kurtz (2014), muitas informações de segurança de uma organização podem �car vulneráveis a ataques de criminosos com grandes conhecimentos de informática. O Quadro 1 mostra quais são as possíveis informações organizacionais que podem estar vulneráveis a invasões de hackers “do mal”: Quadro 1 – Informações vulneráveis às invasões cibernéticas Tecnologia Informações Internet Nomes de domínio, blocos de rede e sub-redes, endereços IP especí�cos de sistemas que podem ser acessados pela internet, serviços TCP e UDP em execução em cada sistema identi�cado, arquitetura de sistemas, mecanismos de controle de acesso e listas de controle de acesso relacionadas, sistema de detecção de intrusão, enumeração de sistemas, nomes DNS dos equipamentos. Intranet Protocolos de rede em uso, nomes de domínios internos, blocos de rede, endereços IP especí�cos de sistemas que podem ser acessados pela Internet, serviços TCP e UDP em execução em cada sistema identi�cado, arquitetura de sistema, mecanismos de controle de acesso, sistemas de detecção de intrusão, enumeração de sistemas. Acesso Remoto Números de telefone analógicos e digitais, tipo de sistema remoto, mecanismos de autenticação, VPNs e protocolos relacionados. Extranet Nomes de domínio, origem e destino das conexões, tipos de conexão, mecanismos de controle de acesso. Fonte: adaptado de McClure, Scambray e Kurtz (2014). Para evitar as invasões de hackers, o administrador do sistema ou o responsável pela segurança de dados deve conhecer a extensão de seus negócios, como suas atividades, seus fornecedores e seus clientes, em suma, todas as organizações e pessoas envolvidas. Segundo McClure, Scambray e Kurtz (2014), o excesso de informações do website da empresa ou a disponibilização de inventários de patrimônios em planilhas em servidores de rede internet é o su�ciente para o início de uma invasão. E isso não se limita apenas à internet da empresa. Dados de funcionários, listas de contatos, dentre outros bancos de dados, são, através de mineração de dados (ou data-mining), utilizados por criminosos virtuais para arquitetar invasões de dados. Estamos falando de empresas, mas os golpes podem acontecer com pessoas físicas, como invasões de contas bancárias, ou usar computadores pessoais que tenham algum tipo de acesso à rede empresarial para realizar ataques e invasões. Conforme os autores, há a possibilidade de fazer invasões partindo de páginas de buscas populares. Podemos dividir os tipos de invasão em três grupos principais: • Invasão de usuários �nais em empresas e servidores: é a invasão através de brechas de segurança em sistemas operacionais, como algumas versões do Windows, o que também vale para servidores controlados por versões dos anos 2000 do Windows Server, por exemplo. Utilizamos aqui o Windows como exemplo, mas esse tipo de ataque à ponta (ou usuário �nal e servidores) pode ocorrer em outros sistemas operacionais, à medida que se tornam populares e de maior interesse por parte de hackers criminosos. • Invasão de infraestrutura: é a invasão através, por exemplo, da rede sem �o de uma empresa, por meio da detecção, com a utilização de equipamentos apropriados, de falhas ou brechas nessa rede. • Invasão de aplicativos e de dados: é a invasão de aplicativos, geralmente disponíveis na web, em redes locais ou em computadores locais, e seus dados. Com o aumento do uso da internet por usuários e a melhora na usabilidade de aplicações web – com a Web 2.0 e 3.0, estas últimas se tornaram passíveis de ataques e invasões. VIDEOAULA: INVASÃO HACKER A de�nição inicial de hacker não estava relacionada a pessoas criminosas dentro do meio digital, mas muitos dos que detêm grande conhecimento de programação, redes e computação em geral acabaram utilizando seus conhecimentos para atacar partes vulneráveis dos sistemas de empresas. HACKERS DO BEM A de�nição inicial dada aos hackers – pessoas com alto conhecimento de informática e, mais especi�camente, redes e programação (ULBRICH; DELLA VALE, 2004) – contrasta com muitos hackers que escolheram o caminho criminoso, os chamados crackers, como já mencionado. No entanto, o conhecimento profundo de segurança da informação permite aos hackers do bem serem peças fundamentais para evitar, descobrir falhas de segurança e implementar maiores camadas de segurança em redes, sistemas, estruturas e softwares. Mesmo assim, a de�nição de hackers por alguns autores pode ser controversa. Lemos, Seara e Pérsio (2002) explica, de forma sucinta, essa diferença: A partir dessas de�nições, por vezes controversas, são listados aqui os tipos de hackers que existem (SKOUDIS; LISTON, 2005): • White Hats ou Gray Hats, que são os hackers do bem, considerados pelos autores como hackers que estão “em cima do muro”, que fazem pequenos ataques do tipo deny of servic ou DOS, para derrubar páginas da internet ou burlar a licença de programas. • Black Hats, que são os já mencionados crackers, que os autores consideram como vândalos ou criminosos digitais. Amaral e Pretto (2012) consideram um terceiro grupo, ou subgrupo dos white hats, os ethical hackers, que usam seus conhecimentos como atividade pro�ssional, contratados como terceiros ou colaboradores da própria empresa e identi�cam vulnerabilidades dos sistemas e das redes. Segundo os autores, esse é um mercado em crescimento, devido ao crescente aumento da segurança de dados das empresas e dos ataques cibernéticos. Esse tipo de hacker pode ser considerado, dentre todos os tipos mencionados aqui, os verdadeiros hackers do bem, que possuem as características dos primeiros hackers e utilizam essas características para proteger empresa e pessoas. Videoaula: Invasão hacker Para visualizar o objeto, acesse seu material digital. Os hackers são bem diferentes dos marginais ou vândalos da informática – os crackers. O termo foi criado pelos próprios hackerscomo forma de diferenciação dos marginais da cibercultura, embora na maioria das vezes a imprensa e a mídia em geral não façam essa distinção, aumentando a má compreensão desses personagens da sociedade informacional. Além de alertar as autoridades competentes de que seus sistemas não estão seguros, e sim passíveis de ataques por parte de pessoas mal-intencionadas, eles revelam o papel que as novas tecnologias de informação desempenham na sociedade globalizada. — (LEMOS; SEARA; PÉRSIO, 2002, p. 27) • Ulbrich e Della Vale (2004) mencionam outros tipos de hackers, como o curioso, que faz invasões por desa�o; o vaidoso, que faz as invasões e as divulga na internet, para se promover; o patriota e o ativista, os quais, geralmente, atribuem seus ataques e suas invasões a uma causa. Obviamente, o primeiro com motivos relacionados ao seu país, e o segundo, atacando instituições e governos, desobedecendo a leis com a ideia de que esteja fazendo um bem maior. Esse último, inclusive, pode “fazer o bem” por identi�car informações de pessoas criminosas da vida real, como tra�cantes e terroristas VIDEOAULA: HACKERS DO BEM Conforme a de�nição original de hacker, muitos dos que detêm conhecimento amplo de computação podem ser aliados para trabalhar com segurança de informação dentro de empresas e grandes companhias de tecnologia, os hackers do bem. Os que utilizam seus conhecimentos para o mal são conhecidos como crackers. PREJUÍZOS CAUSADOS POR INVASÕES HACKERS Com uma simples busca na internet por ataques cibernéticos, é possível veri�car os prejuízos que podem ser causados pelos hackers do mal. De acordo com Silva (2021), em agosto de 2021, a empresa varejista Renner �cou com seu site de e-commerce fora do ar por muitas horas, e é difícil de mensurar os prejuízos causados por esse ataque. O hacker que faz esses tipos de ataques a grandes empresas, geralmente, pede uma espécie de resgate, para que elas tenham de volta seus bancos de dados, muitas vezes criptografados. Outro tipo de prejuízo que empresas poderão arcar é que com a Lei Geral de Proteção de Dados (LGPD). Os dados expostos (dos clientes, por exemplo) geram multas, muitas vezes milionárias, e o valor está atrelado à quantidade de dados expostos. Ainda conforme relato de Silva (2021), a Kaspersky, que é uma empresa especializada em softwares antivírus e de segurança cibernética, registrou um aumento de ataques e invasões do tipo ransomware em 767%, entre 2019 e 2020. Esse tipo de ataque – o ransomware – é um tipo de invasão e roubo de dados, em que há pedido de resgate. Os prejuízos causados aos clientes da Kaspersky chegaram a um bilhão de dólares. Outra empresa brasileira vítima de ataques foi a JBS, nos Estados Unidos. Ao contrário da Renner, no mesmo ano, preferiu pagar o resgate dos dados aos hackers criminosos, que chegou a 11 milhões de dólares, o que não é recomendado por especialistas. Empresas, como Carrefour, no Brasil, frente à LGPD (que deve estar atrelada às políticas de segurança digital) e já com conhecimentos da GDPR, que é a legislação de proteção de dados equivalente na Europa, onde a empresa possui sede, se adequaram a essa legislação, o que envolveu, além dos especialistas em tecnologia da informação e segurança de dados, os outros colaboradores da empresa. Assim como mencionado no caso da empresa Carrefour, a melhor forma de evitar ataques, invasões e os consequentes prejuízos, que são maiores, pois quanto maior a empresa, maior a prevenção e a constante atualização de sistemas, além de ter como aliados os hackers do bem, que estão alinhados com a segurança cibernética. Conforme Silva, Mesquita e Paiva (2018, p. 10): Videoaula: Hackers do bem Para visualizar o objeto, acesse seu material digital. A importância de se proteger de ataques mal-intencionados que resultam em roubo de dados con�denciais, negação de serviços, espionagem e modi�cação de sites aumenta a responsabilidade individual e coletiva, implantando políticas de segurança e treinamentos para a prevenção de incidentes indesejados. Violações de segurança de computador ou rede são comuns, e ocorrem em todo o mundo todos os dias. Alguns são considerados menores, com pouca perda de dados ou recursos monetários, mas muitos deles são considerados importantes, ou mesmo catastró�cos. Os Hackers estão constantemente à procura de vulnerabilidades para explorar. Quando as redes não são seguras, as informações sobre organizações e indivíduos, e até mesmo o governo, correm o risco de serem invadidas e expostas. VIDEOAULA: PREJUÍZOS CAUSADOS POR INVASÕES HACKERS Empresas podem estar vulneráveis a invasões de hackers. Nessas invasões ocorrem roubos de grandes quantidades de dados, como de clientes e de dados sensíveis das empresas. Os criminosos pedem valores milionários para o resgate dos dados, além do prejuízo causado pela insegurança dos clientes em ter seus dados expostos. ESTUDO DE CASO Você é gerente de segurança digital de uma grande empresa varejista brasileira. Ela se encontra em franco crescimento, com faturamento diário que chega às cifras dos milhões, o que a faz passar a ser mais presente nas mídias comuns, bem como nas mídias sociais. Como é do seu conhecimento, quanto maior uma empresa, maior o número de clientes e mais exposta na mídia ela está, como também estará mais exposta a possíveis ataques de hackers criminosos. Para tanto e para se adequar à LGPD, você deve fazer adequações dentro do seu departamento, que responde ao Diretor Geral de Tecnologia da Informação. Você deve, neste estudo de caso, montar o escopo e o plano de ação detalhado para a diretoria da empresa, para a prevenção de ataques cibernéticos. RESOLUÇÃO DO ESTUDO DE CASO Para a resolução do estudo de caso, devem constar no escopo os possíveis prejuízos que a empresa pode ter (sejam devido às multas por vazamento de dados – a LGPD deve ser citada neste caso –, sejam imensuráveis, como a perda de con�ança na empresa varejista que você trabalha. No plano de ação, você deve inserir, inclusive, a contratação de pessoas para sua equipe, incluindo um hacker do bem, que auxiliará a descobrir as brechas existentes e as brechas que podem vir a aparecer com o crescimento da empresa, a intranet e a extranet que a empresa usa e até as redes sem �o disponibilizadas aos clientes. Saiba mais Uma forma de conhecer as grandes invasões hackers da história do Brasil e do mundo e os prejuízos gerados é pesquisando em páginas de tecnologia, como os links a seguir: As empresas estão seguras? Parece que não. Disponível em: https://www.istoedinheiro.com.br/as- empresas-estao-seguras-parece-que-nao/. Acesso em: 1º out. 2021. Quais foram os maiores ataques hackers da história da internet? Disponível em: https://gizmodo.uol.com.br/giz-explica-maiores-ataques-hackers-internet/. Acesso em: 1º out. 2021. Videoaula: Prejuízos causados por invasões hackers Para visualizar o objeto, acesse seu material digital. Resolução do Estudo de Caso Para visualizar o objeto, acesse seu material digital. Aula 1 ANDERSON, D. Agile Management for Software Engineering: applying the theory of constraints for business results. New Jersey: Prentice Hall, 2003. REFERÊNCIAS 18 minutos https://www.istoedinheiro.com.br/as-empresas-estao-seguras-parece-que-nao/ https://www.istoedinheiro.com.br/as-empresas-estao-seguras-parece-que-nao/ https://gizmodo.uol.com.br/giz-explica-maiores-ataques-hackers-internet/ ANDERLE, A. Introdução de BDD (Behavior Driven Development) como Melhoria de Processo no Desenvolvimento Ágil de Software. UNISINOS: São Leopoldo, 2015. BECK, K. et al. Manifesto for agile software development. 2001. Disponível em: http://agilemanifesto.org/. Acesso em: 14 mar. 2022. DUARTE, L. Scrum e métodos ágeis: um guia prático. 2 ed. Gravataí: Luiztools, 2021. MARIOTI, F. Kanban: o ágil adaptativo. Engenharia de software magazine, São Paulo, ed. 45, 2017. PINHEIRO, V.; VALENTIM, N. M. C.; VICENZI, A. M. R. Um comparativo na execução detestes manuais e testes de aceitação automatizados em uma aplicação web. In: SIMPÓSIO BRASILEIRO DE QUALIDADE DE SOFTWARE – SBQS, 2015. Anais [...]. Manaus: Uninorte, 2015. PRESSMAN, R. S. Engenharia de Software. Rio de Janeiro, RJ: McGraw Hill, 2002. 704p. SBROCCO, J. H.; MACEDO, P. C., Metodologias Ágeis: engenharia de software sob medida. São Paulo, SP: Érica, 2012. 256p. SOMMERVILLE, I. Engenharia de Software. 8. ed. São Paulo, SP: Pearson Addison-Wesley, 2007. 552 p. Aula 2 BARTIE, A. Automação de Testes – Um caso de sucesso. iMasters, 2008. Disponível em: https://imasters.com.br/desenvolvimento/automacao-de-testes-um-caso-de-sucesso. Acesso em: 13 set. 2021. BERNARDO, P. C. Padrões de testes automatizados. 2011. Dissertação (Mestrado em Ciência da Computação) – Universidade de São Paulo, São Paulo, 2011. CAMPOS, M. Atualização: preciosismo ou necessidade? Aquarius, 2021. Disponível em: https://www.aquarius.com.br/atualizacao-preciosismo-ou-necessidade/. Acesso em: 8 set. 2021. CHIKOFSKY, E. Computer-Aided Software Engineering (CASE). Washington: IEEE Computer Society, 1993. FARIAS, A. C. Ferramentas CASE: suporte, adoção e integração. 2001. Monogra�a (Graduação em Engenharia de Software) – Universidade Federal de Pernambuco, Recife, 2001. Disponível em: https://www.cin.ufpe.br/~acf/publications/CASETools-report.pdf.gz. Acesso em: 13 set. 2021. GLASS, R. L. The Standish Report: Does It Really Describe a Software Crisis? Practical Programmer, Communications of the ACM, v. 49, n. 8, 2006. MARTINS, J. C.; TSCHANNERL, H. L. Testes de Software Aplicados à Orientação a Objetos. Bate Byte, 2021. Disponível em: http://www.batebyte.pr.gov.br/Pagina/Testes-de-Software-Aplicados-Orientacao-Objetos#. Acesso em: 13 set. 2021. PELOSO, V. Ferramentas CASE: implementação de um protótipo para manutenção de banco de dados. 2014. Monogra�a (Graduação em Engenharia de Comunicação) – Universidade São Francisco, Itatiba, 2014. RAMOS, D. P. Ambientes de desenvolvimento de software (ADS) e ferramentas CASE: importância e aplicações. 2011. Monogra�a (Especialização em Informática) – Universidade Federal de Minas Gerais, Belo Horizonte, 2011. REBÊLO, P. Windows 98: diferentes versões, instalações e problemas. UOL Tecnologia, 2008. Disponível em: https://tecnologia.uol.com.br/ultnot/2008/06/27/ult4213u457.jhtm. Acesso em: 13 set. 2021. SOMMERVILLE, I. Engenharia de Software. 8. ed. São Paulo, SP: Pearson Addison-Wesley, 2007. SOUZA, A. C. C. Uma contribuição à automatização da atividade de testes em realidade virtual. 2017. Tese (Doutorado em Ciências) – Universidade de São Paulo, São Carlos, 2017. TESTES automatizados e ferramentas de testes. Tecnisys, 2019. Disponível em: http://www.tecnisys.com.br/noticias/2019/testes-automatizados-e-ferramentas-de-testes. Acesso em: 8 set. 2021. VALENTIM, O. A. et al. Análise comparativa entre a implementação e atualização do sistema ERP R/3 da SAP considerando os fatores críticos de sucesso descritos na literatura: um estudo de caso em uma empresa do segmento de bebidas. Gest. Prod., São Carlos, v. 21, n. 1, p. 111-124, 2014. http://agilemanifesto.org/ https://imasters.com.br/desenvolvimento/automacao-de-testes-um-caso-de-sucesso https://www.aquarius.com.br/atualizacao-preciosismo-ou-necessidade/ https://www.cin.ufpe.br/~acf/publications/CASETools-report.pdf.gz http://www.batebyte.pr.gov.br/Pagina/Testes-de-Software-Aplicados-Orientacao-Objetos https://tecnologia.uol.com.br/ultnot/2008/06/27/ult4213u457.jhtm http://www.tecnisys.com.br/noticias/2019/testes-automatizados-e-ferramentas-de-testes Aula 3 CALE, E. G.; ERIKSEN, S. E. Factors A�ecting the Implementation Outcome of a Mainframe Software Package – A Longitudinal Study. Information & Management, v. 26, p. 165-175, 1994. DEBASTIANI, C. A. De�nindo Escopo em Projetos de Software. São Paulo, SP: Novatec Editora 2016. GESSER, C. E. Gerador de Analisadores Léxicos e Sintáticos. 2003. Trabalho de Conclusão de Curso (Graduação em Ciências da Computação) – Universidade Federal de Santa Catarina, Florianópolis, 2003. KURNIAWAN, Y. et al. Accounting Information Systems Implementation (A Case Study Approach). In: INTERNATIONAL CONFERENCE ON INFORMATION MANAGEMENT AND TECHNOLOGY, 2., 2017, Yogyakarta. Anais […]. Yogyakarta: ICIMTech, 2017. LIU, C. et al. Software Reliability Testing in Practice: An Industry Case Study with a Typical Airborne Software System. In: INTERNATIONAL CONFERENCE ON RELIABILITY, MAINTAINABILITY AND SAFETY, 10., 2014, Guangzhou. Anais […].Guangzhou: WASET, 2014. SBROCCO, J. H.; MACEDO, P. C. Metodologias Ágeis: Engenharia de Software sob Medida. São Paulo, SP: Érica, 2012. SCHACH, S. Engenharia de software: os paradigmas clássico e orientado a objetos. 7. ed. São Paulo, SP: McGraw-Hill, 2008. SEABRA, R. D.; DRUMMOND, I. N.; GOMES, F. C. Análise Comparativa de Linguagens de Programação a partir de Problemas Clássicos da Computação. Revista de Sistemas e Computação, Salvador, v. 8, n. 1, p. 56-76, 2018. SOMMERVILLE, I. Engenharia de software. 8. ed. São Paulo, SP: Addison Wesley, 2008. ZAPALOWSKI, V. Análise Quantitativa e Comparativa de Linguagens de Programação. 2011. Monogra�a (Graduação em Ciência da Computação) – Universidade Federal do Rio Grande do Sul, Porto Alegre, 2011. Aula 4 AMARAL, S.; PRETTO, N. L. Ética, hacker e a educação. Campinas, SP: FE/UNICAMP, 2009. LEMOS, A.; SEARA, S.; PÉRSIO, W. Hackers no Brasil. Revista Contracampo, n. 6, 2002. MCCLURE, S.; SCAMBRAY, J.; KURTZ, G. Hackers Expostos: segredos e soluções para a segurança de redes. Porto Alegre, RS: Grupo A, 2014. ROCHA, J. V. Hackers e suas características. Novo Hamburgo, RS: Universidade Feevale, 2016. SILVA, A. G.; MESQUITA, A. R. S.; PAIVA, C. E. Tecnologias e ferramentas para prevenção de ataques em redes de computadores. Revista EduFatec: educação, tecnologia e gestão, v. 1, n. 2, São Paulo, 2018. SILVA, B. As empresas estão seguras? Parece que não. Isto É Dinheiro, 2021. Disponível em: https://www.istoedinheiro.com.br/as-empresas-estao-seguras-parece-que-nao/. Acesso em: 1º out. 2021. SKOUDIS, E.; LISTON, T. Counter Hack Reloaded: a step-by-step guide to computer attacks and e�ective defenses. 2. ed. Londres: Pearson, 2005. ULBRICH, H. C.; DELLA VALLE, J. Universidade Hacker: desvendando todos os segredos do submundo dos hackers. 4. ed. São Paulo, SP: Digerati, 2004. https://www.istoedinheiro.com.br/as-empresas-estao-seguras-parece-que-nao/ Imprimir INTRODUÇÃO Estudante, qualidade e automação de testes é uma área em crescimento exponencial. Para dar continuidade aos conhecimentos dessa disciplina, faz-se necessário introduzir os conceitos a respeito dos métodos ágeis e algumas de suas ferramentas, para que você possa compreender melhor os aspectos por traz da testagem. Quando se fala a respeito dos testes, automaticamente, nos vem à mente “projeto de testes”. Dentro do projeto de um novo produto, para se ter sucesso, é crucial que uma boa parte do valor gasto seja investido na área de testes, pois eles possibilitam uma veri�cação do seu código, evitando erros, gargalos e, consequentemente, prejuízos. Nessa aula, espero que você obtenha os conhecimentos necessários para entender as características dos métodos ágeis e de duas metodologias associadas a eles, o BDD e TDD. Esses conhecimentos lhe auxiliarão muito, uma vez que essas metodologias são recorrentes no mundo da programação. Vamos aos estudos! CONCEITOS SOBRE MÉTODOS ÁGEIS Nesse bloco você aprenderá os conceitos relacionados aos métodos ágeis. O termo associado à metodologia ágil é autoexplicativo. Ele visa ao aumento da performance nas organizações. É um método para padronizar ações nas organizações, independentemente do tipo de mercado ou do seu potencial produtivo. Quanto mais rápido e com menor custo, melhor. Só que essa metodologia vai além, ela busca também a excelência, ou seja, a qualidade dentro desses processos. A metodologia ágil está muito voltada para equipes que buscamtrabalhar de maneira dinâmica, síncrona e e�ciente, tirando o máximo de seus membros para entregar a melhor performance em determinado projeto. Sendo assim, trabalhar projetos com métodos ágeis tende a trazer maiores resultados. Entretanto, cabe ressaltar que a tecnologia está em constante evolução, mesmo assim ainda existe bastante di�culdade na troca de informações e na comunicação quando o assunto é voltado aos projetos de softwares. Dentro de um projeto, a comunicação é crucial para o sucesso ou o fracasso de um produto. É comum existirem equipes que não conseguem se comunicar bem, devido aos seus diferentes níveis de conhecimentos de programação, suas características e seus objetivos dentro do projeto. Tem-se, no mesmo grupo de pessoas, o desenvolvedor, que faz o desenvolvimento da aplicação, tendo acesso à classe, aos métodos. Independentemente da linguagem com a qual esteja trabalhando, ele tem acesso direto ao código; os testers, que são voltados essencialmente para testar, sejam testes funcionais, de usabilidade ou de performance. Eles focam nos testes em si, distanciando-se da equipe de desenvolvimento; o QA, que é um pro�ssional responsável pela qualidade do produto, coordenando o planejamento, a estrutura e a fabricação; outro stakeholder (parte interessada) nesses projetos é o P.O, que é, basicamente, o dono do produto (WILDT et al., 2015; COHN, 2004). Você observou que existem inúmeros pro�ssionais diferentes, preocupados com áreas distintas dentro de um mesmo projeto, e todos eles podem testar o produto de alguma forma. É aí que se encontra o problema, pois não se pode arriscar todo o trabalho do projeto escrevendo códigos que não serão entendidos por todos os membros da equipe. Por exemplo: o desenvolvedor, que, em geral, é mais técnico, não pode correr o risco de que o dono do produto ou o responsável pela qualidade não consiga entender seu código. A equipe precisa estar funcionando em sinergia. Em uma pesquisa empírica realizada por Koch e Oliveira (2010), os dados coletados a partir de entrevistas deram a entender que, mesmo que todos os membros de uma equipe de projetos utilizem determinada linguagem de programação, o maior risco levantado foi relacionado à di�culdade de comunicação dentro da equipe. Aula 1 MÉTODOS ÁGEIS: O BDD E O TDD Compreender o BDD (Desenvolvimento Orientado por Comportamento) e o TDD (Desenvolvimento Orientado a Testes), bem como as vantagens e desvantagens de aplicar. 30 minutos Foi diante dessa di�culdade que surgiram metodologias para lidar com esses problemas de comunicação, como o BDD (Behavior Driven Development, ou Desenvolvimento Orientado ao Comportamento, em português) e o TDD (Test Driven Development, ou Desenvolvimento Guiado por Testes, em português). Você saberá mais sobre essas duas metodologias a partir do próximo bloco. VIDEOAULA: CONCEITOS SOBRE MÉTODOS ÁGEIS Caro aluno, nesse bloco, entenderemos a demanda do mercado competitivo em relação à área de programação, além da in�uência das equipes de métodos ágeis no aumento da performance nos projetos de desenvolvimento de softwares. DEFINIÇÃO E UTILIZAÇÃO DE BDD Caro aluno, nesse bloco, falaremos sobre BDD, sua de�nição e utilização. Como vimos no bloco de conceitos sobre métodos ágeis, um dos grandes problemas associado às equipes de projetos é a comunicação. O BDD surge como uma possibilidade de solucionar tal problema. Usando uma linguagem mais comum, essa metodologia busca facilitar a comunicação, principalmente quando falamos sobre equipes ágeis, nas quais existem diversos pro�ssionais com diferentes características trabalhando no mesmo projeto. Observando a di�culdade dos desenvolvedores em se comunicaram com leigos a respeito do funcionamento dos códigos, Dan North viu a possibilidade de resolver esse gargalo. Em 2003, ele deu origem ao Behavior Driven Development, o BDD, que em português signi�ca Desenvolvimento Guiado por Comportamento. Atualmente, esse é um dos métodos mais utilizados em equipes de desenvolvimento ágil para softwares. Tal técnica pode ser entendida como uma continuação ou mesmo um avanço da técnica conhecida como Test Driven Development, o TDD, que em português signi�ca Desenvolvimento Guiado por Testes (veremos mais sobre o TDD no próximo bloco). O BDD tem como prioridade criar sinergia entre os diversos membros dentro das equipes de projetos ágeis, reduzindo as possíveis interpretações errôneas e as falhas originadas dessa má comunicação, especi�cando regras de negócios enquanto as associa com linguagem de programação (NORTH, 2006). Sendo assim, o BDD pode ser considerado uma prática de desenvolvimento ágil, uma vez que busca a integração entre os negócios e a programação, e essa união é a principal característica das equipes de projetos ágeis. Ao invés de impor restrições técnicas e individualizadas, o BDD incentiva a colaboração dentro da equipe de projeto de softwares, facilitando a comunicação, inclusive com o próprio cliente, já que esse é o principal interessado no resultado �nal do projeto. Soares (2011) destaca que essa prática pode ser de�nida como a junção de diversas práticas ágeis na formulação de softwares, com foco na linguagem e nas conexões usadas no período do processo de desenvolvimento, permitindo uma melhor comunicação entre o desenvolvedor e a equipe, uma vez que se utiliza uma linguagem de visão uni�cada e compartilhada entre a equipe envolvida no desenvolvimento do projeto. North (2012) a�rma que o BDD é uma espécie de TDD, entretanto mais democrático, visando ser entendido por uma gama maior de pessoas, como os donos do produto, os testadores, os QA, os gerentes e outros membros das equipes de projetos. O BDD pode ser considerado uma comunicação-chave entre os stakeholders, criando uma comunicação limpa e e�ciente, voltada para o projeto. Caro aluno, já deu para perceber a importância do BDD no sucesso das equipes de projetos ágeis. A comunicação é um fator-chave em todos os negócios, e na programação não é diferente. Os códigos são importantes, mas ter a possibilidade de interpretá-los, deixando-os mais acessíveis para os diferentes pro�ssionais, é o que torna o BDD especial, mas ele não seria possível sem o chamado TDD, assunto que introduziremos no próximo bloco. Vamos aos estudos! VIDEOAULA: DEFINIÇÃO E UTILIZAÇÃO DE BDD Caro aluno, nesse bloco, veremos um pouco mais sobre o desempenho das equipes de projetos ágeis e o empecilho da comunicação dentro dos processos de desenvolvimento de softwares. Abordaremos o BDD e a sua importância para democratizar a linguagem de programação dentro das equipes de projetos ágeis, facilitando os processos e aumentando a performance. Videoaula: Conceitos sobre métodos ágeis Para visualizar o objeto, acesse seu material digital. PRINCÍPIOS DE TDD E UTILIZAÇÃO Caro aluno, nos blocos passados, vimos a importância dos métodos ágeis e o uso do BDD como prática para facilitar a comunicação em equipes ágeis. Nesse bloco, conheceremos um pouco mais sobre o TDD, prática muito utilizada e que antecede o BDD. É importante que você entenda que projetos ágeis voltados para desenvolvimento de software sofreram alterações com o passar dos anos, sempre se transformando em busca de atender às demandas do mercado consumidor. Nesse quesito, a programação não se desvincula dos outros mercados, ela tem por objetivo atender à demanda dos clientes. E, como nos outros nichos de mercado, faz-se necessário também o alto rendimento das equipes, trabalhando em menor tempo, com maior performance e mantendo o controle da qualidade, evitando ao máximo as falhas. Diante dessas cobranças, o mercado de desenvolvimento de softwares foi se adaptando, adotando metodologias ágeis e o gerenciamento dos seus projetos, desenvolvendo parâmetros de performance e padronizando sua escrita de códigos. Mesmo assim, as falhas permanecem, e o tempo de testagem ainda é um grande gargalo nos projetos de desenvolvimento de softwares. Para tentar mitigaressas falhas e utilizar o tempo de testagem de maneira otimizada, surgiu o TDD. O chamado Test Driven Development, ou Desenvolvimento Guiado por Testes, é uma das práticas de desenvolvimento utilizado por equipes de projetos ágeis. O nome dessa metodologia é autoexplicativo, uma vez que ela utiliza testes automatizados para dar suporte aos desenvolvedores ainda nas fases iniciais do desenvolvimento de software. O fato de o desenvolvimento se basear nos testes pode parecer um pouco estranho à primeira vista, mas �que tranquilo, pois esse estranhamento é comum até mesmo entre os desenvolvedores. É comum também se questionar o fato de que nesse método se pensa no teste primeiro e, depois, no desenvolvimento, uma vez que a cultura de desenvolvimento costuma ter como base o desenvolvimento primeiro e, depois, os testes. Todavia, existe um motivo para escrever os testes antes mesmo de se iniciar a escrita dos códigos: os desenvolvedores se asseguram que uma parte considerável do seu sistema possua um teste que valide seu funcionamento (ANICHE, 2014). O TDD se diferencia a partir do ponto em que auxilia a focalizar os problemas certos na hora certa, fazendo com que o projeto de produto permaneça o mais limpo possível e com uma quantidade de falhas consideravelmente menor. Usar o TDD, ou seja, escrever o teste antes do código, incentiva o uso da escrita de códigos de maneira simples, passando mais con�ança, melhorando sua compreensão e possibilitando a automação dos testes, uma vez que foram estabelecidos antes do código, e o desenvolvedor estará preparado para possíveis falhas, evitando surpresas desagradáveis, como falhas gerais ao �nal do projeto (BECK, 2002). Na aula “Estudando mais profundamente o TDD”, você entenderá melhor sobre o desenvolvimento e o ciclo do TDD. Bons estudos! VIDEOAULA: PRINCÍPIOS DE TDD E UTILIZAÇÃO Caro aluno, nesse bloco, veremos como o tempo gasto em testes in�uencia na entrega �nal de um projeto de desenvolvimento de software. Os testes tomam muito tempo e, mesmo assim, inúmeros projetos sofrem falhas e têm seu resultado �nal bem aquém daquilo que foi desejado pelo consumidor �nal. ESTUDO DE CASO O mercado competitivo in�ige cobranças cada vez mais rígidas para a área da programação. Com o passar do tempo, os métodos ágeis foram sendo aprimorados para atender a essas demandas. Equipes de projetos ágeis envolvem pro�ssionais diferentes, cada um com suas funções e particularidades dentro do projeto. Você foi contratado por uma organização para liderar uma equipe que visa projetar um software que facilite a tomada de decisão relacionada à compra e venda de ações no mercado �nanceiro. Esse software tem que avaliar o histórico das ações e indicar os melhores investimentos baseados em parâmetros pré-estabelecidos. Videoaula: De�nição e utilização de BDD Para visualizar o objeto, acesse seu material digital. Videoaula: Princípios de TDD e utilização Para visualizar o objeto, acesse seu material digital. Sua equipe está enfrentando um problema de comunicação, o desenvolvedor é excelente, entretanto os outros membros possuem di�culdades em entender seus códigos, e você acaba não conseguindo explicar para o cliente as particularidades na evolução do projeto. Diante disso, quais as possibilidades, enquanto gerente do projeto, que você enxerga que possam ser tomadas para facilitar o processo comunicativo da sua equipe e atingir o máximo de resultado no projeto desse software? RESOLUÇÃO DO ESTUDO DE CASO Problemas, em sua maioria, não possuem verdades absolutas, mas, com base na aula “Métodos ágeis: o BDD e o TDD”, é possível indicar soluções pertinentes para o acontecido nesse estudo de caso. A primeira coisa que você precisa entender é se o problema de fato é o entendimento dos códigos em relação ao programador. Mesmo o estudo de caso indicando que esse seja o caso, a vida real sempre exibe complexidade, e avaliar o cenário e as possibilidades é seu dever. Dito isso, busque soluções baseadas no Desenvolvimento Orientado por Comportamento, uma vez que ele usa uma linguagem mais simples e voltada para a adaptação dos negócios à programação. É importante que você explique ao desenvolvedor que, por mais que seus códigos sejam excelentes, vocês estão lidando com um mercado competitivo e necessitam se adaptar às demandas que só uma equipe em sinergia conseguirá atender. Saiba mais Uma boa dica para entender melhor o contexto dos métodos ágeis é um livro que está presente na sua biblioteca virtual: Métodos Ágeis para Desenvolvimento de Software. Acesse através do link a seguir: https://integrada.minhabiblioteca.com.br/reader/books/9788582602089/pageid/106. Acesso em: 11 mar. 2022. Resolução do Estudo de Caso Para visualizar o objeto, acesse seu material digital. INTRODUÇÃO Caro aluno, nessa aula, você aprofundará seu conhecimento a respeito do BDD, o Desenvolvimento Orientado por Comportamento. Você verá tanto a forma como se desenvolve o BDD, seu ciclo e a importância do brainstorming como ferramenta de aprimoramento dessa metodologia. Você já viu anteriormente que a qualidade e automação de testes é uma área com grande potencial de crescimento no mercado competitivo. Para se entregar um produto de qualidade e dentro das características solicitadas pelo cliente, é necessário realizar testes e manter os padrões de qualidade. O BDD é uma ferramenta que pode auxiliar neste quesito, principalmente por atacar um ponto crucial, que é gargalo nas equipes de desenvolvimento de software: a comunicação. Então, vamos aos estudos para entender um pouco mais sobre o BDD. DESENVOLVIMENTO GUIADO POR BDD Aula 2 ESTUDANDO MAIS PROFUNDAMENTE O BDD Para se entregar um produto de qualidade e dentro das características solicitadas pelo cliente, é necessário realizar testes e manter os padrões de qualidade. 30 minutos https://integrada.minhabiblioteca.com.br/reader/books/9788582602089/pageid/106 Caro aluno, nesse bloco, falaremos de maneira mais aprofundada a respeito do Behavior Driven Development, ou Desenvolvimento Guiado por Comportamento, o BDD. Como você se lembra, ele surge como uma possibilidade de acertar um gargalo recorrente nas equipes de desenvolvimento de softwares, que é a comunicação, fazendo uso de uma linguagem mais comum, que possa ser entendida por todas as partes interessadas do projeto, e aliando as regras de negócios à linguagem de programação. O BDD funciona focado no entendimento do requisito do projeto, auxiliando as partes interessadas a inferir esforço em pontos considerados críticos no projeto, como a identi�cação e a compreensão do contexto por trás dos usuários, com uma visão intensa sobre a comunicação (SMART, 2014). Essa metodologia incentiva a participação de todos os envolvidos no projeto, sejam eles desenvolvedores, analistas de negócios, testers, o dono do produto (P.O) e as demais áreas técnicas e não técnicas. O BDD surgiu como uma tentativa de aperfeiçoar o TDD, deslocando-se um pouco dos conceitos de teste, uma vez que muitos desenvolvedores não gostavam de realizar testes antes de desenvolver os códigos. Com isso, Dan North, percursor do BDD, empregou seu esforço para trabalhar com frameworks que removessem as referências dos códigos a testes, modi�cando o vocabulário a partir do contexto de “comportamento” (NORTH, 2006). Sanchez (2006) mostra alguns exemplos desse novo vocabulário, como o uso de Context ao invés de TestCase; Should ao invés de Assert; Speci�cation ao invés de Test. O BDD não visa anular o TDD, pelo contrário, seu intuito é adicionar a ele um conjunto de benefícios, incluindo: uma melhor comunicação entre os times de desenvolvimento, uma vez que, na grande parte das empresas, as equipes possuem di�culdade de comunicação; divisão de conhecimento, compartilhando informações e criando sinergia dentro de uma equipe multifuncional; documentação dinâmica, uma vez que os frameworks de BDD possibilitam a geração de documentação de maneira mais prática,evitando esforços secundários; uma visão holística, sugerindo que tanto os analistas como os testadores escrevam uma base, um cenário, antecipadamente ao desenvolvimento dos códigos em si, tornando possível que eles tenham um panorama geral das características solicitadas para o projeto (NORTH, 2006). Enquanto o TDD se concentra em envolver o design do código, o BDD se estabelece a partir do comportamento do sistema. Assim, enquanto o BDD cria um cenário, o TDD realiza as funcionalidades da programação dentro deste cenário. North (2006) ainda destaca que o BDD pode extrair as características solicitadas pelo cliente durante o levantamento dos requisitos do projeto. Tal aspecto facilita a comunicação e o entendimento da equipe. Dito isso, no próximo bloco, falaremos da criação de diferentes cenários para testagem de programas através do BDD. Foco nos estudos! VIDEOAULA: DESENVOLVIMENTO GUIADO POR BDD Caro aluno, nesse bloco, você aprenderá algumas características mais aprofundadas a respeito do BDD. Entenderá os motivos da facilidade da comunicação e o uso de cenários baseados em comportamento e como ele associa as regras dos negócios à linguagem de programação. CICLO DO BDD – CRIAÇÃO DE DIFERENTES CENÁRIOS PARA TESTAGEM DO PROGRAMA Caro aluno, nesse bloco, daremos continuidade ao nosso processo de aprendizado, aprofundando nossos conhecimentos a respeito do BDD, entendendo a criação de diferentes cenários para testagem de programas. O BDD tem por característica uma visão voltada para a linguagem e as interações decorrentes do desenvolvimento dos softwares. As equipes aproveitam esse aspecto, uma vez que, durante o desenvolvimento dos códigos, o uso dessa técnica permite uma comunicação mais e�ciente entre as equipes no projeto, porque, a partir dela, os desenvolvedores escrevem testes a partir de uma linguagem estruturada em combinação com sua linguagem nativa (SMART, 2014). Existem três princípios que norteiam a utilização da prática BDD: • Nada além do su�ciente: não se deve realizar menos do que o necessário para obter as especi�cações estabelecidas, entretanto realizar mais do que o necessário pode ser um esforço que gera desgaste sem sentido para a equipe. • Entregar valor às partes interessadas: se a ação que você estiver realizando não agrega valor para a equipe ou para o produto, pare de realizá-la imediatamente. Videoaula: Desenvolvimento guiado por BDD Para visualizar o objeto, acesse seu material digital. • Tudo deve se basear em comportamento: do código às especi�cações para aplicá-lo, tudo deve ser realizado a partir da mesma linguística, para descrever comportamento. Ademais, como dito no bloco anterior, não conseguimos destacar as características do BDD sem citar o TDD. É necessário destacar o papel do TDD ao in�uenciar o BDD, descrevendo suas proximidades e diferenças. Então, enquanto o TDD se concentra em envolver o design do código, o BDD se estabelece a partir do comportamento do sistema. Assim, enquanto este cria um cenário, aquele realiza as funcionalidades da programação dentro deste cenário. North (2006) destaca que o BDD pode extrair as características solicitadas pelo cliente durante o levantamento dos requisitos do projeto. Essa prática se baseia no uso de cenários utilizados para registrar os comportamentos que são esperados de determinado software, fazendo com que seja possível automatizar esses cenários para dar validade a algum comportamento. Tal aspecto facilita a comunicação e o entendimento da equipe. Ele ainda ressalta que não se pode utilizar um template arti�cial, ao ponto de gerar restrições aos analistas, nem engessado demais, ao ponto de não atender às expectativas do cliente. Tem de existir um equilíbrio, dando estrutura su�ciente para fragmentar a história e automatizar as partes. Sendo assim, estabeleceram-se critérios de aceitação para os cenários: Given (Dado), referente a algum contexto inicial, representando uma pessoa ou um papel a ser desempenhado; When (Quando), referente a quando algum evento acontecer, alguma funcionalidade; Then (Então), quando se veri�ca, para gerar benefício ou valor à funcionalidade, assegurando os resultados. Dessa maneira, em Given (dado) serão determinados todos os requisitos precisos antes, para que, When (quando) o fenômeno ocorrer, Then (então) se veri�ca o resultado (NORTH, 2006; COHN, 2004). Destacadas as características dos cenários, no próximo bloco, conheceremos uma importante ferramenta usada junto à prática BDD, o brainstorming. Vamos aos estudos? VIDEOAULA: CICLO DO BDD – CRIAÇÃO DE DIFERENTES CENÁRIOS PARA TESTAGEM DO PROGRAMA Caro aluno, nesse bloco, você aprenderá mais sobre a criação de diferentes cenários para testagem no BDD, entendendo os princípios que norteiam essa prática e identi�cando características voltadas ao comportamento e os possíveis resultados dessa prática. A IMPORTÂNCIA DO BRAINSTORMING E O BDD Caro aluno, destacamos algumas vezes a importância da comunicação dentro das equipes de desenvolvimento de softwares e como o BDD possibilita essa facilidade através do seu modo de operação por cenários a partir de uma linguagem que associa a regra dos negócios à linguagem de programação. Nesse bloco, conheceremos o brainstorming (tempestade de ideais), a sua importância e sua associação com o BDD. A tempestade de ideias pode ser entendida como um processo realizado por um grupo de indivíduos, no nosso caso, dentro das equipes de desenvolvimento de softwares. A ferramenta consiste na perspectiva de captar ideias dos indivíduos participantes. Essas ideias podem ser concebidas de forma livre, sem nenhuma crítica, e o mais rápido possível. Para que funcione bem, a equipe deve possuir de cinco a doze membros, e recomenda-se que a participação seja por vontade própria, com regras bem de�nidas e dentro de um prazo estabelecido. É interessante o uso de facilitadores, membros que sejam treinados para lidar com a equipe (MARSHALL JUNIOR et al., 2015). O brainstorming tem como objetivo gerar e detalhar ideias com um determinado foco. No caso das esquipes de desenvolvimento de softwares, em geral, é lidar com os requisitos solicitados pelo cliente. Além disso, as ideias precisam ser originais e em um ambiente sem inibições. Dentro dessa prática, busca-se a diversidade nas ideias diante de um momento de criatividade em grupo (MARSHALL JUNIOR et al., 2015). Essa ferramenta pode contribuir muito para o desenvolvimento de equipes ágeis, facilitando ainda mais a comunicação e potencializando os resultados do uso do BDD. Ainda segundo Marshall Junior et al. (2015), essa ferramenta possui algumas características importantes, são elas: capacidade de autoexpressão, desfazendo-se de inibições e preconceitos vindos da equipe e da própria pessoa; liberação da criatividade; capacidade de conviver com diferenças; ausência de julgamento Videoaula: Ciclo do BDD – Criação de diferentes cenários para testagem do programa Para visualizar o objeto, acesse seu material digital. prévio; registro de ideias; capacidade de síntese; delimitação de tempo; ausência de hierarquia (durante o processo). Ademais, o autor ainda caracteriza três fases típicas relacionadas à prática da tempestade de ideias: 1. Objetividade na apresentação do tema. 2. Documentação das ideias após serem geradas. 3. Analisar e selecionar as ideias. Ainda cabe destacar uma variação do brainstorming que é o brainwriting, conhecido como brainstorming fechado. Nessa prática, existe uma diferença central, as ideias e opiniões apresentadas são feitas por escrito, sem exposição oral na parte de exposição das ideias. Essa ação é realizada com o intuito de reduzir a chance de ocorrerem críticas ou inibições sobre a fala dos membros da equipe. Todo o restante das etapas se assemelha bastante à tempestade de ideias tradicional. O uso dessa técnica potencializa ainda mais as características comunicativas do BDD, criando mais interação entre as diversas partes interessadasda equipe do projeto. Essa prática pode ser utilizada para discutir especi�cações do cliente, propor soluções para problemas com códigos, montagem de cenários e interpretação de aspectos comerciais. Todas as nuances podem e devem ser utilizadas pelas equipes ágeis na busca de otimizar sua performance. VIDEOAULA: A IMPORTÂNCIA DO BRAINSTORMING E O BDD Caro aluno, nesse bloco, você aprenderá sobre o uso da tempestade de ideias, suas principais características, regras e utilidade. Além disso, você entenderá de que maneira o uso dessa técnica pode aperfeiçoar e otimizar os resultados do Desenvolvimento Orientado por Comportamento, o BDD. ESTUDO DE CASO Você é o desenvolvedor de uma empresa de programação e foi indicado para fazer parte de uma equipe ágil de desenvolvimento de software em um projeto para um dos principais clientes da sua organização. É uma oportunidade ímpar na sua carreira, uma vez que trabalhará com excelentes pro�ssionais e em um projeto grande, que gerará bastante valor ao seu portfólio. Ao se reunir com a equipe e receber a solicitação do cliente (que está na reunião), você percebeu que existe uma di�culdade na comunicação, uma vez que está difícil entender as especi�cações do cliente, assim como a dinâmica do grupo está abalada. Mesmo a equipe possuindo excelentes pro�ssionais, o ruído na comunicação está tornando o início do projeto bastante con�ituoso, gerando atrasos e, consequentemente, prejuízo. Ao se deparar com essa situação, o gerente de projetos pediu ajuda e perguntou se alguém enxerga alguma saída para a continuidade do projeto. Essa é a sua oportunidade! Qual proposta você sugeriria ao gerente de projetos para lidar com essa situação? RESOLUÇÃO DO ESTUDO DE CASO Caro aluno, usando os conhecimentos adquiridos nessa aula, tome a frente e responda ao gestor de projetos. Primeiro, sugira o uso do BDD como prática para programar. Como você é o desenvolvedor, o fato de querer simpli�car o código e o deixar acessível ao entendimento de todos será visto com bom tom pela equipe. Depois, sugira realizar uma tempestade de ideias com a participação do cliente, para que vocês consigam entender melhor as perspectivas e as possibilidades, a �m de solucionar as questões envolvidas nas características do produto solicitado. Com essas duas ações, uma potencializará a outra e, assim, a comunicação e a sinergia entre a equipe evoluirão. Videoaula: A importância do brainstorming e o BDD Para visualizar o objeto, acesse seu material digital. Resolução do Estudo de Caso Para visualizar o objeto, acesse seu material digital. Saiba mais Deixo como indicação o livro Treinamento de equipes ágeis, que pode ser acessado na sua biblioteca virtual a partir do link: https://integrada.minhabiblioteca.com.br/reader/books/9786555206340/pageid/0. Acesso em: 11 mar. 2022 INTRODUÇÃO Caro aluno, nessa aula, aprofundaremos nossos estudos a respeito do Test-Driven Development, ou Desenvolvimento Orientado a Testes (TDD). A atualidade trouxe grandes transformações em busca de atender de maneira mais e�ciente às solicitações dos clientes com demandas por softwares. Parte disso, traz de maneira ainda mais forte a necessidade da qualidade e automação dos testes, uma vez que a otimização na programação também segue as premissas do mercado competitivo tradicional. Entregar o máximo no menor tempo possível, com o menor custo, e eliminar as falhas, mantendo o mais alto nível de qualidade. Nessa aula, você conhecerá mais profundamente essa metodologia que coloca o teste como prioridade na busca pela redução das falhas. DESENVOLVIMENTO GUIADO POR TDD Caro aluno, a área de desenvolvimento de software está em crescimento constante e, assim como as demais áreas do mercado, as equipes que trabalham com programação também precisam ser competitivas. Ser competitivo passa por otimizar os processos, realizando as etapas no menor tempo possível, com o menor custo, evitando falhas e mantendo a qualidade no máximo. As equipes responsáveis por projetos de desenvolvimento de software estão sempre se atualizando para manter essa competitividade. Entretanto, um grande gargalo nesse modelo de mercado é a testagem, que consome muito tempo e, mesmo assim, boa parte dos projetos �ca abaixo das expectativas dos clientes e gera muitas falhas. Você, na aula “Métodos ágeis: o BDD e o TDD”, aprendeu que o Test-Driven Development, ou Desenvolvimento Orientado por Testes (TDD) surge como possibilidade de mitigar esse gargalo, colocando os testes como prioridade no projeto. Como você já sabe um pouco sobre o TDD, nós, agora, entenderemos um pouco mais a respeito de suas características e de seu funcionamento. Essa metodologia se baseia nos testes. A escrita do teste é realizada antes mesmo da própria escrita do código. Isso faz com os desenvolvedores se assegurem de que uma parte considerável do seu sistema possua um teste para validar sua operação (ANICHE, 2014). Beck (2003) destaca que o TDD deixa os projetos de software mais limpos, à medida que ele direciona o projeto indicando os problemas na hora certa, e isso reduz a quantidade de falhas no projeto. Ele ainda a�rma que esse método encoraja a simpli�cação dos códigos, e que códigos simples inspiram maior con�ança. No desenvolvimento do TDD, a implementação do código só vem depois da realização da escrita dos testes. Cria-se o teste primeiro, e o programador precisa compreender o problema para que possa realizar os testes. A partir dessa ótica, evita-se que o desenvolver acabe retardando a compreensão do problema e tenha como resultado códigos mais �dedignos às especi�cações do cliente. Outra característica importante é que os testes cobrem o sistema como um todo, uma vez que são feitos antes de o sistema estar pronto, permitindo que o programador analise diversas possibilidades antes de escrever o código, criando um software totalmente testado. Outras características do desenvolvimento do TDD são o maior controle frente a mudanças, já que os Aula 3 ESTUDANDO MAIS PROFUNDAMENTE O TDD Nessa aula, você conhecerá mais profundamente essa metodologia que coloca o teste como prioridade na busca pela redução das falhas. 26 minutos https://integrada.minhabiblioteca.com.br/reader/books/9786555206340/pageid/0 testes automatizados previnem os possíveis bugs com possíveis modi�cações no código, e maior con�abilidade no resultado do projeto, por entregar um produto altamente testado (BECK, 2003; ANICHE, 2014). Caro aluno, destacado o desenvolvimento do TDD, cabe ressaltar um aspecto importante em relação ao ciclo do TDD e seu funcionamento, que é assunto do nosso próximo bloco: testar, falhar, aperfeiçoar o programa e refatorar. Vamos lá? VIDEOAULA: DESENVOLVIMENTO GUIADO POR TDD Caro aluno, nesse bloco, falaremos sobre o desenvolvimento guiado pelo TDD, entendendo seus principais aspectos, métodos e vantagens. Aproveitaremos para destacar algumas preocupações com esse método, como uma certa resistência cultural por parte dos desenvolvedores. Além disso, você também verá as principais características e funcionalidades do TDD. CICLO DO TDD – O QUE É O CICLO DO TDD, TESTAR, FALHAR, APERFEIÇOAR O PROGRAMA E REFATORAR Caro aluno, nesse bloco, veremos mais sobre o que é o ciclo do TDD, testar, falhar, aperfeiçoar o programa e refatorar. A técnica do TDD se concentra em um ciclo curto de ações chamado de Red, Green, Refactor, ou vermelho, verde, refatorar, em português. Tal ciclo deve ser seguido quando se inicia a programação do projeto a partir do Desenvolvimento Orientado a Testes (TDD). O vermelho quer dizer que o teste deve ser escrito de uma forma que falhe. A escrita se inicia por um teste que falhará, obviamente por não existir um código escrito ainda. O verde vem após a escrita do código, que passa (é validado) ao ser testado; a refatoração é a etapa que otimiza tanto o código quanto o teste, visando simpli�car e padronizar os processos de escrita. Você deve ter percebido que esse ciclo temcerta familiaridade com o de melhoria contínua, muito conhecido na área da gestão da qualidade. E realmente existe tal semelhança, uma vez que o TDD busca melhorar continuamente o desenvolvimento do projeto, evitando falhas e otimizando os códigos. Nesse ciclo, é possível perceber que o TDD prioriza os testes automatizados, optando por deixar a codi�cação para depois, e sempre refatorando quando for necessário, em busca da simplicidade e otimização. A Figura 1 exempli�ca o ciclo, o qual, apesar da simplicidade, possui uma lógica extremamente otimizada. Figura 1 – Ciclo do TDD Fonte: elaborada pelo autor. Conforme destacado na Figura 1, o ciclo do TDD segue uma ordem em busca de um código limpo. Entretanto, Beck (2003) salienta que muitos obstáculos podem impedir que o programador faça um código limpo ou mesmo um código que funcione corretamente. Sendo assim, ele destaca duas regras, que são simples, mas in�uenciam nesse aspecto. A primeira é escrever um código novo apenas quando um teste automatizado for falho, e a segunda é sempre eliminar um código duplicado. Essas duas regras implicam a ordem estabelecida na Figura 1: • Vermelho: escrever um teste simples que falhe e que não complique o início. • Verde: fazer o teste funcionar de forma rápida, entretanto escrevendo o su�ciente para que isso ocorra. • Refatorar: excluir os códigos duplicados, criado apenas para fazer o teste funcionar. Esse ciclo ainda pode ser desmembrado em subfases. Videoaula: Desenvolvimento guiado por TDD Para visualizar o objeto, acesse seu material digital. No vermelho: 1. Escreva o teste. 2. Veja o teste falhar. No verde: 1. Escreva o código. 2. Veja o teste passar. No refatore: 1. Refatore o código. 2. Implemente o código. Todas essas fases, obtidas através do desenvolvimento orientado por testes, possibilitarão a entrega de um código limpo, otimizado e o mais próximo possível das especi�cações do produto. Dito isso, destacaremos um pouco mais a fase de fatoração, que é o tema do próximo bloco. VIDEOAULA: CICLO DO TDD – O QUE É O CICLO DO TDD, TESTAR, FALHAR, APERFEIÇOAR O PROGRAMA E REFATORAR Caro aluno, nesse bloco, você entenderá mais sobre o ciclo do TDD: o vermelho, verde e refatore, que se baseia na lógica de testar, falhar e aperfeiçoar o programa. Você verá as principais características desse teste e os cuidados a serem tomados na sua aplicação. A REFATORAÇÃO DO CÓDIGO DE PRODUÇÃO E O TDD Caro aluno, no bloco passado, você entendeu o ciclo que rege o Desenvolvimento Orientado por Testes, suas fases e funções. Nesse bloco, vamos nos atentar um pouco mais à fase �nal do ciclo vermelho, verde e refatorar. Destacaremos as características e os procedimentos relacionados à fase de fatoração, além das vantagens relacionadas a esse ciclo no TDD. Antes de mergulhamos na fatoração, cabe destacar algumas vantagens relacionadas a esse ciclo (ANICHE, 2014): 1. O foco está no teste, e não na implementação. Quando o desenvolvimento começa a partir do teste, o programador se concentra apenas na função da classe, o que o ajuda a entender melhor o contexto dos cenários de teste. 2. O código já nasce testado. Se o programador realizar o ciclo de forma correta, a consequência será que todo o código escrito terá, no mínimo, um código escrito que valide seu funcionamento. 3. Simplicidade. Às vezes, menos é mais. A constante busca por um código mais simples faz com que o programador deixe de lado soluções desnecessárias, que estão presentes em diversos sistemas. 4. Melhor re�exão sobre o design de classe. Um dos grandes problemas dos modelos tradicionais, nos quais os testes são escritos posteriormente, é a falta de sinergia ou o excesso de acoplamento, muito em função da preocupação uni�cada na ideia de implementação, deixando de lado como a classe deve se comportar com as outras. Quando se inicia pelo teste, organizam-se melhor os parâmetros, aumentando a qualidade do design das classes. Diante dessas vantagens, cabe ressaltar, em especial, uma das características que tem sua posição de destaque no clico dessa metodologia: a fase de refatoração do código. Nela, o desenvolvedor tem a preocupação de otimizar a escrita e o teste, deixando ambos o mais simples possível, excluindo a duplicação de código e padronizando as características e os parâmetros estabelecidos. A partir dessas ações estabelecidas no refatoramento, o código �ca mais fácil de ser compreendido, mantido ou mudado, tendo como resultado uma redução no acoplamento e a preparação para execução de futuras funcionalidades (BECK, 2003). Videoaula: Ciclo do TDD – O que é o ciclo do TDD, testar, falhar, aperfeiçoar o programa e refatorar Para visualizar o objeto, acesse seu material digital. Entretanto, é sempre bom ressaltar que, no refatoramento do código, é importante que o responsável pelo desenvolvimento cheque se a refatoração causou alguma falha nas funcionalidades já existentes no sistema, levando sempre em consideração os testes a partir de cada mudança realizada, para se ter certeza de que o sistema não sofreu modi�cações de forma incorreta. Dessa maneira, o código evoluirá gradativamente. De acordo com a interpretação do problema, ele se adaptará e se tornará mais robusto. Quando os cenários de teste forem feitos em seu total, o processo se encerra. Quanto mais feedbacks o responsável pelo desenvolvimento do projeto receber, maior será a qualidade do código, reduzindo os custos para consertar possíveis defeitos (ANICHE, 2014; BECK, 2003). VIDEOAULA: A REFATORAÇÃO DO CÓDIGO DE PRODUÇÃO E O TDD Caro aluno, nesse bloco, você verá a refatoração do código de produção e a sua função dentro do Desenvolvimento Orientado por Testes e entenderá o que representa esse terceiro item no ciclo Vermelho, Verde, Refatore. Essa etapa tem um lugar especial no ciclo e ajuda na manutenção e padronização do código. ESTUDO DE CASO Caro aluno, dentro das equipes ágeis focadas em desenvolvimento de softwares, é comum ver resultados muito abaixo das expectativas dos clientes. Parte dos projetos entregues tem seu tempo gasto na busca por soluções de falhas e bugs que surgiram no meio do processo produtivo, fazendo com que o produto não alcance as especi�cações do cliente, perdendo tempo e dinheiro tentando solucionar problemas em códigos complexos e, por vezes, desnecessários. Você foi contratado para tentar mudar o panorama de uma equipe que está passando por esses problemas. Quais as suas indicações para solucionar tal acontecimento? RESOLUÇÃO DO ESTUDO DE CASO Caro aluno, o primeiro passo, em toda resolução de problema, é analisar o contexto. De acordo com o problema, essa equipe usa códigos complexos e, por vezes, desnecessários. Nessa aula, você observou que isso é justamente o contrário do que o método TDD prega, e foi justamente o motivo para o início de seu uso. Use seus conhecimentos adquiridos em aula para propor o uso da metodologia TDD. Seja �rme em relação aos benefícios e às possibilidades de soluções dos problemas através do uso do ciclo Vermelho, Verde, Refatore. Existe certa resistência cultural ao uso do TDD, uma vez que ele inverte a lógica implementada por grande parte dos programadores. Então, ataque essa questão deixando claro que essa modalidade reduzirá o tempo gasto com falhas, simpli�cará o código e passará mais con�ança ao seu cliente. Dessa forma, você poderá levar grandes resultados a essa equipe. Saiba mais Como convite à leitura sobre o tema, deixo o link do artigo: Desenvolvimento orientado a testes em sistemas web: https://unoesc.emnuvens.com.br/apeuv/article/view/15087/7445. Acesso em: 11 mar. 2022. Videoaula: A refatoração do código de produção e o TDD Para visualizar o objeto, acesse seu material digital. Resolução do Estudo de Caso Para visualizar o objeto, acesse seu material digital. https://unoesc.emnuvens.com.br/apeuv/article/view/15087/7445 INTRODUÇÃO Caro estudante, durante essa unidade, você aprendeu sobre as equipeságeis e a importância da comunicação e dos testes dentro da programação de softwares. Entender o funcionamento das equipes ágeis te possibilitou se adaptar às dinâmicas na programação de softwares e, ao aprender sobre o BDD e o TDD, você compreendeu as principais técnicas utilizadas para ajustar dois grandes gargalos: a comunicação e os testes. Nessa aula, veremos o que o futuro pode reservar para a qualidade e a automação de testes, as tendências, as principais características, o tipo de pro�ssional e o campo de atuação. Falaremos também sobre a internet das coisas e o futuro da automação. Vamos lá? O FUTURO DA TESTAGEM E DA QUALIDADE NA PROGRAMAÇÃO DE SOFTWARES Caro estudante, a área de programação de softwares tem crescido bastante nos últimos anos. Por mais que a área da tecnologia se destoe um pouco das demais áreas, ela ainda segue uma premissa: funciona dentro de um mercado competitivo, no qual existe concorrência, e a excelência é buscada a todo instante. É necessário gerar lucro e, para isso, é preciso reduzir os custos, mantendo a qualidade. Qualidade é a palavra-chave dessa disciplina, junto aos testes, os quais, por sua vez, buscam obter qualidade nos códigos. Nesse bloco, você vislumbrará um pouco mais sobre o futuro da testagem e da qualidade dentro da área de programação de softwares. Falar de futuro em programação é um pouco diferente. Nessa área, nós vemos o futuro acontecer, por assim dizer, a cada descoberta, a cada método e tecnologia. Mas, nesse bloco, vislumbraremos um futuro de duas subáreas que são e serão importantes para o seu desenvolvimento pro�ssional. Para isso, daremos um foco maior na atuação pro�ssional ligada à qualidade. Dentro das equipes ágeis, existe um pro�ssional chamado QA, do inglês Quality Assurance, algo como garantia de qualidade, na tradução literal. Como o próprio nome diz, esse pro�ssional é responsável por manter a qualidade dentro do projeto de desenvolvimento de softwares. E quando se fala no futuro da qualidade e automação de testes dentro da programação, é necessário destacar esse pro�ssional (RIOS; MOREIRA, 2006). Dentro de alguns anos, espera-se uma transformação intensa na forma de trabalho do QA, deixando de executar uma função que faz parte das suas atribuições atuais, que é a execução de testes, a qual, geralmente, acontece no �m do projeto (exceto com uso do TDD, como você viu na aula sobre o assunto), e comece a inferir seu conhecimento como ator principal na mudança de cultura. Passar a atuar como um agente que incita a transformação, moldando equipes ágeis a respeito de testes e de qualidade. Sob a aba desse pro�ssional, a qualidade deixará de ser um quesito centralizado, passando a ser uma responsabilidade coletiva, compartilhada (ABREU; DEUS, 2021). Abreu e Deus (2021) ainda completam que a qualidade de software adquiriu posição de destaque nos últimos tempos, devido, em grande parte, à aceleração da digitalização das empresas, que foi estimulada pela modi�cação brusca no per�l de consumo causada pela pandemia do novo coronavírus. Diante disso, essas mudanças são projetadas para um futuro ainda mais próximo, que necessitará de pro�ssionais de teste e de qualidade mais atentos ao todo, tomando posição de destaque nas equipes ágeis e no controle qualitativo dos produtos. Aula 4 O FUTURO DA TESTAGEM E DA QUALIDADE NA PROGRAMAÇÃO DE SOFTWARES Nessa aula, veremos o que o futuro pode reservar para a qualidade e a automação de testes, as tendências, as principais características, o tipo de pro�ssional e o campo de atuação. 25 minutos Neste bloco, tratamos de maneira geral da qualidade e da importância do pro�ssional ligado à qualidade dentro do mercado, além das possibilidades e dos modos de trabalho esperados no futuro. No próximo bloco, nos atentaremos às tendências em relação ao futuro das testagens. VIDEOAULA: O FUTURO DA TESTAGEM E DA QUALIDADE NA PROGRAMAÇÃO DE SOFTWARES Caro estudante, nesse vídeo, será abordado o futuro da qualidade e da testagem dentro da programação de softwares. Falaremos sobre as expectativas e sobre os Quality Assurance, pro�ssionais que trabalham na área da qualidade dentro das equipes de programação de softwares. TENDÊNCIAS E REQUISITOS DO FUTURO DAS TESTAGENS Caro estudante, no bloco anterior, você vislumbrou possibilidades na carreira de QA e as perspectivas do futuro para a área da qualidade. Nesse bloco, daremos continuidade a essas expectativas diante da evolução da área de programação. É notável o crescente interesse, em especial de alguns desenvolvedores, no que diz respeito à qualidade de software. O entendimento que tal área tem grande potencial já faz tempo. Barbosa et al. (2000) indicam que, de modo particular, a indústria tem se conscientizado da importância da atividade de teste, que pode ser contributiva para o aprimoramento qualitativo de determinado produto, enquanto também pode representar um custo considerável dentro dos orçamentos nas organizações. Qualidade e custo são características corriqueiras no mercado competitivo. Quando se quer entregar o máximo de qualidade, pretende-se reduzir o custo ao máximo e, como você observou na aula “Entendendo mais profundamente o TDD”, testes podem ocupar uma parte considerável dos custos. Por isso, Barbosa et al. (2000) destacam que se torna imprescindível que, no processo das equipes ágeis desenvolverem os softwares, sejam utilizados técnicas, métodos e ferramentas que viabilizem realizar as testagens de forma padronizada, aumentando a produtividade e a qualidade, além de reduzir os custos. Uma dessas técnicas você já conheceu, como citada anteriormente, o TDD, que viabiliza uma escrita simples, priorizando a testagem e alcançando os objetivos competitivos dentro do mercado. O teste de software in�uencia diretamente a qualidade do sistema e garante que esse sistema consiga de fato atender às especi�cações propostas, conforme aquilo que o cliente solicitou. O futuro da testagem é sobre pensar profundamente e explorar. Na medida que a so�sticação do software aumenta, as abordagens tradicionais para os testes precisam acompanhar essa evolução. Em um ambiente dominado pela IoT (Internet das Coisas), IA (Inteligência Arti�cial) e outras tantas evoluções, as abordagens precisam evoluir. Quando se lida com sistemas que são mais inteligentes, fazer as testagens pode não ser uma ação tão simples. Algumas vezes, as expectativas não são vislumbradas, e prever a reação dos sistemas se torna algo difícil. Para o futuro, os testadores precisarão cada vez mais explorar e ser criativos ao criarem seus cenários para lidar com esses sistemas mais robustos e suas reações. Com certeza, precisarão também de sensibilidade para lidar com essas reações e o signi�cado delas para os clientes (JONES, 2017). Jones (2017) a�rma que a testagem de software já passou por mudanças drásticas devido às práticas ágeis. As equipes ágeis atuam em uma velocidade formidável, com interação contínua, e isso fez surgir a necessidade de novas habilidades. O autor ainda a�rma que os testadores foram obrigados a testar muito mais do que antes e que estão disponibilizando informações cruciais e defendendo os projetos de seus clientes mais cedo no ciclo de entrega. Você pôde perceber que o futuro da testagem está atrelado ao avanço tecnológico do mundo onde vivemos e, por isso, no próximo bloco, destacaremos uma dessas evoluções, a IoT, ou internet das coisas. VIDEOAULA: TENDÊNCIAS E REQUISITOS DO FUTURO DAS TESTAGENS Caro estudante, nesse vídeo, trataremos das expectativas quanto ao futuro das testagens, os principais desa�os e o que o mercado pro�ssional espera dos pro�ssionais da área. Videoaula: O futuro da testagem e da qualidade na programação de softwares Para visualizar o objeto, acesse seu material digital. Videoaula: Tendências e requisitos do futuro das testagens Para visualizar o objeto, acesse seu material digital. A INTERNET DAS COISAS (IOT) E O FUTURO DA AUTOMAÇÃO Caro estudante,a qualidade e a testagem na programação de softwares andam lado a lado. Quando se pensa no futuro da automação de testes e nas perspectivas para os testadores, é necessário entender que a evolução dos softwares avança junto à execução da função de testar. Os métodos e as técnicas tradicionais precisam lidar com um mundo onde já se faz realizada a Inteligência Arti�cial, a Internet das Coisas e o Machine Learning. Para entender um pouco mais desse novo mundo, o presente bloco esclarecerá um pouco mais sobre a Internet das Coisas. A Internet das Coisas, em suma, é um sistema de dispositivos de computação que estão inter-relacionados e conseguem, através dessa inter-relação, transferir dados entre essa rede sem a necessidade de uma pessoa interagir com o sistema. Para facilitar o entendimento, imagine o seguinte: um objetivo dentro da Internet das Coisas pode ser um cachorro com uma coleira com geolocalização, ou um sistema de irrigação no plantio, ou um carro com sensores para alertar a proximidade de outros automóveis, ou qualquer produto natural ou arti�cial que por ventura tem a capacidade de receber um endereço de IP e, a partir disso, consegue realizar transferências de dados dentro de uma rede. Essa tecnologia vem crescendo cada vez mais e, quando se aborda o futuro da automação, é necessário levar essa tecnologia em conta. Esse tipo de automação consegue entender melhor as necessidades dos clientes, trazendo dados que, ao serem convergidos em informações, ajudam nas tomadas de decisão das organizações. Faccioni Filho (2015) destaca que a IoT é um conceito que vai além do âmbito das tecnologias, pois, na realidade, não deriva dela, e sim a utiliza para cumprir determinadas funcionalidades. São diversas as tecnologias que se associam ao conceito de IoT. As suas funcionalidades, ou melhor, as funcionalidades dos objetos dentro da IoT já estão impostas pelo mercado competitivo, e as tecnologias associadas continuam em desenvolvimento constante. Você perceberá que diversas empresas de tecnologia estão na corrida para criar sua linha de produtos e dispositivos para IoT. Skarpness (2014) destaca que esses dispositivos farão parte de sistemas inteligentes, conectando-se a um montante extraordinário de outros dispositivos e gerando soluções e análises para valorizar os vínculos e o entendimento das perspectivas dos clientes. Agora, trazendo um pouco para a perspectiva dos desenvolvedores e das equipes ágeis, é fato que, como destacado pela Jones (2017), será necessário maior empenho e aprendizado para lidar com a diversidade de tecnologias e possibilidades. No entanto, esse quesito também pode ser entendido como uma multiplicação de novas soluções, como destacado por Faccioni Filho (2015), que cita as novas expressões, como smart buildings, smart cities e todas as variações de uma “sociedade automatizada”. O autor ainda destaca que essas soluções são apenas a superfície do futuro da automação, o qual está próximo, e as equipes ágeis devem se ajustar a isso. VIDEOAULA: PREJUÍZOS CAUSADOS POR INVASÕES HACKERS Caro estudante, nesse vídeo, abordaremos o avanço tecnológico na área de desenvolvimento de software, em especial, as características da Internet das Coisas (IoT), e trataremos do futuro da automação. ESTUDO DE CASO Estudante, o mercado competitivo está em constante evolução e, como você aprendeu nessa aula, a área de qualidade e automação de testes também está. A evolução vem acompanhada dos desa�os, e lidar com eles é o que lhe ajudará a ser um pro�ssional mais assertivo. Diante disso, apresentaremos um problema a ser solucionado: você foi contratado como QA de uma renomada organização de software, a qual se encontra em um processo de transição, evoluindo seu portfólio com a intenção de assumir projetos com as mais novas tecnologias. Você foi selecionado para ajudar a de�nir as principais características para a área de testagem e qualidade. O que você pode oferecer de mais atual para o planejamento da organização? RESOLUÇÃO DO ESTUDO DE CASO Videoaula: Prejuízos causados por invasões hackers Para visualizar o objeto, acesse seu material digital. Caro estudante, é importante entender que não existe uma única resposta para esse problema. A primeira coisa que se deve fazer é analisar a organização, quais suas prioridades e perspectivas. Depois disso, já que o desejo da organização é ingressar em projetos mais atuais e se preparar para o futuro, use os conhecimentos dessa aula para sugerir mudanças na organização, principalmente no que diz respeito à testagem e à qualidade, tratando essa área como algo integral dentro dos projetos, do início ao �m, deixando de ser um processo uni�cado e se tornando um processo de entendimento coletivo. A partir dessas indicações, será possível montar equipes ágeis preparadas para lidar com os desa�os do futuro. Saiba mais Como indicação, deixo para você o link de um vídeo da Engenharia Detalhada, que explica detalhadamente o que é a internet das coisas: https://www.youtube.com/watch?v=2TXOZFmhGGo. Acesso em: 11 mar. 2022. Resolução do Estudo de Caso Para visualizar o objeto, acesse seu material digital. Aula 1 ANICHE, M. Test-Driven Development: Teste e Design no Mundo Real com. NET. São Paulo, SP: Casa do Código, 2014. BECK, K. Test Driven Development: By Example. Boston/EUA: Addilson-Wesley Professional, 2002. COHN, M. User stories applied: for agile software development. Boston: Addison-Wesley Professional, 2004. NORTH, D. Introducing BDD. DAN NORTH & ASSOCIATES LTD, 2006. Disponível em: http://dannorth.net/introducing-bdd/. Acesso em: 7 nov. 2021. KOCH, R. L.; OLIVEIRA, L. R. Riscos na Utilização de Métodos Ágeis na Gestão de Projetos de Software. 2010. In: CONVIBRA ADMINISTRAÇÃO – CONGRESSO VIRTUAL BRASILEIRO DE ADMINISTRAÇÃO, 12., 2010, [S. l.]. Anais [...]. [S. l.], ENSP, 2010. NORTH, D. BDD is like TDD if. Dan North & Associates, 31 maio 2012. Disponível em: https://dannorth.net/2012/05/31/bdd-is-like-tdd-if/. Acesso em: 14 mar 2022. SOARES, Ismael. Desenvolvimento orientado por comportamento (BDD) — Um novo olhar sobre o TDD. Java Magazinne, Rio de Janeiro, v. I, n. 91, 2011. Disponível em: https://www.devmedia.com.br/desenvolvimento- orientado-por-comportamento-bdd/21127. Acesso em: 14 mar. 2022. WILDT, D. et al. Extreme Programming: práticas para o dia a dia no desenvolvimento ágil de software. São Paulo, SP: Casa do Código, 2015. Aula 2 MARSHALL JUNIOR, E. B. M. I. et al. Gestão da qualidade e processos. Rio de Janeiro, RJ: FGV, 2015. NORTH, D. Introducing BDD. Dan North & Associates LTD, 2006. Disponível em: http://dannorth.net/introducing-bdd/. Acesso em: 7 nov. 2021. SANCHEZ, I. Introdução ao desenvolvimento orientado a testes. Coding Dojo Floripa, 7 nov. 2006. Disponível em: https://dojo�oripa.wordpress.com/2006/11/07/introducao-ao-desenvolvimento-orientado-a-testes/. Acesso em: 14 mar. 2022. REFERÊNCIAS 10 minutos https://www.youtube.com/watch?v=2TXOZFmhGGo https://dannorth.net/2012/05/31/bdd-is-like-tdd-if/ https://www.devmedia.com.br/desenvolvimento-orientado-por-comportamento-bdd/21127 https://www.devmedia.com.br/desenvolvimento-orientado-por-comportamento-bdd/21127 https://dojofloripa.wordpress.com/2006/11/07/introducao-ao-desenvolvimento-orientado-a-testes/ SMART, J. BDD in Action: Behavior-driven development for the whole software lifecycle. Nova Iorque: Simon and Schuster, 2014. Aula 3 ANICHE, M. Test-Driven Development: Teste e Design no Mundo Real com. NET. São Paulo, SOA: Casa do Código, 2014. BECK, K. Test-driven development: by example. Boston: Addison-Wesley Professional, 2003. Aula 4 ABREU, B.; DEUS, J. QA do futuro: aliança entre olhar humano e automação. IT Forum, 2021. Disponível em: https://cio.com.br/noticias/qa-do-futuro-alianca-entre-olhar-humano-e-automacao/ . Acesso em: 17 nov. 2021. BARBOSA, E. F. et al. Introdução ao teste de software. In: SIMPÓSIO BRASILEIRO DE ENGENHARIA DE SOFTWARE, 14., 2000, João Pessoa. Anais[...]. João Pessoa, PB: SBES, 2000. FACCIONI FILHO, Mauro. BMS 2.0 - Nova geração de sistemas de automação e gestão predial. Congresso Netcom, São Paulo, Aranda Eventos, 2015. JONES, A. O futuro dos testes de software. São Paulo: Angie Jones, 2017. Disponível em: https://angiejones.tech/the-future-of-software-testing/ . Acesso em: 17 nov. 2021. RIOS, E.; MOREIRA, T. Teste de software. Rio de Janeiro, RJ: Alta Books, 2006. SKARPNESS, M. Preparing the Data Center for the Internet of Things. Intel Software and Services Group, 2014. https://cio.com.br/noticias/qa-do-futuro-alianca-entre-olhar-humano-e-automacao/ https://angiejones.tech/the-future-of-software-testing/