5. Softwares Homologados

Existe atualmente um conjunto de sistemas em produção que foi desenvolvido nas mais variadas linguagens e ambientes. Este fato gera problemas de mobilidade de técnicos entre projetos, de estrutura de suporte a esses ambientes e linguagens, além de criar dependências dos sistemas com ambientes operacionais específicos.

Por outro lado, as equipes de desenvolvimento e manutenção de sistemas sofrem pela carência de ferramentas que facilitem e até mesmo automatizem parte do processo de construção e adaptação de sistemas.

A visão de futuro estabelecida pelo presente documento trata essas duas realidades, indicando um ambiente operacional menos diversificado, mais portável e coerente com o movimento de software livre, no que for possível.

Sistemas Operacionais

Ficam definidos os seguintes sistemas operacionais para as respectivas plataformas: zOS e Linux (Red Hat) para o mainframe; Linux para as estações de trabalho e servidores das máquinas PCs, sendo que para os servidores a distribuição deverá ser a Red Hat; Solaris para as máquinas RISC da Sun.

Linguagens de Desenvolvimento

Fica definido que as linguagens padrão para desenvolvimento de sistemas são as seguintes: o Java, como linguagem básica e o HTML (HiperText Markup Language) e o Javascript para a camada de apresentação das aplicações para a Web.

O HTML é a linguagem que é entendida pelos browsers (navegadores) da Web e que são executados na máquina cliente.

O Javascript é uma linguagem de script que é embutida em código HTML.

Eventualmente, poderá ser utilizado o PHP (um acrônimo recursivo para “PHP: Hypertext Preprocessor”) para sistemas especiais, assim considerados pelo GCT.

O PHP é uma linguagem de script free e open source de uso geral, que roda em diversos sistemas operacionais, e que é muito usada e especialmente apropriada para o desenvolvimento de aplicações Web embutidas em código HTML. Ela se encontra em um estágio confiável de utilização para aplicações de pequeno porte.

Esta decisão levou em consideração que o Java é uma linguagem estável, completa, em constante evolução, que tem recebido constantes e valiosas contribuições dos principais fornecedores de TIC – Tecnologias da Informação e Comunicação, das universidades e da comunidade usuária, atendendo aos critérios de uma maior independência de plataforma tecnológica e de fornecedor.

Ela foi testada em projetos de pequeno, médio e grande porte na EMPREL e apresentou resultados satisfatórios.

Existem várias ferramentas que se integram ou que utilizam o Java dentro do processo de desenvolvimento e manutenção de software, desde a fase de análise e projeto, passando pela geração de código (engenharia direta e engenharia reversa), montagem e utilização de ambientes de desenvolvimento, até as ferramentas de teste e monitoramento de sistemas em produção.

Pode-se utilizar desde um simples editor de textos, como o Notepad do Windows, até ambientes completos de desenvolvimento, para a geração de código Java.

Pode-se utilizar o byte-code (gerado a partir da compilação do código fonte) de imediato e sem qualquer necessidade de adaptação, em máquinas virtuais disponíveis nos diversos sistemas operacionais, e, portanto, dotando a solução de uma maior portabilidade, como também pode-se gerar o código em linguagem de máquina que é mais rápido, porém dependente da plataforma.

Com o Java, é possível criar soluções para a Internet/Intranet, como também para sistemas cliente-servidor tradicional.

A execução das aplicações pode ocorrer de forma on-line ou batch.

Quanto às estruturas de armazenamento, o Java trabalha com estruturas em memória como também com bancos de dados (relacionais e orientados a objetos), podendo inclusive, ser utilizado para implementação de stored procedures nos principais bancos de dados.

Nativamente, o Java oferece um conjunto considerável de componentes que viabilizam e facilitam a tarefa de construção de software. Alguns deles estão disponíveis no ambiente gráfico de desenvolvimento (de forma semelhante ao Delphi, SQL Windows ou Centura), enquanto outros podem ser utilizados internamente, através do uso de Javabeans, Enterprise Java Beans ou classes.

O Java oferece componentes para a construção de código para as seguintes funcionalidades, entre outras: Emissão de relatórios; Envio e recebimento de e-mails; Publicação e tratamento de páginas na Internet; Acesso a bancos de dados; Tratamento de tipos de campos; Construção de telas; Tratamento de código HTML, XML e Javascript; Processamento distribuído (com o RMI, CORBA, JINI, SOCKETS, etc); Leitura e gravação de arquivos (em vários formatos), e; Tratamento de arquivos multimídia.

