Revista Do Linux
 
  
EDIÇÃO DO MÊS
 CD do Mês

Somente para assinantes
 Capa
 Estudo de Caso
 Entrevista
 Corporativo
 Desenvolvimento
 Iniciantes
 Solução
 Desktops
 Compras
 Produto
 

DESENVOLVIMENTO

Software Livre Para o Desenvolvedor
Para evitar que projetos fiquem fora de controle, são necessários métodos e ferramentas de automação de processos

Profissionais experientes sabem que desenvolver software é muito mais do que programação. Não basta ter um um bom compilador, uma boa biblioteca de classes e um bom IDE. De fato, a maioria dos projetos de software - em especial sistemas de informação - estoura os prazos e orçamentos em mais de 100%, e uma grande parte não chega a ser terminada. Para evitar que os projetos de software fiquem fora de controle, são necessários processos bem definidos, métricas e ferramentas para automatizar esses processos.

Infelizmente, a maioria das empresas, especialmente aquelas que têm no desenvolvimento de software a sua atividade-fim, não utiliza a maioria dessas ferramentas. Segundo a Carnegie Mellon University, que criou o Capability Maturity Model para o software (www.sei.cmu.edu/cmm/cmm.html ), mais de 80% das empresas de software (ou departamentos de TI de outros tipos de empresas) ainda estão no nível 1, que o CMM define como "caótico".

Para os programadores, analistas e DBAs, acostumados a virar noites e finais de semana para a conclusão de um projeto, esta definição soa tristemente familiar. Existem processos, documentação e etc., mas apenas no papel, sem qualquer valor ou contribuição real para a produtividade ou para a qualidade do trabalho - nada mais do que um item no checklist para receber a fatura pelo serviço.

Por que somos tão amadores?

Esta é uma realidade bastante desagradável para todos nós desenvolvedores. Mas, em vez de ignorá-la, porque não tentar encontrar meios de mudar a situação e evoluir para níveis mais altos do CMM?

Para as empresas tupiniquins, o grande empecilho é o fator custo. Ferramentas CASE, softwares de teste automati-zado e sistemas de workflow são pacotes de milhares de dólares. Outro fator importante é a dificuldade de aprendizado dessas ferramentas. É necessário um investimento significativo em tempo para se aprender a operar estes pacotes, e leva tempo para se colher os benefícios.

As versões "enterprise" das ferramentas RAD proprietárias trazem sistemas de controle de versões e de geração de documentação, que acabam sendo sub-utilizados. A maioria das empresas se limita aos recursos de geração de código para janelas e acesso a banco de dados. Isto ocorre porque, além dos fatores custo e tempo, não há padronização nos recursos "extras" dos IDEs, enquanto que os recursos visuais são praticamente idênticos.

Portanto, fica o recado para os gerentes responsáveis: nenhuma ferramenta, livre ou proprietária, resolve a questão por si só. Precisamos também de expectativas e metas rea-listas para nossos projetos e profissionais. Precisamos principalmente de gerenciamento de verdade, baseado em objetivos e métricas, e não de "gerenciamento por pressão".

Software para o resgate

O software livre oferece uma vasta gama de compiladores, interpretadores e bibliotecas, mas ainda não existem ferramentas RAD livres comparáveis às ferramentas proprietárias em uso no mercado. Glade, KDevelop e etc. ainda estão longe da funcionalidade fornecida pelo Delphi ou VB. Se você trabalha com Java tem uma boa ferramenta, o Net-Beans, senão a saída é uma ferramenta proprietária com versão para Linux, como o Kylix.

Quem parar por aí está negligenciando o fato mais importante sobre o movimento do software livre: como um bando de programadores espalhados pela Internet, sem nenhuma hierarquia formal, sem "donos" dos softwares, consegue gerar produtos com qualidade tão alta, e normalmente em menos tempo do que as empresas desenvolvem softwares proprietários equivalentes?

O fato é que o software livre é desenvolvido segundo um processo bem mais profissional e organizado do que a maioria das empresas que desenvolvem software proprietário o faz. Quem já acompanhou as listas de desenvolvimento do Apache, Perl, PostgreSQL ou PHP viu que existem processos documentados, padronizados e respeitados por todos. Temos controles de qualidades antes que uma contribuição seja incorporada à linha principal de desenvolvimento, discussões sobre decisões de projeto ou como acomodar novas features, testes de regressão para garantir que novos patches não recriem antigos problemas, testes de conformidade a padrões, benchmarks de performance e milestones que não são ignorados por "pressões do mercado".

Aquilo que as empresas não conseguem fazer apesar (ou por causa) das pressões de prazos e custos, a comunidade consegue fazer para atender às suas próprias necessidades, que são as necessidades que realmente importam ­ as necessidades do usuário. Então, o software livre pode ajudar a sua organização a sair de um processo caótico para um processo organizado e gerenciável.

Tradicional x Moderno

