Estudo de caso do desenvolvimento de uma framework Java pela empresa 3w.TI Diovane Rinaldin [email protected] Abstract. In the present article was exposed the process of modification of the work way of the 3w.TI enterprise at Campo Largo – PR when observed the necessity of produce a new framework to supply the demand of work and begin a task of standardization of activities. Focused in explain the advantages, indicated by the managers, for adoption of the Java language and the researches done until come to this conclusion. Starting by the premises “effective service” and “reduction of the time to treatment” using concepts of the Software Engineering and even language production for obtain products that attend the initial expectations of the direction. Resumo. No presente artigo está exposto o processo de modificação da forma de trabalho da empresa 3w.TI de Campo Largo - PR quando se observou a necessidade de se produzir uma nova framework para suprir a demanda do trabalho e iniciar uma tarefa de padronização de atividades. Concentrase em explicar as vantagens, apontadas pelos gestores, da adoção da linguagem Java e as pesquisas feitas até chegar a essa conclusão. Partindo das premissas "atendimento eficaz" e "redução de tempo de atendimento" utilizando conceitos de Engenharia de Software e até mesmo de produção de linguagens para se obter produto que atendesse as expectativas iniciais da diretoria. I. Introdução Toda empresa deve utilizar métodos de trabalho padronizados (CAMPOS), porém, algumas vezes e por diversos fatores, o processo de desenvolvimento de software acaba sofrendo com falta de definição e “o programador sofre por falta de ferramentas e a necessidade de desenvolver muitas funcionalidades inerentes ao negócio” (comentário de um programador que preferiu não se identificar). Com isso surgem diversos problemas no desenvolvimento de um projeto mal planejado, entrando no que é definido por Alexandre Bartié no livro “Garantia Da Qualidade De Software” de custos de não conformidade que são todos os custos de atividades ligadas ao esforço de reparar falhas de produtos originados no decorrer do processo de desenvolvimento. Todas as conseqüências financeiras causadas por estes defeitos, devem ser computados nos custos da não-conformidade. Tudo que é realizado ou gerado em função de defeitos produzidos durante os projetos de software devem ser encarados como não conformidades, ou seja, os custos provenientes da falta de qualidade. Olhando sob essa luz a empresa desenvolvedora de software sob encomenda localizada em Campo Largo – PR denominada 3w.TI, da qual faço parte, resolveu modificar sua ferramenta de trabalho e assim começar a promover a padronização dos processos da empresa pelo de desenvolvimento de software no tocante a arquitetura das aplicações. Utilizando Java, uma das linguagens mais robustas do mercado (LACOVARA), foi criada uma framework, batizada de Universe, a ser incorporada nos novos projetos por ela desenvolvidos, observando os conceitos de produção de linguagens minimalistas seguindo a partir de um domínio mínimo de abrangência (CHOMSKY), observando, por exemplo, o nível de abstração que deve se chegar para se desenhar o objeto que representará um campo de uma determinada tabela sendo usada em diversos momentos tornava o (BOSKOVIC & LASNIK). trabalho improdutivo, principalmente no tocante a Concebida nos moldes e para satisfazer o modelo manutenção, também era de difícil entendimento MVC ela provê um dataset e gerencia para quem começava a trabalhar com ela. Outra automaticamente o acesso a base de dados situação que levou a criação da Universe foi a construindo sozinha comandos ANSI SQL que necessidade de se produzir aplicações desktop consigam ser executados no maior número de (client-side), após diversos estudos e avaliações se SGDB’s possível (MANZANO) de pesquisa e optou por usar Java como a tecnologia a ser usada na atualização dos dados. Ainda constrói interfaces framework, pois com ela é possível o padronizadas segundo os campos que o usuário desenvolvimento Web e desktop. Foi cogitado o uso desejar que sejam apresentados usando os de Delphi 7 e a manutenção do PHP, ou ainda o uso respectivos controles visuais – caixas de da tecnologia .NET, mas os fatores abaixo combinação, caixas de texto, botões de seleção, etc. enumerados impossibilitaram o uso: – selecionados. Delphi 7 II. Método de pesquisa Para se chegar até a ferramenta, diversas etapas necessitaram ser concluídas, enumeradas em: enumeração de empresas de software da região, dessas empresas quais adotaram implementações de frameworks próprias, entrevistas com os envolvidos na definição da arquitetura e no desenvolvimento da ferramenta e estudo em livros de Engenharia de Software que definem a construção de um novo software e que padrões são encontrados no caso estudado. Desse processo de coleta de informações também surgiu o artigo que está em suas mãos. • A tecnologia web (Intraweb) proposta pela ferramenta não atende as expectativas dos desenvolvedores nos quesitos produtividade, manutenção e clareza de código; • A Borland já não produz o Delphi 7 e a versão mais atual, produzida pela Embarcadero é chamada de Delphi 2010 e o preço do licenciamento (segundo contato com Micro Focus por e-mail no mês de fevereiro de 2010) é: As duas primeiras etapas “enumeração de empresas de software da região” e “dessas empresas quais adotaram implementações de frameworks próprias” foram satisfeitas segundo a capacidade de ver o mundo em volta pelo próprio conhecimento do negócio (KURETZKI, RINALDIN, BORTOLETO, PHP ANGÉLICO 2007) assim chegando até a 3w.TI. • A entrevista com os envolvidos na empresa teve, • por exemplos, questionamentos como: “Quais os grandes motivadores para a adoção de uma framework?” “De que forma foi feita a seleção de ferramentas e/ou linguagens para o desenvolvimento da ferramenta?” III. Motivação Apesar da framework usada ainda ser nova e conseguir atingir grande parte dos objetivos propostos, a framework em PHP que até então estava • o Unidade de Delphi - 2010 Professional New User R$ 2.338,00; o Unidade de Delphi - 2010 Enterprise New User - R$ 5.198,00; o Unidade de Delphi - 2010 Architect New User - R$ 9.098,00. A experiência no passado não foi agradável; Não é possível desenvolver aplicações desktop nativamente - existem projetos como o PHPGTK, mas que não são interessantes para empresa no momento; Muito trabalhosa para execução de algumas tarefas simples, como o controle de objetos em sessão - na versão 4 precisamos implementar serializações em arquivo no disco rígido do servidor - e também a confiabilidade e segurança (é necessário reimplementar classes para tratamento de strings usando funções como addslashes() para tratar caracteres especiais, como não há tipificação de dados explícita é necessário sempre executar cast das variáveis entre outros problemas). .NET • • Chegou muito perto de atender as expectativas, mas seria necessário um treinamento da equipe antes da implantação e isso demandaria um investimento de R$ 4.000,00 por funcionário (custo do treinamento em janeiro na Elaborata em Curitiba diariamente (contato por e-mail com consultor da empresa de treinamentos) mais o custo do funcionário) além de demandar maior tempo para o inicio da execução do projeto; O custo da IDE de desenvolvimento, o Visual Studio Team System 2008 Development Edition with MSDN Premium é de US$5.469,00 (com conta Premiun da MSDN sai em torno de R$10.172,34 – valores de fevereiro/2010 cotado junto a Microsoft). Com a Universe se desejava que fosse possível desenvolver a aplicação em menor tempo, que a tarefa de manutenção fosse simplificada e mais ágil, facilidade de aprendizado por novos desenvolvedores e aumento da produtividade focando os analistas no negócio e produzindo o máximo de código automaticamente, podendo assim melhorar a qualidade dos softwares produzidos e aumentando a satisfação dos clientes. IV. A escolha da tecnologia Java Assumindo que a comunidade de tecnologia da informação já tem conhecimento da linguagem de programação Java e que pode se informar de novidades no site do fabricante - www.java.com serão enfocados apenas os pontos mandatórios da história e usabilidade que tornaram essa linguagem a escolhida para incorporar a framework e conseqüentemente as demais aplicações da empresa 3w.TI. se procurado alternativas para resolver o problema, foi optado pela criação de uma nova framework, dessa vez baseada em Java. A experiência de alguns membros com o Java foi bastante importante para a adoção da linguagem, mas houve outros fatores que se mostraram bem favoráveis. Em cada linguagem testada e analisada, foi verificada sua IDE e o quanto essa era amigável e se possuía ferramentas/plug-ins que pudessem facilitar o uso. No caso do Java, foi analisado o NetBeans e o Eclipse, onde por fim foi optado pelo uso da IDE Eclipse Galileo for J2EE. Tabela 1 - Comparativo entre NetBeans e Eclipse Características Fabricante NetBeans Eclipse Comunidade Suporta novos plugins Sim Comunida de Sim Suporte a PHP Sim Sim Componentes visuais Swing SWT Foco Visual Não Codificaç ão Sim em de Não Sim Suporte de VM’s distintas por projeto Sim Sim Facilidade com aplicação client-side Melhor Pior Versões Paralelas Flexibilidade separar fonte binários Uma característica que pode parecer destoante é o fato de que o desenvolvimento de aplicações desktop são mais complicadas no Eclipse que no NetBeans, mas o fato de que a empresa desenvolve apenas 8% do total de seus softwares em versões client-side essa característica se tornou irrelevante nesse contexto. Uma característica que foi extremamente importante para a escolha foi a flexibilidade da linguagem Java se adequar aos ambientes desktop e Após se identificar a dificuldade do uso de web de forma fácil. Sendo assim, muitas classes uma framework pouco evoluída e escrita em PHP e puderam ser reaproveitadas nos dois ambientes de devem ser empregadas o mais rápido possível, então desenvolvimento. se optou pela padronização e replicação a ferramenta dos componentes mais necessários e se aproveitou para se desenvolver componentes que outrora foram planejados, mas que ainda não haviam sido codificados. Seguindo essa visão surgiu o componente chave para aplicações que utilizam banco de dados, trata-se do TableUniverse que para ser instanciada solicita o nome da que o objeto que herdou a classe irá gerenciar, se deseja que as tabelas que existem relacionamentos seja carregas, o valor da chave primária e um possível parâmetro de filtragem. Ilustração 1 - Estrutura da framework É importante ressaltar que o trabalho foi desenvolvido até a camada denominada “Objetos de manipulação de dados” que são reaproveitados em objetos desenvolvidos tanto para web quanto para desktop, abaixo - os “objetos de conexão a bases de dados” – existem bibliotecas JDBC de terceiros para fazer a conexão com bases específicas. Outro fator de peso foi o a portabilidade além de ambientes também de sistemas operacionais. Como os bytecodes da aplicação são executados por uma virtual machine, qualquer sistema operacional que possua uma VM com a especificação da Sun e que esteja sobre um hardware mínimo – que depende da aplicação desenvolvida usando a framework – é capaz de utilizar o sistema desenvolvido. Com .NET seria necessário do suporte das ferramentas do Mono Project, para se trabalhar em Linux por exemplo, porém, não pareceu agradável ariscar com ele uma vez que o Java se encontra bem estabelecido nesse quesito. public TableUniverse(String tableName, Boolean loadReferences, Integer primaryKey, String filter) throws Exception { if (loadReferences.equals(null)) loadReferences = false; this.name = tableName; this.loadReferences = loadReferences; 10 buildBaseRegister(); 11 loadValues(primaryKey, filter); 12 } Ilustração 2. Método de criação da TableUniverse 01 02 03 04 05 06 07 08 09 Nem todos os parâmetros são utilizados sempre, mas a linguagem Java não suporta parâmetros com valores default – é possível com sobrecarga de métodos, mas o esforço, para esse caso, não seria gratificante – sendo assim, parâmetros são testados verificando se não são null, se forem, assumem um valor padrão. Por enquanto, a aplicação suporta apenas dois bancos de dados MySQL e PostgreSQL. Essa característica se deve ao fato de serem o foco das aplicações da empresa, mas existe projeto para abranger mais SGDB’s e não usar apenas ANSI SQL. A conexão com o banco de dados nos remete a Em consideração a esses importantes indicadores e a diversos outros não citados, foi decidido pelo uso um trabalho que está sendo melhorado atualmente, ela implementa um singleton a fim de retornar uma da linguagem Java – em sua versão 1.6 Mustang. conexão por usuário. V. O desenvolvimento da ferramenta No entanto isso não está atraente do ponto de A primeira parte do projeto precisou que ter sua vista de gerenciamento de conexões, pois ao se criar abrangência limitada, uma vez que novas uma nova sessão da aplicação no servidor Tomcat, necessidades surgem diariamente e suas soluções no qual a Universe foi desenvolvida, é aberta para a aplicação. Embora ela seja reaproveitada durante toda a vida da sessão, pode se transformar num problema, caso o limite máximo de conexões definidas no SGDB seja alcançada novas conexões não serão aceitas e a aplicação não poderá ser executada. Sendo assim, procura-se pela implementação de um pool de conexões JNDI, onde a conexão é compartilhada, ou seja, quando se tenta iniciar uma nova conexão o gerenciador verifica se já não existe uma que possa ser usada ao invés de criar uma nova. Sendo assim já está em andamento a implementação desse pool com a biblioteca C3P0 que é gratuito, já utilizado em projetos conhecidos e confiáveis – como é o caso do Hibernate – gratuito, contém um logger, provê um pool de conexão transparente e totalmente configurável através de um arquivo XML. Outro ponto interessante foi a forma que surgiram os pacotes swing da Universe Framework. Conforme o desenvolvimento transcorria, diversas outras aplicações Java eram desenvolvidas em paralelo e muitas dessas estavam em ambiente desktop, um fato novo na empresa que até então atendia com softwares Delphi ou, para web, PHP. DefaultTableModel model = new DefaultTableModel(data, columns); JTable table = new JTable(model); table.setFillsViewportHeight(true); table.setAutoCreateRowSorter(true); table.addMouseListener(mouseListener); table.getModel().addTableModelListener( tableModelListener); JScrollPane scrollPane JScrollPane(table); = new Com a framework String[] columnNames = new String[6]; this.tableFields = new JTableUniverse(columnNames, null, this, this); Ilustração 5. Tabela criada usando a Universe Framework Para comprovar a vantagem de ganho de produtividade com a Universe abaixo são expostas Essa nova demanda motivou que se construíssem as duas tabelas baseadas no método Use Case Point padrões de desenvolvimento e os replicassem em (KAR93), uma utilizada com a antiga framework componentes que pudessem ser utilizados em PHP e outra com a nova ferramenta. projetos futuros, assim nasceram os componentes Tabela 2. Complexidade técnica - Framework PHP para desktop. São contempladas Fator Descrição Peso customizações/melhorias – melhorias do ponto de F1 Inclui requisito de segurança 1.5 vista do negócio da 3w – para os componentes: F2 Facilidade de mudança 1.0 JButton, JCheckBox, JComboBox, JLabel, JMenu, F3 Reuso de código 1.0 JPanel (implementando layout managers) e F4 Envolve acesso de terceiros 1.0 JSpinner. Além desses foi escrita uma nova estrutura F5 Portabilidade 2.0 para JList, aqui chamada de JListUniverse e para a Tabela 3. Complexidade técnica - Framework Universe JTable, nomeada de JTableUniverse. Um ponto importante, simplificação de código, a ser destacado na parte desktop da framework pode ser apontado na JTableUniverse, no código abaixo a mesma estrutura é criada, entretanto a velocidade de criação é muito maior usando a Universe Framework. Sem a framework String[] columns; Object[][] data; Fator F1 F2 F3 F4 F5 Descrição Inclui requisito de segurança Facilidade de mudança Reuso de código Envolve acesso de terceiros Portabilidade Peso 0.5 0.5 0.5 1.0 0.5 O desenvolvimento dessa primeira etapa foi concluído após dois meses de trabalho se utilizando apenas duas horas de dias úteis, um custo de funcionário de cerca de R$1.500,00. Com essa primeira fase já foi possível reescrever o ERP usado CHOMSKY Noam The Minimalist Program. MIT em uma loja de vinhos e iniciado um projeto de Press, 1995 clínicas odontológicas. MANZANO, José Augusto Estudo Dirigido - SQL (Structured Query Language). Editora Érica, VI. Conclusão 2002. Ao fim do processo de pesquisa e Carlos; RINALDIN Diovane; desenvolvimento, uma vez que a empresa é pequena KURETZKI, BORTOLETO Silvio; ANGÉLICO Thiago T. e não dispõe de uma área apenas para essa tarefa, as questões foram resolvidas, novas foram levantadas e Ontologia na representação de metamodelos para outras situações acabaram vindo a tona, mesmo sem datamining: estudo de caso Hospital da Cruz Vermelha. SEGeT 2007. serem esperadas. Houve um maior contato e aprofundamento com a linguagem Java, trouxe soluções que não estavam sendo buscadas, como por exemplo o controle de sessão por usuário na aplicação, mas que eram problemas a tempo enfrentados. KARNER G. Resource Estimation for Objectory Projects. Objectory Systems SF AB, http://www.bfpug.com.br, 1993 BFPUG – Brazilian Function Point Users Group. http://delphi.about.com/cs/azindex/a/dhistory.htm – Acessado em 29 de janeiro de 2010. As questões que ilustraram a entrevista entre os responsáveis pela mudança na empresa também http://www.php-gtk.com.br/home – Acessado em 29 foram validadas pois o trabalho se adequou a essas de janeiro de 2010. necessidades: Site de compra da Embarcadero: 1 - Quais os grandes motivadores para a adoção de http://shop.codegear.com/dr/v2/ec_Main.Entry17C? uma framework? SID=39696&SP=10034&CID=0&P Padronização de layouts, simplificação do desenvolvimento através de componentes mais ID=989232&PN=1&V1=1648193 – Acessado em poderosos e com melhor documentação, geração de 29 de janeiro de 2010. código automático a fim de evitar que mais pessoas Site de compra da Microsoft: utilizem critérios próprios de codificação. https://om2.one.microsoft.com/opa/Product.aspx?St 2 - De que forma foi feita a seleção de ferramentas oreID=0a64ab52-0aa0-414a-904be/ou linguagens para o desenvolvimento da 69eb320c3602&LocaleCode=en-us ferramenta? Palestra do Prof. Fernando Lozano – 2004 Através de uma pesquisa indicativa onde fatores http://pt.wikipedia.org/wiki/Mono_(projeto) – como custo de aquisição, manutenção e treinamento Acessado em 29 de janeiro de 2010. são cruciais e tempo de aprendizado segue em http://www.mono-project.com/Main_Page – seguida no nível de importância para a escolha. Acessado em 29 de janeiro de 2010. VII. Referências http://jobcenter.dallasnews.com/sharedcontent/caree BARTIÉ, Alexandre Garantia Da Qualidade De rs/workingnews/081003ccCareersTechmain.11b0f10 Software. Campus, Rio de Janeiro, 2002. 1b.html BOSKOVIC Zelejko; LASNIK Howard Minimalist http://community.jboss.org/wiki/HowToconfigureth Sintax: The Essential Readings. Blackwell eC3P0connectionpool Publishing Ltd., 2007. http://pt.wikipedia.org/wiki/CRUD CAMPOS, Vicente Falconi. Qualidade total: padronização de empresas. INDG Tecnologia e http://java.sun.com/j2ee/tutorial/1_3fcs/doc/JSPTags.html serviços, Niterói, 2004.