Desenvolvimento de software de código aberto - Open-source software development

O desenvolvimento de software de código aberto é o processo pelo qual o software de código aberto , ou software semelhante cujo código-fonte está disponível publicamente, é desenvolvido por um projeto de software de código aberto . Esses são produtos de software disponíveis com seu código-fonte sob uma licença de código-fonte aberto para estudar, alterar e melhorar seu design. Exemplos de alguns produtos de software de código aberto populares são Mozilla Firefox , Google Chromium , Android , LibreOffice e o reprodutor de mídia VLC .

História

Em 1997, Eric S. Raymond escreveu The Cathedral and the Bazaar . Neste livro, Raymond faz a distinção entre dois tipos de desenvolvimento de software. O primeiro é o desenvolvimento convencional de código fechado. Esse tipo de método de desenvolvimento é, de acordo com Raymond, como a construção de uma catedral; planejamento central, organização rígida e um processo do início ao fim. O segundo é o desenvolvimento progressivo de código aberto, que é mais como "um grande bazar barulhento de agendas e abordagens diferentes, a partir do qual um sistema coerente e estável poderia aparentemente emergir apenas por uma sucessão de milagres." A última analogia aponta para a discussão envolvida em um processo de desenvolvimento de código aberto.

As diferenças entre os dois estilos de desenvolvimento, de acordo com Bar e Fogel, são em geral o tratamento (e criação) de relatórios de bugs e solicitações de recursos, e as restrições sob as quais os programadores estão trabalhando. No desenvolvimento de software de código fechado, os programadores geralmente gastam muito tempo lidando e criando relatórios de erros, bem como lidando com solicitações de recursos. Esse tempo é gasto na criação e priorização de planos de desenvolvimento futuros. Isso faz com que parte da equipe de desenvolvimento gaste muito tempo com essas questões, e não com o desenvolvimento real. Além disso, em projetos de código fechado, as equipes de desenvolvimento devem frequentemente trabalhar sob restrições relacionadas ao gerenciamento (como prazos, orçamentos, etc.) que interferem nos problemas técnicos do software. No desenvolvimento de software de código aberto, esses problemas são resolvidos integrando os usuários do software no processo de desenvolvimento, ou mesmo permitindo que esses próprios usuários criem o sistema.

Modelo

Modelo de dados de processo para desenvolvimento de software de código aberto

O desenvolvimento de software de código aberto pode ser dividido em várias fases. As fases especificadas aqui são derivadas de Sharma et al . Um diagrama exibindo a estrutura de dados do processo de desenvolvimento de software de código aberto é mostrado à direita. Nesta figura, as fases de desenvolvimento de software de código aberto são exibidas, junto com os elementos de dados correspondentes. Este diagrama é feito usando as técnicas de modelagem de meta-modelagem e meta-processo .

Iniciando um projeto de código aberto

Existem várias maneiras de começar o trabalho em um projeto de código aberto:

  1. Uma pessoa que sente a necessidade de um projeto anuncia a intenção de desenvolvê-lo em público.
  2. Um desenvolvedor trabalhando em uma base de código limitada, mas funcional, o libera ao público como a primeira versão de um programa de código aberto.
  3. O código-fonte de um projeto maduro é divulgado ao público.
  4. Um projeto de código aberto bem estabelecido pode ser bifurcado por uma parte externa interessada.

Eric Raymond observou em seu ensaio The Cathedral and the Bazaar que anunciar a intenção de um projeto geralmente é inferior a divulgar um projeto em funcionamento para o público.

É um erro comum iniciar um projeto quando contribuir para um projeto semelhante existente seria mais eficaz ( síndrome NIH ). Para iniciar um projeto de sucesso é muito importante investigar o que já existe. O processo começa com a escolha entre a adoção de um projeto existente ou o início de um novo projeto. Se um novo projeto for iniciado, o processo vai para a fase de Iniciação. Caso seja adotado um projeto existente, o processo passa diretamente para a fase de Execução.

Tipos de projetos de código aberto

Existem vários tipos de projetos de código aberto. Em primeiro lugar, existe uma grande variedade de programas de software e bibliotecas, que consistem em partes autônomas de código. Alguns podem até depender de outros projetos de código aberto. Esses projetos atendem a um propósito específico e atendem a uma necessidade definida. Exemplos desse tipo de projeto incluem o kernel Linux , o navegador Firefox e o pacote de ferramentas de escritório LibreOffice.

