Tuesday, May 29, 2012

Teoria Unificada da Evolução de Software

Lei da Modificação Contínua (1974): Sistemas do tipo-E devem ser continuamente adaptados ou então eles se tornam progressivamente menos satisfatórios.

Lei da Complexidade Crescente (1974):
À medida que um sistema tipo-E evolui sua complexidade aumenta, a menos que seja realizado um esforço para mantê-la ou reduzi-la.

Lei da Auto-Regulação (1974): O processo de evolução de sistemas tipo-E é auto-regulatório, com medidas de distribuição do produto e do processo perto do normal.

Lei da Conservação da Estabilidade Organizacional (1980): A velocidade média da atividade global efetiva em um sistema do tipo-E é invariante ao longo do tempo do ciclo de vida do produto.

Lei da Conservação da Familiaridade (1980): À medida que um sistema tipo-E evolui, todos os que estão a ele associados, desenvolvedores, pessoal de vendas e usuários, por exemplo, devem manter o domínio de seu conteúdo e comportamento para conseguir evolução satisfatória. O crescimento excessivo diminui esse domínio. Assim, o crescimento médio incremental permanece invariante à medida que o sistema evolui.

Lei do Crescimento Contínuo (1980): O conteúdo funcional de sistemas tipo-E deve ser continuamente aumentado para manter a satisfação do usuário ao longo do tempo de vida do sistema.

Lei da Qualidade Declinante (1996): A qualidade de sistemas do tipo-E parecerá estardeclinando a menos que eles sejma rigorosamente mantidos e adaptados às modificações no ambiente operacional.

Lei da Realimentação do Sistema (1996): Os processos de evolução do tipo-E constituiem em sistemas de realimentação em multiníveis, em multiciclos, por multiagentes e precisam ser tratados como tal para conseguir aperfeiçoamento significativo sobre qualquer base razoável.


Saturday, May 26, 2012

Viver é decidir

Desde que aprendeu a raciocinar, o ser humano tem sido obrigado a optar entre as diversas alternativas que, em todos os momentos, a vida lhe apresenta, obrigando-o a posicionar-se perante o futuro. O ato de decidir é, portanto, inerente ao livre arbítrio, capacidade privativa do homo sapiens. Mesmo quando só há uma opção, pode ainda ser possível nada decidir, ou seja, mesmo a omissão é uma forma de decisão.


Wednesday, May 23, 2012

Perguntaram ao Dalai Lama, líder religioso tibetano

O que mais te surpreende na Humanidade?
E ele respondeu:
“- Os homens... Porque perdem a saúde para juntar dinheiro, depois perdem dinheiro para recuperar a saúde. E por pensarem ansiosamente no futuro, esquecem do presente de tal forma que acabam por não viver nem o presente nem o futuro. E vivem como se nunca fossem morrer... e morrem como se nunca tivessem vivido.”

Conhecendo a métrica de software LCOM4 (Lack Of Cohesion Methods)


Quando se estuda os conceitos de orientação à objetos, os conceitos que andam de mãos dadas e que são dificilmente compreendidos: o acoplamento e a coesão;
O primeiro conceito informa quanto um elemento depende ou conhece de outro. Quando uma classe é altamente acoplada, qualquer mudança que você fizer nessa classe impacta direta ou indiretamente na outra classe. Já a coesão é o quanto as tarefas que uma classe realiza estão relacionadas com um mesmo conceito. Um exemplo de baixa coesão seria uma classe que, por exemplo, lê dados do teclado e imprime os dados lidos em uma impressora.
Para identificar se nossas classes estão coesas e com baixo acoplamento podemos utilizar métricas de software para encontrar os métodos das classes estão relacionados um com os outros. Uma das métricas relacionadas à coesão/acoplamento é a LCOM4 (Lack Of Cohesion Methods). Observe a situação abaixo:

