0% acharam este documento útil (0 voto)
70 visualizações60 páginas

Apostila - Módulo 3 - Bootcamp Profissional SRE

XPE

Enviado por

Yan Sousa
Direitos autorais
© © All Rights Reserved
Levamos muito a sério os direitos de conteúdo. Se você suspeita que este conteúdo é seu, reivindique-o aqui.
Formatos disponíveis
Baixe no formato PDF, TXT ou leia on-line no Scribd
0% acharam este documento útil (0 voto)
70 visualizações60 páginas

Apostila - Módulo 3 - Bootcamp Profissional SRE

XPE

Enviado por

Yan Sousa
Direitos autorais
© © All Rights Reserved
Levamos muito a sério os direitos de conteúdo. Se você suspeita que este conteúdo é seu, reivindique-o aqui.
Formatos disponíveis
Baixe no formato PDF, TXT ou leia on-line no Scribd
Você está na página 1/ 60

Qualidade SRE

Clara Érica T. de Castro

2022
Qualidade SRE
Clara Érica T. de Castro
© Copyright do Instituto de Gestão e Tecnologia da Informação.
Todos os direitos reservados.

2
Sumário

Capítulo 1. SonarQube como aliado da Observabilidade ..........................................5

1.1. Ferramentas e práticas DevOps 5

1.2. Diferença entre análise estática e dinâmica 7

1.3. CI/CD Pipelines 10

1.4. Continuous Delivery x Continuous Deployment 11

1.5. O que é Qualidade Contínua 13

1.6. Desafios da Qualidade Contínua 13

1.7. Importância do Shift Left 14

Capítulo 2. Instalação e Configuração ......................................................................17

2.1. Instalar SonarQube 18

2.2. Instalar Java 24

2.2. Instalar SonarScanner 34

2.3. Subir instância do servidor 37

Capítulo 3. Avaliação de Resultados ........................................................................41

3.1. Introdução ao SonarQube 41

3.2. Visão geral das funcionalidades 42

3.3. Tipologia dos problemas 46

3.4. Dívida técnica 49

3.5. Definições de métricas 50

3
Capítulo 4. O que são Quality Gates ........................................................................53

4.1. Quality Gates 53

4.2. Quality Profiles 55

4.3. Estratégias de implementação 56

4.4. Cuidados gerais 57

Referências………………......................................................................................................58

4
Capítulo 1. SonarQube como aliado da Observabilidade

1.1. Ferramentas e práticas DevOps

A Observabilidade é um dos 5 pilares das práticas SRE (Site Reliability Engineer),


traduzindo, é o Engenheiro de Confiabilidade de Sites. E conhecer as práticas de DevOps,
bem como o ciclo de desenvolvimento, possibilitará ao SRE trazer o equilíbrio de manter
a confiabilidade de sites e aplicações, e a liberação de novas funcionalidades.

Segundo a Harrison Clarke (empresa que conecta talentos DevOps/SRE com


organizações líderes dos Estados Unidos), dentre as habilidades técnicas que as
empresas de tecnologia buscam em profissionais de DevOps e SRE estão a experiência
com ferramentas de DevOps através de todos os seus aspectos: “controle de fonte,
integração contínua, gestão da configuração, automação de implantação, ...”, bem
como “habilidades de segurança de software”, entre outros atributos.

5
Fonte: Figura 1 e e-book disponível para download em:
<https://www.harrisonclarke.com/what-emerging-tech-companies-are-looking-for-in-
devops-roles>.

Desta maneira, conhecer o ciclo de vida do desenvolvimento de software (do


inglês SDLC – Software Development Life Cycle) e suas ferramentas se torna crucial para
se tornar um SRE diferenciado. O SDLC é o conjunto de fases e procedimentos pelo qual
um software passa, desde seus requerimentos até sua implantação e manutenção.

Enquanto Observabilidade para SRE é mais comumente relacionada à Shift


Right (monitorar, observar, analisar dados em produção), o Shift Left foca em identificar
os problemas o quanto antes dentro do SDLC, ou seja, mais próximo do desenvolvedor.
E, por isso, a ferramenta SonarQube se torna um aliado da Observabilidade sob a ótica
de se antecipar aos problemas e resolvê-los antes que ocorram no ambiente de
produção. Segundo a documentação da ferramenta: ela faz uma revisão automática de
código para detectar bugs, vulnerabilidades e code smells em seu código. Ela pode
integrar-se com seu workflow existente para possibilitar a inspeção contínua do código
através das branches de seu projeto e pull requests.

Fonte: <https://docs.sonarqube.org/latest/>.

6
Ela disponibiliza indicadores da qualidade e segurança do código, detalhando a
gravidade de cada tipo de erro identificado, índices de manutenibilidade, confiabilidade
e segurança, suportando mais de 15 linguagens em sua versão gratuita e 29 linguagens
em sua versão Enterprise (consulta realizada no site em Fevereiro/2022).

E ao ser integrada de forma automática em uma esteira (pipeline) de entrega


contínua de software, os ganhos são potencializados, por proporcionar um feedback
rápido e antecipado para correção do código antes de sua integração com outros
programas e serviços.

Normalmente é utilizada no início do pipeline (CI – continuous integration), para


garantir o Shift Left, antes de efetuar o deploy do software no ambiente de
desenvolvimento. Isto impede que o software que esteja fora dos padrões definidos pela
organização impacte o ambiente, já em seu estágio inicial. Mas há empresas que optam
por executar antes da entrada no ambiente de homologação, ou ainda, executam duas
vezes: antes do desenvolvimento e antes da homologação.