As distribuições são outro tipo de projeto de código aberto. Distribuições são coleções de software publicadas a partir da mesma fonte com um propósito comum. O exemplo mais proeminente de uma "distribuição" é um sistema operacional. Existem muitas distribuições Linux (como Debian , Fedora Core , Mandriva , Slackware , Ubuntu etc.) que fornecem o kernel Linux junto com muitos componentes de usuário. Existem outras distribuições, como ActivePerl , a linguagem de programação Perl para vários sistemas operacionais, e distribuições Cygwin de programas de código aberto para Microsoft Windows .

Outros projetos de código aberto, como os derivados do BSD , mantêm o código-fonte de um sistema operacional inteiro, o kernel e todos os seus componentes principais, em um sistema de controle de revisão ; desenvolvendo todo o sistema juntos como uma única equipe. Esses projetos de desenvolvimento de sistema operacional integram estreitamente suas ferramentas, mais do que em outros sistemas baseados em distribuição.

Finalmente, existe o livro ou projeto de documento autônomo. Esses itens geralmente não são enviados como parte de um pacote de software de código-fonte aberto. O Projeto de Documentação do Linux hospeda muitos desses projetos que documentam vários aspectos do sistema operacional Linux. Existem muitos outros exemplos desse tipo de projeto de código aberto.

Métodos

É difícil executar um projeto de código aberto seguindo um método de desenvolvimento de software mais tradicional como o modelo em cascata , porque nesses métodos tradicionais não é permitido voltar a uma fase anterior. No desenvolvimento de software de código aberto, os requisitos raramente são reunidos antes do início do projeto; em vez disso, são baseados em versões anteriores do produto de software, conforme descreve Robbins. Além dos requisitos, muitas vezes a equipe voluntária é atraída para ajudar a desenvolver o produto de software com base nas versões anteriores do software. Este efeito de rede é essencial de acordo com Abrahamsson et al .: “se o protótipo apresentado chamar bastante atenção, gradualmente começará a atrair mais e mais desenvolvedores”. No entanto, Abrahamsson et al. Também aponte que a comunidade é muito dura, muito parecida com o mundo dos negócios de software de código fechado: “se você encontrar os clientes, você sobrevive, mas sem clientes você morre”.

Fuggetta argumenta que “prototipagem rápida, desenvolvimento incremental e evolutivo, ciclo de vida em espiral, desenvolvimento rápido de aplicativos e, recentemente, programação extrema e o processo de software ágil podem ser igualmente aplicados a software proprietário e de código aberto”. Ele também aponta a Extreme Programming como um método extremamente útil para o desenvolvimento de software de código aberto. De forma mais geral, todos os métodos de programação Agile são aplicáveis ​​ao desenvolvimento de software de código aberto, devido ao seu caráter iterativo e incremental. Outros métodos Agile são igualmente úteis para o desenvolvimento de software de código aberto e fechado: Internet-Speed ​​Development , por exemplo, é adequado para o desenvolvimento de software de código aberto devido ao princípio de desenvolvimento distribuído que adota. O Internet-Speed ​​Development usa equipes distribuídas geograficamente para 'trabalhar 24 horas por dia'. Este método, adotado principalmente por grandes empresas de código fechado (porque são as únicas que oferecem centros de desenvolvimento em diferentes fusos horários), funciona igualmente bem em projetos de código aberto porque um software desenvolvido por um grande grupo de voluntários deve tender naturalmente para ter desenvolvedores espalhados por todos os fusos horários.

Ferramentas

Canais de comunicação

Os desenvolvedores e usuários de um projeto de código aberto não estão necessariamente trabalhando no projeto nas proximidades. Eles requerem alguns meios eletrônicos de comunicação. O e-mail é uma das formas mais comuns de comunicação entre desenvolvedores e usuários de código aberto. Freqüentemente, as listas de mala direta são usadas para garantir que as mensagens de e-mail sejam entregues a todas as partes interessadas de uma só vez. Isso garante que pelo menos um dos membros possa responder a ele. Para se comunicar em tempo real, muitos projetos usam um método de mensagem instantânea , como o IRC . Os fóruns da Web tornaram-se recentemente uma forma comum de os usuários obterem ajuda com os problemas que encontram ao usar um produto de código aberto. Os wikis tornaram-se comuns como meio de comunicação para desenvolvedores e usuários.

Sistemas de controle de versão