Existe uma gama enorme de componentes (free e pagos) desenvolvidos por terceiros e disponíveis em Java, no sentido de permitir o uso de tecnologias específicas, assim como no sentido de viabilizar um aumento de produtividade no desenvolvimento. São exemplos, os componentes para geração de telas e relatórios, para tratamento de geoprocessamento, para uso da inteligência artificial, etc.

Ambiente Integrado de Desenvolvimento e Teste Java (IDE)

Fica definido que o ambiente integrado de desenvolvimento, manutenção e teste de sistemas em Java é o WSAD da IBM.

Esta decisão se deve principalmente a recomendação técnica de utilização de ambientes de desenvolvimento e teste (IDE) do mesmo fornecedor do servidor de aplicações, em função das especificações técnicas não garantirem total independência entre esses tipos de ferramentas, no momento.

Outro aspecto importante a considerar diz respeito aos problemas ocorridos na fronteira entre a ferramenta IDE e o servidor de aplicações, onde é recomendável que se tente evitar que um fornecedor fique culpando o software do outro fornecedor (e vice-versa), atrasando o diagnóstico e a solução desses problemas.

Como a escolha do servidor de aplicações é mais crítica do que a escolha da IDE, devido aos custos mais elevados e em função dos parâmetros de desempenho e estabilidade requeridos pelo ambiente de produção serem mais rigorosos, foi definido primeiramente o servidor de aplicações da IBM - considerado um dos melhores servidores de aplicações do mercado, no momento.

O WSAD é uma ferramenta abrangente que permite a criação e manutenção de projetos. Esses projetos são configuráveis, estruturam as aplicações (código fonte e executável) em pacotes, utilizam bibliotecas e componentes, e oferecem uma série de serviços do tipo compilação, deployment (acionamento dos servidores de aplicações e de Internet, e execução do código gerado nesses servidores) e depuração de código (debug), entre outros.

O WSAD disponibiliza seus próprios componentes e conectores para utilização nas aplicações.

No entanto, apesar do WSAD disponibilizar um conjunto de componentes e conectores de fácil utilização e que poderiam aumentar a produtividade das equipes, fica expressamente proibido a utilização de componentes proprietários dessa ferramenta, no sentido de garantir uma maior independência de plataforma e de fornecedor defendida com a utilização do Java.

Eventualmente, poderá ser utilizado o ECLIPSE como ferramenta IDE para sistemas especiais, assim considerados pelo GCT.

O ECLIPSE é uma ferramenta IDE “free” e “Open Source” e constitue a base do WSAD. Ela foi cedida pela IBM para a comunidade de software livre, empresa que a desenvolveu inicialmente. A partir daí, o seu desenvolvimento acontece de forma independente da IBM, ao mesmo tempo que o WSAD também evolui independente do ECLIPSE.

Servidor de Aplicações

Fica definido que o servidor de aplicações padrão para todos os ambientes é o WebSphere da IBM.

O Websphere é o servidor de aplicações líder mundial no seu segmento. Ele é bastante estável, robusto e rápido.

Eventualmente, poderá ser utilizado o JBOSS como Servidor de Aplicações para sistemas especiais, assim considerados pelo GCT.

O JBOSS é um Servidor de Aplicações “free” e “Open Source”, que implementa a arquitetura J2EE da SUN.

Servidor Web

Fica definido que o servidor web padrão para os ambientes de desenvolvimento e de testes é o Tomcat, da Jakarta, e o servidor web dos ambientes de homologação e produção é o Apache.

O servidor Web trata as requisições para páginas Web estáticas.

Container de Servlet

Fica definido que o container de Servlet para todos os ambientes é o Tomcat, da Jakarta - o Tomcat é um Servidor Web e Container de Servlet -.

Container de Servlet é uma categoria de software que atua no ambiente da Internet/Intranet, no lado servidor, e que tem a função de redirecionar requisições HTTP para classes Java.

