EP de Reflexão Computacional

Descrição

Você foi trabalhar em um projeto de XP. Lá chegando, foi incumbido de escrever um teste que precisa verificar o fluxo de controle de sua aplicação.

Pensando um pouco no problema você concluiu que tudo seria simples se você pudesse ter uma log de todas as chamadas de métodos que ocorrem quando o programa roda.

O chato é que a solução natural para esse problema é colocar um monte de comandos de impressão no início de cada método. Ainda mais, é preciso pensar uma maneira de desativar a impressão quando os testes não estiverem rodando.

Felizmente o programa é escrito em Python...

Escreva uma proposta de solução para o problema de monitoração das chamadas de métodos que não envolva a mudança do código original ou que implique no mínimo possível de mudanças. O resultado deve ser uma proposta de implementação com um texto explicando a teoria, quais as possíveis alterações que devem ser feitas no programa original, que conseqüências há e com exemplos de código.

Apresente também uma variação da solução que permita que apenas os métodos de instâncias de classe cujos nomes estão listados no arquivo configuracao.txt do diretório atual tenham a sua execução monitorada.

Obs: É a execução dos métodos devem ser monitorada e não o acesso a atributos que representam métodos (lembre-se que em Python é possível guardar um método vinculado para uso posterior)