Este artigo não estaria completo sem falar sobre metodologias de engenharia de software. Durante muito tempo se acreditou que elas seriam a solução para levar as empresas além do nível 1 do CMM. Só que essas metodologias rígidas e cheias de burocracia se mostraram inviáveis para empresas pequenas e médias, e inadequadas para os tempos da Internet.

O desafio para o desenvolvedor de software hoje é conciliar as necessidades de qualidade, previsibilidade e gerenciabilidade de projetos de software cada vez mais complexos com a necessidade de resultados rápidos da economia global. Esta demanda tem sido atendida por uma nova geração de metodologias "light". Uma das meto-dologias mais bem-sucedidas dentro desta linha é a Extreme Pro-gramming ( www.xprogramming.com).

Outro exemplo desta linha é o próprio estabelecimento da UML ( www.uml.org) como linguagem gráfica padrão para modelagem. O UML define apenas como são os diagramas e o que eles significam; não define como eles devem ser gerados nem quais as etapas do ciclo de vida que devem ser seguidas, deixando o desenvolvedor livre para estabelecer seus próprios processos, dentro das suas necessidades específicas.

Ferramentas livres

Encerrando este artigo, vamos falar sobre algumas das ferramentas livres que podem ajudar a melhorar o seu processo de desenvolvimento de software, mesmo que o objetivo seja desenvolver software proprietário. Muitas dessas ferramentas também podem ser utilizadas em sistemas operacionais proprietários como o Windows. Mas esperamos que elas sirvam como um incentivo para que você contribua para a comunidade do software livre.

Ferramentas de controle

  • ArgoUML
    www.tigirs.org

  • Toolkit for Conceptual Modeling (TCM)
    wwwhome.cs.utwente.nl/~tcm/

  • O ArgoUML é uma ferramenta CASE UML capaz de gerar código Java utilizando o formato XMI, de modo que seja fácil criar plugins para gerar código SQL, C++ ou Object Pascal. Já o TCM é um editor de diagramas para análise estruturada ou OO.

    UML2SQL
    uml2sql.sourceforge.net/

    Converte um modelo UML salvo no formato padrão XMI em um script DDL para gerar bases de dados SQL.

    Bugzilla
    www.mozilla.org/projects/bugzilla/

    GNATS
    sources.redhat.com/gnats/

    PHPbugtracker
    phpbt.sourceforge.net/

    Sistemas de acompanhamento de bugs e requisições de melhorias, em geral com interface web. Eles permitem a priorização dos bugs, o envio de notificações caso o status de um chamado seja modificado e a alocação de desenvolvedores específicos para cada bug, além de registrarem históricos das medidas corretivas.

    CVS
    www.cvshome.org

    Sistema de controle de versões otimizado para uso distribuído. Ele segue uma arquitetura cliente/servidor e, em vez do conceito de "locks" (que só funciona caso a equipe esteja fisicamente próxima), utiliza mecanismos de merge e de resolução de conflitos. O CVS é capaz de lidar com várias versões (ou "branches") concorrentes em um mesmo projeto, por exemplo, a correção de bugs na versão 2.0 e o desenvolvimento dos novos recursos para a versão 3.0.

    Aegis
    jakarta.apache.org/jmeter/

    Sistema cliente/servidor para controle de versões: gerenciar uma equipe de programadores envolvida na construção do mesmo sistema e evitar que um "apague" o código modificado pelo outro, além de manter o histórico de quais modificações foram feitas por quem e para quê.

    Sourceforge
    www.sourceforge.net

    Portal para o desenvolvimento de software livre, oferecendo serviços como build farms, servidor CVS, mailing lists e etc - tudo gratuitamente. O software do portal Sourceforge, que inclui subsistemas para gerenciamento de projetos, acompanhamento de bugs e bancos de discussão, está disponível para download como software livre.

    XUnit
    www.xprogramming.com/software.htm

    http://c2.com/cgi/wiki?TestingFrameworkc2.com/cgi/wiki?TestingFramework

    http://www.junit.org/www.junit.org/

    Framework para testes de unidade e testes de regressão de software, desenvolvido como parte da Extreme Programming. Existem implementações do framework para diversas linguagens e IDEs, como C/C++, Python, Java e Delphi.

    Logitest
    logitest.sourceforge.net/

    Sistema para teste automatizado de aplicações Web. Ele simula um usuário navegando pelo site e compara as páginas recebidas com padrões definidos pelo usuário.

    JMeter
    jakarta.apache.org/jmeter/

    Aplicação para testes de stress. O pacote fornece módulos para teste de servidores web e bancos de dados SQL, mas pode ser estendido para outros tipos de teste. O JMeter também inclui ferramentas para análise dos resultados dos testes.

    Fernando Lozano
    fernando@lozano.eti.br


    A Revista do Linux é editada pela Conectiva S/A
    Todos os Direitos Reservados.

    Política de Privacidade
    Anuncie na Revista do Linux