Desenvolvimento de Software: Ferramentas além da IDE - Parte 1

O artigo trata de ferramentas úteis no desenvolvimento de sistemas e de sua integração a um ambiente completo para este desenvolvimento, baseado na IDE. Sendo o primeiro artigo de uma série sobre o assunto, aborda primeiramente a IDE e em seguid

Artigo no estilo: Curso

De que se trata o artigo:

O artigo trata de ferramentas úteis no desenvolvimento de sistemas e de sua integração a um ambiente completo para este desenvolvimento, baseado na IDE. Sendo o primeiro artigo de uma série sobre o assunto, aborda primeiramente a IDE e em seguida servidores de aplicação/Web, bancos de dados e ferramentas para o gerenciamento de bases de dados. O artigo ilustra o funcionamento destas ferramentas por meio de uma aplicação de exemplo.

Para que serve:

Tais ferramentas servem para diferentes aspectos do desenvolvimento de software, como a codificação propriamente dita, compilação, testes, depuração, armazenamento de dados, implantação e execução da aplicação desenvolvida, controle de versão e debugs, etc. Nesta primeira parte, as ferramentas abordadas são a IDE (codificação, compilação, depuração), um servidor de aplicação/Web (implantação e execução), um servidor de banco de dados (armazenamento) e uma ferramenta para a configuração deste último.

Em que situação o tema é útil:

O tema é útil para desenvolvedores em geral, que podem não conhecer alguma das ferramentas apresentadas, uma ou outra de suas funcionalidades ou como integrá-la em uma IDE. Programadores com menos experiência podem também não conhecer um determinado tipo de ferramenta (ex.: controle de versão) e utilizar o artigo para avaliar sua utilidade nos projetos que desenvolve. Gerentes de projeto também podem beneficiar-se de uma visão geral de um ambiente de desenvolvimento para avaliar ferramentas que podem aumentar a produtividade de sua equipe.

Resumo DevMan:

Atualmente o software é utilizado nos mais variados contextos, auxiliando diversos tipos de profissionais em suas tarefas. Com o profissional de TI não seria diferente e, assim, existe uma gama de ferramentas disponíveis para aumentar a produtividade da atividade de desenvolvimento de sistemas e a qualidade final do seu produto. Em uma série de artigos, propomos montar um ambiente completo de desenvolvimento, integrando uma série de ferramentas, preferencialmente que sejam gratuitas e de código aberto. Nesta primeira parte, comentamos inicialmente sobre o papel da IDE como peça central no ambiente de desenvolvimento (Figuras 1 e 2) para, em seguida, integrar a este ambiente um servidor de aplicação ou servidor Web (Figuras 3 a 6) e um servidor de banco de dados (Listagens 3 e 4). Externo à IDE, integramos também ao ambiente de desenvolvimento uma ferramenta de administração de bancos de dados relacionais (Figuras 8 a 12). Tudo isso é ilustrado pelo desenvolvimento de uma aplicação corporativa: um sistema de gestão para uma revista acadêmica (Figura 7, Listagens 12,57).

Atualmente, grande parte das tarefas que as pessoas fazem no dia a dia é assistida por sistemas construídos para automatizar e facilitar sua execução. Do controle de ponto em uma empresa até a gestão do tráfego aéreo, o software está presente nos mais diversos contextos, facilitando o trabalho das pessoas envolvidas e, em alguns casos, até mesmo permitindo fazer algo que era impossível ou impraticável antes da existência dos sistemas de informação.

Para suprir esta demanda por software e com o objetivo de construir software de qualidade e entregá-lo ao cliente o mais rápido possível, equipes de desenvolvimento de sistemas buscam técnicas e ferramentas que façam por elas o que o software que está sendo desenvolvido irá fazer pelo cliente: facilite a tarefa em questão. Afinal, desenvolver software é também uma tarefa conduzida por profissionais que precisam de ferramentas adequadas para auxiliá-los.