Quando existe uma requisição HTTP para um Servlet ou JSP (Java Server Page), tal requisição será redirecionada pelo Servidor Web para o Container de Servlets, que acionará o Servlet ou JSP correspondente. O Servlet ou JSP, por sua vez, poderá gerar dinamicamente uma página Web estática em resposta, que percorrerá o caminho inverso, até chegar no cliente.

SGBD – Sistema Gerenciador de Bancos de Dados

Fica definido que o SGBD padrão para todos os sistemas é o DB2 da IBM.
Eventualmente, poderá ser utilizado o Postgress (PostgreSQL) para sistemas especiais, assim considerados pelo GCT.

O Postgress é um SGBD free, que roda em diversos sistemas operacionais, e que se encontra em um estágio confiável de utilização para aplicações de pequeno porte.

Já o DB2 também pode ser utilizado em diversos ambientes, inclusive no zOS do mainframe e no Linux, e atende aos requisitos de estabilidade e performance para aplicações de qualquer porte.

Ferramenta de Data Warehouse

A ferramenta adotada para a construção de Data Warehouses ou Data Marts é o Sagent.

Um Data Warehouse pode ser definido como um grande armazém de dados corporativos e o Data Mart um armazém de dados departamentais, ambos normalmente desnormalizados, estruturados de uma forma tal que permita um acesso rápido para consultas e análises dinâmicas.

Essas ferramentas são construídas normalmente baseadas em dados oriundos de bases de dados de vários sistemas transacionais, com a possibilidade de integração com dados não convencionais em planilhas, documentos textos, etc, associados a funcionalidades de agregação/desagregação de dados, bem como a formas variadas de apresentação (gráficos, planilhas, consultas, relatórios), inclusive na Internet/Intranet.

O público alvo dessas ferramentas é composto do alto escalão das organizações que normalmente precisam de informações cruzadas, sintéticas e que possam ser criadas dinamicamente em consultas e relatórios.

Ferramentas de Geoprocessamento

O geoprocessamento exige a definição de uma gama enorme de padrões, que vai desde as metodologias de coleta e tratamento dos dados espaciais, passando pela geocodificação dos atributos, precisão dos dados e periodicidade de coleta, culminando com o hardware e software necessários para a manipulação e exibição das informações georreferenciadas.

Um dado georreferenciado pode e deve ser acessado por vários órgãos da prefeitura, assim como pela própria população. Logo, a solução deve permitir uma flexibilização das condições de acesso e uso a essa tecnologia.

A solução escolhida dividi-se em 2 grupos: Ferramentas para uso Local ou Desktop – Software para consulta e/ou elaboração de Sistemas de Informação Geográfica – GIS e manutenção da base gráfica, para atender a projetos individuais ou restritos a um determinado grupo de usuários, com base de dados local ou departamental; Solução Corporativa – Incorporação da tecnologia de geoprocessamento nos sistemas corporativos da prefeitura, executados no ambiente Internet, além da possibilidade de geração, de forma semi-automática de home pages para consultas em geoprocessamento.

Apesar das iniciativas e avanços em termos de softwares free e/ou open source na área do geoprocessamento, inclusive com produção brasileira, esses softwares ainda não estão maduros o suficiente para serem adotados como padrões.

Levando-se em consideração, por um lado, o atual estágio dos softwares livres e, por outro lado, a experiência da EMPREL e órgãos da prefeitura, além do posicionamento dos fornecedores no mercado mundial de softwares de geoprocessamento, a EMPREL definiu que o ambiente de geoprocessamento deve se basear na solução da ESRI (empresa americana líder mundial do setor), e é composto pelos seguintes softwares: Ferramentas para uso Local ou Desktop: ArcExplorer (como ferramenta desktop de consulta a dados georreferenciados); ArcView (como ferramenta desktop para elaboração de Sistemas de Informações Geográficas – SIG, incluindo recursos de mapeamento, análise, e recursos básicos para edição de dados gráficos); ArcEditor (inclui todas as funções do ArcView, além de recursos avançados para edição de mapas e banco de dados geográfico); ArcInfo (inclui todas as funções do ArcView e do ArcEditor, incluindo recursos avançados de geoprocessamento); Solução Corporativa: ArcSDE (para armazenamento e acesso aos dados espaciais, de forma integrada com os dados descritivos no SGBD); ArcIMS (para criação de esquemas e serviços de visualização de mapas, para fornecimento de acesso e processamento dos serviços definidos, bem como para geração de home pages para manipulação de dados georreferenciados); MapObject for Java (API em Java para acesso às funcionalidades de geoprocessamento).

