Olá meus dois leitores, conforme prometi estou aqui novamente para atualizá-los sobre o andamento do meu curso de mestrado. Terminei o segundo semestre do curso e com ele completei meus créditos com matérias. Somando a prova de fluência em inglês (escrito) que também já aprovei, falta agora a cereja do bolo: a defesa da tese.
As disciplinas que fiz no segundo semestre foram: Teste de Software e Processamento de Alto Desempenho. Vou dar um resumo aqui do que aprendi.
Teste de Software
Em Teste de Software aprofundamos o estudo em técnicas de seleção de casos de testes para abranger a maior parte dos erros possíveis.
O principal paradigma que foi quebrado em minha cabeça, é que testar o software não é provar que ele está livre de erros, o que parece intuitivo, mas testar o software é uma ferramenta para ativamente localizar a maior quantidade possível de erros em um programa. Parte do princípio válido, que todos os programas possuem erros, sempre. Localizar a maioria dos erros antes de colocar um programa em produção é obviamente evitar queimar o próprio filme, portanto altamente desejável. Agora considerar que um programa é livre de erros, mesmo após uma bateria de testes bem realizados, é falácia.
Os Testes que aprendemos se dividem em Testes Funcionais, Testes Estruturais, Testes de Mutação e Testes baseados em Modelos. Cada um deles utiliza uma abordagem diferente para encontrar um conjunto de casos de testes adequado para encontrar os erros. Utilizá-los de forma complementar é uma boa pedida.
Os trabalhos propostos pelo professor Otávio foram na medida para aplicarmos as técnicas estudadas, sem nos sobrecarregar.
Processamento de Alto Desempenho
Aqui o problema é executar códigos repetitivos em unidades de processamento paralelo de forma eficiente. Vários tipos de paralelismo foram aplicados e várias técnicas úteis para minimizar a lei de Amdahl. Esta lei indica que o limite do crescimento da performance ao acrescentarmos mais unidades de processamento em paralelo é limitada pela porção do código a ser executado que não permite paralelismo, o código chamado serial. Como exemplo, se a leitura dos dados de entradas de uma unidade de disco é realizado de forma serial, mesmo que o resto do processamento seja reduzido drasticamente, o tempo que leva esta leitura não seria reduzido. Neste exemplo mesmo se infinitos processadores fossem utilizados o tempo de execução seria igual ao tempo de leitura, portanto o tempo de processamento serial é o limitante da escalabilidade.
Os dispositivos paralelos estudados na disciplina foram: as unidades vetoriais (sse, avx) dos processadores modernos, os processadores multicore (memória compartilhada OpenMp, Pthread, JThread), os sistemas multiprocessados (memória distribuída MPI) e os novíssimos sistemas em Gpu (Cuda).
As atividades da disciplina foram pesadas mas interessantíssimas. Executar algorítimos com paralelismo agora é algo de meu domínio. As experiências da disciplina mostraram que o esforço necessário para isso valem a pena.
Sobre as minhas notas
As minhas notas continuaram no máximo, tirei A em tudo. E estou falando isso não pra me gabar (tá um pouco é pra isso também). Mas o principal motivo pra eu falar isso é também pra indicar algumas coisas do modo de estudo que deram resultado para mim.
Desde de minha experiência de doze anos como professor é a primeira vez que volto a sala de aula com professor e tarefa de casa para fazer. E me ajudou muito ter sido professor estes anos todos. Nunca ficou tão claro pra mim o quanto é importante entender aquilo que o professor espera de você em sala de aula. Este é o ponto central para eu conseguir a nota máxima em todas as disciplinas.
Meu método de estudo não é de outro mundo. Tem só algumas regras simples:
- Nunca faltar. Tive 100% de presença, precisando inclusive ir a aula com febre.
- Estar presente. 100% de atenção a tudo que ocorre em sala o tempo todo. Adianta ir fisicamente a aula e cabular no facebook ou sms?
- Fazer todas as atividades. Assim que uma tarefa era passada, no mesmo dia dava uma olhada e se possível já fazia. Assim se não conseguisse de primeira sempre tinha tempo para discutir com o professor ou com os colegas.
- Perguntar. Sempre que surgia uma dúvida, não hesitei em levantar a mão. Fiz perguntas bestas, mas aprendi na hora certa.
Isso é o que eu esperava de um aluno meu. Nos doze anos que fui professor, encontrei no máximo três alunos assim. Se eu sonhava com aluno assim, os meus professores não deveriam ser diferentes.
Minha experiência e facilidade de aprendizado na área ajudou muito, é lógico, mas a maior parte do conteúdo era novidade para mim.
Bom agora vem a parte mais interessante do mestrado, que é a tese. Eu estou com o estudo bibliográfico bem adiantado, com tema e mesmo com um problema a ser atacado bem definido. Volto mais vezes agora conforme o andamento do projeto de pesquisa. Até mais.