O diagrama de classes consiste dos métodos A até E e as variáveis de instância x e y. O método A chama B e B acessa a variável x. Já os métodos C e D acessam y. D chama E, mas E não acessa nenhuma variável de instância. Neste exemplo é possível visualizar que a classe consiste de dois componentes não relacionados (já que uma parte utiliza-se da instância x e outra da y), podendo ser separado em um componente com o método A,B e a variável x, e o outro componente com os métodos C,D,E e y. Nesse caso, o valor da métrica LCOM4 será igual à 2.
Uma situação semelhante que não apresenta quebra de coesão é se fizermos com que o método C acesse a variável x. Desse modo, nossa classe consiste de um único componente e o valor da LCOM4 será 1.

Agora, temos um componente coeso. É fácil perceber que iremos sempre buscar um baixo acoplamento e alta coesão dos componentes. Para acompanhar as mudanças no projeto e tentar garantir uma certa qualidade no produto desenvolvido, podemos automatizar a inspesão através de um mecanismo de construção automática e contínuo. Uma possíbilidade é a utilização do Sonar 2.0+ que já exibe em seus resultados a métrica LCOM4.
Na ferramenta, a interpretação desta métrica é simples; O valor 1 significa que a classe tem apenas uma única responsabilidade (ótimo) e um valor >2 significa que a classe tem provavelmente >2 responsabilidades (ruim) e deve ser refatorada/separada. Um widget no dashboard do projeto que apresenta informações como percentagem de classes que apresentam LCOM4 > 1, de lá é possível clicar em “drill down” para visualizar detalhes da classe suspeita de violar o LCOM4.

Sunday, May 20, 2012

Evolution


Como Revisar um Artigo Científico

É sempre difícil revisar artigos científicos. Deve-se criticar o autor sem desanimá-lo, varrer o artigo em busca de erros, dos mais graves aos mais sutis, sugerir correções e questionar a real contribuição da proposta, sua validação e seu vínculo com a conferência ou revista. Avaliar artigos é um trabalho minucioso, que exige tempo e pesquisa.  

Um Bom Artigo

Artigo científico é o meio pelo qual pesquisadores do mundo inteiro divulgam seus trabalhos investigativos. Seu conteúdo deve ser mundialmente original e relevante para a ciência. Artigos não são feitos para divulgar implementações ou trabalhos de engenharia. Artigos existem para divulgar soluções inéditas para problemas independentes de tecnologia.

Um artigo científico deve ser denso, pontual, preciso e claro. Técnicas e modelos propostos devem ser completamente validados, provados. A opinião do autor não importa e deve ser deixada de lado. Um bom artigo é bem organizado, simples e direto.

Normalmente um artigo científico possui:
  • Abstract: um resumo detalhado, completo e independente do artigo. Normalmente é composto por uma sentença de contextualização, uma ou duas com objetivos, três com uma breve descrição detalhada dos procedimentos realizados, duas com resultados e conclusões e fecha com implicações e recomendações. O resultado mais importante da proposta deve estar descrito no abstract, por exemplo: Com a execução do nosso modelo, conseguimos 97% de melhora sobre a técnica XYZ e 150% sobre a WZP.  
  •  Introdução: discute-se brevemente o problema, a importância dele, algumas definições, limitações atuais, e um overview da proposta. A introdução deve terminar na primeira página ou na primeira coluna dependendo do formato adotado. Não deve ser extensa mas é importante mostrar o que e como foi feito o trabalho. Esta é a seção mais importante. Gaste tempo nela. O leitor deve se sentir motivado para continuar o paper, caso contrário, nem o revisor vai suportar ler o artigo até o fim.  
  • Related Work: uma apresentação crítica detalhada, resumida e educada sobre o trabalho dos outros, mostrando onde cada um deles se diferencia do trabalho atual. Todos os trabalhos similares devem ser citados. Lembre-se que uma abordagem apenas diverente não justifica o artigo, os autores devem mostrar que sua abordagem é melhor.  
  • Desenvolvimento: uma descrição detalhada, sem firulas e sem frases de efeito, da técnica, do modelo ou da pesquisa final. Não se apresenta um relato das tentativas que não funcionaram, estas são irrelevantes. Apresente apenas os itens necessários para a contribuição final. Não escreva como foi feito, descreva como é. Em outras palavras, não conte a história da pesquisa, apenas mostre como validar a hipótese ou solucionar o problema.  
  • Conclusões e resultados: um breve resumo do artigo e as validações da proposta. Validar é um dos itens mais importantes do artigo. Apresente números, análises estatísticas quantitativas ou qualitativas, imagens e, se for possível, um vídeo da execução do experimento. Vídeos e o software / código criado podem ser enviados junto com a submissão do artigo como anexos. Eles ajudam muito o papel dos revisores.  
  • Discussão: discussões sobre os resultados: implicações, recomendações, trabalhos futuros, etc. Este é o único momento em que a opinião do autor é tolerada, mas não exagere.
  • Bibliografia: referência aos artigos citados durante o texto.  