Há várias ferramentas que podem ajudar a avaliar a qualidade e segurança do


código de forma automática dentro de um pipeline. Neste módulo focaremos no
SonarQube por sua versatilidade de integração com várias outras ferramentas, e por
trazer grande benefício para uma abordagem DevOps.

Não será abordada a análise dinâmica, porém, é importante saber a diferença.

1.2. Diferença entre análise estática e dinâmica

Análise estática

É um tipo de análise onde o código é testado para checar os defeitos do


software sem executar o código da aplicação, que possui como objetivo principal

7
prevenir que defeitos se propaguem para as próximas fases. Ela é executada nos
estágios iniciais do desenvolvimento a fim de evitar erros e solucioná-los mais
facilmente, sendo o local onde se deve encontrar a maioria dos erros.

É nessa fase que o SonarQube é utilizado, fazendo a inspeção do código todo,


sem executá-lo. Ele guarda a primeira versão como um baseline e da segunda execução
em diante é feito um comparativo entre o código da versão atual com o código da última
execução, gerando uma foto da saúde do código. E com base nessas informações, o
desenvolvedor terá condições de acompanhar e trabalhar o seu código para atender às
melhores práticas de mercado para codificação do software.

Importante destacar que este tipo de análise não substitui os testes funcionais
que devem ser realizados para garantir a qualidade do que foi desenvolvido.

Análise dinâmica

É um tipo de análise onde o código é executado para analisar o seu


comportamento dinâmico. Isto significa efetuar testes para analisar os valores de
entrada e os valores esperados de saída do software. O código deve estar implantado
no ambiente para que ele possa ser testado durante a sua execução.

Estático Dinâmico

Fonte: <https://enterfea.com/difference-between-static-and-dynamic-analysis/>.

8
Diferença entre Teste Estático e Dinâmico.

Fonte: <https://www.geeksforgeeks.org/difference-between-static-and-dynamic-testing/>.

Versão traduzida:

9
1.3. CI/CD Pipelines

Segundo a Red Hat (2019):

Um pipeline de CI/CD é uma série de passos que devem ser executados


para entregar uma nova versão de software. E pipelines de integração
contínua / entrega contínua (CI/CD) são uma prática focada em
melhorar a entrega de software usando uma abordagem DevOps ou
de Engenharia de Confiabilidade de Site (SRE – Site Reliability
Engineering). (RED HAT, 2019)

Esta série de passos são potencializados com a utilização da automação para


que seja possível entregar o que foi desenvolvido com maior rapidez. Somada a essa
velocidade, necessitamos de monitoramento para assegurar que a entrega seja
realizada com confiança e que não haverá quebras no processo de desenvolvimento do
software.

Em se tratando de software, a entrega pode estar planejada com outro


conjunto de softwares, que juntos entregam o valor esperado pelo cliente. Se esse
conjunto de softwares, no todo ou em parte, apresentar alguma falha, toda a entrega
estará comprometida. Ter somente automação sem qualidade resultará em automação
de implantação de código mal escrito e erros indesejados.

A velocidade não pode estar acima da qualidade!

Elementos do CI/CD

Vamos ver a seguir os passos que ajudam a entender as delimitações de cada


fase da:

• Integração contínua (Continuous Integration);

10
• Entrega contínua (Continuous Delivery);

• Implantação contínua (Continuous Deployment).

A integração contínua permite que os desenvolvedores integrem seu código ao


menos uma vez ao dia, por meio de builds automatizados, com os devidos testes para
detecção de problemas e possibilitando as correções o mais cedo possível.

Para que essa ação ocorra de maneira contínua e constante, é necessário que
as equipes sejam altamente colaborativas, os trabalhos sejam paralelizados por meio de
controle de versões, potencializando a velocidade de entrega e que haja a cultura de
automatizar tudo o que for possível, bem como haver o apoio da gestão para que o time
tenha tempo disponível para refatorar (reescrever) seu código constantemente e, assim,
reduzir a dívida técnica.

Em resumo, os pontos importantes da integração contínua são:

• Controle de versão de código;

• Build automatizado;

• Testes automatizados (o quanto possível);

• Cultura de colaboração;

• Tempo reservado para reduzir dívida técnica.

1.4. Continuous Delivery x Continuous Deployment

A imagem abaixo demonstra que para ser considerado um Continuous


Deployment (implantação contínua), o processo precisa estar totalmente automatizado.

11
E que o Continuous Delivery (entrega contínua) possui todos os passos automatizados,
com exceção da implantação no ambiente de Produção.

Nem sempre será permitida a implantação contínua, isto poderá depender das
definições da organização sobre quais softwares são elegíveis a uma automação de
ponta a ponta. Normalmente, são considerados itens como a complexidade e criticidade
da aplicação.

Fonte: Adaptada de <https://docs.microsoft.com/en-us/learn/modules/analyze-devops-


continuous-planning-intergration/3-analyze-continuous-integration>.

Temos o CI como parte comum das duas abordagens, garantindo que haja ciclos
pequenos de desenvolvimento, rápida detecção de falhas, menos problemas em
compilações, controle de versões, código seguro, build automatizado, dentre outras
vantagens.

12
Podemos dizer que o CI é uma prática de desenvolvimento de software, onde
o código é alterado e entregue de maneira frequente e confiável.