Ferramenta de Automação de Escritório

A ferramenta de automação de escritório adotada, até então, na EMPREL era o StarOffice.

Na sua versão mais recente, o StarOffice saiu da condição de software livre.

No entanto, o fornecedor (SUN Microsystem) cedeu todo o código fonte do StarOffice, na versão 5.2, para a Fundação Open Source.

A Fundação Open Source, por sua vez, com algumas adaptações no código recebido, disponibilizou a versão inicial do OpenOffice, que corresponde a uma versão free e open source (com o seu código fonte e sem custos).

O OpenOffice está sendo considerado pela imprensa especializada, como a melhor ferramenta free de automação de escritório disponível no momento.

Ele pode ser executado em diferentes sistemas operacionais e dispõe das funcionalidades básicas requeridas em um software de automação de escritório, como a de um editor de texto, planilha eletrônica, banco de dados de pequeno porte, editor de HTML e apresentação de storyboard.

Logo, atendendo às diretrizes encontradas na lei municipal que trata do uso de software livre na Prefeitura do Recife, e ainda, no sentido de baratear os custos com a aquisição de softwares de automação de escritório (e, até mesmo com o sistema operacional que poderá ser também um software livre) e considerando a qualidade reconhecida do produto, a EMPREL definiu o OpenOffice como o software padrão de automação de escritório.

Software de Controle de Versões

A ferramenta de controle de versões é uma ferramenta fundamental para permitir o desenvolvimento e manutenção de software em um ambiente cooperativo, onde várias pessoas poderão alterar o mesmo código, eventualmente no mesmo momento.

Uma das ferramentas mais utilizadas no mundo dos softwares livre e open source e que já foi utilizada em projetos de grande porte na EMPREL, tendo sido aprovada pelos usuários foi o CVS – Concurrent Versions System.

Essa ferramenta também é free.

Essa solução conta com o uso de um servidor CVS e de versões cliente que são instaladas nas máquinas dos usuários. Existem versões clientes para vários sistemas operacionais, como o Windows e o Linux.

Qualquer tipo de arquivo pode ser controlado pelo CVS.

Ela dispõe das funcionalidades básicas de qualquer ferramenta de controle de versões, como o check-in, check-out, lock, unlock, edit e merge, entre outras.

Fica definido o CVS como a ferramenta padrão de controle de versões da EMPREL, e que todos os artefatos (documentos e código) gerados em projetos de desenvolvimento e manutenção de sistemas deverão ser controlados pelo CVS.

O CVS utiliza a mesma hierarquia de pastas utilizada pelo Windows e Linux. No entanto, a MEDS define qual a estrutura de diretórios padrão a ser utilizada nos projetos de desenvolvimento e manutenção de sistemas, e é essa estrutura descrita na MEDS que deverá ser seguida em todos os projetos.

A MEDS descreve o momento e a forma de utilização do controle de versões, além de um guia de uso do CVS.

Software de Script Batch

Fica definido o Ant como sendo a ferramenta padrão de geração e execução de scripts batch da EMPREL.

Com o Ant, pode-se criar, deletar, renomear, copiar e mover diretórios e arquivos, executar programas, etc, além de aferir se um determinado passo do script foi executado com sucesso.

Ele dispõe de comandos de controle do fluxo de execução do script.

Pode ser executado no Windows, como também no Linux.

É uma ferramenta free e se apresenta de forma isolada ou integrada em outros softwares, como por exemplo, no JBuilder 8.0.

Software de Controle de Bugs e Mudanças

Fica definido o Bugzilla como o Software de Controle de Bugs e Mudanças.

O Bugzilla é um software free que controla basicamente bugs (erros encontrados em softwares). No entanto, ele pode ser utilizado para controlar também as mudanças ou novas solicitações de software demandadas pelos usuários.

Ele requer a instalação em um servidor, que executará suas funções no ambiente Internet.