O Formato

Ao receber o artigo para revisão, uma das primeiras tarefas é verificar se o formato submetido é o formato requisitado pela conferência. Confira tudo: margens, formato das figuras e seus captions, fontes, formato de referência e da bibliografia. Verifique   se a bibliografia está declarada corretamente e se é suficiente, ou seja, se é possível encontrar os artigos referenciados com a informação disponibilizada. Verifique se não há referências faltando ou sobrando. Anote os problemas para serem relatados ao autor no texto final.  

Como Ler o Artigo

Leia duas vezes o artigo. A primeira superficialmente só para entender do que se trata, e a segunda bem aprofundada, questionando cada frase do autor. Utilize uma ferramenta de revisão como o Acrobat ou faça as anotações no papel. Não deixe de anotar seus comentários.

Durante a primeira leitura, marque no texto todas as suas opiniões, sentimentos, espantos, perguntas, etc. Sempre que você se perguntar: " ahm? o_O ", anote isto e continue. As anotações te indicarão o quão fácil é leitura do artigo. Não pare em frases difíceis. Após a leitura, separe as contribuições do artigo e faça um resumo de 4 a 8 linhas do que você entendeu. Neste ponto, você já deve ter uma idéia se o artigo será aprovado ou rejeitado, mas você deve ler uma segunda vez.

Na segunda leitura marque tudo. Duvide de cada frase. Se o autor não prova o que diz, é necessário referenciar alguém que prove ou a frase precisa ser removida ou reescrita. Se a frase pode ser escrita de uma maneira diferente, anote. Frases ambíguas devem ser corrigidas. Afirmações devem possuir referência. A gramática deve ser verificada. Se o texto ficar difícil, pare de ler e se esforce em entender o trecho para criticar o autor, se o texto for mal escrito, ou a técnica, se ela estiver errada. Revise as equações, passo-a-passo. Derive-as se for necessário.

Especial atenção às imagens. Verifique se poderiam ser melhoradas, se o caption delas está auto-contido e se explica completamente a imagem.

Se você conhece o autor, procure pelos os artigos anteriores dele que são semelhantes ao que você está lendo. Veja quais são as diferenças. Se não há diferença clara, critique. Auto-plágio, o ato de publicar a mesma contribuição duas vezes, não é crime, mas é anti-ético e deve ser evitado pelos revisores. Conhecendo ou não o autor, faça uma extensa pesquisa sobre o assunto na internet e em conferências e revistas relacionadas. A contribuição tem que ser original. Se você encontrar algum artigo similar que não foi citado pelo autor, critique.

Atenção na validação, uma das partes mais importantes de um artigo científico. Qualquer pessoa pode criar uma técnica, mas somente os cientistas / pesquisadores / acadêmicos podem provar que a técnica está correta. Toda a proposta de técnica ou modelo deve possuir uma validação detalhada. Analise a forma que a validação foi realizada, se ela está completa e se não há erros no processo. Se algo ficou em aberto, critique.

Após a segunda leitura você deve ter material suficiente para criticar o autor. Para terminar o serviço, pense! Pense muito sobre o que você leu. Algumas perguntas devem ser respondidas e as anotações da primeira leitura te ajudarão neste momento. O artigo está muito longo? Muito enrolado? Exagerado? Ou curto demais? As contribuições e os resultados estão claros? O estilo de escrita é compatível com outros artigos da conferência? O autor não está " se vendendo " demais? A organização poderia ser diferente? O leitor está perdendo tempo com o artigo?

