Testes unitários e testes estáticos

Projeto [x]Harbour - Compilador de código aberto compatível com o Clipper.

Moderador: Moderadores

Avatar do usuário
André Corrêa
Usuário Nível 2
Usuário Nível 2
Mensagens: 81
Registrado em: 03 Nov 2015 07:46
Localização: Caraguatatuba/SP

Testes unitários e testes estáticos

Mensagem por André Corrêa »

Boa tarde,

Há algum tempo tenho pesquisado e pensado a respeito da possibilidade de termos uma suite de testes para o Harbour.
Para aqueles que não conhecem, testes unitários são testes executados sobre pequenos trechos de código, a fim de garantir que o resultado
será o esperado. Ou seja, em programação funcional, são escritos para testar funções em POO, são testados os métodos.
A maioria das linguagens conhecidas já possuem ferramentas que facilitam esses testes, como a JUnit para Java, pyTest para Python, e inúmeros frameworks e plataformas que executam testes estáticos em diversas linguagens, como o https://www.sonarqube.org/, que tem suporte para 28 linguagens, mas não para a família xBase.
Para o Harbour, o mais próximo que encontrei, foi a hbUnit, https://github.com/endersonmaia/hbunit, um projeto independente, incompleto e sem atualizações desde 2013.

O assunto é complexo, mas a abordagem inicial pode ser simples: criar uma ferramenta para executar testes estáticos em código Harbour, que futuramente possa ser estendida para cobrir também os testes unitários.
Minha ideia inicial é ler o código, obter as variáveis declaradas e buscar erros de acesso, como acesso fora do limite do array (ou of bound), acesso a array vazio (array acess), acesso a variáveis não inicializadas, etc.

Eu gostaria da ajuda dos colegas mais experientes nesse projeto, que poderá ser útil a toda a comunidade caso saia do papel.
Preciso de ideias para encontrar a melhor forma de ler o código, localizar as variáveis e checar pelos possíveis erros.
Inicialmente pensei em utilizar regex ou as funções simples de localização de strings mesmo, mas não sei se esse é o melhor caminho.
Se alguém tiver algum conhecimento mais técnico sobre como o compilador checa por este tipo de erro, será de grande ajuda.
O link do projeto no Github é https://github.com/andrelccorrea/Harbou ... sting-Tool, porém, ainda não existe nada de
grande relevância.

Abraços,
-- André Corrêa

"Opte por aquilo que faz o seu coração vibrar, apesar de todas as consequências". - Osho
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Testes unitários e testes estáticos

Mensagem por JoséQuintas »

André Corrêa escreveu:Minha ideia inicial é ler o código, obter as variáveis declaradas e buscar erros de acesso, como acesso fora do limite do array (ou of bound), acesso a array vazio (array acess), acesso a variáveis não inicializadas, etc.
Considerando que muitos aqui nem sequer usam a compilação -e3 -es2 .....

Mas sabe o que sinto falta no Harbour?
Checagem de objetos.
Talvez até checar isso seja mais fácil do que o resto, e geralmente faria parte da IDE.

Tipo... colocar no fonte classe:Iniciar(), mas o nome correto era classe:Inicializa()

Isso não dá pra colocar no compilador, porque teria que analisar o conjunto de fontes, e talvez até alguma possível LIB.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar do usuário
André Corrêa
Usuário Nível 2
Usuário Nível 2
Mensagens: 81
Registrado em: 03 Nov 2015 07:46
Localização: Caraguatatuba/SP

Testes unitários e testes estáticos

Mensagem por André Corrêa »

Boa noite, Quintas.

Eu gostaria de ideias que possa usar, de como fazer, etc.
Sozinhos, muitas vezes não encontramos os melhores caminhos e nesse caso, a vasta experiência de usuários como você, ajudaria muito.

Abraço,
-- André Corrêa