1.5. O que é Qualidade Contínua

Pensando em produto ou serviço, qualidade é aquilo que faz com que ele se
destaque entre a concorrência, que o faz vendável e com baixo custo. Fazendo uma
analogia com a indústria automobilística e da necessidade de ser eficiente, no Japão pós-
guerra isso foi fundamental para que a indústria ganhasse o mercado internacional, se
destacando entre os demais fabricantes.

Isso incluiu esforços em processos para redução de desperdício (lean), uma


cultura de exigir qualidade em primeiro lugar em todas as fases da linha de produção,
autonomia aos funcionários para parar a linha de produção ao detectar problemas
(poder de decisão e liderança em todos os níveis), gerando assim menor quantidade de
problemas no produto final e, consequentemente, maior satisfação de seus clientes.

Esse conceito da manufatura se aplicou ao software, onde o controle de


qualidade se encontra na cultura, práticas e processos de uma organização.

DevOps traz a cultura de automação, porém, automação sem qualidade não


traz benefícios.

1.6. Desafios da Qualidade Contínua

Na plataforma de ensino da Microsoft Learning, há disponível o curso DevOps


Dojo White Belt, onde é demonstrado o paradigma do conceito tradicional de qualidade
e da qualidade contínua, conforme abaixo:

13
Fonte: Adaptada de: <https://docs.microsoft.com/en-us/learn/modules/explain-devops-
continous-delivery-quality/3-explore-continuous-quality>

Nota-se uma alteração radical de pensamento, onde se destaca a prevenção


no lugar da detecção de problemas.

A qualidade contínua também preconiza a inexistência de silos, desde os


stakeholders até as equipes de tecnologia, o que gera engajamento, a crença de que a
responsabilidade é de todos, e uma cultura organizacional sólida. Soma-se ainda o
cuidado na escolha das métricas corretas (nos processos e não nos indivíduos),
ferramentas e tecnologias que possibilitem a Qualidade Contínua.

1.7. Importância do Shift Left

O relatório State of DevOps Report 2019, da empresa Puppet, demonstra o


resultado de um estudo da IBM System Science Institute, no qual é evidenciado o custo
relativo entre a correção de um defeito dentro do SDLC.

Quanto mais tarde o defeito é identificado, mais cara a sua correção.

14
Por esse motivo, investir em qualidade e detecção de erros no início do
desenvolvimento é muito mais prático e sustentável para uma organização, garantindo
qualidade do produto ou serviço entregue ao cliente.

Fonte:
<https://www.researchgate.net/publication/255965523_Integrating_Software_Assurance_i
nto_the_Software_Development_Life_Cycle_SDLC>

Em se tratando de erros de segurança, os prejuízos podem ser exorbitantes,


custando ainda a reputação da organização.

O Shift Left necessita que haja testes numerosos, para detecção rápida e pronta
correção no início do SDLC.

Importante ressaltar que se deve ter cautela ao querer a perfeição ao extremo,


mas considerar uma avaliação criteriosa sobre o tempo e custo a serem dispendidos, e
se questionar se serão realmente frutíferos.

15
Nesse caso, incluir uma abordagem conjunta com o Shift Right é uma saída para
minimizar possíveis impactos no ambiente produtivo, diversificando a estratégia de
implantação, como blue/green deployment, feature toggle, testes A/B, canary release.

Neste módulo focaremos no Shift Left e em como obter melhores resultados


com essa abordagem.

Veremos nos próximos capítulos como a ferramenta SonarQube pode ser


utilizada, seus recursos, dashboards e benefícios.

16
Capítulo 2. Instalação e Configuração

Conforme explicado no Capítulo 1 deste módulo, o SonarQube é uma potente


ferramenta de análise estática, focada em Qualidade e Segurança de código.

Ela está disponível para download em 4 versões:

• Community: é a única versão gratuita;

• Developer;

• Enterprise;

• Data Center.

Para fins educacionais, pode ser realizado o download da versão mais recente,
mas para fins profissionais, sempre se recomenda a versão LTS (Long Term Support),
também disponível para a versão gratuita.

Fonte: <https://www.sonarqube.org/downloads/>.

Para a escolha da versão adequada a uma empresa, deve-se levar em


consideração não só as funcionalidades, como também o preço cobrado por LoC (Lines
of Code), em português Linhas de Código (quanto maior a quantidade de programas a
serem inspecionados, maior o valor cobrado).

17
Fonte: <https://www.sonarsource.com/plans-and-pricing/>.

Neste capítulo abordaremos como instalar, configurar e trabalhar com a versão


gratuita em seu próprio computador.

2.1. Instalar SonarQube

É possível instalar o SonarQube com a criação de um container do Docker


usando uma das imagens do Docker disponibilizadas no site da ferramenta, mas neste
módulo aprenderemos como efetuar a instalação através de um arquivo zip.

Pré-requisitos:

• Ter instalada a versão do Java para desenvolvedor, versão 11 (necessário tanto


para o servidor quanto para o scanner do SonarQube);

18
• Mínimo de 2GB de RAM para executar eficientemente;

• 1GB livre na RAM para o Sistema Operacional;

• Espaço em disco necessário vai depender de quanto código será analisado com
o SonarQube;

• Disco rígido com alta performance;

• O arquivo “data” conterá os índices do Elasticsearch, que será usado para