O Texto da Revisão

O texto da revisão, que será lido pelo autor, precisa justificar a sua posição de aceitação ou rejeição do artigo. Neste texto, as seguintes perguntas devem ser respondidas:

Quais são as maiores contribuições do artigo? Quais são seus pontos fortes e fracos? O trabalho é absolutamente novo, incremental ou em grande parte já publicado? Qual é a relevância / importância do trabalho? Os trabalhos anteriores estão referenciados adequadamente? A descrição das técnicas estão detalhadas suficientemente para permitir a reprodução por um estudante de pós-graduação? A exposição das idéias está clara? A linguagem está correta? A estrutura do texto está boa, ou pode ser melhorada? As figuras são informativas o suficiente? Algo deve ser removido para a versão final?

O texto da revisão pode ser montado de diversas formas mas normalmente ele contém três partes: (i) descrição detalhada do que o revisor entendeu e principais contribuições do artigo; (ii) grandes problemas e o mérito dos autores; (iii) problemas menores e considerações. A primeira parte deve mostrar ao autor que o revisor leu, entendeu, que domina o assunto e está pronto para a discussão. Evite utilizar as mesmas palavras do autor neste parágrafo, mas retenha-se ao que lhe foi apresentado.

Na segunda parte comece elogiando o mérito do artigo e o autor, visto que dificilmente o artigo será completamente ruim. Em seguida, liste os grandes problemas, por exemplo: falta de uma validação, uma validação incorreta, trabalhos relacionados incompletos, escrita ruim, resultados inconsistentes, muito achismo, contribuição não original ou muito pequena, erros no desenvolvimento, etc. Sugira o que pode ser feito para corrigir estes problemas numa versão posterior do artigo.

A terceira, e mais longa parte, deve conter todas as anotações que você fez durante a revisão, desde correções gramaticais até aqueles " ahm? o_O ". Claro, tudo escrito em linguagem clara e educada na mesma língua em que o paper foi escrito. Não desanime o autor, ele deve melhorar o artigo e submeter novamente para outra conferência e não desistir dele.

Lembre-se que o texto de revisão não deve conter apenas críticas. Sugestões de correção deixam a revisão muito mais profissional e amenizam a raiva que o autor sentirá do revisor.

Agile Development


Liderança

"A primeira qualidade de um comandante é cabeça fria para receber uma impressão correta das coisas. Não deve deixar-se confundir quer por boas quer por más notícias."

Napoleão Bonaparte
Imperador francês, conhecido pelo grande senso estratégico que tinha. Também foi responsável pela conquista de diversos territórios, durante seu governo, que durou 15 anos.


Friday, May 18, 2012

Escrever bem

"Nas complexidades da vida contemporânea, o especialista que está treinado mas não educado, tecnicamente hábil mas culturalmente incompetente é uma ameaça" (Truman, Columbia College)

Wednesday, May 16, 2012

Feito é Melhor que Perfeito

Via de regra, quando aprendemos alguma técnica nova, queremos utiliza-la na íntegra, muitas vezes caindo na situação de usar a dosagem errada do remédio. Vejamos por exemplo o PMBOK, que não segue uma abordagem "tudo ou nada", onde os processos são usados (ou não) de forma indiscriminada. O importante não é obter a perfeição no momento de organizar o caos de um projeto, mas sim em ter o trabalho feito com simplicidade (e não de forma simplista). Uma frase que deixo aqui é: "o importante não é quando não se pode adicionar mais nada, mas sim quando não se pode tirar".


Saturday, May 05, 2012

Management 3.0

“Se eles podem escovar seus dentes todos os dias para se livrar de cáries, por que não podem escovar o código diariamente para se livrar dos bugs?”

Tuesday, May 01, 2012

Crise na Consciência - Jiddu Krishnamurti

"E, considerando como o mundo está agora, com toda a miséria, conflito, brutalidade destrutiva, agressão, e assim por adiante. O Homem ainda é como era; ainda é bruto, violento, agressivo, aquisitivo, competitivo. E construiu uma sociedade nessas linhas. [...]"