Um processo de desenvolvimento de software (ou simplesmente “processo de software”) pode ou não ser organizado ao redor de uma metodologia. Esta última varia desde os processos mais tradicionais em cascata até as mais recentes metodologias ágeis como Scrum e XP. Em qualquer caso, as atividades de elicitação/análise de requisitos, projeto de software, implementação, testes, implantação e manutenção geralmente estão presentes, mesmo que sejam feitas de forma rápida ead-hoc(ex.: mesmo que não produza nenhum modelo ou documento, um desenvolvedor pensa na arquitetura do software antes de começar a codificação). Para cada atividade do processo, existem ferramentas para auxiliar em sua condução.

O foco desta série de artigos é na fase de implementação e testes do software, sendo feita, obviamente, na plataforma Java. Durante esta fase, existe uma série de subatividades que podem ou não ser incluídas no processo utilizado por uma determinada empresa ou organização de desenvolvimento de software. O objetivo aqui não é discutir o mérito de cada metodologia (ex.: vale a pena usar Scrum?), atividade (ex.: qual a importância da análise dos requisitos?) ou subatividade (ex.: é realmente preciso efetuar testes unitários?). A ideia é mostrar diversas ferramentas disponíveis para desenvolvedores de software, que podem escolher utilizá-las ou não e ainda buscar alternativas às ferramentas apresentadas ou aprofundarem-se nelas.

Nossa abordagem será apresentar passo a passo a construção de um ambiente completo de desenvolvimento, incluindo ferramentas que auxiliam em subatividades comuns durante as atividades de implementação e testes de software, como por exemplo (nota: a lista abaixo não é exaustiva, outras subatividades existem no contexto de implementação e testes):

  • Criação e edição do código-fonte;
  • Compilação, execução e depuração;
  • Criação e manipulação de um banco de dados;
  • Construção (build) e gerência de dependências;
  • Realização de testes unitários;
  • Compartilhamento com controle de versão;
  • Gerenciamento de falhas (bugs) e novas funcionalidades;
  • Análise de desempenho (profiling);
  • Integração contínua;
  • Dentre outras...

As demonstrações práticas deste artigo serão feitas em torno de uma aplicação Web de exemplo desenvolvida utilizando a tecnologia Java EE 6. Osframeworksutilizados (ex.: EJB 3, JPA, CDI, etc.) não fazem parte do foco do artigo e já foram abordados em edições anteriores da Java Magazine (veja a série “Java EE 6 na Prática” nas edições 80, 81 e 82 da revista). A aplicação consiste em um sistema de informação para gerenciar as atividades de uma revista acadêmica – chamada “EngeSoft” – incluindo recebimento e seleção de artigos para uma edição e venda da revista por meio de assinaturas.

A escolha de uma aplicação real como exemplo facilita a visão, na prática, do uso das ferramentas descritas no artigo. Contudo não é nosso objetivo concluir e apresentar a aplicação completa durante esta série de artigos. O exemplo é baseado em um exercício conduzido durante o curso de Análise de Sistemas da Universidade Federal do Espírito Santo e seu enunciado, bem como a solução do exercício, encontram-se disponíveis no site da Java Magazine.

Será dada preferência às ferramentas de código-fonte aberto ou que ao menos sejam gratuitas. Dentre estas, tentaremos apresentar aquelas que forem mais populares (mais utilizadas) em suas categorias, porém devido à abrangência do assunto poderemos certamente cometer equívocos, pelos quais pedimos desculpas antecipadamente. O leitor pode contribuir enviando sugestões de ferramentas a serem abordadas nas próximas edições da revista.

Dado que são utilizadas para o desenvolvimento de aplicações Java, as ferramentas aqui apresentadas são multiplataforma, podendo, em geral, ser instaladas em sistemas Windows, Linux e MacOS. Por isso, não descreveremos seus processos de instalação, podendo o leitor procurar mais informações a respeito nos sites das mesmas (veja Links). As demonstrações descritas ao longo do artigo foram realizadas em um computador com Ubuntu Linux 11.04, porém as instruções não devem mudar substancialmente de um sistema para outro, dada a característica multiplataforma de Java.