conter o grande número de I/O (entradas/saídas) durante a execução quando
a instância do servidor estiver ativa;

• O Sonarqube não suporta sistemas operacionais de 32 bits no lado do servidor,


porém, suporta no lado do scanner (necessário para inspecionar o código).

Atenção:

(*) Não será necessário instalar um banco de dados nem um servidor


manualmente, a versão de download a partir do arquivo zip fará a instalação da
estrutura necessária para seu funcionamento.

Navegadores habilitados:

• Microsoft Edge;

• Mozilla Firefox;

• Google Chrome;

• Safari.

19
Sistemas Operacionais:

• Windows (utilizado neste módulo);

• Linux;

• macOS.

Para entender a estrutura de funcionamento do SonarQube:

Fonte: Figura adaptada de: <https://docs.sonarqube.org/latest/setup/install-server/>.

De um lado, temos o SonarQube e o SonarScanner instalados no computador


do desenvolvedor, onde também se localiza a pasta com o projeto e suas subpastas,
onde estão os códigos desenvolvidos e toda a estrutura do(s) projeto(s).

De outro lado, temos o Servidor do SonarQube, composto por:

20
• Servidor web: usado como interface entre o SonarQube e o usuário, onde será
possível consultar o relatório final (dashboard);

• Servidor de busca: baseado no Elasticsearch (mecanismo de busca e análise de


dados distribuído);

• Mecanismo de computação: responsável por processar os relatórios gerados


pela inspeção do código e salvá-los no Banco de Dados do SonarQube.

E também o Servidor de Banco de Dados, que se comunica com o Servidor do


SonarQube. No Banco de Dados serão armazenadas as métricas e os problemas
encontrados durante a inspeção do código, bem como a configuração da instância do
SonarQube.

Ao executar o SonarScanner na pasta do projeto, o resultado será exibido no


servidor web.

Passos para instalação:

• Efetuar download do SonarQube, versão gratuita Community, disponível em:


https://www.sonarqube.org/downloads/.

• Criar uma pasta em seu computador e extrair o conteúdo do arquivo zip nesse
local (nomear a pasta para fácil identificação):

21
• A pasta deverá conter as seguintes subpastas: bin, conf, data, elasticsearch,
extensions, lib, logs, temp, web.

E os arquivos COPYING e dependency-license.json.

22
• A pasta bin conterá os arquivos para cada Sistema Operacional (Linux, macOS,
Windows), todos para 64 bits:

Pronto, o SonarQube está instalado!

Para consultar as particularidades de cada Sistema Operacional, consultar o


link: https://docs.sonarqube.org/latest/requirements/requirements/.

Observação: a partir daqui os comandos podem ser executados no Windows


via:

• cmd (linha de comando);

23
• PowerShell;

• Qualquer outro aplicativo de execução de comandos.

2.2. Instalar Java

Antes de executar qualquer comando dentro do SonarQube ou do


SonarScanner, será necessário ter a versão 11 do Java (distribuição gratuita) para
desenvolvedor instalada em seu computador. Versões além dessa não são suportadas
oficialmente, conforme explica a seção de pré-requisitos da ferramenta. A
recomendação é que seja instalada a versão Oracle JRE 11 ou OpenJDK 11, na data em
que esta apostila foi escrita (2022).

Para consultar a versão atual necessária, consultar o site do SonarQube:


https://docs.sonarqube.org/latest/requirements/requirements/.

Se o link acima for alterado e não funcionar, procurar na Documentação do


SonarQube, Requerimentos, Pré-requisitos e Visão Geral, disponível na página inicial do
site.

Essa versão gratuita do Java não vem com um instalador.

Para conferir a versão do Java instalado em seu computador:

• Entrar em sua linha de comando (Prompt de comando) digitando cmd na barra


de pesquisa do computador.

• Digitar: java –version e clicar no botão <enter>.

• Deverá aparecer a versão 11:

24
Caso não apareça como openjdk version “11...”, terá que seguir os passos a
seguir:

• Efetuar download do site: https://jdk.java.net/archive/.

• Clicar no arquivo zip para download, neste caso, versão para Windows 64 bit.

• Escolher ou criar uma pasta em seu computador para efetuar o download,


neste caso, criado como OpenJDK11, e extrair os arquivos nessa pasta:

25
• Verificar integridade do arquivo baixado (checksum):

• Ao clicar em sha256, é aberta uma janela no navegador com o código de


verificação, neste caso:

cf39490fe042dba1b61d6e9a395095279a69e70086c8c8d5466d9926d80976d8

• Abrir o Prompt de Comando, entrar na pasta onde efetuou o download do


arquivo OpenJDK11, digitar dir e clicar no botão <enter>, deve aparecer o
conteúdo da pasta:

26
• Copiar o nome do arquivo com final bin.zip:

27
• Digitar o comando:

certutil –hashfile openjdk-11.0.2_windows-x64_bin.zip SHA 256 <enter>

• Comparar o resultado deste comando com o código apresentado no


navegador (devem ser iguais), para ter certeza que o seu download ocorreu
com sucesso:

• Para facilitar a comparação, copie e cole os 2 resultados no Notepad.

28
• Com a verificação finalizada, efetuar a extração do arquivo zip, que ao final
terá as pastas bin, conf, include, jmods, legal, lib e o arquivo release:

• Copiar o local da pasta onde os arquivos foram gravados, neste caso:

C:\OpenJDK11\openjdk-11.0.2_windows-x64_bin\jdk-11.0.2