No desenvolvimento do OSS, os participantes, na maioria voluntários, são distribuídos entre diferentes regiões geográficas, portanto, há necessidade de ferramentas para auxiliar os participantes a colaborar no desenvolvimento do código-fonte.

Durante o início dos anos 2000, o Concurrent Versions System (CVS) foi um exemplo proeminente de uma ferramenta de colaboração de código-fonte usada em projetos de software de fonte aberta. O CVS ajuda a gerenciar os arquivos e códigos de um projeto quando várias pessoas estão trabalhando no projeto ao mesmo tempo. O CVS permite que várias pessoas trabalhem no mesmo arquivo ao mesmo tempo. Isso é feito movendo o arquivo para os diretórios dos usuários e, em seguida, mesclando os arquivos quando os usuários terminarem. O CVS também permite recuperar facilmente uma versão anterior de um arquivo. Em meados dos anos 2000, o sistema de controle de revisão Subversion (SVN) foi criado para substituir o CVS. Ele está rapidamente ganhando terreno como um sistema de controle de versão de projeto OSS.

Muitos projetos de código aberto agora estão usando sistemas de controle de revisão distribuídos, que escalam melhor do que repositórios centralizados como SVN e CVS. Exemplos populares são git , usado pelo kernel Linux , e Mercurial , usado pela linguagem de programação Python .

Rastreadores de bugs e listas de tarefas

A maioria dos projetos de grande escala requer um sistema de rastreamento de bugs para controlar o status de vários problemas no desenvolvimento do projeto. Alguns rastreadores de bug incluem:

  • Bugzilla - um rastreador de bugs baseado na web da Mozilla .
  • Mantis Bug Tracker - um rastreador de bug PHP / MySQL baseado na web.
  • Trac - integrando um rastreador de bug com um wiki e uma interface para o sistema de controle de versão Subversion.
  • Redmine - escrito em Ruby, integra rastreamento de problemas, wiki, fórum, notícias, roadmap, planejamento de projeto gantt e interfaces com o diretório de usuário LDAP.
  • Rastreador de solicitação - escrito em Perl. Dado como padrão para os módulos CPAN - consulte rt.cpan.org.
  • SourceForge e seus forks fornecem um bug tracker como parte de seus serviços. Como resultado, muitos projetos hospedados no SourceForge.net e serviços semelhantes usam como padrão.
  • JIRA - ferramenta de gerenciamento de projetos e rastreamento de problemas baseada na Web da Atlassian .

Ferramentas de teste e depuração

Uma vez que os projetos OSS passam por integração frequente, são utilizadas ferramentas que ajudam a automatizar os testes durante a integração do sistema. Um exemplo dessa ferramenta é o Tinderbox. O Tinderbox permite que os participantes de um projeto OSS detectem erros durante a integração do sistema. O Tinderbox executa um processo de construção contínuo e informa os usuários sobre as partes do código-fonte que apresentam problemas e em quais plataformas esses problemas surgem.

Um depurador é um programa de computador usado para depurar (e às vezes testar ou otimizar) outros programas. GNU Debugger (GDB) é um exemplo de depurador usado no desenvolvimento de software de código aberto. Este depurador oferece depuração remota, o que o torna especialmente aplicável ao desenvolvimento de software de código aberto.

Uma ferramenta de vazamento de memória ou depurador de memória é uma ferramenta de programação para localizar vazamentos de memória e estouros de buffer . Um vazamento de memória é um tipo específico de consumo desnecessário de memória por um programa de computador, em que o programa falha em liberar memória que não é mais necessária. Exemplos de ferramentas de detecção de vazamento de memória usadas pelo Mozilla são as ferramentas XPCOM Memory Leak. As ferramentas de validação são usadas para verificar se partes do código estão em conformidade com a sintaxe especificada. Um exemplo de ferramenta de validação é o Splint .

Gerenciamento de pacotes

Um sistema de gerenciamento de pacotes é uma coleção de ferramentas para automatizar o processo de instalação, atualização, configuração e remoção de pacotes de software de um computador. O Red Hat Package Manager (RPM) para .rpm e a Advanced Packaging Tool (APT) para o formato de arquivo .deb são sistemas de gerenciamento de pacotes usados ​​por várias distribuições Linux.

Divulgando um projeto

Diretórios de software e registros de lançamento:

  1. O Diretório de Software Livre

Artigos:

  1. Notícias semanais do Linux
  2. IBM developerWorks

Veja também

Referências

links externos