MASTG-TEST-0084: Testes para Código de Depuração e Registro Detalhado de Erros
Visão Geral¶
Análise Estática¶
Você pode adotar a seguinte abordagem de análise estática para as instruções de log:
- Importe o código do aplicativo no Xcode.
- Procure no código pelas seguintes funções de impressão:
NSLog,println,print,dump,debugPrint. - Ao encontrar uma delas, verifique se os desenvolvedores usaram uma função de encapsulamento em torno da função de log para melhor marcação das instruções a serem registradas; se sim, adicione essa função à sua busca.
- Para cada resultado das etapas 2 e 3, determine se macros ou proteções relacionadas ao estado de depuração foram configuradas para desativar o log na versão de release. Observe a mudança em como o Objective-C pode usar macros de pré-processador:
#ifdef DEBUG
// Código apenas para debug
#endif
O procedimento para habilitar esse comportamento no Swift mudou: você precisa definir variáveis de ambiente em seu esquema ou configurá-las como flags personalizadas nas configurações de build do destino. Observe que as seguintes funções (que permitem determinar se o aplicativo foi compilado na configuração de release do Swift 2.1) não são recomendadas, pois o Xcode 8 e o Swift 3 não suportam essas funções:
_isDebugAssertConfiguration_isReleaseAssertConfiguration_isFastAssertConfiguration.
Dependendo da configuração do aplicativo, pode haver mais funções de log. Por exemplo, quando CocoaLumberjack é usado, a análise estática é um pouco diferente.
Para o código de "gerenciamento de debug" (que é integrado): inspecione os storyboards para ver se existem fluxos e/ou controladores de visualização que fornecem funcionalidade diferente da que o aplicativo deveria suportar. Essa funcionalidade pode variar desde visualizações de debug até mensagens de erro impressas, desde configurações de resposta de stub personalizadas até logs gravados em arquivos no sistema de arquivos do aplicativo ou em um servidor remoto.
Como desenvolvedor, incorporar instruções de debug na versão de debug do seu aplicativo não deve ser um problema, desde que você garanta que essas instruções nunca estejam presentes na versão de release do aplicativo.
No Objective-C, os desenvolvedores podem usar macros de pré-processador para filtrar o código de debug:
#ifdef DEBUG
// Código apenas para debug
#endif
No Swift 2 (com Xcode 7), você deve definir flags de compilador personalizadas para cada destino, e as flags de compilador devem começar com "-D". Portanto, você pode usar as seguintes anotações quando a flag de debug DMSTG-DEBUG estiver definida:
#if MSTG_DEBUG
// Código apenas para debug
#endif
No Swift 3 (com Xcode 8), você pode definir Condições de Compilação Ativas em Build settings/Swift compiler - Custom flags. Em vez de um pré-processador, o Swift 3 usa blocos de compilação condicional baseados nas condições definidas:
#if DEBUG_LOGGING
// Código apenas para debug
#endif
Análise Dinâmica¶
A análise dinâmica deve ser executada tanto em um simulador quanto em um dispositivo, pois os desenvolvedores às vezes usam funções baseadas no destino (em vez de funções baseadas no modo release/debug) para executar o código de depuração.
- Execute o aplicativo em um simulador e verifique a saída no console durante a execução do aplicativo.
- Conecte um dispositivo ao seu Mac, execute o aplicativo no dispositivo via Xcode e verifique a saída no console durante a execução do aplicativo.
Para o outro código de debug baseado em "gerenciamento": navegue pelo aplicativo tanto em um simulador quanto em um dispositivo para ver se você consegue encontrar qualquer funcionalidade que permita pré-definir perfis do aplicativo, selecionar o servidor real ou escolher respostas da API.