From 074785cea106179cb3305637055ab0a009ca74f2 Mon Sep 17 00:00:00 2001 From: Peter Bengtsson Date: Tue, 8 Dec 2020 14:42:52 -0500 Subject: initial commit --- .../testing/analise_estatica_clang/index.html | 92 ++++++++++++++++++++++ files/pt-br/mozilla/testing/index.html | 13 +++ 2 files changed, 105 insertions(+) create mode 100644 files/pt-br/mozilla/testing/analise_estatica_clang/index.html create mode 100644 files/pt-br/mozilla/testing/index.html (limited to 'files/pt-br/mozilla/testing') diff --git a/files/pt-br/mozilla/testing/analise_estatica_clang/index.html b/files/pt-br/mozilla/testing/analise_estatica_clang/index.html new file mode 100644 index 0000000000..41e019a53e --- /dev/null +++ b/files/pt-br/mozilla/testing/analise_estatica_clang/index.html @@ -0,0 +1,92 @@ +--- +title: Análise estática do Clang +slug: Mozilla/Testing/Analise_estatica_Clang +tags: + - analisador estático + - clang +translation_of: Mozilla/Testing/Clang_static_analysis +--- +
+

Boas novas: Se você quer fazer o build com o plugin Mozilla Clang (localizado em /build/clang-plugin e associado com o MOZ_CLANG_PLUGIN e os atributos em /mfbt/Attributes.h), é muito mais fácil que isso: apenas adicionar --enable-clang-plugin ao seu mozconfig!

+
+ +

O Clang tem um analisador estático embutido. A ideia principal é você adicionar um empacotador no compilador que direciona todos os resultados da análise estácica para um local comum. No fim do build, esses relatórios são juntos em um documento único mostrando todos os possíveis problemas.

+ +

Essas instruções irão apenas funcionar onde o Mozilla já compila com o Clang. No momento que isto é escrito, o Mac OS X e o GNU/Linux tem um suporte mais forte. Por favor, perceba que a maior parte do esforço do analisador estático no Clang são majoritariamente feitos em clang-tidy, uma vez que os verificadores são muito mais fáceis de escrever.

+ +

Idealmente, a análise estática seria feita independentemente da compilação. Veja {{ bug("663442") }} para localizar uma solução alternativa que facilita a análise estática.

+ +

Instalando o Clang

+ +

O primeiro passo para executar uma análise estática é instalando o Clang. Atualmente, ele está disponível para a maioria das distribuições GNU/Linux mas também está disponível com Xcode como o compilador padrão.

+ +

Configurando o ambiente de build

+ +

Uma vez que você tiver o build do seu Clang pronto, você irá precisar preparar ferramentas para usá-lo. Veja um .mozconfig totalmente funcional para o navegador desktop:

+ +
. $topsrcdir/browser/config/mozconfig
+mk_add_options MOZ_OBJDIR=@TOPSRCDIR@/obj-ff-dbg
+
+ac_add_options --enable-debug
+
+ +

Tentativas de usar o ccache irá muito provavelmente resultar em falhas de compilação. É também necessário evitar builds otimizados, uma vez que estes irão modificar as macros no que resulta em muitos falso-positivos.

+ +

Nessa altura, o ambiente build do seu Mozilla deve estar configurado para compilar através do analisador estático do Clang!

+ +

Realizando scan no build

+ +

Não é o suficiente simplesmente iniciar o build do forma normal. Em vez disso, você precisa executar o build através de um script utilitário do Clang que irá acompanhar toda a análise produzida e consolidá-la automaticamente.

+ +

Esse scritp é o scan-build. Você pode encontrá-lo em $clang_source/tools/scan-build/scan-build.

+ +

Tente executar o seu build com o scan-build:

+ +
$ cd /path/to/mozilla/source
+
+# Blow away your object directory because incremental builds don't make sense
+$ rm -rf obj-dir
+
+# To start the build:
+scan-build --show-description ./mach build -v
+
+# The above should execute without any errors. However, it should take longer than
+# normal because all compilation will be executing through Clang's static analyzer,
+# which adds overhead.
+
+ +

Se tudo estiver ocorrendo bem, você deve ver muitas informações no console, assim como qualquer build.

+ +

Na primeira vez que você rodar o scan-build, dê CTRL+C depois que alguns arquivos forem compilados. Você deve ver uma saída como essa:

+ +
scan-build: 3 bugs found.
+scan-build: Run 'scan-view /Users/gps/tmp/mcsb/2011-12-15-3' to examine bug reports.
+
+ +

Se você ver uma mensagem como essa:

+ +
scan-build: Removing directory '/var/folders/s2/zc78dpsx2rz6cpc_21r9g5hr0000gn/T/scan-build-2011-12-15-1' because it contains no reports.
+
+ +

ou nenhum resultado de análise estática está disponível ainda ou seu ambiente não está configurado corretamente.

+ +

Por padrão, scan-build produz resultados em um diretório em uma localização pseudo-temporária. Você pode controlar onde os resultados vão ao passar o argumento -o /path/to/output no script scan-build.

+ +

Você pode também querer executar scan-build --help para ver todas as opções disponíveis. É possível habilitar ou desabilitar seletivamente analisadores individuais, por exemplo.

+ +

Analisando a saída

+ +

Uma vez que o build estiver completado, o script scan-build irá produzir um relatório resumindo tudo que foi encontrado. Este é chamado de index.html no diretório de saída. Você pode executar o scan-view (em $clang_source/tools/scan-view/scan-view) como a saída do scan-build sugere; isso meramente ativa um servidor HTTP local. Ou você deve poder abrir o index.html diretamente no seu navegador.

+ +

Falso-positivos

+ +

Há muitos falso-positivos atualmente no analisador estático. Muitos deles são devido ao analisador ter dificuldades em seguir o relativamente complicado tratamento de erros em várias macros do pré-processador. Por exemplo, a maioria das nossas macros ASSERT() chamam outras funções as quais elas chamam assert() ou fazem alguma outra coisa.

+ +

A longo-prazo, nós devemos adicionar um conjunto de macros habilidados via #ifdef o que fornece simples e compreensíveis macros. Há também algumas pragmas e extensões do compilador que podemos investigar usando avisos silenciosos.

+ +

Veja também

+ + diff --git a/files/pt-br/mozilla/testing/index.html b/files/pt-br/mozilla/testing/index.html new file mode 100644 index 0000000000..694d1a2b9a --- /dev/null +++ b/files/pt-br/mozilla/testing/index.html @@ -0,0 +1,13 @@ +--- +title: Testing Mozilla code +slug: Mozilla/Testing +tags: + - Landing + - Mozilla + - NeedsTranslation + - Testing + - TopicStub +translation_of: Mozilla/Testing +--- +

Testing your code is important! Before you can even get your code committed into the source tree, you have to test it, and larger patches have to have automated tests. These articles will help you master (and continue to excel at) testing Mozilla code.

+

{{LandingPageListSubpages}}

-- cgit v1.2.3-54-g00ecf