SAJ: o desafio de conceber e desenvolver a nova geração do sistema
O Sistema de Automação da Justiça é robusto. É composto por mais de 10 milhões de linhas de código e cerca de 60 mil pontos de função.
A título de comparação, a literatura sobre engenharia de software diz que um sistema muito grande tem 10 mil pontos de função. O SAJ é seis vezes isso.
Começamos a conceber a nova geração do SAJ em meados de 2016. Cientes das necessidades dos Tribunais, Ministérios Públicos e Procuradorias em se adequarem aos avanços tecnológicos, consultamos especialistas nacionais e internacionais em busca das melhores práticas para desenvolver a nova geração da nossa solução.
A primeira conclusão foi de que “refazer” do zero um software da mesma complexidade do SAJ seria impossível. A tarefa levaria seis anos, e o sistema se tornaria obsoleto assim que ficasse pronto.
Partindo dessa premissa, estabelecemos uma estratégia de desenvolvimento que leva em consideração quatro fatores. Com isso, conseguimos garantir a agilidade nas entregas, buscando equilíbrio entre inovação e mitigação de riscos.
Atualização do ambiente de desenvolvimento
Foi um dos primeiros passos para o desenvolvimento da sexta geração do SAJ, iniciado ainda em 2016. Atualizamos o ambiente de desenvolvimento do SAJ para a nova versão do Delphi, denominada “Tokyo”. Isso tornou possível um melhor aproveitamento dos recursos tecnológicos, proporcionando melhoria de performance superior a 40% e maior estabilidade. A base de programação Delphi Tokyo também possibilita o máximo aproveitamento das novas tecnologias previstas no escopo do SAJ.
Evolução e reuso a partir do produto existente
Vastas porções de código da quinta geração do SAJ vêm sendo evoluídas para a construção da sexta geração. Isso acelera o desenvolvimento e reduz substancialmente os riscos. As partes inéditas, criadas do zero, embora vultosas, não se comparam ao desafio que seria escrever integralmente as mais de 10 milhões de linhas de código necessárias para criar um produto deste porte a partir do zero.
Programação poliglota
Gerações anteriores do SAJ eram quase que inteiramente escritas na linguagem Delphi. Ainda que esta seja uma linguagem escalável e de alta performance, a abordagem “mono linguagem” nem sempre é a mais adequada para os paradigmas atuais. Para o novo SAJ, adotou-se o conceito de “programação poliglota”. Assim, é possível adotar a linguagem que oferece os melhores recursos para determinado produto. Soluções em Inteligência Artificial, por exemplo, muitas vezes beneficiam-se das características da linguagem Python. Outras, por sua vez, podem se aproveitar dos diferenciais do Java ou C#. Com a programação poliglota, essas soluções combinam-se e interoperam de maneira transparente para o usuário, que se beneficia do melhor de cada linguagem adotada.
Estrangulação e redução gradativa do núcleo
O SAJ vem passando por um processo de “estrangulamento gradativo do grande sistema”. Isso significa que a base de código do produto vem sendo continuamente quebrada em porções menores e desacopladas. Estas porções serão continuamente atualizadas por módulos escritos em diferentes linguagens de programação. Com isso, é reduzida a porção de código do núcleo do sistema, permitindo aperfeiçoar a substituição de versões e mitigar problemas decorrentes. Torna-se possível, por exemplo, atualizar apenas determinadas partes do produto para grupos específicos de usuários.