• Abrir o Prompt de Comando como Administrador:

• Verificar a versão do Java na raiz do computador: C:\> java –version <enter>.

• Ainda deve estar apontando para a versão antiga.

29
• Para alterar a versão do Java para a que foi instalada, é necessário alterar o
caminho nas variáveis de ambiente.

− Entrar no Prompt de Comando como Administrador e na raiz


do computador, digitar:

C:\>echo %JAVA_HOME%

− Após abrir a pasta onde o Java 11 foi instalado, digitar o


comando:

C:\>setx –m JAVA_HOME “local da pasta onde os arquivos do Java 11 foram gravados”

− Comando completo ficaria assim:

C:\>setx –m JAVA_HOME “C:\OpenJDK11\openjdk-11.0.2_windows-x64_bin\jdk-


11.0.2”

− Abrir o Prompt de Comando para verificar se agora está


apontando para a pasta da versão 11, com o comando java –
version <enter>.

− Uma vez confirmado que a versão está correta, vamos compilar


o Java com o comando javac –version <enter>.

30
− Outra maneira de alterar as variáveis de ambiente é entrando
em Propriedades do Meu Computador => Configurações
avançadas do Sistema:

31
− Tanto Java_Home quanto Path devem estar com o caminho do
arquivo bin do Java 11:

32
− Se não estiverem, clicar em Novo e adicioná-los.

− Para validar se todas as variáveis estão na pasta Path, clicar em


Path e depois em Editar:

− Que deverá apresentar o conteúdo abaixo (todos os 2 arquivos


devem estar neste Path):

o OpenJDK11\versão do SO_bin

o %JAVA_HOME%\bin

33
Obs.: o arquivo do SonarScanner aparecerá após sua instalação, conforme
próxima seção.

2.2. Instalar SonarScanner

Efetuar download do site, neste curso escolher Windows 64-bit:


https://docs.sonarqube.org/latest/analysis/scan/sonarscanner/.

34
Criar e salvar numa pasta com seu nome para facilitar encontrá-la e efetuar a
extração dos arquivos:

Na pasta conf, arquivo Properties, configurar o Scanner para apontar para a url:

35
Adicione o caminho da pasta \bin em seu Path, em Variáveis de Ambiente:

Note que agora todos os 3 arquivos \bin necessários estão lá:

36
OpenJDK11, %JAVA_HOME% e do SonarScanner.

Verificar a instalação do Scanner executando o comando dentro da pasta onde


instalou o SonarScanner:

C:\sonarscanner>sonar-scanner.bat –h

Se estiver tudo correto, deverá aparecer uma tela como abaixo:

2.3. Subir instância do servidor

Agora que temos tudo instalado, vamos subir a instância do servidor dentro da
pasta do SonarQube, através do comando abaixo:

No Windows: bin/windows-x86-64/StartSonar.bat <enter>.

37
Quando a instância estiver pronta aparecerá a mensagem Process[es] is up:

Entrar no navegador e digitar o link para acessar o SonarQube:


http://localhost:9000/

38
Pode demorar um pouco para aparecer a tela inicial do SonarQube:

A página inicial do SonarQube será carregada, solicitando login e senha.

Utilizar admin para Login e Password.

Solicitará para trocar a senha em seu primeiro acesso:

39
Tudo pronto para iniciar a jornada pelo SonarQube!

40
Capítulo 3. Avaliação de Resultados

3.1. Introdução ao SonarQube

SonarQube é uma potente ferramenta de análise estática de código. Tem sido


utilizada amplamente, tanto por grandes organizações como desenvolvedores (mesmo
que a organização não a tenha instalado e fazendo parte de algum pipeline de
integração contínua), pois garante que os códigos estejam limpos e seguros.

Por sua versão gratuita atender a grande maioria de linguagens atualmente


utilizadas e de ser razoavelmente fácil de instalar e configurar, há muitos defensores de
que ela deva fazer parte de qualquer organização. Ela tem sido aprimorada ao longo dos
anos e, mesmo perdendo algumas de suas características em sua versão gratuita, ainda
assim é muito atrativa e efetiva.

Para as organizações, é necessário pensar não só nas tecnologias disponíveis,


como também a quantidade de linhas necessárias. Esta última informação afeta o preço
nas versões pagas que, por sua vez, trazem itens adicionais como visões consolidadas
por aplicação e portfolio, muito úteis para a liderança.

Maiores informações sobre quem revisou a ferramenta, suas avaliações e


comparações com outras alternativas do mercado estão disponíveis no site da GARTNER
(2022): https://www.gartner.com/reviews/market/communications-platform-as-a-
service/vendor/sonar/product/sonar.

O que chama a atenção é que ela ainda é preferida com relação a seus
concorrentes.

41
3.2. Visão geral das funcionalidades

Em sua primeira entrada ao link do SonarQube, não haverá projetos ainda, mas
é nesta aba que estarão todos os projetos executados.

A aba de Issues (problemas) será uma das mais utilizadas e que conterá a maior
parte das informações a serem analisadas e seus detalhes.

Todos os dados de bugs, vulnerabilidades e code smells estarão descritos aqui


assim que um projeto for executado:

42
Na aba de Regras, será possível identificar a lista de regras existentes por
linguagem.

Para explorá-las, basta clicar nela que expandirá para os tipos, inclusive com a
classificação de tag (suspicious, obsolete, accessibility etc.).