Com o Bugzilla é possível abrir um bug associado a um determinado componente de um determinado software, classificando-o pela prioridade, ambiente de execução, grau de severidade, etc. Esse bug passa a ser controlado, através da mudança do seu estado, podendo um bug ser aceito ou rejeitado, assinalado para alguém que será o responsável pelo seu tratamento, corrigido, fechado, reaberto, e assim por diante.

Na sua criação e para cada mudança de estado de um bug, todas as pessoas associadas ao componente para o qual foi aberto o bug, receberão e-mails comunicando a mudança ocorrida.

Ele aceita que imagens sejam anexadas aos bugs, possibilitando que cópias das telas do sistema, apresentadas no momento da aparição do erro e capturadas, possam ser anexadas à descrição do erro, facilitando a contextualização do erro.

A ferramenta dispõe de uma interface de fácil entendimento e utilização (apesar de ser em Inglês, ela é bastante intuitiva) e rica em consultas pré-formatadas. Além disso, ela permite a criação de novas consultas parametrizadas.

O Bugzilla já foi utilizado na EMPREL, sendo aprovada e elogiada por técnicos e gerentes.

A MEDS descreve o momento e a forma de utilização do controle de bugs e mudanças, além de disponibilizar um guia de uso do Bugzilla.

Software para Modelagem de Sistemas

Fica definido o Rational Rose como sendo a ferramenta padrão para modelagem de software na EMPREL, utilizado nos fluxos de requisitos, análise, projeto e implementação.

O Rose utiliza, entre outras formas de representação, a UML – Unified Modeling Language (Linguagem de Modelagem Unificada), que representa um padrão “de fato” para modelagem de softwares orientados a objetos.

Com ele, é possível criar os nove tipos de modelos (diagramas) da UML (Casos de Uso, Classes, Objetos, Atividade, Seqüência, Colaboração, Distribuição, Componentes e Estado), além do Diagrama de Entidade-Relacionamento Estendido.

Além disso, o Rose permite a realização da engenharia direta e reversa em Java e outras linguagens (entre modelo e código) e a engenharia direta e reversa com o banco de dados (modelo e script de geração e/ou alteração de bancos de dados DB2, Oracle, e outros), além da criação de tabelas, a partir das classes persistentes, e vice-versa.

Ele ainda permite a realização do “deployment” em diversos servidores de aplicação, como o WebSphere da IBM e o BES – Borland Enterprise Server.

Software de Testes de Unidade

Fica definido o JUnit como o software a ser utilizado para a realização de testes de unidade em Java.

Entende-se teste de unidade, pelo teste que deve ser efetuado sobre uma determinada classe ou funcionalidade específica do sistema.

Cada classe relevante do sistema deverá ter uma classe de teste associada, que deverá acionar métodos da classe relevante e comparar o resultado obtido, apresentando o resultado: sucesso ou falha.

Essa execução será acionada por scripts do Ant, que normalmente irão acionar várias classes de teste de unidade em seqüência e de forma automática, enviando e-mails para os responsáveis quando do aparecimento de erros. Desta forma, pode-se monitorar se alguma mudança no sistema afetou alguma funcionalidade pré-existente.

A MEDS descreve o momento e a forma de utilização dos testes de unidade, além de disponibilizar um guia de uso do JUnit.

Software de Testes de Funcionalidade

Fica definido que o software padrão para a execução de testes de funcionalidade é o Canoo Web Test.

Entende-se por teste de funcionalidade, pelo teste de uma determinada funcionalidade do sistema, que normalmente envolve um conjunto de classes e que normalmente apresenta uma interface gráfica com o usuário.

O Canoo permite o acionamento de funcionalidades do sistema baseado na web, simulando a digitação de dados e o pressionamento/seleção de botões e elementos gráficos como combobox, radio button, etc, simulando a utilização do sistema por um usuário qualquer, de forma automática.

Além de acionar funcionalidades e fornecer dados para a aplicação, com o Canoo é possível recuperar uma tela enviada pelo sistema e realizar a análise dessa página HTML, no sentido de verificar o conteúdo de qualquer elemento gráfico ou até mesmo o aparecimento de alguma mensagem específica, para que se chegue a conclusão sobre o sucesso ou falha do teste.

A MEDS descreve o momento e a forma de utilização dos testes de funcionalidade, além de disponibilizar um guia de uso do Canoo.

Software de Testes de Stress

Fica definido que o software padrão para a realização de testes de stress é o JMeter.