Nesta primeira parte da série serão apresentadas as seguintes ferramentas:

  • A IDE: para ir além da IDE, é preciso começar com ela;
  • O servidor (Web ou de aplicação): grande parte das aplicações desenvolvidas hoje em dia é distribuída e, portanto, deve ser implantada e executada em um servidor;
  • O servidor de banco de dados: a maioria dos sistemas de informação utiliza ainda bancos de dados relacionais para armazenamento (persistência) dos dados;
  • Um cliente para administração do banco de dados: servidores de banco de dados precisam ser configurados e, em diversas situações, se faz necessário manipular os dados da base diretamente no banco, ou seja, sem ser por meio da aplicação que está sendo desenvolvida.

Começando com a IDE

A grande maioria dos ambientes de desenvolvimento utiliza uma IDE (Integrated Development Environment, ou “Ambiente Integrado de Desenvolvimento” em inglês) e, portanto, apesar do título do artigo, não poderíamos deixar de discutir o papel da IDE no desenvolvimento de software.

O propósito de uma IDE é unificar as subatividades realizadas pelos programadores durante a implementação. No entanto, somente algumas delas (em geral: edição de código, compilação, execução/depuração, análise de desempenho) são incluídas na IDE. Para algumas outras tarefas, no entanto, utiliza-se uma ferramenta externa que, em grande parte dos casos, pode ser integrada à IDE.

Apesar de ser uma questão de preferência pessoal, a utilização de uma IDE de maneira geral aumenta bastante a produtividade do programador que, à medida que vai conhecendo as ferramentas que a IDE lhe oferece, passa a realizar suas atividades de forma mais rápida e automatizada. Algumas tarefas básicas de um programador que geralmente são automatizadas por uma IDE incluem, dentre outras:

  • Organização e navegação do projeto: IDEs organizam os arquivos do projeto, separando-os em diferentes categorias como classes Java, páginas Web, arquivos de recursos (ex.:*.properties), classes de teste unitário, etc. Além disso, facilitam a navegação do desenvolvedor pelo projeto, fornecendo ferramentas de busca e acesso fácil à documentação;
  • Assistentes: para a criação dos mais diversos tipos de artefatos (classes Java, páginas Web, etc.), IDEs oferecem assistentes (wizards) que apresentam formulários a serem preenchidos pelo desenvolvedor para, ao final, ser(em) criado(s) o(s) artefato(s) escolhidos;
  • Completamento, coloração e formatação de código: editores de código Java presentes nas IDEs modernas sugerem trechos de código (ex.: nomes de variáveis e métodos), implementam métodos get/set em POJOs, incluem esqueletos de métodos a serem sobrescritos ou implementados, adicionam linhas de importação de classe, formatam o código de maneira mais legível, fecham parênteses, colchetes, chaves e aspas, etc. Além disso, palavras-chave e literais de diferentes tipos (strings, números, etc.) são destacadas em cores diferentes para facilitar a leitura do código;
  • Integração de um compilador: IDEs modernas integram o Kit de Desenvolvimento Java (JDK) em seu ambiente e permitem que o código seja compilado com um clique ou ainda compilam-no automaticamente sempre que o mesmo é modificado. Além disso, erros em tempo de compilação são imediatamente sinalizados, além de avisos (warnings) de possíveis oportunidades de melhoria no código;
  • Execução e depuração: com poucos cliques em geral é possível executar o sistema que está sendo desenvolvido (no caso de aplicações Web ou corporativas é necessário, primeiro, integrar um servidor à IDE) e, para facilitar a localização de falhas (bugs), o desenvolvedor pode executar o software em modo de depuração e observar a execução linha a linha, inspecionar o valor das variáveis, etc.;" [...] continue lendo...

Artigos relacionados