Para consultar mais linguagens, expanda em Show More:

43
Na aba Perfis de Qualidade teremos a coleção de regras por linguagem (perfil
padrão):

44
Na aba Quality Gates temos inicialmente o padrão sugerido pela ferramenta,
de nome Sonar way.

Como Administradores da ferramenta, será possível administrá-las (acesso


restrito), podendo haver mais que um Gate, conforme necessidade e definição por parte
da organização.

Se nada for configurado, Sonar way será o Gate padrão para todas as
execuções. O mesmo se aplicará para as execuções automáticas via pipeline.

Na aba Administration há as configurações gerais utilizadas pelos times que


administrarão a ferramenta dentro da organização, com uso restrito também.

Normalmente, serão as equipes que criam pipelines, equipes SRE e equipes de


suporte da ferramenta.

45
Para a versão gratuita, não há análise de projetos por branches e pull requests,
todas as execuções serão reportadas como sendo executadas na master no relatório
final. Essa opção está habilitada a partir da versão Developer.

3.3. Tipologia dos problemas

Vamos iniciar o entendimento da principal aba onde, segundo o site da


ferramenta SONARQUBE (2022), temos:

Issues: Quando um pedaço de código não cumpre uma regra, um problema é


registrado no snapshot. Um problema pode estar conectado em um arquivo fonte ou
em um arquivo de teste de unidade. Há 3 tipos de problemas: Bugs, Code Smells e
Vulnerabilidades.

• Definições:

46
− Bugs: Uma questão que representa algo errado no código. Se
isso ainda não tiver sido quebrado, será, e provavelmente no
pior momento possível. Isto precisa ser consertado. Ontem!

− Code Smells: Uma questão relacionada à manutenção no


código. Deixá-lo como está significa que, na melhor das
hipóteses, os mantenedores terão mais dificuldade do que
deveriam para fazer mudanças no código. Na pior das
hipóteses, eles ficarão tão confusos com o estado do código
que introduzirão erros adicionais à medida que fizerem
mudanças.

− Vulnerabilidades: Uma questão relacionada à segurança, que


representa uma porta dos fundos aberta para os atacantes.

Cada tipo de problema estará classificado dependendo de sua gravidade,


como:

− Blocker: Bug com alta probabilidade de impacto no


comportamento da aplicação na produção: vazamento de
memória, conexão JDBC não fechada, .... O código DEVE ser
consertado imediatamente.

− Critical: Um bug com baixa probabilidade de afetar o


comportamento da aplicação na produção ou um problema
que represente uma falha de segurança: bloco de captura
vazio, injeção SQL, ... O código DEVE ser revisto
imediatamente.

47
− Major: Falha de qualidade que pode causar grande impacto na
produtividade do desenvolvedor: peça de código não coberta,
blocos duplicados, parâmetros não utilizados, ...

− Minor: Falha de qualidade que pode afetar ligeiramente a


produtividade do desenvolvedor: as linhas não devem ser
muito longas, as declarações de "troca" devem ter pelo menos
3 casos, ...

− Info: Nem um bug, nem uma falha de qualidade, apenas uma


descoberta.

Outras terminologias importantes:

Lista completa dos conceitos disponível em:


https://docs.sonarqube.org/latest/user-guide/concepts/

− Remediation cost: O tempo estimado necessário para corrigir


problemas de Vulnerabilidade e Confiabilidade.

− Snapshot: Um conjunto de medidas e problemas sobre um


determinado projeto em um determinado momento. É gerada
uma ‘foto’ para cada análise.

− Technical debt: O tempo estimado necessário para corrigir


todos os problemas de manutenibilidade / code smells.

− New Code: Um conjunto de mudanças ou período em que você


está acompanhando de perto a introdução de novos

48
problemas no código. O ideal é que isso ocorra desde a versão
anterior (última execução do scanner).

3.4. Dívida técnica

Esse termo é comumente confundido e traduzido como débito técnico em


português, mas a tradução correta de technical debt é dívida técnica.

Pensando em dívida bancária, lembre-se que ela não cresce aos poucos, mas
exponencialmente. O mesmo ocorre se não dermos atenção aos pequenos problemas
nos códigos, eles se acumulam a tal ponto que a correção deles acaba se tornando cada
vez mais onerosa ao longo do tempo.

O termo ‘programa macarrônico’ ilustra também a dificuldade de alguém


conseguir entender o programa, o que pode dificultar seu entendimento e correção em
caso de problemas.

Aqui, alguns pontos que podem ser considerados para identificar que o código
esteja sofrendo devido à falta de refatoração:

Fonte: criação da professora, apresentado no Minas Testing Conference (2021).

49
Segundo KIM et al. (2016), o termo Greenfield e Brownfield tem sua origem em
projetos urbanos de planejamento e construção. Na tecnologia o termo Greenfield está
relacionado a projetos iniciando do zero, com poucas preocupações com código, bases,
processos e equipes e, em contrapartida, Brownfield está relacionado a projetos de
produtos e serviços já existentes, o que normalmente traz um grande acúmulo de dívida
técnica, como não ter teste automatizado algum ou rodando em plataformas não
suportadas.

Entender essa diferença faz parte da cultura DevOps e times SRE. Neste
módulo, o termo será utilizado como uma das métricas dentro do SonarQube, com uma
definição específica.

3.5. Definições de métricas

Agora vamos conhecer as métricas utilizadas no SONAQUBE (2021), para que