"Opte por aquilo que faz o seu coração vibrar, apesar de todas as consequências". - Osho
Avatar do usuário
André Corrêa
Usuário Nível 2
Usuário Nível 2
Mensagens: 81
Registrado em: 03 Nov 2015 07:46
Localização: Caraguatatuba/SP

Testes unitários e testes estáticos

Mensagem por André Corrêa »

Considerando que muitos aqui nem sequer usam a compilação -e3 -es2 .....

Mas sabe o que sinto falta no Harbour?
Checagem de objetos.
Talvez até checar isso seja mais fácil do que o resto, e geralmente faria parte da IDE.

Tipo... colocar no fonte classe:Iniciar(), mas o nome correto era classe:Inicializa()
Como costumo utilizar IDE, estou conhecendo agora os parâmetros de compilação via linha de comando. Não encontrei nenhum documento, nem do Harbour, nem do Clipper tratando disso.
Alguém poderia disponibilizar algum documento ou compartilhar o que conhece?
Sobre criar algo no sentido de checagem de métodos e variáveis de objetos, é uma ideia bem interessante. Poderia ser algo baseado no que o Intellisense faz, mas pré compilação.
-- André Corrêa

"Opte por aquilo que faz o seu coração vibrar, apesar de todas as consequências". - Osho
Avatar do usuário
sygecom
Administrador
Administrador
Mensagens: 7131
Registrado em: 21 Jul 2006 10:12
Localização: Alvorada-RS
Contato:

Testes unitários e testes estáticos

Mensagem por sygecom »

André Corrêa escreveu:Como costumo utilizar IDE, estou conhecendo agora os parâmetros de compilação via linha de comando. Não encontrei nenhum documento, nem do Harbour, nem do Clipper tratando disso.
Alguém poderia disponibilizar algum documento ou compartilhar o que conhece?
Andre,
De uma olhada no link abaixo.
https://harbour.github.io/doc/harbour.h ... er-options
Leonardo Machado
xHarbour.org + Hwgui + PostgreSql
Avatar do usuário
jairfab
Usuário Nível 3
Usuário Nível 3
Mensagens: 252
Registrado em: 21 Mai 2007 09:43
Localização: São Paulo, Região Leste - Suzano

Testes unitários e testes estáticos

Mensagem por jairfab »

Dar uma olhada neste projeto ve se ajuda

https://github.com/endersonmaia/hbunit
Delpji 7, harbour 3.2, xharbour 1.2.3, Bcc7, Minigw, Minigui 19.11, hwgui 2.20, FiveWin 19.05 Gtwvw, Gtwvg, C# VS 2017
Avatar do usuário
Itamar M. Lins Jr.
Administrador
Administrador
Mensagens: 7928
Registrado em: 30 Mai 2007 11:31
Localização: Ilheus Bahia
Curtiu: 1 vez

Testes unitários e testes estáticos

Mensagem por Itamar M. Lins Jr. »

Ola!
Dar uma olhada neste projeto ve se ajuda
Mas é exatamente esse projeto que ele cita no primeiro post. !?

Saudações,
Itamar M. Lins Jr.
Saudações,
Itamar M. Lins Jr.
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Testes unitários e testes estáticos

Mensagem por JoséQuintas »

Para o Harbour, talvez sirva o mesmo estilo do Visual Basic.
Pelo menos serve como referência, ao invés de partir do zero.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar do usuário
André Corrêa
Usuário Nível 2
Usuário Nível 2
Mensagens: 81
Registrado em: 03 Nov 2015 07:46
Localização: Caraguatatuba/SP

Testes unitários e testes estáticos

Mensagem por André Corrêa »

Bom dia,

Obrigado pelas respostas, é um bom ponto de partida.
Vou analisar tudo e tentar fazer algo funcional, aí posto por aqui.

Abraços,
-- André Corrêa

"Opte por aquilo que faz o seu coração vibrar, apesar de todas as consequências". - Osho
Responder