10th International Conference on Information Systems and Technology Management – CONTECSI June, 12 to 14, 2013 - São Paulo, Brazil KNOWLEDGE MANAGEMENT APPLICATION IN PRACTICES OF SOFTWARE DEVELOPMENT PROCESS: PROPOSAL TO USE IN IT COMPANY Ernane de Jesus Torres (IETEC - Instituto de Educação Tecnológica, MG, Brasil) [email protected] Fernando Hadad Zaidan (IETEC - Instituto de Educação Tecnológica, MG, Brasil) mailto:[email protected] [email protected] The implementation of the concept of collaborative knowledge is needed in modern enterprises, especially when it comes to Software Engineering. There are major benefits of implementing Knowledge Management used by the process of software development, such as the appropriate process control, internal organization of the company, standardization, processes alignment, centralizing information, among other competitive advantages that can be obtained. Throughout this work will be presented studies based on theoretical concepts, grounded in academic literature. Based on these concepts, it will be developed a proposal for improving the development process in an IT company which was chosen as object of these study. Concludes this paper the identifying some aspects that must be worked on implementation of Knowledge Management in the process of software development. Keywords: Collaborative Knowledge; Software Engineering; Software Development Process; Knowledge Management. APLICAÇÃO DA GESTÃO DO CONHECIMENTO NAS PRÁTICAS DO PROCESSO DE DESENVOLVIMENTO DE SOFTWARE: PROPOSTA DE UTILIZAÇÃO EM UMA EMPRESA DE TI A implantação do conceito de conhecimento colaborativo se faz necessária na atual conjuntura mercadológica, principalmente quando se trata da Engenharia de Software. São grandes os benefícios da aplicação da Gestão do Conhecimento empregada no processo de desenvolvimento de softwares, como o adequado controle do processo, organização interna da empresa, padronização, alinhamento dos processos, centralização das informações, dentre outras vantagens competitivas que podem ser obtidas. Ao longo deste trabalho serão apresentados estudos baseados em conceitos teóricos, fundamentados na literatura acadêmica. À luz desses conceitos, será elaborada uma proposta de melhoria do processo de desenvolvimento em uma empresa de TI escolhida como objeto desse estudo. Conclui o artigo a identificação de alguns aspectos que devem ser trabalhados na implementação da Gestão do Conhecimento no processo de desenvolvimento de software. Palavras-Chave: Conhecimento Colaborativo; Engenharia de Software; Processo de Desenvolvimento de Software; Gestão do Conhecimento. 3343 10th International Conference on Information Systems and Technology Management – CONTECSI June, 12 to 14, 2013 - São Paulo, Brazil 1 INTRODUÇÃO A implementação da Gestão do Conhecimento e a ideia de Conhecimento Colaborativo vem crescendo muito dentro dos ambientes empresariais, conforme Zaidan (2008) citou: “conhecimento tem pernas e caminha para casa todos os dias”. Assim, as empresas têm se preocupado com a retenção do ‘intelecto’ dos seus funcionários e da manipulação destes conhecimentos retidos, com o intuito de convertê-las em vantagens competitivas. Mas, encontram muitas dificuldades em realizar o compartilhamento do conhecimento devido a resistências das pessoas. Dado este cenário é importante que haja um estudo de como absorver informações e conhecimentos e retê-las antes de aplicá-las nas organizações, e pensar em estratégias motivacionais a serem utilizadas nos funcionários e colaboradores com o intuito de fazer que o mesmo compartilhe seus conhecimentos em um ambiente corporativo e colaborativo. Esse estudo tem o objetivo de identificar como a Gestão do Conhecimento se interage com o Processo de Desenvolvimento de Software. Além de apresentar alguns conceitos sobre o Processo de Desenvolvimento de Software e sobre a Gestão do Conhecimento, também tem como objetivo descrever uma proposta de implementação de práticas e ferramentas da Gestão do Conhecimento em uma organização de desenvolvimento de software, de forma a evitar retrabalho, perda dos processos, falta de padronização, enfim, perda de dinheiro. O artigo está dividido em quatro partes: acima, consta a contextualização e o objetivo. No capítulo dois tem-se a elucidação dos conceitos. O procedimento metodológico está no item três. A proposta, objetivo principal deste estudo, está descrita no capítulo quatro. O que se segue são as considerações finais e as referências bibliográficas. 2 REFERENCIAL TEÓRICO 2.1 Processo de desenvolvimento de software Pressman (2009) define que o processo de desenvolvimento de software é possibilitado pela engenharia de software, que abrange um conjunto de três elementos fundamentais – métodos, ferramentas e procedimentos – e que oferece uma base para construção de software de alta qualidade. Os métodos envolvem um amplo conjunto de tarefas: planejamento e estimativa de projeto, análise de requisitos de software e de sistemas, projeto de estrutura de dados, arquitetura de programa e algoritmo de processamento, codificação, teste e manutenção. 3344 10th International Conference on Information Systems and Technology Management – CONTECSI June, 12 to 14, 2013 - São Paulo, Brazil Sommerville (2011) conceitua o processo de desenvolvimento de software como um conjunto de atividades relacionadas que levam a produção de um produto de software, e quatro atividades são fundamentais para esse processo: 1) Especificação de software; 2) Projeto e implementação de software; 3) Validação de Software; 4) Evolução de Software. Ainda segundo Sommerville (2011), os processos de software são bastante complexos e dependem de pessoas para tomar decisões e fazer julgamentos. Sendo assim, não existe processo ideal, e a maioria das organizações desenvolvem seus próprios processos de desenvolvimento de software, de forma a tirarem proveito das capacidades das pessoas e das características do sistema em desenvolvimento. De acordo com Pressman (2009), o processo de desenvolvimento de software contém três fases genéricas, que são encontradas em todo desenvolvimento, independente da área de aplicação, tamanho, ou complexidade: a) Definição: o desenvolvedor tenta identificar quais informações devem ser processadas, o desempenho desejado, a interface estabelecida, as restrições de projeto e os critérios de validação; b) Desenvolvimento: o desenvolvedor deve definir como a estrutura de dados e a arquitetura de software devem ser projetadas; c) Manutenção: nessa fase concentram-se as mudanças associadas a correções de erros, adaptações exigidas e ampliações do projeto. Para Paula Filho (2009), na engenharia de software, processos podem ser definidos para atividades como desenvolvimento, manutenção, aquisição e contratação de software. Para cada um desses processos podem-se definir subprocessos. O processo de desenvolvimento, por exemplo, abrange subprocessos de determinação dos requisitos, análise, desenho, implementação e testes. 2.2 Atividades do processo de desenvolvimento 2.2.1 Especificação de software Segundo Sommerville (2011), especificação de software ou engenharia de requisitos é um estágio crítico no processo de software, pois é o processo de compreensão e definição dos serviços requisitados do sistema e identificação de restrições relativas ao seu desenvolvimento. O objetivo desse processo é produzir um documento de requisitos de forma a fazer o alinhamento entre as funcionalidades do sistema e as expectativas dos stakeholders. Para Paula Filho (2009), a disciplina de engenharia de requisitos é o conjunto de técnicas empregadas para levantar, detalhar, documentar e validar os requisitos de um produto. Os requisitos de alta qualidade são claros, completos, sem ambiguidade, implementáveis, consistentes e testáveis. Os requisitos que não apresentam essas qualidades devem ser revistos e renegociados com os clientes e usuários. Segundo Paula Filho (2009), “Uma boa engenharia de requisitos é um passo essencial para o desenvolvimento de um bom produto, em qualquer caso.”. 3345 10th International Conference on Information Systems and Technology Management – CONTECSI June, 12 to 14, 2013 - São Paulo, Brazil De acordo com Pressman (2009), a análise de requisitos é uma tarefa que faz a ligação entre a alocação de software em nível de sistema e o projeto de software. A tarefa de análise de requisitos é um processo de descoberta, refinamento, modelagem e especificação, e deve ser feito com muito critério para evitar interpretações errôneas e informações falsas. De acordo com Sommerville (2011), o processo de engenharia de requisitos possui quatro atividades principais: 1) Estudo de viabilidade; 2) Elicitação e análise de requisitos; 3) Especificação de requisitos; 4) Validação dos requisitos. Os requisitos de software são classificados como requisitos funcionais e requisitos não funcionais. a) Requisitos funcionais: Segundo Sommerville (2011), os requisitos funcionais descrevem o que o sistema deve fazer. Os requisitos variam de requisitos gerais, que identificam o que o sistema deve fazer, e requisitos específicos, que refletem os sistemas e as formas de trabalho de uma organização. A especificação dos requisitos funcionais de um sistema deve ser completa, ou seja, todos os serviços requeridos pelo usuário devem ser definidos, e a especificação deve ser consistente, ou seja, os requisitos não devem ter definições contraditórias. De acordo com Lima (2009), requisitos funcionais especificam ações que o sistema executar independente de exigências físicas ou tecnológicas, e que estão associadas ao modelo conceitual. b) Requisitos não funcionais: Segundo Paula Filho (2009), os requisitos não funcionais devem se enunciados de forma precisa e quantitativa. Os requisitos não funcionais incluem os requisitos de desempenho e qualidade do produto, e os requisitos lógicos sobre os dados persistentes e os requisitos de natureza técnica, como restrições ao desenho e à implementação. De acordo com Sommerville (2011), requisitos não funcionais não estão relacionados com os serviços específicos do sistema, mas às propriedades emergentes do sistema, como confiabilidade, tempo de resposta e ocupação de área. Requisitos não funcionais especificam ou restringem as características do sistema como um todo. Sendo assim, são frequentemente mais críticos que requisitos funcionais individuais. Ainda de acordo com Sommerville (2011), os requisitos não funcionais surgem de acordo com necessidades dos usuários, restrições de orçamento, políticas organizacionais, necessidade de integração com outros sistemas de software ou hardware, ou a partir de fatores externos. Conforme Lima (2009), requisitos não funcionais estão relacionados a características do sistema ou do ambiente em que ele está inserido. 2.2.2 Projeto e implementação de software Segundo Sommerville (2011), a fase de implementação do desenvolvimento de software consiste na conversão de uma especificação de sistema em um sistema executável, envolvendo processos de projeto e programação de software, e refinamento da especificação. O desenvolvimento dos programas que implementam 3346 10th International Conference on Information Systems and Technology Management – CONTECSI June, 12 to 14, 2013 - São Paulo, Brazil o sistema decorrem naturalmente dos processos de projeto de sistema, através da utilização de ferramentas de desenvolvimento de software. De acordo com Pressman (2009), o projeto é o primeiro passo da fase de desenvolvimento de qualquer produto ou sistema de engenharia, e seu objetivo é a produção de um modelo ou representação de qualquer entidade que será construída posteriormente. O projeto de software modifica-se continuamente à medida que novos métodos, uma melhor análise e um mais amplo entendimento se desenvolvem. Sommerville (2011) descreve que as atividades no processo de projeto podem variar dependendo do tipo de sistema a ser desenvolvimento e cita quatro atividades que podem fazer parte desse processo: 1) Projeto de arquitetura; 2) projeto de interface; 3) Projeto de componente; 4) projeto de banco de dados. 2.2.2.1 Modelagem de sistemas A modelagem é um processo de desenvolvimento de modelos abstratos, onde cada modelo apresenta uma visão ou perspectiva diferente do sistema, e normalmente representa o sistema com algum tipo de notação gráfica. Sommerville (2011) complementa que os modelos são utilizados em três fases do processo: durante o processo de engenharia de requisitos, de forma a ajudar extrair requisitos do sistema, durante o processo de projeto, de forma a descrever o sistema para os engenheiros que o implementam, e após o desenvolvimento, como forma de documentação. De acordo com Paula Filho (2009), a disciplina de análise reúne as atividades que visam modelar de forma precisa os conceitos relevantes do domínio do problema, servindo tanto para verificar a qualidade dos requisitos obtidos pelas atividades da disciplina de requisitos, quanto para tornar esses requisitos precisos e detalhados o suficiente para que sirvam de base para as atividades de desenho. 2.2.2.2 Projeto de arquitetura Segundo Pressman (2009), a arquitetura de software é composta pela estrutura hierárquica dos componentes procedimentais e estrutura de dados. A arquitetura deriva de um processo de divisão em partições, relacionando elementos de uma solução de software a partes de um problema do mundo real, definidos durante a análise dos requisitos. Além disso, o projeto arquitetural junto à estrutura de programa e a estrutura de dados, definindo interfaces que possibilitam que os dados fluam através do programa. De acordo com Sommerville (2011), projeto de arquitetura é o primeiro estágio no processo de projeto de software e identifica os principais componentes estruturais de um sistema e os relacionamentos entre eles. É um processo criativo no qual se projeta uma organização de sistema para satisfazer aos requisitos funcionais e não funcionais de um sistema. 2.2.2.3 Projeto e implementação 3347 10th International Conference on Information Systems and Technology Management – CONTECSI June, 12 to 14, 2013 - São Paulo, Brazil A implementação realiza o desenho de um sistema em termos de diversos tipos de componentes de código fonte e código binário. Segundo Paula Filho (2009), classes e outros elementos de desenho interno são transformados em unidades de implementação, geralmente constituídas de arquivos de código fonte. O núcleo das atividades de implementação é formado pelas técnicas básicas que formam o ciclo de programação: desenho detalhado, codificação, teste de unidade e integração. De acordo com Pressman (2009), as fases de especificação e projeto estão dirigidas a um objetivo final, que é a tradução de representações de software para uma forma que possa ser “entendida” pelo computador, através da etapa de codificação, que é o processo que transforma o projeto numa linguagem de programação. Segundo Sommerville (2011), projeto e implementação é o estágio em que o sistema de software executável é desenvolvido. O projeto de software é uma atividade em que identifica os componentes de software e seus relacionamentos com os requisitos levantados, e a implementação é a transformação do projeto em uma série de programas que compõem o sistema. De acordo com Mecenas e Oliveira (2005), a fase de construção é o coração do processo de desenvolvimento, e todo o processo de especificação e projeto toma a forma de código-fonte na linguagem eleita para o processo. O sucesso dessa fase dependerá da qualidade dos insumos produzidos nas fases anteriores. 2.2.3 Validação de Software Segundo Sommerville (2011), validação de software tem a intensão de mostrar que um software se adequa a suas especificações e satisfaz as especificações do cliente. O processo de validação possui algumas técnicas. Dentre elas, a principal é o teste de programa, que consiste na execução do sistema com dados de testes simulados, e há também as técnicas de inspeções e revisões em cada estágio do processo de software. De acordo com Pressman (2009), a atividade de teste de software é um elemento crítico da garantia de qualidade de software e representa a última revisão de especificação, projeto e codificação. A atividade de teste tem como objetivos descobrir erros no software e demonstrar que as funções de software estão trabalhando de acordo com as especificações, proporcionando uma boa indicação de confiabilidade de software. Um teste é uma atividade na qual um produto, sistema ou componente é executado sob condições especificadas, com observação e registro dos resultados e avaliação de um ou mais aspectos. Para Paula Filho (2009) a disciplina de testes visa verificar os resultados da implementação, através do planejamento, desenho e realização das atividades desse processo. As atividades de testes inserem tantos defeitos em um produto quanto à própria implementação. Segundo Paula Filho (2009), “... os testes são indispensáveis para detectar os defeitos que ainda escapam das revisões e para se avaliar o grau de qualidade de um produto e de seus componentes.”. De acordo com Sommerville (2011), o processo de teste ocorre normalmente em três estágios, que consistem no teste de desenvolvimento, no qual os componentes 3348 10th International Conference on Information Systems and Technology Management – CONTECSI June, 12 to 14, 2013 - São Paulo, Brazil são testados pelas pessoas que os desenvolveram, teste de sistema, no qual os componentes do sistema são integrados para criar um sistema completo, e finalmente testes de aceitação, que é o estágio final em que o sistema é testado com dados fornecidos pelo cliente. 2.2.4 Evolução do Software Segundo Sommerville (2011), as mudanças no software podem ocorrer a qualquer momento durante ou após o desenvolvimento do sistema, e a distinção entre o desenvolvimento e a manutenção está cada vez mais irrelevante, já que a engenharia de software é um processo evolutivo. 2.3 RUP – Rational Unified Process Para Sommerville (2011), Rational Unified Process (RUP) é um processo híbrido que reúne elementos de modelo de processos genéricos, ilustra boas práticas das fases de especificação e projetos, e apoio a prototipação e a entrega incremental. De acordo com Paula Filho (2009), o RUP une as disciplinas de análise e desenho em uma única disciplina e acrescenta disciplinas adicionais de modelagem de negócios, implantação, gestão de configurações e alterações, gestão de projetos e ambiente. O RUP não pode ser considerado como um processo único, mas uma plataforma que permite construir uma grande família de processos padronizados para muitos portes de projetos e aplicações diferentes. O RUP é um modelo que identifica quatro fases distintas no processo de software, de acordo com Sommerville (2011): a) Concepção: Identificação das entidades externas (sistemas e pessoas) que vão interagir com o sistema e definir essas interações; b) Elaboração: Compreensão do problema dominante, definição de arquitetura do sistema, e desenvolvimento do plano do projeto; c) Construção: Esta fase envolve o projeto, programação e teste do sistema; d) Transição: Transferência do sistema do ambiente de desenvolvimento para o ambiente de produção. Ainda segundo Sommerville (2011), o RUP prioriza as atividades que ocorrem durante o processo de desenvolvimento, denominando essas atividades de workflows, sendo seis workflows centrais, identificados no processo, e três workflows de apoio. Os workflows são estáticos e são atividades técnicas que não são associadas a uma única fase, mas podem ser utilizadas durante todo o desenvolvimento para alcançar metas específicas. Os workflows centrais de engenharia e de apoio estão descritos na Tabela 1. TABELA 1 Workflows estáticos no Rational Unified Process WORKFLOW Modelagem de negócios Requisitos DESCRIÇÃO Os processos de negócio são modelados por meio de casos de uso de negócios Atores que interagem com o sistema são identificados e casos de uso são desenvolvidos para modelar os requisitos do sistema 3349 10th International Conference on Information Systems and Technology Management – CONTECSI June, 12 to 14, 2013 - São Paulo, Brazil Análise e projeto Implementação Teste Implantação Gerenciamento de configuração e mudanças Gerenciamento de Projeto Meio Ambiente Um modelo de projeto é criado e documentado com modelos de arquitetura, modelos de componentes, modelos de objetos e modelos de sequência. Os componentes do sistema são implementados e estruturados em subsistemas de implementação. A geração automática de código a partir de modelos de projeto ajuda a acelerar esse processo. O teste é um processo interativo que é feito em conjunto com a implementação. O teste de sistema segue a conclusão da implementação. Um release do produto é criado, distribuído aos usuários e instalado em seu local de trabalho. Esse workflow de apoio gerencia as mudanças do sistema. Esse workflow de apoio gerencia o desenvolvimento do sistema. Esse workflow está relacionado com a disponibilização de ferramentas apropriadas para a equipe de desenvolvimento de software. Fonte: Sommerville, 2011, p. 35. 2.4 Gestão do conhecimento Vive-se hoje em uma nova ‘era’ chamada de pós-capitalismo. Dowbor (2008) esclarece que já é possível substituir o individualismo e a competição, bases do capitalismo, pelo Paradigma da Colaboração. A transição pode ser vista de forma transparente nas comunidades de Softwares Livres aonde, já, em vários âmbitos, vem se sobre saindo a ideia colaborativa no desenvolvimento de softwares em cima de propriedades intelectuais e patentes. A inteligência coletiva vem se mostrando cada dia mais forte e podemos observar de forma concreta esta afirmação através da Wikipédia. Este mesmo autor cita uma passagem interessante sobre o Paradigma da Colaboração: “A colaboração para criar coisas novas ou simplesmente úteis é uma das fontes mais importantes de prazer (…). O paradigma da colaboração, além de constituir uma visão ética e de materializar valores das pessoas que querem gozar uma vida agradável e trabalhar de maneira inteligente e útil — em vez de ter de matar um leão por dia — constitui hoje bom senso econômico em termos de resultados para o conjunto da sociedade”. Através desta reflexão, é possível notar que tal mudança se faz necessária devido aos benefícios no ambiente do trabalho, tanto das diretrizes quanto dos funcionários. Logo a Gestão do Conhecimento é crucial para o avanço do Paradigma da Colaboração de forma concreta e inteligente. Para entender um pouco sobre o que é Gestão do Conhecimento deve-se iniciar a apresentação de alguns conceitos sobre dados, informação, conhecimento. Dados de uma forma bem genérica podem ser definidos como “conjunto de fatos distintos e objetivos, relativos a eventos” (DAVENPORT; PRUSAK, 1998, p. 2). É a matéria prima de maior relevância da informação, porém o dado sozinho não representa um evento em si, não tem muito significado já que sem contexto ficam muito vagos determinados conjuntos de caracteres. Já a informação é um conjunto de dados que faz a diferença para o meio, e existem dois pontos de comunicação, um emissor e outro receptor, e esta pode ser de 3350 10th International Conference on Information Systems and Technology Management – CONTECSI June, 12 to 14, 2013 - São Paulo, Brazil caráter visual ou sonoro. Segundo Drucker (1999, p.32), as informações: “São dados interpretados, dotados de relevância e propósito” e lembrando que esta tem capacidade de produzir conhecimento. Davenport e Prusak (1998) entendem que o conhecimento é a informação tratada, assim como informação é um dado tratado. Para que a informação torna-se conhecimento “[...] os seres humanos precisam fazer virtualmente todo o trabalho.” Através de comparações, implicações, relações entre os conhecimentos novos e antigos e um alinhamento entre pessoas sobre determinada informação são responsáveis pelo conceito de transformação entre uma informação para um conhecimento. Ainda Davenport e Prusak (1998), citam que o conhecimento é a mais valiosa informação de uma organização, porém tem por confronto direto ser a mais difícil de gerenciar, porque seu valor é diretamente ligado ao ser humano que por ora é uma variável inconstante, mas responsável por ideias inovadoras, percepções novas e interpretações a partir destas informações sendo aplicadas diretamente no rumo da empresa, dos novos projetos e se bem direcionada em um pró de grande valia para as organizações. Segundo Zaidan (2008), a retenção do conhecimento tem por objetivo dar um suporte as atuais organizações, transformando o conhecimento e capacidade de intelecto dos seus funcionários em vantagens competitivas através da Gestão do Conhecimento, sendo que desta forma não permite a dissipação e até mesmo a perda do mesmo. Porém reter este conhecimento é um grande desafio para as organizações. Para Felix (2003), a definição da qualidade da informação é auditada e verificada através de medições como forma de avaliação, como pode ser verificada na Tabela 2. Para este autor uma informação é de qualidade para uma organização quando todos os dados do quadro acima são preenchidos de forma sistemática, completa e com seriedade dado que a importância da qualidade de uma informação é de extrema importância para competitividade no atual mercado. TABELA 2 Dimensões da qualidade da informação Fonte: Felix, 2003, p. 37 e 38. 3351 10th International Conference on Information Systems and Technology Management – CONTECSI June, 12 to 14, 2013 - São Paulo, Brazil 2.5 Gestão do conhecimento e processo de desenvolvimento de software Os patrimônios das empresas de desenvolvimento de software não consistem em construções ou máquinas. O principal ativo dessas empresas está no capital intelectual de seus colaboradores, e o grande problema é que esses colaboradores vão para casa todos os dias, e as empresas de software enfrentam o grande desafio de manter esse capital intelectual. Rus e Lindvall (2002) complementam que a gestão do conhecimento se torna única porque o papel principal é desempenhado pelas pessoas, como importantes portadoras do conhecimento que pode ser sistematicamente compartilhado em uma organização. Para Zaidan, Jamil e Libério (2010), considerar o processo de desenvolvimento de software com apoio da gestão do conhecimento é extremamente oportuno, pois o processo de desenvolvimento é uma atividade de intensa comunicação e que estrutura ideias e procedimentos muitas vezes não documentados formalmente. As empresas de desenvolvimento de software possuem uma expressiva demanda por informações para a execução de seus processos e o uso adequado da gestão do conhecimento pode gerar uma grande vantagem competitiva para essas organizações. Segundo Ward e Aurum (2004), a gestão do conhecimento e experiência são meios fundamentais pelos quais o desenvolvimento de software e as melhorias do processo ocorrem. Dentro do domínio da engenharia de software, a qualidade continua a ser uma questão de preocupação, e a gestão do conhecimento oferece às organizações a oportunidade de apreciar os desafios e complexidades inerentes ao desenvolvimento de software. De acordo com Dingsoyr (2002), as empresas de desenvolvimento de software tem uma grande pressão dos clientes para oferecer melhores soluções, mais baratas, e em um menor prazo. Muitos pesquisadores têm trabalhado com ideias de como melhorar o processo de desenvolvimento. Como o desenvolvimento de software é uma tarefa de muito conhecimento intensivo, recentemente tem aumentado muito a utilização da gestão do conhecimento como meio de melhorar o desenvolvimento de software. O conhecimento na engenharia de software é disperso, de proporção imensa e de crescimento contínuo. Rus e Lindvall (2002) descrevem algumas necessidades de conhecimento de organizações ligadas ao desenvolvimento de software: a) Aquisição de conhecimento sobre novas tecnologias: a necessidade de monitoração do ambiente em busca de novas tecnologias é constante nas organizações que desenvolvem software; b) Acesso a novos domínios de conhecimento: o desenvolvimento de software não envolve só conhecimento sobre o software ou as tecnologias relacionadas. Envolve também o domínio do conhecimento do campo para o qual o software está sendo desenvolvido, como por exemplo, conhecimento médico no caso de um software para a área de medicina; c) Compartilhamento do conhecimento sobre políticas e práticas institucionais: novos membros de uma organização precisam conhecer 3352 10th International Conference on Information Systems and Technology Management – CONTECSI June, 12 to 14, 2013 - São Paulo, Brazil sobre a cultura da organização, assim como a infraestrutura de trabalho e as práticas institucionais; d) Captura de conhecimento e saber quem faz o quê: o indivíduo é o ponto chave para o sucesso de qualquer projeto de engenharia de software. Saber o tipo de conhecimento possuído por cada empregado é indispensável na criação de uma estratégia que previna o desaparecimento de conhecimentos valiosos; e) Colaboração e compartilhamento do conhecimento: a colaboração está relacionada com a troca mútua de conhecimento. Membros de uma equipe de desenvolvimento de software precisam de um meio de colaboração e troca de conhecimento independente de tempo e espaço. Para a implantação da gestão do conhecimento em empresas de desenvolvimento de software, muitos desafios e obstáculos devem ser superados. De acordo com Zaidan, Jamil e Libério (2010), três questões são particularmente importantes: a) Questão tecnológica: A tecnologia de software suporta a gestão do conhecimento? É possível integrar todas as ferramentas para alcançar o nível planejado de compartilhamento? b) Questão organizacional: É um erro focar somente na tecnologia e esquecer a metodologia. É um risco cair na cilada tecnológica sem um planejamento adequado para a implementação da gestão do conhecimento; c) Assuntos individuais: Funcionários frequentemente não têm tempo de entrar ou procurar por conhecimento, ou não desejam disponibilizar seus conhecimentos. E não querem reusar conhecimentos dos outros. O conhecimento acumulado pelos vários membros de uma equipe de projeto pode ser útil em projetos futuros, e apresenta uma fonte potencial de aprendizado organizacional na engenharia de software. No entanto, a identificação, organização, armazenamento, utilização, evolução e difusão do conhecimento são tarefas bem complexas. Conforme complementa Garcial, Zambalde e Costa (2008), a gestão do conhecimento melhora o trabalho de processo de desenvolvimento de software através de uma gestão explícita e sistemática do conhecimento organizacional, como aquisição, armazenamento, organização, evolução e acesso eficiente. Rus e Lindvall (2002) acreditam que é de suma importância a elaboração de documentos no desenvolvimento de um software, pois é através destes que são feitas as “capturas do conhecimento produzido”. Se este processo for bem executado, o conhecimento será retido em forma de documentos e disponibilizado para os membros das equipes desenvolvedoras nos projetos futuros permitindo a reutilização de códigos, soluções para determinados problemas assim diminuindo o tempo e o gasto nestes projetos. Caso isto não seja feito será necessário um contato com a pessoa detentora daquele conhecimento específico e como disse Fernando Zaidan (2008), “Conhecimento tem pernas e caminha para casa todos os dias”. Ainda Rus e Lindvall (2002) sem está Gestão do Conhecimento a estruturação dos processos nas organizações, principalmente as de Tecnologias da Informação acaba sendo comprometidas quanto à produtividade e competitividade. 3353 10th International Conference on Information Systems and Technology Management – CONTECSI June, 12 to 14, 2013 - São Paulo, Brazil Para Zaidan, Jamil e Libério (2010), as organizações podem utilizar da gestão do conhecimento para fornecer soluções em seus negócios, evitando erros e retrabalho, redução no tempo de custo de desenvolvimento, e aumento de qualidade, através da utilização em projetos futuros de bases de conhecimento obtidas em projetos anteriores. De acordo com esses autores, as atividades da gestão do conhecimento suportadas no desenvolvimento de software são: • Gestão de documentos: muitos documentos, processos e atividades são envolvidos na engenharia de software. Estes documentos são frequentemente criados, revisados e utilizados. Existem diversas ferramentas para a gestão de documentos; • Gestão de competência: ou gestão de habilidades; quem sabe o quê – uso do conhecimento não documentado; • Reuso de software: programadores não se cansam de implementar a mesma solução; o reuso é para evitar o retrabalho; incentivo ao repositório de reuso. Somente será desenvolvido algo novo caso não se encontre nada para reusar; • Aprender com experiências necessita de um suporte à memória do produto e do projeto. As práticas da engenharia de software que ajudam a construir memórias são: controle de versão, gestão de modificações, documentação de padrões e rastreabilidade de requisitos. Em todas estas práticas, a retenção do conhecimento é altamente indicada (ZAIDAN; JAMIL; LIBÉRIO, 2010). Para Garcial, Zambalde e Costa (2008), as organizações que desejam melhorar a capacidade de uma equipe de desenvolvimento de software devem administrar as tarefas que asseguram que o conhecimento adquirido durante o projeto será armazenado para utilização nos próximos projetos. O conhecimento adquirido deve gerar novos conhecimentos, através de lições aprendidas e análises posteriores que identificam o que foi considerado certo, para ser reutilizado, e o que foi considerado errado, para ser reavaliado, no produto ou processo. Ainda segundo os autores, essas atividades incluem análise dos dados do projeto, como comparações entre custos estimados e custos gastos, e tempo estimado e tempo gasto, ou análise das mudanças históricas que refletiram nos eventos dos projetos. 2.5.1 A Organização Fábrica de Experiência (OFE) Um modelo de implementação de gestão do conhecimento e processo de desenvolvimento de software, proposto por Basili (1989), citado por Rus e Lindvall (2002) e Zaidan, Jamil e Libério (2010), é o conceito de Organização de Fábrica de Experiência, que visa à aquisição de conhecimento de lições aprendidas e melhores práticas em projetos através de experiências em projetos anteriores. Esse modelo pode ser verificado na Figura 1. Como o dia a dia de um projeto envolve a utilização de cronogramas, expectativas quanto à qualidade e produtividade, e desafios técnicos, a equipe envolvida diretamente no projeto não tem disponibilidade para o trabalho de explicitação do conhecimento. Nesse modelo proposto, essa atividade fica com a equipe denominada de Fábrica de Experiência, que analisa e sintetiza todos os tipos de experiência, incluindo lições aprendidas, dados de projetos, relatórios, e explicitam estas experiências através da criação de repositórios. 3354 10th International Conference on Information Systems and Technology Management – CONTECSI June, 12 to 14, 2013 - São Paulo, Brazil De acordo com Zaidan, Jamil e Libério (2010), o que é mais essencial na OFE não é a experiência, mas os novos conhecimentos gerados a partir da experiência. As OFE precisam empacotar a experiência, por meio de análise, síntese e avaliação da experiência bruta, e construir modelos que representam a abstração dessas experiências. FIGURA 1 – Organização de Fábrica de Experiência Fonte: Victor Basili, 1989, adaptado por Zaidan, Jamil e Libério, 2010. 3 PROCEDIMENTO METODOLÓGICO Para essa pesquisa, realizou-se um estudo de natureza exploratória, utilizando a abordagem qualitativa, através do método de estudo de caso, de forma identificar o processo de desenvolvimento de software de uma empresa de TI de médio porte, e verificar como esse processo de desenvolvimento pode ser implementado, difundido e melhorado através da colaboração de seus funcionários. O paradigma qualitativo se justifica na medida em que a investigação se deu em uma ótica compreensiva e interpretativa, o que exigiu dos pesquisadores uma postura puramente crítica (GIL, 2010; VERGARA, 2011). Acerca do estudo de caso, Yin (2010) assevera que é uma estratégia escolhida para examinar acontecimentos contemporâneos inseridos nos contextos da vida real. Gil (2010) complementa que o estudo de caso caracteriza-se por grande flexibilidade na forma de desenvolver a pesquisa. Foi realizada uma busca em livros e em trabalhos técnicos e científicos, a fim de examinar as práticas e ferramentas da Gestão do Conhecimento, assim como 3355 10th International Conference on Information Systems and Technology Management – CONTECSI June, 12 to 14, 2013 - São Paulo, Brazil identificar os conceitos e modelos da Gestão do Conhecimento e sua aplicabilidade no processo desenvolvimento de software. A amostra, escolhida por conveniência, é uma empresa que atua no mercado de software. A seguir tem-se a descrição completa da empresa e a proposta elaborada para este estudo. 4 PROPOSTA DE UTILIZAÇÃO DA GESTÃO DO CONHECIMENTO EM UMA EMPRESA DE TI A empresa sob a qual será realizada a proposta do modelo de gestão do conhecimento como forma de otimização do processo de desenvolvimento de software, é uma empresa que está sediada em Belo Horizonte/MG com filiais em São Paulo/SP, Rio de Janeiro/RJ e Vitória/ES e tem atuado no mercado de software há mais de 20 anos. A empresa é especializada em projetos sob medida, infraestrutura e outsourcing, mas nos últimos anos se firmou como uma das grandes empresas brasileiras fornecedoras de sistemas integrados para Instituições Financeiras, Fundos de Pensão e Sistema Corporativo de Assistência. Apesar de manter uma posição solidificada no mercado, a empresa está passando por uma fase de transição, com grandes investimentos de forma a modernizar e reestruturar seus principais produtos. Para isso foi criado um Centro de Excelência, cujo objetivo principal é a criação de um processo padronizado de desenvolvimento de software, utilizando de seu excelente nível do quadro técnico e da expertise do conhecimento adquiridos durantes esses anos nas áreas de negócio em que atua. Além do centro de excelência recém-criado, a empresa possui uma área de apoio, GTA (Gerência de Tecnologia), que possui um quadro altamente qualificado de arquitetos com grandes conhecimentos nas mais diversas tecnologias. O primeiro passo criado pela empresa em questão para o processo de reestruturação de seus produtos e concepção de novos módulos foi a criação de uma nova metodologia de desenvolvimento de sistemas, baseada no RUP e UML. Essa metodologia atua nas seguintes fases do processo de desenvolvimento: especificação, análise, projeto e desenvolvimento. De acordo com Zaidan, Jamil e Libério (2010), o que é mais essencial na OFE não é a experiência, mas os novos conhecimentos gerados a partir da experiência. As OFE precisam empacotar a experiência, por meio de análise, síntese e avaliação da experiência bruta, e construir modelos que representam a abstração dessas experiências. Dentre vários autores estudados, a maioria possui a mesma ideia, de que no processo de software é fundamental de que o conhecimento adquirido em projetos realizados seja utilizado em projetos futuros, de forma a evitar retrabalho, reduzir custo e prazo, e melhorar a qualidade. Porém isso não é uma tarefa fácil, e de acordo com os mesmos autores, foram identificados quatro pontos principais que devem ser trabalhados para a implementação de uma gestão de conhecimento no processo de desenvolvimento, e a proposta desse estudo é a atuação nesses quatro pontos: 3356 10th International Conference on Information Systems and Technology Management – CONTECSI June, 12 to 14, 2013 - São Paulo, Brazil a) Questão tecnológica: integração de ferramentas de forma que o conhecimento fique centralizado em um único lugar; b) Questão organizacional: criação de metodologia e atuação da gerência para garantir que o processo esteja sendo feito conforme planejado; c) Captura do conhecimento: criação de métodos de documentação de forma que conhecimentos adquiridos sejam disponibilizados em algum repositório; d) Compartilhamento do conhecimento: criação de métodos de controle de forma que os conhecimentos adquiridos e armazenados sejam efetivamente utilizados. Em relação à questão tecnológica, a empresa do estudo já deu um grande passo na questão da centralização das informações, que é a utilização da ferramenta Enterprise Architect – EA. O EA é uma ferramenta que é fornece um ambiente de modelagem que contempla o pleno desenvolvimento do ciclo de vida de um produto, com ferramentas para modelagem de negócios, engenharia de sistemas, arquitetura corporativa, gerenciamento de requisitos, projeto de software, geração de códigos, etc. A ferramenta permite que todos os artefatos gerados no processo de desenvolvimento fiquem no mesmo local, e permite a criação de matrizes de rastreabilidades entre esses artefatos, permitindo o controle de alterações e os impactos gerados por essas alterações, durante o ciclo de vida do projeto. Além disso, a ferramenta possui várias funcionalidades referentes a documentações e relatórios, de forma que a documentação do projeto fique concentrada no mesmo ambiente do projeto. Para o controle dos processos e andamento dos projetos, a empresa utiliza uma ferramenta desenvolvida internamente de controle de atendimento técnico. Através dessa ferramenta é possível registrar fluxos com todas as tarefas de execução do processo de desenvolvimento, anexando artefatos gerados e arquivos relevantes. Essa ferramenta permite também a apropriação de horas trabalhadas pelos recursos em cada fase de cada projeto. Com relação à base de conhecimento gerada pelos projetos, é proposta a criação de um portal único de memória técnica, utilizando a ferramenta SharePoint, de fácil acesso a toda empresa, contendo instruções, exemplos e melhores práticas para cada item da metodologia de desenvolvimento criada. A ideia é de que esse portal seja atualizado de acordo com o andamento dos projetos, de forma que cada etapa da metodologia fique bem documentada e padronizada, para a utilização nos projetos futuros. De acordo com Falconi (2004) as funções operacionais ocupam muito tempo das pessoas de uma empresa e são centradas na padronização. Para a questão organizacional, a proposta desses autores é de que haja uma forte ação da gerência nesse processo, o que pode até alterar a cultura organizacional da empresa. A proposta é a utilização de um modelo semelhante ao conceito de Organização de Fábrica de Experiência – OFE, proposto por Basili (1989), citado por Rus e Lindvall (2002) e Zaidan, Jamil e Libério (2010). Para a empresa em questão, o papel da OFE seria executado pela equipe de arquitetura GTA da empresa, que ficaria responsável por externalizar os conhecimentos adquiridos durante os andamentos dos diversos projetos da organização. Essa equipe seria encarregada de analisar e sintetizar os diversos tipos de experiências para cada fase da 3357 10th International Conference on Information Systems and Technology Management – CONTECSI June, 12 to 14, 2013 - São Paulo, Brazil metodologia da empresa, além de lições aprendidas no contexto geral, de forma a criar os procedimentos operacionais padrão para cada fase da MDS. O modelo proposto pelos autores pode ser verificado na Figura 2. Não adianta apenas capturar o conhecimento. Deve se certificar que o mesmo esteja sendo útil nos novos projetos. A proposta dos autores desse trabalho é de que a OFE libere e divulgue periodicamente as atualizações no portal criado de forma que os procedimentos operacionais padrão sejam de conhecimento de toda a equipe de desenvolvimento. Os gerentes de projetos devem ter o controle do andamento de cada projeto sob sua coordenação, verificando se os procedimentos operacionais, considerados ‘padrão’, disponibilizados no portal, estejam sendo utilizados pela equipe nos novos projetos, além de fazer o monitoramento de tempo e esforço gasto em cada fase da metodologia, de forma que esses dados também sejam utilizados para dimensionamento de futuros planejamentos de projetos. Os gerentes devem ficar atentos a todos os eventos que fogem dos procedimentos operacionais ‘padrão’ definidos. Para Falconi (2004), esses eventos são denominados anomalias, que não agregam valor para a empresa e devem ser eliminados, para aumento de produtividade. As anomalias devem ser eliminadas através de ações corretivas, e a causa dos problemas deve ser estudada, para identificar se sua origem foi pela não adoção do procedimento ‘padrão’ ou se o procedimento deve ser revisado, documentado e divulgado pela OFE. Dessa forma, acredita-se que a cultura do conhecimento coletivo se sobressairá ao conhecimento individual. A figura abaixo representa o que foi discutido nesta proposta. FIGURA 2 – Organização de Fábrica de Experiência Proposta Fonte: Victor Basili, 1989, adaptado pelos Autores. 3358 10th International Conference on Information Systems and Technology Management – CONTECSI June, 12 to 14, 2013 - São Paulo, Brazil 5 CONSIDERAÇÕES FINAIS Após serem identificadas e analisadas as necessidades da empresa quanto ao processo de implementação, propagação e evolução de um novo processo de desenvolvimento de software, foi possível verificar que a Gestão do Conhecimento pode contribuir para melhorar esse processo, para o gerenciamento e para a gestão de novos projetos. As práticas da Gestão do Conhecimento conduzem a uma memória organizacional, documentação do conhecimento existente, troca de informações e trabalho colaborativo, que são fundamentais para toda organização, principalmente para as empresas de software, cujos patrimônios não consistem em construções ou máquinas, e sim no capital intelectual de seus colaboradores. A partir do estudo da Gestão do conhecimento no Processo de Desenvolvimento de Software, foram definidos procedimentos para atuação nos quatro pontos principais que devem ser trabalhados para a implemetação de uma gestão de conhecimento no processo de desenvolvimento: i) questão tecnológica; ii) questão organizacional; iii) captura do conhecimento; iv) compartilhamento do conhecimento. A utilização de uma ferramenta que abrange as fases de Especificação, Modelagem e Projeto, que no caso é o EA - Enterprise Architect, permite que os artefatos gerados no processo de desenvolvimento fiquem em um mesmo repositório, permitindo a rastreabilidade entre os artefatos e documentação do sistema em um único lugar. A utilização de uma OFE permite que o conhecimento de lições aprendidas e melhores práticas em projetos anteriores sejam guardados e utilizados nos novos projetos, de forma a evitar retrabalhos e agilizar o processo. No entanto, foi verificado que um dos fatores mais importantes para implementação da Gestão do Conhecimento reside na cultura organizacional da empresa. Conforme descrito nesse estudo, deve ser feito um processo de sensibilização dos colaboradores de forma a contribuir efetivamente para utilização e evolução da base de conhecimento gerada, pois a Gestão do Conhecimento tem nas pessoas a chave para seu sucesso. Como perspectivas futuras, espera-se que o modelo de Gestão do Conhecimento aqui apresentado seja implementado e seguido na empresa que foi o objeto desse estudo de caso, de forma a avaliar os impactos da Gestão do Conhecimento no processo de desenvolvimento. Esse estudo também pode ser utilizado como base para outras empresas de desenvolvimento de software que precisam melhorar seus processos de forma a obter maior qualidade, agilidade e competitividade. REFERÊNCIAS BASILI, V. R. Software Development: a paradigm for the future. Computer Software and Applications Conference, 1989. COMPSAC 89., Proceedings of the 13th Annual Internacional. In IEEE Internet Computing, 1989. 3359 10th International Conference on Information Systems and Technology Management – CONTECSI June, 12 to 14, 2013 - São Paulo, Brazil DAVENPORT, T.H., PRUSAK, L. Conhecimento empresarial. Rio de Janeiro: Campus, 1998. DINGSOYR, T. Knowledge Management in Medium-Sized Software Consulting Companies. Trondheim: Norwegian University of Science and Technology. 2002 DOWBOR, L. Democracia Econômica – alternativas de gestão social. Petrópolis: Vozes, 2008. DRUCKER, P. Desafios gerenciais para o século XXI. São Paulo: Pioneira, 1999. FALCONI, V. Gerenciamento da rotina do trabalho do dia-a-dia. 8 ed. Nova Lima: INDG Tecnologia e Serviços Ltda., 2004. FELIX, W. Introdução à gestão da informação. Campinas: Alínea, 2003. GARCIA, V. de O. C.;ZAMBALDE, A. L.;COSTA, H. A. X. Práticas e Ferramentas de Gestão do Conhecimento Aplicadas à Engenharia de Software – Um Estudo de Caso. IV Workshop Um Olhar Sociotécnico sobre a Engenharia de Software – WOSES. Florianópolis, 2008. GIL, A. C. Como elaborar projetos de pesquisa. 5. ed. São Paulo: Atlas, 2010. LIMA, A. da S. UML 2.0: do requisito à solução. 4 ed. São Paulo: Érica, 2009. MECENAS, I; OLIVEIRA, V. Qualidade em Software: uma metodologia para homologação de sistema. Rio de Janeiro: Alta Books, 2005. PAULA FILHO, W. de P. Engenharia de Software: fundamentos, métodos e padrões. 3 ed. Rio de Janeiro: LTC, 2009. PRESSMAN, R. S. Engenharia de Software. São Paulo: Pearson Makron Books, 2009. RUS, I; LINDVALL, M. Knowledge Management in Software Engineering.Fraunhofer Center for Experimental Software Engineering, 2002, Maryland.In IEEE Internet Computing, 2002. SOMMERVILLE, I. Engenharia de Software. 9 ed. São Paulo: Pearson Prentice Hall, 2011. VERGARA, S. C. Projetos e relatórios de pesquisa em administração. 13. ed. São Paulo: Atlas, 2011. YIN, R. K. Estudos de caso: planejamento e métodos. 4. ed. Porto Alegre: Bookman, 2010. 3360 10th International Conference on Information Systems and Technology Management – CONTECSI June, 12 to 14, 2013 - São Paulo, Brazil WARD, J; AURUM, A. Knowledge Management in Software Engineering – describing the process. Software Engineering Conference, 2004, Proceedings Australian.In IEEE Internet Computing, 2004. ZAIDAN, F. H. Processo de Desenvolvimento de Sistema de Informação como Forma de Retenção do Conhecimento Organizacional para Aplicação estratégica: Estudo de Casos Múltiplos. 2008. 129f. Dissertação (Mestrado em Administração) – Universidade FUMEC, Belo Horizonte, 2008. ZAIDAN, F. H.; BAX, M. P. WIKI Ferramenta de colaboração corporativa da WEB 2.0: estudo de caso. In: 7º CONTECSI Congresso Internacional de Gestão de Tecnologia e Sistemas de Informação, 2010, São Paulo: Centrografica Grafica & Editora Ltda, 2010. ZAIDAN, F. H.; JAMIL, G. L.; LIBÉRIO, L. Organização Fábrica de Experiência: obtendo vantagens competitivas nas empresas desenvolvedoras de software. Engenharia de Software Magazine. Ano 2. 21 ed. 2010. 3361