se familiarize com os termos.

• Complexity: É a Complexidade Ciclomática calculada com base no número de


caminhos através do código. Sempre que o fluxo de controle de uma função
se divide, o contador de complexidade é incrementado por um. Cada função
tem uma complexidade mínima de 1. Esse cálculo varia ligeiramente de acordo
com a linguagem, pois as palavras-chave e as funcionalidades podem variar.

• Duplications: Há uma variação na contagem de duplicações:

− Blocos de linhas duplicadas;

− Arquivos duplicados;

− Linhas duplicadas;

50
− % de linhas duplicadas = linhas duplicadas / total de linhas *
100 (onde / é divisão e * é multiplicação).

• Issues: são considerados como erros, problemas ou violações.

• Maintainability: é o total de problemas Code Smells encontrados.

• O índice de manutenibilidade é a classificação dada ao seu projeto em relação


ao valor de seu Índice de Dívida Técnica.

A pontuação padrão de Maintainability Rating é:

A=0-0,05, B=0,06-0,1, C=0,11-0,20, D=0,21-0,5, E=0,51-1

A escala de Manutenibilidade pode ser declarada alternadamente dizendo que,


se o custo de remediação pendente for:

− <=5% do tempo que já passou na aplicação, a classificação é A;

− entre 6 e 10% a classificação é um B;

− entre 11 e 20% a classificação é de C;

− entre 21 e 50% a classificação é um D;

− qualquer coisa acima de 50% é um E.

• Reliability: Confiabilidade, é o número de bugs.

• Reliability Rating: o índice de confiabilidade é definido entre notas de A a E,


sendo:

− A = zero bugs;

51
− B = no mínimo 1 bug de severidade Minor;

− C = no mínimo 1 bug de severidade Major;

− D = no mínimo 1 bug de severidade Critical;

− E = no mínimo 1 bug de severidade Blocker.

• Security: Segurança é o número de vulnerabilidades encontradas.

• Security Rating: O índice de segurança é definido por notas de A a E:

− A = zero vulnerabilidades;

− B = no mínimo 1 vulnerabilidade de severidade Minor;

− C = no mínimo 1 vulnerabilidade de severidade Major;

− D = no mínimo 1 vulnerabilidade de severidade Critical;

− E = no mínimo 1 vulnerabilidade de severidade Blocker.

• Lines of code: Linhas de código é o número de linhas físicas que contêm no


mínimo um caracter que não seja nem um espaço em branco, nem uma
tabulação, nem parte de um comentário.

52
Capítulo 4. O que são Quality Gates

4.1. Quality Gates

Traduzindo, seriam os Portões da Qualidade. São eles que aplicam políticas de


qualidade na organização, respondendo uma pergunta: “meu projeto está pronto para
ser implantado?”.

Neles são definidas as regras que serão aplicadas ao executar uma inspeção do
código. E os resultados terão dois valores possíveis: Error (Failed) ou OK (Passed). O
relatório final da inspeção revelará exatamente em quais condições o código passou ou
falhou e, assim, será possível corrigi-lo conforme instruções encontradas nos
comentários da ferramenta.

As regras são definidas pelos times que administram a ferramenta, times de


Qualidade ou até mesmo o SRE. Somente usuários com alçada de Administradores de
Quality Gates poderão criar, alterar, excluir regras.

Usualmente, haverá ao menos um Quality Gate, mas isso pode ser alterado,
dependendo da necessidade dos projetos que a organização possuir.

Se nada for configurado, o SonarScanner utilizará o Quality Gate padrão


chamado “Sonar way”.

As regras poderão ser criadas para todo o código ou somente para o código
novo ou alterado.

Ao definir um Quality Gate, tenha em mente que cada condição é uma


combinação de:

• Métrica;

53
• Operador de comparação;

• Um valor de erro.

Por exemplo:

Regra: Erro do tipo Blocker (Métrica) for > (maior = comparação) que zero
(valor do erro), o que significa que não será admitido nenhum erro de gravidade Blocker.
Se isso ocorrer, o resultado do Quality Gate será Failed.

54
Exemplo de execução com sucesso:

4.2. Quality Profiles

Quality Profiles são os perfis de qualidade, o componente principal do


SonarQube, onde você define um conjunto de regras. Cada linguagem possui seu
próprio Quality Profile (disponível para consulta na aba Quality Profiles, e clicando na
linguagem).

É possível alterar o Quality Profile, desde que haja permissão de administrador


de Quality Profile. É possível dar permissão para somente um Quality Profile e não todos.
Dificilmente será necessário alterar esse perfil, mas é bom saber que isto é possível.

55
4.3. Estratégias de implementação

Para uma abordagem inicial de regras, é necessária uma boa avaliação da


situação atual dos projetos existentes na organização. Pode-se iniciar com poucos e
pequenos projetos e seguir expandindo para os demais, assim que tiverem mais
experiência com a ferramenta.

O Quality Gate padrão é o “Sonar way”. Abaixo podemos observar os


operadores e valores que existem:

Para se criar um novo Quality Gate, clicar no botão ‘Copy’, alterar as condições
que julgar necessárias, e criar um novo nome. Após isso, também é possível alterar para
que esse novo Gate seja o padrão (default). Isso é muito prático quando temos uma
estratégia, por exemplo, de execuções de projetos novos e legado.

