{"id":91065,"date":"2020-08-08T01:42:18","date_gmt":"2020-08-07T23:42:18","guid":{"rendered":"https:\/\/prohoster.info\/blog\/administrirovanie\/staticheskij-analiz-ot-znakomstva-do-integraczii"},"modified":"2020-08-08T01:42:18","modified_gmt":"2020-08-07T23:42:18","slug":"staticheskij-analiz-ot-znakomstva-do-integraczii","status":"publish","type":"post","link":"https:\/\/prohoster.info\/pt\/blog\/administrirovanie\/staticheskij-analiz-ot-znakomstva-do-integraczii","title":{"rendered":"An\u00e1lise Est\u00e1tica \u2013 Da Introdu\u00e7\u00e3o \u00e0 Integra\u00e7\u00e3o","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>Cansado de revis\u00f5es de c\u00f3digo intermin\u00e1veis ou depura\u00e7\u00e3o, \u00e0s vezes voc\u00ea se pergunta como poderia simplificar sua vida. E, ap\u00f3s uma pequena pesquisa ou um encontro casual, voc\u00ea pode se deparar com a m\u00e1gica express\u00e3o: \"An\u00e1lise Est\u00e1tica\". Vamos ver o que \u00e9 isso e como pode interagir com seu projeto.<\/p>\n<p><img decoding=\"async\" alt=\"An\u00e1lise Est\u00e1tica \u2013 Da Introdu\u00e7\u00e3o \u00e0 Integra\u00e7\u00e3o\" src=\"\/wp-content\/uploads\/2020\/08\/7811b22510bdda6f3f774b8335cbeabe.png\" style=\"display:block;margin: 0 auto;\" \/><noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><br \/>\nNa verdade, se voc\u00ea est\u00e1 programando em alguma linguagem moderna, ent\u00e3o, mesmo sem saber, voc\u00ea a passou por um analisador est\u00e1tico. A quest\u00e3o \u00e9 que qualquer compilador moderno fornece, ainda que em um n\u00edvel m\u00ednimo, um conjunto de avisos sobre problemas potenciais no c\u00f3digo. Por exemplo, ao compilar c\u00f3digo C++ no Visual Studio, voc\u00ea pode ver o seguinte:<\/p>\n<p><img decoding=\"async\" alt=\"An\u00e1lise Est\u00e1tica \u2013 Da Introdu\u00e7\u00e3o \u00e0 Integra\u00e7\u00e3o\" src=\"\/wp-content\/uploads\/2020\/08\/a267e4e8a57c1a32e508e5e1983c5ff0.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nNesta sa\u00edda, vemos que a vari\u00e1vel <i>var<\/i> n\u00e3o foi utilizada em nenhum lugar da fun\u00e7\u00e3o. Portanto, na verdade, voc\u00ea quase sempre usou um simples analisador est\u00e1tico de c\u00f3digo. No entanto, ao contr\u00e1rio de analisadores profissionais como Coverity, Klocwork ou PVS-Studio, os avisos fornecidos pelo compilador podem apontar apenas para um pequeno espectro de problemas.<\/p>\n<p>Se voc\u00ea n\u00e3o sabe ao certo o que \u00e9 an\u00e1lise est\u00e1tica e como implement\u00e1-la, <noindex><a rel=\"nofollow\" href=\"https:\/\/www.viva64.com\/ru\/t\/0046\/\">leia este artigo<\/a><\/noindex>, para se familiarizar melhor com essa metodologia. <\/p>\n<h2>Para que serve a an\u00e1lise est\u00e1tica?<\/h2>\n<p>\nEm poucas palavras: acelerar e simplificar. <\/p>\n<p>A an\u00e1lise est\u00e1tica permite encontrar uma s\u00e9rie de problemas diversos no c\u00f3digo: desde o uso incorreto de constru\u00e7\u00f5es da linguagem at\u00e9 erros de digita\u00e7\u00e3o. Por exemplo, em vez de <\/p>\n<pre><code class=\"cpp\">auto x = obj.x;\nauto y = obj.y;\nauto z = obj.z;<\/code><\/pre>\n<p>\nVoc\u00ea escreveu o seguinte c\u00f3digo:<\/p>\n<pre><code class=\"cpp\">auto x = obj.x;\nauto y = obj.y;\nauto z = obj.x;<\/code><\/pre>\n<p>\nComo voc\u00ea pode ver, na \u00faltima linha houve um erro de digita\u00e7\u00e3o. Por exemplo, o PVS-Studio emite o seguinte aviso:<\/p>\n<p><noindex><a rel=\"nofollow\" href=\"https:\/\/www.viva64.com\/ru\/w\/v537\/\">V537<\/a><\/noindex> Considere revisar a corre\u00e7\u00e3o do uso do item 'y'.<\/p>\n<p>Se voc\u00ea quiser interagir com esse erro manualmente, experimente o exemplo dispon\u00edvel no Compiler Explorer: *<noindex><a rel=\"nofollow\" href=\"https:\/\/godbolt.org\/z\/cd4WK7\">clique<\/a><\/noindex>*.<\/p>\n<p>E como voc\u00ea entende, nem sempre \u00e9 poss\u00edvel prestar aten\u00e7\u00e3o a essas partes do c\u00f3digo imediatamente, e por causa disso, voc\u00ea pode passar horas depurando, sem entender por que tudo est\u00e1 funcionando de forma t\u00e3o estranha. <\/p>\n<p>No entanto, esse \u00e9 um erro evidente. E se o desenvolvedor escreveu um c\u00f3digo n\u00e3o otimizado porque esqueceu algum detalhe da linguagem? Ou mesmo cometeu um comportamento <noindex><a rel=\"nofollow\" href=\"https:\/\/www.viva64.com\/ru\/t\/0066\/\">indefinido no c\u00f3digo?<\/a><\/noindex>? \u041a \u0441\u043e\u0436\u0430\u043b\u0435\u043d\u0438\u044e, \u043f\u043e\u0434\u043e\u0431\u043d\u044b\u0435 \u0441\u043b\u0443\u0447\u0430\u0438 \u0441\u043e\u0432\u0435\u0440\u0448\u0435\u043d\u043d\u043e \u043e\u0431\u044b\u0434\u0435\u043d\u043d\u044b \u0438 \u043b\u044c\u0432\u0438\u043d\u0430\u044f \u0447\u0430\u0441\u0442\u044c \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u0442\u0440\u0430\u0442\u0438\u0442\u0441\u044f \u043d\u0430 \u0442\u043e, \u0447\u0442\u043e\u0431\u044b \u043e\u0442\u043b\u0430\u0434\u0438\u0442\u044c \u0441\u043f\u0435\u0446\u0438\u0444\u0438\u0447\u043d\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0449\u0438\u0439 \u043a\u043e\u0434, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u043e\u043f\u0435\u0447\u0430\u0442\u043a\u0438, \u0442\u0438\u043f\u0438\u0447\u043d\u044b\u0435 \u043e\u0448\u0438\u0431\u043a\u0438 \u0438\u043b\u0438 undefined behavior.<\/p>\n<p>Foi para essas situa\u00e7\u00f5es que a an\u00e1lise est\u00e1tica surgiu. \u00c9 uma ferramenta para o desenvolvedor que aponta diversos problemas no c\u00f3digo e explica na documenta\u00e7\u00e3o por que n\u00e3o se deve escrever assim, quais consequ\u00eancias isso pode ter e como corrigir. Aqui est\u00e1 um exemplo de como isso pode parecer:<noindex><a rel=\"nofollow\" href=\"https:\/\/www.viva64.com\/ru\/w\/v702\/\">clique<\/a><\/noindex>*.<\/p>\n<p>Mais erros interessantes que o analisador pode detectar podem ser encontrados nos artigos:<\/p>\n<ul>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/www.viva64.com\/ru\/b\/0700\/\">Top 10 erros em projetos C++ de 2019<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/www.viva64.com\/ru\/b\/0698\/\">Top 10 erros em projetos C# de 2019<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/www.viva64.com\/ru\/b\/0699\/\">Top 10 erros em projetos Java de 2019<\/a><\/noindex><\/li>\n<\/ul>\n<p>\nAgora que voc\u00ea leu este material e se convenceu da utilidade da an\u00e1lise est\u00e1tica, pode estar se perguntando como aplic\u00e1-la na pr\u00e1tica. Mas por onde come\u00e7ar? Como integrar uma nova ferramenta ao projeto atual? E como apresentar isso \u00e0 equipe? Voc\u00ea encontrar\u00e1 respostas para essas perguntas abaixo.<\/p>\n<p><b>Observa\u00e7\u00e3o.<\/b> A an\u00e1lise est\u00e1tica n\u00e3o substitui nem anula algo t\u00e3o \u00fatil como as revis\u00f5es de c\u00f3digo. Ela complementa esse processo, ajudando a detectar e corrigir erros de digita\u00e7\u00e3o, imprecis\u00f5es e constru\u00e7\u00f5es perigosas de forma antecipada. \u00c9 muito mais produtivo focar nas revis\u00f5es de c\u00f3digo nos algoritmos e na clareza do c\u00f3digo, em vez de ficar buscando um par\u00eantese colocado em um lugar errado ou <noindex><a rel=\"nofollow\" href=\"https:\/\/www.viva64.com\/ru\/b\/0509\/\">ler fun\u00e7\u00f5es de compara\u00e7\u00e3o entediantes.<\/a><\/noindex>.<\/p>\n<h2>0. Apresenta\u00e7\u00e3o da ferramenta<\/h2>\n<p>\nTudo come\u00e7a com uma vers\u00e3o de teste. De fato, \u00e9 dif\u00edcil decidir implementar qualquer coisa no processo de desenvolvimento se nunca viu a ferramenta ao vivo. Portanto, o primeiro passo \u00e9 baixar <noindex><a rel=\"nofollow\" href=\"https:\/\/www.viva64.com\/ru\/pvs-studio-download\/?promo=mscas\">a vers\u00e3o de teste.<\/a><\/noindex>.<\/p>\n<p><b>O que voc\u00ea aprender\u00e1 nesta etapa:<\/b><\/p>\n<ul>\n<li>Quais s\u00e3o as maneiras de interagir com o analisador;<\/li>\n<li>Se o analisador \u00e9 compat\u00edvel com o seu ambiente de desenvolvimento;<\/li>\n<li>Quais problemas atualmente existem em seus projetos.<\/li>\n<\/ul>\n<p>\nDepois de instalar tudo o que voc\u00ea precisa, o primeiro passo \u00e9 iniciar a an\u00e1lise de todo o projeto (<noindex><a rel=\"nofollow\" href=\"https:\/\/www.viva64.com\/ru\/b\/0635\/\">Windows<\/a><\/noindex>, <noindex><a rel=\"nofollow\" href=\"https:\/\/www.viva64.com\/ru\/m\/0036\/\">Linux<\/a><\/noindex>, <noindex><a rel=\"nofollow\" href=\"https:\/\/www.viva64.com\/ru\/m\/0036\/\">macOS<\/a><\/noindex>). No caso do PVS-Studio no Visual Studio, voc\u00ea ver\u00e1 uma imagem semelhante (clic\u00e1vel):<\/p>\n<p><img decoding=\"async\" alt=\"An\u00e1lise Est\u00e1tica \u2013 Da Introdu\u00e7\u00e3o \u00e0 Integra\u00e7\u00e3o\" src=\"\/wp-content\/uploads\/2020\/08\/865b2dfa10661e4999238cdccf8860dc.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nA quest\u00e3o \u00e9 que, normalmente, projetos com uma grande base de c\u00f3digo geram uma enorme quantidade de avisos por parte dos analisadores est\u00e1ticos. N\u00e3o h\u00e1 necessidade de corrigir todos, pois seu projeto j\u00e1 est\u00e1 funcionando, o que significa que esses problemas n\u00e3o s\u00e3o cr\u00edticos. No entanto, voc\u00ea <noindex><a rel=\"nofollow\" href=\"https:\/\/www.viva64.com\/ru\/b\/0633\/\">pode verificar os avisos mais interessantes.<\/a><\/noindex> e corrigi-los se necess\u00e1rio. Para isso, \u00e9 preciso filtrar a sa\u00edda e deixar apenas as mensagens mais confi\u00e1veis. No plugin PVS-Studio para Visual Studio, isso \u00e9 feito filtrando por n\u00edveis e categorias de erros. Para uma sa\u00edda mais precisa, mantenha habilitadas apenas <i>Alto<\/i> e <i>Geral<\/i> (tamb\u00e9m clic\u00e1vel):<\/p>\n<p><img decoding=\"async\" alt=\"An\u00e1lise Est\u00e1tica \u2013 Da Introdu\u00e7\u00e3o \u00e0 Integra\u00e7\u00e3o\" src=\"\/wp-content\/uploads\/2020\/08\/400b90713f67b531e4ed513ea9d340a6.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nRealmente, 178 avisos s\u00e3o muito mais f\u00e1ceis de revisar do que v\u00e1rios milhares...<\/p>\n<p>Nas abas <i>Medium<\/i> e <i>Baixo<\/i> frequentemente aparecem bons avisos, por\u00e9m nessas categorias est\u00e3o inclu\u00eddas aquelas diagn\u00f3sticas que t\u00eam menor precis\u00e3o (confiabilidade). Mais informa\u00e7\u00f5es sobre os n\u00edveis de avisos e op\u00e7\u00f5es de funcionamento no Windows podem ser vistas aqui: *<noindex><a rel=\"nofollow\" href=\"https:\/\/www.viva64.com\/ru\/m\/0007\">clique<\/a><\/noindex>*.<\/p>\n<p>Depois de revisar os erros mais interessantes (e corrigi-los com sucesso), \u00e9 hora de <noindex><a rel=\"nofollow\" href=\"https:\/\/www.viva64.com\/ru\/m\/0032\/\">silenciar os avisos restantes<\/a><\/noindex>. Isso \u00e9 necess\u00e1rio para que novos avisos n\u00e3o se percam entre os antigos. Al\u00e9m disso, o analisador est\u00e1tico \u00e9 uma ferramenta para o programador, e n\u00e3o uma lista de bugs. \ud83d\ude42<\/p>\n<h2>1. Automa\u00e7\u00e3o<\/h2>\n<p>\nAp\u00f3s a introdu\u00e7\u00e3o, chega o momento de configurar plugins e integr\u00e1-los ao CI. Isso deve ser feito antes que os programadores comecem a usar o analisador est\u00e1tico. A quest\u00e3o \u00e9 que o programador pode esquecer de ativar a an\u00e1lise ou simplesmente n\u00e3o querer. Para isso, \u00e9 necess\u00e1rio fazer uma verifica\u00e7\u00e3o final para que o c\u00f3digo n\u00e3o verificado n\u00e3o possa entrar na branch principal de desenvolvimento.<\/p>\n<p><b>O que voc\u00ea descobrir\u00e1 nesta etapa:<\/b><\/p>\n<ul>\n<li>Quais op\u00e7\u00f5es de automa\u00e7\u00e3o a ferramenta oferece;<\/li>\n<li>Se o analisador \u00e9 compat\u00edvel com seu sistema de build.<\/li>\n<\/ul>\n<p>\nComo n\u00e3o existe documenta\u00e7\u00e3o perfeita, \u00e0s vezes \u00e9 necess\u00e1rio escrever para <noindex><a rel=\"nofollow\" href=\"https:\/\/www.viva64.com\/ru\/about-feedback\/\">suporte<\/a><\/noindex>. Isso \u00e9 normal, e ficamos felizes em ajudar voc\u00ea. \ud83d\ude42<\/p>\n<p>Agora vamos abordar os servi\u00e7os de integra\u00e7\u00e3o cont\u00ednua (CI). Qualquer analisador pode ser integrado a eles sem grandes problemas. Para isso, \u00e9 preciso criar uma etapa separada no pipeline, que geralmente fica ap\u00f3s a build e os testes unit\u00e1rios. Isso \u00e9 feito usando v\u00e1rias ferramentas de console. Por exemplo, o PVS-Studio oferece as seguintes ferramentas:<\/p>\n<ul>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/www.viva64.com\/ru\/m\/0035\">PVS-Studio_Cmd.exe<\/a><\/noindex> (an\u00e1lise de solu\u00e7\u00f5es, projetos C# e C++ no Windows)<\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/www.viva64.com\/ru\/m\/0031\/\">CLMonitor.exe<\/a><\/noindex> (monitoramento de compila\u00e7\u00e3o)<\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/www.viva64.com\/ru\/m\/0036\/\">pvs-studio-analyzer<\/a><\/noindex> (an\u00e1lise de projetos C++ no Linux \/ macOS)<\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/www.viva64.com\/ru\/m\/0035\/\">pvs-studio-dotnet<\/a><\/noindex> (an\u00e1lise de solu\u00e7\u00f5es, projetos C# no Linux \/ macOS)<\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/www.viva64.com\/ru\/m\/0044\/\">pvs-studio.jar<\/a><\/noindex> (an\u00e1lise de projetos Java)<\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/www.viva64.com\/ru\/m\/0038\/\">PlogConverter<\/a><\/noindex> (conversor de arquivos de relat\u00f3rio)<\/li>\n<\/ul>\n<p>\nPara integrar a an\u00e1lise ao CI, \u00e9 necess\u00e1rio fazer tr\u00eas coisas:<\/p>\n<ul>\n<li>Instalar o analisador;<\/li>\n<li>Iniciar a an\u00e1lise;<\/li>\n<li>Entregar os resultados.<\/li>\n<\/ul>\n<p>\nPor exemplo, para instalar o PVS-Studio no Linux (base Debian), voc\u00ea deve executar os seguintes comandos:<\/p>\n<pre><code class=\"bash\">wget -q -O - https:\/\/files.viva64.com\/etc\/pubkey.txt \n    | sudo apt-key add -\nsudo wget -O \/etc\/apt\/sources.list.d\/viva64.list \n  https:\/\/files.viva64.com\/etc\/viva64.list\n  \nsudo apt-get update -qq\nsudo apt-get install -qq pvs-studio<\/code><\/pre>\n<p>\nNos sistemas operacionais Windows, n\u00e3o h\u00e1 como instalar o analisador pelo gerenciador de pacotes, por\u00e9m \u00e9 poss\u00edvel implantar o analisador a partir da linha de comando:<\/p>\n<pre><code class=\"powershell\">PVS-Studio_setup.exe \/verysilent \/suppressmsgboxes \n\/norestart \/nocloseapplications<\/code><\/pre>\n<p>\nMais informa\u00e7\u00f5es sobre a implanta\u00e7\u00e3o do PVS-Studio em sistemas Windows podem ser encontradas em *<noindex><a rel=\"nofollow\" href=\"https:\/\/www.viva64.com\/ru\/m\/0025\/\">aqui<\/a><\/noindex>*.<\/p>\n<p>Ap\u00f3s a instala\u00e7\u00e3o, voc\u00ea deve iniciar a an\u00e1lise. No entanto, isso \u00e9 recomendado apenas depois que a compila\u00e7\u00e3o e os testes foram conclu\u00eddos. Isso se deve ao fato de que a an\u00e1lise est\u00e1tica geralmente requer duas vezes mais tempo do que a compila\u00e7\u00e3o.<\/p>\n<p>Como a forma de iniciar depende da plataforma e das caracter\u00edsticas do projeto, eu mostrarei uma op\u00e7\u00e3o para C++ (Linux) como exemplo:<\/p>\n<pre><code class=\"bash\">pvs-studio-analyzer analyze -j8 \n                            -o PVS-Studio.log\nplog-converter -t errorfile PVS-Studio.log --cerr -w<\/code><\/pre>\n<p>\nO primeiro comando executar\u00e1 a an\u00e1lise, e o segundo <noindex><a rel=\"nofollow\" href=\"https:\/\/www.viva64.com\/ru\/m\/0038\/\">converte<\/a><\/noindex>o relat\u00f3rio para o formato de texto, o exibir\u00e1 na tela e retornar\u00e1 um c\u00f3digo de sa\u00edda diferente de 0 em caso de avisos. Esse mecanismo \u00e9 conveniente para bloquear a compila\u00e7\u00e3o caso haja mensagens de erro. No entanto, voc\u00ea sempre pode remover a flag <i>-w<\/i> e n\u00e3o bloquear a compila\u00e7\u00e3o que cont\u00e9m avisos.<\/p>\n<p><b>Observa\u00e7\u00e3o.<\/b> O formato de texto n\u00e3o \u00e9 conveniente. Ele \u00e9 apresentado apenas como exemplo. Observe um formato de relat\u00f3rio mais interessante \u2014 FullHtml. Ele permite a navega\u00e7\u00e3o pelo c\u00f3digo.<\/p>\n<p>Voc\u00ea pode ler mais sobre a configura\u00e7\u00e3o da an\u00e1lise no CI no artigo \"<noindex><a rel=\"nofollow\" href=\"https:\/\/www.viva64.com\/ru\/m\/0005\">PVS-Studio e Integra\u00e7\u00e3o Cont\u00ednua<\/a><\/noindex>\" (Windows) ou \"<noindex><a rel=\"nofollow\" href=\"https:\/\/www.viva64.com\/ru\/b\/0661\/\">Como configurar o PVS-Studio no Travis CI<\/a><\/noindex>\" (Linux).<\/p>\n<p>Bem, voc\u00ea configurou o funcionamento do analisador no servidor de build. Agora, se algu\u00e9m enviar c\u00f3digo n\u00e3o verificado, a fase de verifica\u00e7\u00e3o falhar\u00e1, e voc\u00ea conseguir\u00e1 detectar o problema, no entanto, isso n\u00e3o \u00e9 t\u00e3o conveniente, pois \u00e9 mais eficaz verificar o projeto antes da mesclagem, na fase do pull request.<\/p>\n<p>Em geral, a configura\u00e7\u00e3o da an\u00e1lise do pull request n\u00e3o difere muito da execu\u00e7\u00e3o normal da an\u00e1lise no CI. Exceto pela necessidade de obter a lista de arquivos modificados. Geralmente, voc\u00ea pode obt\u00ea-los solicitando a diferen\u00e7a entre os branches usando git:<\/p>\n<pre><code class=\"bash\">git diff --name-only HEAD origin\/$MERGE_BASE &gt; .pvs-pr.list<\/code><\/pre>\n<p>\nAgora \u00e9 necess\u00e1rio passar essa lista de arquivos para o analisador. Por exemplo, no PVS-Studio isso \u00e9 implementado atrav\u00e9s de uma flag. <i>-S<\/i>:<\/p>\n<pre><code class=\"bash\">pvs-studio-analyzer analyze -j8 \n                            -o PVS-Studio.log \n                            -S .pvs-pr.list<\/code><\/pre>\n<p>\nVoc\u00ea pode aprender mais sobre a an\u00e1lise de pull requests *<noindex><a rel=\"nofollow\" href=\"https:\/\/www.viva64.com\/ru\/b\/0679\/\">aqui<\/a><\/noindex>* Mesmo que seu CI n\u00e3o esteja na lista de servi\u00e7os mencionados no artigo, a se\u00e7\u00e3o geral dedicada \u00e0 teoria desse tipo de an\u00e1lise ser\u00e1 \u00fatil.<\/p>\n<p>Ao configurar a an\u00e1lise de pull requests, voc\u00ea poder\u00e1 bloquear commits que contenham avisos, criando assim um limite que c\u00f3digo n\u00e3o verificado n\u00e3o poder\u00e1 ultrapassar.<\/p>\n<p>Isso \u00e9 muito bom, no entanto, gostaria de ter a possibilidade de ver todos os avisos em um s\u00f3 lugar. N\u00e3o apenas do analisador est\u00e1tico, mas tamb\u00e9m dos testes unit\u00e1rios ou do analisador din\u00e2mico. Para isso, existem v\u00e1rios servi\u00e7os e plugins. O PVS-Studio, por exemplo, possui um <noindex><a rel=\"nofollow\" href=\"https:\/\/www.viva64.com\/ru\/m\/0037\/\">plugin para integra\u00e7\u00e3o no SonarQube.<\/a><\/noindex>.<\/p>\n<h2>2. Integra\u00e7\u00e3o nas m\u00e1quinas dos desenvolvedores<\/h2>\n<p>\nAgora \u00e9 hora de instalar e configurar o analisador para uso di\u00e1rio durante o desenvolvimento. Neste ponto, voc\u00ea j\u00e1 se familiarizou com a maior parte dos modos de opera\u00e7\u00e3o, portanto, essa pode ser considerada a parte mais f\u00e1cil.<\/p>\n<p>Como a op\u00e7\u00e3o mais simples, os desenvolvedores podem instalar o analisador necess\u00e1rio por conta pr\u00f3pria. No entanto, isso levar\u00e1 muito tempo e os desviar\u00e1 do desenvolvimento, ent\u00e3o voc\u00ea pode automatizar esse processo usando um instalador e as flags necess\u00e1rias. Para o PVS-Studio, existem v\u00e1rias <noindex><a rel=\"nofollow\" href=\"https:\/\/www.viva64.com\/ru\/m\/0025\/\">flags para instala\u00e7\u00e3o automatizada.<\/a><\/noindex>. No entanto, sempre existem gerenciadores de pacotes, como Chocolatey (Windows), Homebrew (macOS) ou dezenas de op\u00e7\u00f5es para Linux.<\/p>\n<p>Em seguida, voc\u00ea precisar\u00e1 instalar os plugins necess\u00e1rios, como para <noindex><a rel=\"nofollow\" href=\"https:\/\/www.viva64.com\/ru\/b\/0635\/\">Visual Studio.<\/a><\/noindex>, <noindex><a rel=\"nofollow\" href=\"https:\/\/plugins.jetbrains.com\/plugin\/12263-pvs-studio-for-idea-and-android-studio\/\">IDEA.<\/a><\/noindex>, <noindex><a rel=\"nofollow\" href=\"https:\/\/www.viva64.com\/ru\/m\/0052\/\">Rider.<\/a><\/noindex> etc.<\/p>\n<h2>3. Uso di\u00e1rio<\/h2>\n<p>\nNesta etapa, \u00e9 hora de dizer algumas palavras sobre maneiras de acelerar o trabalho do analisador durante o uso di\u00e1rio. A an\u00e1lise completa de todo o projeto leva muito tempo, mas com que frequ\u00eancia mudamos o c\u00f3digo de uma s\u00f3 vez em todo o projeto? \u00c9 raro existir uma refatora\u00e7\u00e3o t\u00e3o grande que afete imediatamente toda a base de c\u00f3digo. O n\u00famero de arquivos modificados de uma vez raramente ultrapassa uma d\u00fazia, portanto, vale a pena analis\u00e1-los. Para essa situa\u00e7\u00e3o, existe <noindex><a rel=\"nofollow\" href=\"https:\/\/www.viva64.com\/ru\/m\/0024\/\">o modo de an\u00e1lise incremental.<\/a><\/noindex>. Apenas n\u00e3o se assuste, n\u00e3o \u00e9 mais uma ferramenta. Este \u00e9 um modo especial que permite analisar apenas os arquivos modificados e suas depend\u00eancias, e isso acontece automaticamente ap\u00f3s a compila\u00e7\u00e3o, se voc\u00ea estiver trabalhando em uma IDE com um plugin instalado. <\/p>\n<p>Caso o analisador encontre problemas no c\u00f3digo recentemente modificado, ele avisar\u00e1 por conta pr\u00f3pria. Por exemplo, o PVS-Studio o informar\u00e1 atrav\u00e9s de um alerta:<\/p>\n<p><img decoding=\"async\" alt=\"An\u00e1lise Est\u00e1tica \u2013 Da Introdu\u00e7\u00e3o \u00e0 Integra\u00e7\u00e3o\" src=\"\/wp-content\/uploads\/2020\/08\/20456a6652f0bd4f62d9aea5f1dda5cd.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nN\u00e3o basta dizer aos desenvolvedores para usar a ferramenta. \u00c9 necess\u00e1rio explicar a eles o que \u00e9 e como utiliz\u00e1-la. Aqui est\u00e3o artigos sobre como come\u00e7ar rapidamente com o PVS-Studio, mas tutoriais semelhantes podem ser encontrados para qualquer ferramenta de sua prefer\u00eancia:<\/p>\n<ul>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/www.viva64.com\/ru\/m\/0007\/\">Como executar o PVS-Studio no Windows (C, C++, C#)<\/a><\/noindex> <\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/www.viva64.com\/ru\/m\/0036\/\">Como executar o PVS-Studio no Linux e macOS (C, C++)<\/a><\/noindex> <\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/www.viva64.com\/ru\/m\/0044\/\">Como executar o PVS-Studio Java<\/a><\/noindex><\/li>\n<\/ul>\n<p>\nEsses artigos fornecem todas as informa\u00e7\u00f5es necess\u00e1rias para o uso di\u00e1rio e n\u00e3o consomem muito tempo. \ud83d\ude42<\/p>\n<p>Mesmo na fase inicial de familiariza\u00e7\u00e3o com a ferramenta, neutralizamos muitos avisos durante uma das primeiras execu\u00e7\u00f5es. Infelizmente, os analisadores est\u00e1ticos n\u00e3o s\u00e3o perfeitos, por isso, de vez em quando, geram falsos positivos. Normalmente, \u00e9 f\u00e1cil neutraliz\u00e1-los; por exemplo, no plugin PVS-Studio para Visual Studio, basta clicar em um bot\u00e3o:<\/p>\n<p><img decoding=\"async\" alt=\"An\u00e1lise Est\u00e1tica \u2013 Da Introdu\u00e7\u00e3o \u00e0 Integra\u00e7\u00e3o\" src=\"\/wp-content\/uploads\/2020\/08\/ed5382f468d21b7e711caba73b439fda.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nNo entanto, voc\u00ea n\u00e3o precisa apenas neutraliz\u00e1-los. Por exemplo, voc\u00ea pode relatar a exist\u00eancia de um problema ao suporte. Se o falso positivo puder ser corrigido, nas atualiza\u00e7\u00f5es futuras voc\u00ea notar\u00e1 que cada vez h\u00e1 menos e menos falsos positivos espec\u00edficos para sua base de c\u00f3digo.<\/p>\n<h2>Ap\u00f3s a integra\u00e7\u00e3o<\/h2>\n<p>\nAp\u00f3s passar por todas as etapas de integra\u00e7\u00e3o da an\u00e1lise est\u00e1tica no processo de desenvolvimento. Apesar da import\u00e2ncia da configura\u00e7\u00e3o dessas ferramentas no CI, o lugar mais importante de execu\u00e7\u00e3o \u00e9, de fato, o computador do desenvolvedor. Afinal, o analisador est\u00e1tico n\u00e3o \u00e9 um juiz que diz de longe que o c\u00f3digo n\u00e3o serve. Pelo contr\u00e1rio, \u00e9 um assistente que avisa se voc\u00ea est\u00e1 cansado e lembra se voc\u00ea esqueceu de algo.<\/p>\n<p>A verdade \u00e9 que, sem o uso regular, a an\u00e1lise est\u00e1tica provavelmente n\u00e3o simplificar\u00e1 significativamente o desenvolvimento. Afinal, seu principal benef\u00edcio para o desenvolvedor n\u00e3o reside apenas na identifica\u00e7\u00e3o de \u00e1reas complexas e controversas do c\u00f3digo, mas sim na detec\u00e7\u00e3o precoce dessas quest\u00f5es. Concordamos que descobrir um problema quando as altera\u00e7\u00f5es j\u00e1 foram para teste \u00e9 n\u00e3o apenas desagrad\u00e1vel, mas tamb\u00e9m consome muito tempo. A an\u00e1lise est\u00e1tica, por sua vez, ao ser usada regularmente, rev\u00ea cada altera\u00e7\u00e3o diretamente em seu computador e informa sobre \u00e1reas suspeitas durante o trabalho com o c\u00f3digo.<\/p>\n<p>E se voc\u00ea ou seus colegas ainda est\u00e3o inseguros sobre a ado\u00e7\u00e3o do analisador, sugiro que agora leiam o artigo \"<noindex><a rel=\"nofollow\" href=\"https:\/\/www.viva64.com\/ru\/b\/0687\/\">Raz\u00f5es para implementar um analisador de c\u00f3digo est\u00e1tico PVS-Studio no processo de desenvolvimento<\/a><\/noindex>\". Ele aborda as preocupa\u00e7\u00f5es t\u00edpicas dos desenvolvedores sobre como a an\u00e1lise est\u00e1tica pode consumir seu tempo, entre outras quest\u00f5es.<\/p>\n<p><noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/en\/company\/pvs-studio\/blog\/514128\/\"><img decoding=\"async\" alt=\"An\u00e1lise Est\u00e1tica \u2013 Da Introdu\u00e7\u00e3o \u00e0 Integra\u00e7\u00e3o\" src=\"\/wp-content\/uploads\/2020\/08\/6372d668354f708cb0e08df27bb39bdd.png\" style=\"display:block;margin: 0 auto;\" \/><\/a><\/noindex><\/p>\n<p>Se voc\u00ea deseja compartilhar este artigo com um p\u00fablico de l\u00edngua inglesa, pe\u00e7o que use o link para a tradu\u00e7\u00e3o: Maxim Zvyagintsev. <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/en\/company\/pvs-studio\/blog\/514128\/\">An\u00e1lise Est\u00e1tica: Do Come\u00e7o \u00e0 Integra\u00e7\u00e3o<\/a><\/noindex>.<br \/>\n<br \/>Fonte: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/pvs-studio\/blog\/514124\/\">habr.com<\/a> <\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u0423\u0441\u0442\u0430\u0432 \u043e\u0442 \u043d\u0435\u0441\u043a\u043e\u043d\u0447\u0430\u0435\u043c\u043e\u0433\u043e code review \u0438\u043b\u0438 \u043e\u0442\u043b\u0430\u0434\u043a\u0438, \u0432\u0440\u0435\u043c\u0435\u043d\u0430\u043c\u0438 \u0437\u0430\u0434\u0443\u043c\u044b\u0432\u0430\u0435\u0448\u044c\u0441\u044f, \u043a\u0430\u043a \u0431\u044b \u0443\u043f\u0440\u043e\u0441\u0442\u0438\u0442\u044c \u0441\u0435\u0431\u0435 \u0436\u0438\u0437\u043d\u044c. \u0418 \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u043f\u043e\u0438\u0441\u043a\u0430\u0432, \u043d\u0443 \u0438\u043b\u0438 \u0441\u043b\u0443\u0447\u0430\u0439\u043d\u043e \u043d\u0430\u0442\u043a\u043d\u0443\u0432\u0448\u0438\u0441\u044c, \u043c\u043e\u0436\u043d\u043e \u0443\u0432\u0438\u0434\u0435\u0442\u044c \u0432\u043e\u043b\u0448\u0435\u0431\u043d\u043e\u0435 \u0441\u043b\u043e\u0432\u043e\u0441\u043e\u0447\u0435\u0442\u0430\u043d\u0438\u0435: &quot;\u0421\u0442\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u0430\u043d\u0430\u043b\u0438\u0437&quot;. \u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u043c, \u0447\u0442\u043e \u044d\u0442\u043e \u0442\u0430\u043a\u043e\u0435 \u0438 \u043a\u0430\u043a \u043e\u043d \u043c\u043e\u0436\u0435\u0442 \u0432\u0437\u0430\u0438\u043c\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u043e\u0432\u0430\u0442\u044c \u0441 \u0432\u0430\u0448\u0438\u043c \u043f\u0440\u043e\u0435\u043a\u0442\u043e\u043c. \u0421\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u0433\u043e\u0432\u043e\u0440\u044f, \u0435\u0441\u043b\u0438 \u0432\u044b \u043f\u0438\u0448\u0435\u0442\u0435 \u043d\u0430 \u043a\u0430\u043a\u043e\u043c-\u043b\u0438\u0431\u043e \u0441\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u043c \u044f\u0437\u044b\u043a\u0435, \u0442\u043e\u0433\u0434\u0430, \u0434\u0430\u0436\u0435 \u043d\u0435 \u0434\u043e\u0433\u0430\u0434\u044b\u0432\u0430\u044f\u0441\u044c \u043e\u0431 \u044d\u0442\u043e\u043c, [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":91066,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[688],"tags":[],"class_list":["post-91065","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-administrirovanie"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 5.0.3 - aioseo.com -->\n\t<meta name=\"description\" content=\"\u0423\u0441\u0442\u0430\u0432 \u043e\u0442 \u043d\u0435\u0441\u043a\u043e\u043d\u0447\u0430\u0435\u043c\u043e\u0433\u043e code review \u0438\u043b\u0438 \u043e\u0442\u043b\u0430\u0434\u043a\u0438, \u0432\u0440\u0435\u043c\u0435\u043d\u0430\u043c\u0438 \u0437\u0430\u0434\u0443\u043c\u044b\u0432\u0430\u0435\u0448\u044c\u0441\u044f, \u043a\u0430\u043a \u0431\u044b \u0443\u043f\u0440\u043e\u0441\u0442\u0438\u0442\u044c \u0441\u0435\u0431\u0435 \u0436\u0438\u0437\u043d\u044c. \u0418 \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u043f\u043e\u0438\u0441\u043a\u0430\u0432, \u043d\u0443 \u0438\u043b\u0438 \u0441\u043b\u0443\u0447\u0430\u0439\u043d\u043e \u043d\u0430\u0442\u043a\u043d\u0443\u0432\u0448\u0438\u0441\u044c, \u043c\u043e\u0436\u043d\u043e \u0443\u0432\u0438\u0434\u0435\u0442\u044c \u0432\u043e\u043b\u0448\u0435\u0431\u043d\u043e\u0435 \u0441\u043b\u043e\u0432\u043e\u0441\u043e\u0447\u0435\u0442\u0430\u043d\u0438\u0435: &quot;\u0421\u0442\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u0430\u043d\u0430\u043b\u0438\u0437&quot;.\" \/>\n\t<meta name=\"robots\" content=\"max-image-preview:large\" \/>\n\t<meta name=\"author\" content=\"Yuri Gagarin\"\/>\n\t<link rel=\"canonical\" href=\"https:\/\/prohoster.info\/pt\/blog\/administrirovanie\/staticheskij-analiz-ot-znakomstva-do-integraczii\" \/>\n\t\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.3\" \/>\n\t\t<meta property=\"og:locale\" content=\"pt_PT\" \/>\n\t\t<meta property=\"og:site_name\" content=\"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b\" \/>\n\t\t<meta property=\"og:type\" content=\"article\" \/>\n\t\t<meta property=\"og:title\" content=\"\ud83e\udd47\u0421\u0442\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u0430\u043d\u0430\u043b\u0438\u0437 \u2013 \u043e\u0442 \u0437\u043d\u0430\u043a\u043e\u043c\u0441\u0442\u0432\u0430 \u0434\u043e \u0438\u043d\u0442\u0435\u0433\u0440\u0430\u0446\u0438\u0438 | ProHoster\" \/>\n\t\t<meta property=\"og:description\" content=\"\u0423\u0441\u0442\u0430\u0432 \u043e\u0442 \u043d\u0435\u0441\u043a\u043e\u043d\u0447\u0430\u0435\u043c\u043e\u0433\u043e code review \u0438\u043b\u0438 \u043e\u0442\u043b\u0430\u0434\u043a\u0438, \u0432\u0440\u0435\u043c\u0435\u043d\u0430\u043c\u0438 \u0437\u0430\u0434\u0443\u043c\u044b\u0432\u0430\u0435\u0448\u044c\u0441\u044f, \u043a\u0430\u043a \u0431\u044b \u0443\u043f\u0440\u043e\u0441\u0442\u0438\u0442\u044c \u0441\u0435\u0431\u0435 \u0436\u0438\u0437\u043d\u044c. \u0418 \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u043f\u043e\u0438\u0441\u043a\u0430\u0432, \u043d\u0443 \u0438\u043b\u0438 \u0441\u043b\u0443\u0447\u0430\u0439\u043d\u043e \u043d\u0430\u0442\u043a\u043d\u0443\u0432\u0448\u0438\u0441\u044c, \u043c\u043e\u0436\u043d\u043e \u0443\u0432\u0438\u0434\u0435\u0442\u044c \u0432\u043e\u043b\u0448\u0435\u0431\u043d\u043e\u0435 \u0441\u043b\u043e\u0432\u043e\u0441\u043e\u0447\u0435\u0442\u0430\u043d\u0438\u0435: &quot;\u0421\u0442\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u0430\u043d\u0430\u043b\u0438\u0437&quot;.\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/pt\/blog\/administrirovanie\/staticheskij-analiz-ot-znakomstva-do-integraczii\" \/>\n\t\t<meta property=\"og:image\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:secure_url\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:width\" content=\"350\" \/>\n\t\t<meta property=\"og:image:height\" content=\"350\" \/>\n\t\t<meta property=\"article:published_time\" content=\"2020-08-07T23:42:18+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2020-08-07T23:42:18+00:00\" \/>\n\t\t<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<meta property=\"article:author\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<!-- All in One SEO -->\n\n","aioseo_head_json":{"title":"\ud83e\udd47An\u00e1lise Est\u00e1tica \u2013 da Introdu\u00e7\u00e3o \u00e0 Integra\u00e7\u00e3o | ProHoster","description":"Cansado de revis\u00f5es de c\u00f3digo intermin\u00e1veis ou de depura\u00e7\u00f5es, \u00e0s vezes voc\u00ea se pergunta como simplificar sua vida. E, ap\u00f3s uma breve busca ou at\u00e9 mesmo por acaso, pode-se deparar com a m\u00e1gica express\u00e3o: \"An\u00e1lise Est\u00e1tica\".","canonical_url":"https:\/\/prohoster.info\/pt\/blog\/administrirovanie\/staticheskij-analiz-ot-znakomstva-do-integraczii","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"pt_PT","og:site_name":"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b","og:type":"article","og:title":"\ud83e\udd47\u0421\u0442\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u0430\u043d\u0430\u043b\u0438\u0437 \u2013 \u043e\u0442 \u0437\u043d\u0430\u043a\u043e\u043c\u0441\u0442\u0432\u0430 \u0434\u043e \u0438\u043d\u0442\u0435\u0433\u0440\u0430\u0446\u0438\u0438 | ProHoster","og:description":"\u0423\u0441\u0442\u0430\u0432 \u043e\u0442 \u043d\u0435\u0441\u043a\u043e\u043d\u0447\u0430\u0435\u043c\u043e\u0433\u043e code review \u0438\u043b\u0438 \u043e\u0442\u043b\u0430\u0434\u043a\u0438, \u0432\u0440\u0435\u043c\u0435\u043d\u0430\u043c\u0438 \u0437\u0430\u0434\u0443\u043c\u044b\u0432\u0430\u0435\u0448\u044c\u0441\u044f, \u043a\u0430\u043a \u0431\u044b \u0443\u043f\u0440\u043e\u0441\u0442\u0438\u0442\u044c \u0441\u0435\u0431\u0435 \u0436\u0438\u0437\u043d\u044c. \u0418 \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u043f\u043e\u0438\u0441\u043a\u0430\u0432, \u043d\u0443 \u0438\u043b\u0438 \u0441\u043b\u0443\u0447\u0430\u0439\u043d\u043e \u043d\u0430\u0442\u043a\u043d\u0443\u0432\u0448\u0438\u0441\u044c, \u043c\u043e\u0436\u043d\u043e \u0443\u0432\u0438\u0434\u0435\u0442\u044c \u0432\u043e\u043b\u0448\u0435\u0431\u043d\u043e\u0435 \u0441\u043b\u043e\u0432\u043e\u0441\u043e\u0447\u0435\u0442\u0430\u043d\u0438\u0435: &quot;\u0421\u0442\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u0430\u043d\u0430\u043b\u0438\u0437&quot;.","og:url":"https:\/\/prohoster.info\/pt\/blog\/administrirovanie\/staticheskij-analiz-ot-znakomstva-do-integraczii","og:image":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:secure_url":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:width":350,"og:image:height":350,"article:published_time":"2020-08-07T23:42:18+00:00","article:modified_time":"2020-08-07T23:42:18+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"91065","title":null,"description":null,"keywords":null,"keyphrases":null,"primary_term":null,"canonical_url":null,"og_title":null,"og_description":null,"og_object_type":"default","og_image_type":"default","og_image_url":null,"og_image_width":null,"og_image_height":null,"og_image_custom_url":null,"og_image_custom_fields":null,"og_video":null,"og_custom_url":null,"og_article_section":null,"og_article_tags":null,"twitter_use_og":false,"twitter_card":"default","twitter_image_type":"default","twitter_image_url":null,"twitter_image_custom_url":null,"twitter_image_custom_fields":null,"twitter_title":null,"twitter_description":null,"schema":{"blockGraphs":[],"customGraphs":[],"default":{"data":{"Article":[],"Course":[],"Dataset":[],"FAQPage":[],"Movie":[],"Person":[],"Product":[],"ProductReview":[],"Car":[],"Recipe":[],"Service":[],"SoftwareApplication":[],"WebPage":[]},"graphName":"","isEnabled":true},"graphs":[]},"schema_type":null,"schema_type_options":null,"pillar_content":false,"robots_default":true,"robots_noindex":false,"robots_noarchive":false,"robots_nosnippet":false,"robots_nofollow":false,"robots_noimageindex":false,"robots_noodp":false,"robots_notranslate":false,"robots_max_snippet":null,"robots_max_videopreview":null,"robots_max_imagepreview":"large","priority":null,"frequency":null,"local_seo":null,"seo_analyzer_scan_date":null,"breadcrumb_settings":null,"limit_modified_date":false,"reviewed_by":null,"ai":null,"created":"2021-02-28 12:35:24","updated":"2022-10-01 20:50:02","focus_keyword":null,"additional_keywords":null,"truseo_locale":null},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/pt\/wp-json\/wp\/v2\/posts\/91065","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/pt\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/pt\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/pt\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/pt\/wp-json\/wp\/v2\/comments?post=91065"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/pt\/wp-json\/wp\/v2\/posts\/91065\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/pt\/wp-json\/wp\/v2\/media\/91066"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/pt\/wp-json\/wp\/v2\/media?parent=91065"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/pt\/wp-json\/wp\/v2\/categories?post=91065"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/pt\/wp-json\/wp\/v2\/tags?post=91065"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}