terça-feira, 23 de abril de 2013

Testando e Homologando

Um dos problemas que enfrentamos na fase de homologação e testes de sistemas é a sua execução reproduzindo as mesmas condições que os usuários enfrentam no uso diário, pois na grande maioria das vezes os dados utilizados pelos desenvolvedores é de certa maneira 'viciado' e quase nunca mostra de fato o que está ocorrendo na produção.

Na lista de situações a serem resolvidas temos o próprio login na conta do usuário que já é um desafio, mesmo porque, não é uma boa prática guardar a senha desprotegida no banco de dados, isso para que você entre 'como ele' no sistema. Procure utilizar um algoritmo de encriptação, e claro, com isso, não saberíamos seus dados para acessar o sistema.

De certa forma o sistema tem que reproduzir uma situação de segurança que permita que após o ingresso de um desenvolvedor ou testador do sistema, a opção de troca de usuário permita que o mesmo reproduza a situação do usuário que encontrou algum problema no sistema, isso de forma que o pessoal possa entender a causa.  Algo como:



Essa situação é tão perigosa, que não vou te dar nenhuma solução prática, melhor você pensar em uma que atenda sua necessidade, mas não fique nervosinho, vou te passar alguns elementos que possam te ajudar nessa construção.

Claro que você não pode nem cogitar de instalar algo assim no sistema em Produção, melhor se tiver uma instalação própria para homologação e que essa seja 'preparada' para eliminar informações importantes como nomes de usuários, documentos importantes, emails, e outras coisas que possam ser utilizadas de forma indevida, toda precaução na Web é pouco.

Agora que você está bem avisado da situação, vamos às dicas.

Qual o sistema atual?

Então, a primeira coisa é detectar qual o sistema que está em execução, se é o de homologação ou produção.  Para isso temos a ajuda de &httprequest que nos informa a URL que foi solicitada. Algo assim nos daria a certeza que apenas o sistema de testes permitiria essa liberação.


Event Start
   if &httprequest.BaseUrl.IndexOf('homologacao') > 0
     // libera porque esta no sistema de homologacao
   endif
Endevent


Esse pequeno trecho de código, permite identificar na própria URL qual o sistema em execução no servidor, que pode ser uma aplicação, pasta virtual, ou mesmo um domínio.  Se detectado que se trata do sistema de testes, libera a troca.

WebSession ou Cookie

Outro recurso indispensável na web é o uso de sessões web no próprio Server, as chamadas WebSessions. Muito simples

   &websession.Set("USUARIO", &usuarioId)

Recomendação Importante! Nunca grave senhas na Sessão Web ou Cookie.

Cookies gravam informações na própria máquina do usuário, se estiverem encriptadas ótimo, caso contrário não utilize, pois é possível ler os dados desses arquivos, pois são textos.

Encriptação

Fácil de usar em GeneXus, com as funções:


  • encrypt64
  • decrypt64

E que precisam apenas de uma &chave, mas aqui tem um segredinho, essa variável deve ser declarada como Character(32), para não ter nenhum enrosco, e seu conteúdo pode ser obtido com getsitekey(), dai basta encriptar para guardar e decriptar ao recuperar.

Caso deseje outro modelo de encriptação pode importar para o projeto com os External Objects.

Quem me chama?

Algumas instalações podem utilizar o conceito de liberar se alguém autorizado chamou, então é necessário saber qual a URL de onde partiu a chamada, além da própria chamada.

Event Start
   &deonde = &httprequest.Referrer
   if &deonde.IndexOf('paginaautorizada')      // libera porque veio do lugar correto
   endif
Endevent



Ambientes separados de Homologação e Produção

Nem preciso dizer da importância disso, só não se esqueça de utilizar banco de dados diferentes.



Creio que com esses elementos você conseguirá produzir algo bem interessante em seu sistema, de forma controlada e segura.

(fonte da imagem: http://abhaychnadra.blogspot.com.br/)