Entende-se teste de stress como o tipo de teste que simula a utilização do sistema por vários usuários simultaneamente, no sentido de verificar problemas de concorrência, performance e integridade das operações.

O JMeter também é uma ferramenta free.

Ela é parametrizável e disponibiliza gráficos e consultas que apresentam o comportamento do sistema durante a execução dos testes.

A MEDS descreve o momento e a forma de utilização dos testes de stress, além de disponibilizar um guia de uso do JMeter.

Software para Integração Contínua

Fica definido o CruiseControl como o software utilizado na integração contínua, conjuntamente com o CVS e o Ant.

Entende-se por integração contínua o procedimento automatizado de verificação do comportamento do sistema, quando da integração ao mesmo de novos componentes de código ou mudanças em componente pré-existentes.

Os objetivos dessa prática são: Garantir que a versão corrente do sistema possa ser obtida a qualquer momento; Certificar que a versão corrente esteja integra e funcionando corretamente; Verificar se as últimas mudanças (código) introduzidas no sistema afetaram ou não o código pré-existente.

Esse procedimento, que é executado freqüentemente (várias vezes por dia), se compõe: Na verificação junto ao CVS, da existência de mudanças no código fonte e na baixa de todo o código fonte do sistema, em uma determinada versão, em caso afirmativo; Na compilação de todo o sistema, e; Na execução de todos os testes automatizados de unidade e/ou de funcionalidade.

Caso ocorra algum erro durante alguma fase desse procedimento, uma comunicação via e-mail será encaminhada para os responsáveis.

O log de toda a operação é gerado e publicado automaticamente na Internet/Intranet, independentemente do resultado.

Esse procedimento é realizado pelas ferramentas CVS, Ant, compilador Java, JUnit, Canoo Web Test e CruiseControl, em conjunto.

Ferramenta de Geração de Help

Fica definido que o software de geração de Help é o Robohelp.

Essa ferramenta permite a criação de todo o help que será incorporado aos sistemas, além da geração do help em relatório.

Ferramenta de Refactoring

Fica definido que a ferramenta de refactoring é o JRefactoring.

Entende-se por refactoring, a reestruturação de parte ou de todo o código fonte.

Essa reestruturação pode se restringir a documentação do código fonte, como também pode implicar na aplicação de padrões de projeto aos códigos, como por exemplo, a aplicação do padrão Singleton.

Ferramenta para verificação de padrões e correção de código HTML

Existem vários browsers sendo utilizados na Web. Os browsers estão disponíveis em várias versões, pois existe uma contínua evolução dessas ferramentas. A conseqüência dessa diversidade é que as versões mais antigas não suportam determinadas funcionalidades mais recentes.

Felizmente, existe um organismo internacional, a World Wide Web Consortium – W3C (http://www.w3c.org/), criado desde 1994, que desenvolve especificações técnicas que padronizam a construção e o uso da infra-estrutura da Web.

Algumas dessas especificações técnicas tratam exatamente de padronizações relativas à linguagem HTML.

Baseados nessas especificações técnicas relativas ao HTML, alguns fornecedores desenvolveram algumas ferramentas de validação e/ou correção, no sentido de garantir que uma página Web que utilize apenas comandos HTML dentro de determinadas especificações possa rodar em qualquer browser que atenda às mesmas especificações.

Nesse sentido, fica definido como padrão de validação e correção de código HTML a ferramenta HTML TIDY (http://tidy.sourceforge.net). Ela possibilita a correção e a arrumação, em um layout mais estruturado, de códigos HTML.

Protocolo para Transferência de Dados

Fica estabelecido que o protocolo padrão para troca de dados entre sistemas é o XML.

O XML também está sendo largamente utilizado por diversos softwares nas suas configurações, além de ser utilizado pelos browsers e SGDBs.

Componentes Java

Ficam definidos como padrões os componentes abaixo, com suas respectivas finalidades:

Avaliador de fórmulas matemáticas – JEP

Gerador de imagens GIF – Acme

Controle de transações - EJB - Enterprise Java Beans e o cesar.persistencia.transações.GerenciadorTransacoes

Pool de conexões – EJB - Enterprise Java Beans e o cesar.persistencia.poolConexoes.GerenciadorPollConexoes

Geração de log – Log4j