Suponha que seu legado não tenha nenhuma cobertura de testes unitários e
que não será necessário melhorar esses projetos, pois serão desativados num período
curto de tempo, sendo um desperdício investir em corrigir ou melhorá-los. Ao criar este
novo Gate e o pipeline estiver apontando para ele, as regras serão diferentes das que

56
os projetos novos são submetidos, possibilitando ter resultados aderentes à estratégia
da organização.

4.4. Cuidados gerais

Como visto no início deste módulo, várias configurações são realizadas


manualmente através do arquivo sonar-properties, onde é possível alterar o que o
código pode desconsiderar em sua inspeção.

Com a evolução de seu pipeline de CI, é importante que esses arquivos estejam
em locais onde o desenvolvedor não possa atualizá-los. Ou, minimamente, haver uma
auditoria para que casos assim não passem despercebidos.

Após utilizar com frequência o SonarQube, também haverá acúmulo de


informações armazenadas no Banco de Dados, então aplicar limpezas automatizadas
são uma boa maneira de não exceder os limites de armazenamento de seus bancos.

Com essa limpeza recorrente, alguns dados importantes podem ser excluídos,
então uma boa ideia é ter um mecanismo de armazenamento em um Datalake para que
possam ser utilizados por outras ferramentas, como Kibana, PowerBI ou Grafana.

A limpeza pode seguir a premissa de que o projeto não tenha sofrido execuções
no SonarQube por um período de tempo, digamos 90 dias.

Para fins de acompanhamento da evolução de um projeto utilizando a versão


gratuita, será necessário consolidar os dados em ferramentas próprias para que seja
possível ter uma visão consolidada, como um Portfólio.

57
Referências

ANALYZE Continuous Integration. Microsoft Docs, c2022. Disponível em:


<https://docs.microsoft.com/en-us/learn/modules/analyze-devops-continuous-
planning-intergration/3-analyze-continuous-integration>. Acesso em: 25 fev. 2022.

CONCEPTS. SonarQube Docs 9.3, c2008-2021. Disponível em: <>. Acesso em: 25 fev.
2022.

DAWSON, Maurice; BURREL, Darrell; RAHIM, Emad; BREWSTER, Stephen. Integrating


Software Assurance into the Software Development Life Cycle (SDLC). In: Journaul of
Information Systems Technology and Planning, v. 3, 1 jan. 2010, p. 49-53. Disponível
em:
<https://www.researchgate.net/publication/255965523_Integrating_Software_Assura
nce_into_the_Software_Development_Life_Cycle_SDLC>. Acesso em: 25 fev. 2022.

DIFFERENCE between Static and Dynamic Testing. GeeksforGeeks, 27 fev. 2020.


Disponível em: <https://www.geeksforgeeks.org/difference-between-static-and-
dynamic-testing/>. Acesso em: 25 fev. 2022.

E-BOOK—Secrets Revealed: What Emerging Tech Companies Are Looking for in


DevOps/SRE Roles. Harrison Clarke, c2022. Disponível em:
<https://www.harrisonclarke.com/what-emerging-tech-companies-are-looking-for-in-
devops-roles>. Acesso em: 23 fev. 2022.

EXPLORE Continuous Quality. Microsoft Docs, c2022. Disponível em:


<https://docs.microsoft.com/en-us/learn/modules/explain-devops-continous-delivery-
quality/3-explore-continuous-quality>. Acesso em: 25 fev. 2022.

58
EXPLORE Continuous Quality. Microsoft Learning, c2022. Disponível em:
<https://docs.microsoft.com/en-us/learn/modules/explain-devops-continous-delivery-
quality/3-explore-continuous-quality>. Acesso em: 23 fev. 2022.

INSTALL the Server. SonarQube Docs 9.3, c2008-2021. Disponível em:


<https://docs.sonarqube.org/latest/setup/install-server/>. Acesso em: 25 fev. 2022.

KIM, Gene. Greenfield Vs. Brownfield Services. In: KIM, Gene; HUMBLE, Jez; DEBOIS,
Patrick; WILLIS, John. The Devops Handbook: How to Create World-Class Agility,
Reliability, & Security in Technology Organizations. 1. ed. Portland: IT Revolution Press,
2016. cap., p. 54-56. E-book (130 p.).

MUNIZ, Antonio. Aplique técnicas de qualidade no início do ciclo para implantação


contínua de software. In: Jornada Ágil de Qualidade. 1. ed. Rio de Janeiro: Brasport,
2019. p. 54-58.

SONAR Reviews. Gartner PeerInsights, c2022. Disponível em:


<https://www.gartner.com/reviews/market/communications-platform-as-a-
service/vendor/sonar/product/sonar?marketSeoName=communications-platform-as-
a-service&productSeoName=sonar&vendorSeoName=sonar>. Acesso em: 23 fev. 2022.

SONARQUBE. sonarqube, c2022. Your teammate for Code Quality and Code Security.
Disponível em: <https://www.sonarqube.org/>. Acesso em: 23 fev. 2022.

STOTNY, Łukasz. The difference between static and dynamic analysis. Enterfea, 24 out.
2019. Disponível em: <https://enterfea.com/difference-between-static-and-dynamic-
analysis/>. Acesso em: 25 fev. 2022.

59
WHAT is a CI/CD pipeline? Understanding DevOps. Red Hat, 8 jan. 2019. Disponível em:
<https://www.redhat.com/en/topics/devops/what-cicd-pipeline>. Acesso em: 23 fev.
2022.

60

Você também pode gostar