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