Do executável Delphi para a web.
Pegamos o HeidiSQL 12.21, um programa Delphi de código aberto, e lemos só o executável oficial, sem abrir o código-fonte. Em 5,3 segundos saiu tudo o que as telas prometem. Depois conferimos contra o código: 34 de 34 telas idênticas.
O caminho inteiro, do arquivo .exe à tela na web.
Um arquivo de 25 MB, lido como bytes, sem rodar o programa.
- 38telas
- 1.634componentes
- 1.264eventos de tela
- 199comandos SQL
- 48tabelas citadas
Cada número vem do contrato gerado do executável oficial (sha256 no fim da página) e é refeito igual a cada execução.
Escolha uma tela e clique num botão: aparece o que ele faz no sistema original.
Onde existe código-fonte, o executável tem que dizer a mesma coisa. Disse.
| pelo executável | pelo código-fonte | |
|---|---|---|
| Telas do projeto | 34 | 34 |
| Telas idênticas, componente por componente | 34 de 34 | |
| Eventos nessas telas | 1.264, os mesmos dos dois lados | |
| Telas embutidas que nada abre | 4 | não aparece lendo o código |
Um achado que só o executável mostrou
A tela de sincronização de bancos (TfrmSyncDB) está dentro do executável, com botões e eventos, mas a classe dela não está: nada no programa abre essa tela, e o compilador descartou o código. Lendo só o fonte, ela parece viva. É o tipo de coisa que decide o escopo de uma migração: não se reescreve o que ninguém usa.
Quatro passos, cada um com a sua conferência.
Ler o executável
O Delphi guarda cada tela dentro do .exe. Lemos esses blocos como dados: telas, componentes, ligações e eventos. O programa nunca é executado.
Montar o contrato
Tudo vira uma lista do que o sistema promete: cada botão, o evento dele, o SQL que aparece. Mesmo arquivo, mesmo resultado, byte a byte.
Conferir com o fonte, quando existe
Lemos o código pelo arquivo de projeto e comparamos tela por tela. Aqui, 34 de 34 idênticas.
Subir para a web
As telas viram HTML, cada evento ligado à operação do contrato. Um conferidor reprova se faltar um componente ou um evento: faltaram 0.
O que o executável não entrega, e como fechamos.
- O código de cada botão. O executável traz a tela e diz se o botão tem código, mas não o que o código faz. Esse passo vem do código-fonte ou da engenharia reversa do binário.
- SQL montado em tempo de execução. No código-fonte do HeidiSQL, 195 comandos são montados com variáveis; a tabela real só aparece rodando. Ficam marcados para conferir com quem conhece o sistema.
- O desenho. A versão web usa as posições originais da tela. É o ponto de partida para redesenhar, não o visual final.
Programa de terceiros, código aberto, usado como caso de estudo.
O HeidiSQL é criado por Ansgar Becker e colaboradores e distribuído sob a licença GPL-2.0. A Genesis não tem relação com o projeto. Executável: release oficial 12.21, sha256 do heidisql.exe d4bc6b81906832aeed79e054ed094f5e15449c8fa91285538173d4a7f90db113. Código-fonte: repositório oficial, commit effb854 (Bump version for v12.21 release). Nada foi alterado no programa.
Tem um sistema em Delphi parado no tempo?
Manda o executável ou o código. Devolvemos o contrato do sistema, o que ele faz tela por tela, e o caminho para a web.