Engenharia De Software Aplicada a Projetos De Código Aberto
Total Page:16
File Type:pdf, Size:1020Kb
ENGENHARIA DE SOFTWARE APLICADA A PROJETOS DE CÓDIGO ABERTO Gean Saturno Gonçalves1 [email protected] Jaciara Silva Carosia2 [email protected] RESUMO Desde a criação do computador, a engenharia de softwares vem estudando formas de produzir software de qualidade. Devido as características abstratas e flexíveis do software, foi necessário adaptar uma engenharia a cada novo sistema desenvolvido. Todavia, existe um paradigma de desenvolvimento de software cuja informalidade, além de outros fatores, restringe a engenharia de software. Estes projetos são chamados de projetos de código aberto e são responsáveis por grande parte das tecnologias hoje existentes. No entanto, são esses os projetos que normalmente mais fracassam. O objetivo deste trabalho é propor uma engenharia de software que possa colaborar com a redução de projetos falhos na comunidade de código aberto. Através de um levantamento bibliográfico sobre engenharia de software, projetos de código aberto e a análise de casos de sucesso como Ubuntu, Firefox e Linux, foi proposta uma engenharia de software aplicada a projetos de código aberto. Após a execução da metodologia, conclui-se que a engenharia de software é capaz de auxiliar o desenvolvimento de projetos de código aberto, garantindo assim maior chance de sobrevivência, potencializando inovações e revoluções. Palavras-chave Engenharia de Software, Código Aberto, Software Livre ABSTRACT Since the creation of the computer, the software engineering has been studying ways to produce quality software. Because of the software's abstract and flexible features, it was necessary to adapt an engineering every new system developed. However, there is a software development paradigm whose informality, and other factors, restricted the software engineering. These projects are called open source projects and are responsible for most of today's existing technologies. However, these are the projects that usually fail more. The objective of this work is to propose a software engineering that can collaborate with the reduction of failed projects in the open source community. through a literature survey on software engineering and open source projects and analysis of successful cases as like Ubuntu, Firefox and Linux, proposed a software engineering applied to open source projects. After the implementation of the methodology, it is concluded that the software engineering is able to assist the development of open source projects, thus ensuring greater chance of survival, leveraging innovations and revolutions. Keywords Software Engineering, Open Source, Free Software 1 Pesquisador do Programa de Iniciação Cientifica do Centro Universitário da Fundação Guaxupé (UNIFEG). Discente do curso de Ciência da Computação. 2 Professor orientador da pesquisa. Mestre em Computação Aplicada pelo Instituto Nacional de Pesquisas Espaciais. Docente do curso de Ciência da Computação do UNIFEG. 2 1. INTRODUÇÃO Com a descoberta do computador, várias áreas do conhecimento humano foram drasticamente afetadas, de modo que sofreram uma revolução surpreendente (PRESSMAN, 2011). O software, parte fundamental da computação, é o responsável por instruir os dispositivos computacionais fazendo com que cumpram com a sua programação. Devido ao software ser flexível e abstrato, ele pode ser aplicado em praticamente todas as áreas das ciências humanas. Atualmente, toda estrutura social do planeta é sustentada pelos softwares (SOMERVILLE, 2011). Todavia, devido as suas características, o software corre um grande risco de falhas, e para corrigir estas falhas, foi desenvolvido a Engenharia de Software. Devido á ampla aplicação do software, criaram-se várias categorias, o que torna impossível a aplicação de uma única engenharia para todas estas categorias de software. Para reduzir as chances de falha de um projeto, foi necessário adaptar os conceitos da engenharia de software para um determinado modelo de software, levando em consideração a sua categoria, modelo da empresa, modelo da equipe e do tipo de cliente (SOMERVILLE, 2011). Entre todos os modelos de software, existe um determinado paradigma de projeto chamado de projetos de código aberto. Este paradigma de projeto conta com uma característica informal natural, que contribui para a falta de engenharia de software para este modelo de projeto. A ideia de que uma engenharia de software não é necessária em um projeto de código aberto é frequentemente constatada, mas terrivelmente incorreta. Estatísticas apontam que incríveis 95% dos projetos de código aberto iniciados tendem ao fracasso (FOGUEL, 2015). Projetos de código aberto se distinguem ligeiramente de projetos comuns e muitos deles foram responsáveis por revoluções tecnológicas. Projetos como o Kernel Linux, linguagem de programação PHP, Java, servidores de aplicação como o Apache, banco de dados MySQL, e muitos outros projetos, abriram possibilidades que poderiam não existir se fossem projetos comuns (CHRISTOPH, 2004). O objetivo deste trabalho foi idealizar uma modelo de engenharia de software que possa ser capaz de orientar um projeto de código aberto, reduzindo suas chances de falha, o que resultará em uma contribuição ainda maior para o futuro. Para isto, foi efetuado um levantamento bibliográfico sobre engenharia de software e projetos de código aberto, possibilitando a idealização da engenharia de software aplicada a projetos de código aberto. Após a idealização da engenharia de software, foi efetuado o estudo de casos para comparar a engenharia de software idealizada com as aplicadas nos casos estudados, permitindo o aperfeiçoamento da idealização. 2. ENGENHARIA DE SOFTWARE Devido às características flexíveis e abstratas do software, seu projeto e construção pode facilmente sair de controle sem a devida atenção. Devido à crescente demanda por software, foi necessário desenvolver técnicas, métodos e ferramentas capazes de auxiliar o desenvolvimento de Revista de Iniciação Científica - UNIFEG, Guaxupé - nº 15 - 2015 3 softwares sem falhas. Deste modo, foi desenvolvida a engenharia de software, que vem propondo muitos métodos para uma produção adequada (SOMERVILLE, 2011). Embora várias técnicas tenham sido desenvolvidas, há uma incrível divergência entre projetos de software. O primeiro ponto, um projeto de software não será igual a outro. Ele poderá adequar a diferentes ferramentas e tecnologias, ou simplesmente um software com um objetivo diferente. Um exemplo desta divergência é a comparação de um site comercial com um jogo virtual, ambos são softwares, porém, possuem objetivos diferentes. Neste caso, a engenharia de software aplicada a um site não seria a mesma aplicada a um jogo virtual, o que exige uma adequação das técnicas e modelos idealizados pela engenharia de software. Este problema de conversão não se limita apenas ao software, ele ecoa através do modelo da empresa, da equipe e até mesmo do cliente (SOMERVILLE, 2011). Para as fases de produção do software, foram desenvolvidos vários modelos de processos. Um processo é basicamente uma sequencias de atividades, compostas por ações e tarefas para alcançar um determinado objetivo. Todavia todos os modelos da engenharia de software devem ser adaptados ao projeto a ser desenvolvido (PRESSMAN, 2011). A engenharia de software não se limita apenas o processo do projeto, esta engenharia também engloba a gerência dos projetos, o processo é apenas um ponto da gerência (SOMERVILLE, 2011). Segundo Pressman (2011), a gerência de um software é fundamental para a sobrevivência do mesmo. Um projeto com uma gerência de baixa qualidade resulta em trabalhos menos eficientes, uma tarefa leva mais tempo para ser efetuada, isso gera um aumento do custo final do projeto. Para isto, a gerência do projeto foca em 4 pontos, conhecido como os 4 pês: 1. Pessoal. 2. Produto. 3. Processo. 4. Projeto. O software é desenvolvido por recursos humanos, pesquisas apontaram que os recursos humanos são os itens mais importantes no projeto, e as capacidades de seleção e cultivação destes recursos estão diretamente ligadas ao sucesso do projeto. Levando isto em consideração a Software Engenering Intitute (SEI) desenvolveu um modelo de maturidade e capacidade dos recursos humanos (PRESSMAN, 2011). Algumas das atividades que compõem este modelo são: • Formação de Equipe • Comunicação • Ambiente de trabalho • Gerencia de desempenho • Desenvolvimento de carreira • Desenvolvimento do grupo de trabalho • Desenvolvimento da cultura da equipe Revista de Iniciação Científica - UNIFEG, Guaxupé - nº 15 - 2015 4 Outro ponto de influência no projeto é a estrutura organizacional da equipe. Existem milhares de estruturas organizacionais diferentes, porém, assim como os processos, foram definidos paradigmas gerais (PRESSMAN, 2011). Alguns destes paradigmas são: • Paradigma fechado: Estrutura tradicional, contém o chefe e seus subordinados. Esta estrutura desenvolve grande capacidade de produção, porém sua inovação acaba sendo restringida. • Paradigma aberto: Estrutura geralmente utilizada em projetos de código aberto. Expande a capacidade de inovação da equipe, porém a eficiência depende da comunicação entre os recursos. Após a organização dos recursos humanos, é necessário conhecer o produto que será desenvolvido. Para isto é necessário analisar onde o projeto irá atuar e com isto o objetivo do produto. Com a equipe pronta e o produto especificado, é possível definir o processo que será aplicado neste projeto, levando em conta o produto e o pessoal. Segundo Pressman (2011), a única maneira de controlar a complexidade de um projeto é com