• Nenhum resultado encontrado

3. Sistemas de Recomendação de Especialistas

3.2. SRE Existentes

De acordo com a proposta de utilizar elementos gerados durante a fase de implementação como fonte de entrada para localizar os especialistas envolvidos no DDS, foram extraídas da literatura abordagens que utilizassem ao menos uma fonte de informação derivada da codificação de software. A seguir são apresentados os trabalhos que descrevem as abordagens analisadas.

(McDonald e Ackerman, 2000) – Apresenta o Expertise Recommender (ER) e segue a idéia

que os relacionamentos guiam as pessoas ao selecionarem os especialistas dentro das organizações. Inicialmente, o sistema utiliza os registros de experiências entre as pessoas e o histórico dos artefatos para identificar os candidatos no projeto.

O ER disponibiliza duas heurísticas para a identificação dos especialistas. A primeira busca selecionar todos os desenvolvedores que modificaram um arquivo e classifica-os de acordo com a data da modificação. Nos casos de vários arquivos serem selecionados, a lista de especialistas é formada pela interseção entre as classificações de cada arquivo. A segunda heurística consiste em anexar aos erros encontrados, o cliente relacionado, os módulos do

23 sistema envolvido e a pessoa que solucionou. Em seguida, é verificada a similaridade entre o novo problema identificado e as informações anexadas.

Após a identificação, a recomendação é feita após filtragem dos candidatos por critérios organizacionais ou sociais. Para isto, a lista é filtrada de forma a selecionar os mais próximos do usuário na rede social ou no grupo de trabalho, ou seja, separados por no máximo x pessoas no modelo de relacionamentos sociais.

O pronto forte do ER está na avaliação do contexto social do usuário e na flexibilidade das suas fontes de dados. O ponto negativo do sistema é o filtro realizado, pois a pessoa mais especializada nem sempre é retornada caso esteja muito distante da rede social do usuário.

(Minto e Murphy, 2007) – Descreve o Emergent Expertise Locator (EEL), que baseado no

histórico de alterações dos arquivos e das pessoas que participaram dessas alterações, encontra os especialistas para um dado conjunto de arquivos de interesse.

O EEL utiliza duas matrizes com informações do histórico de alterações, a matriz de dependência dos arquivos e a matriz de autoria, para gerar a matriz de especialistas.

A matriz de dependência representa a quantidade de vezes que um par de arquivos foi alterado no mesmo momento e a matriz de autoria representa a quantidade de alterações que os desenvolvedores fizeram em cada arquivo. A matriz resultante do cálculo das duas matrizes anteriores representa o nível de conhecimento dos desenvolvedores sobre os arquivos em dúvida.

Esse sistema oferece um tratamento diferenciado aos dados armazenados nos repositórios de código-fonte, porém não é analisado se os arquivos têm dependências ou forte relacionamento com outros, o que poderia enriquecer a construção das matrizes.

(Sindhgatta, 2008) – A abordagem proposta nesse trabalho busca extrair os conceitos

presentes no código-fonte e associá-los aos desenvolvedores através dos registros de alterações do código.

A identificação dos conceitos inicia-se pelo processamento dos arquivos de código- fonte, que gera uma representação com apenas os termos chaves presentes no arquivo.

24 Após isso, os documentos são agrupados de forma homogenia, conforme a ocorrência dos termos. Os termos chaves resultante do agrupamento são identificados como os conceitos de domínio e estando presentes nas representações de código-fonte formam os domínios de especialização dos desenvolvedores.

A vantagem desta abordagem está na análise do conteúdo do código-fonte desenvolvido, possibilitando identificar quais são os termos mais utilizados na implementação do software. Contudo, para potencializar os resultados a mesma técnica adotada no processamento do conteúdo de arquivos de código-fonte poderia ser utilizada no conteúdo de meios de comunicação, como o e-mail, no intuito de identificar os conceitos tratados entre os desenvolvedores.

(Vivacqua e Lieberman, 2000; Vivacqua, 1999) – Esse trabalho descreve o Expert Finder (EF)

classifica o conhecimento dos usuários no domínio de programação Java a partir da análise dos códigos-fonte criados ao longo do projeto. Para montar o perfil dos desenvolvedores, o sistema analisa periodicamente os arquivos de código-fonte escritos pelos desenvolvedores. Isso permite identificar o quanto esse tem conhecimento sobre os conceitos e as classes Java.

Para localizar os especialistas, o sistema analisa a similaridade entre as palavras- chave fornecidas na busca e as descrições das classes. Após o cálculo, as classes encontradas são confrontadas com aquelas já utilizadas pelos desenvolvedores e presentes no seu perfil. Aqueles com o nível de conhecimento um pouco maior sobre a necessidade do solicitante serão escolhidos para iniciar uma interação.

O EF seleciona os especialistas desta forma por acreditar que a melhor pessoa a ajudar na solução de um problema nem sempre é aquele com maior grau de conhecimento, mas aqueles com um pouco mais de conhecimento comparado ao solicitante.

A vantagem do EF encontra-se no fato daquele com maior conhecimento está muitas vezes indisponível ou desinteressado em solucionar os problemas de desenvolvedores novatos. A desvantagem do sistema é por apenas analisar o uso das classes pertencentes ao domínio de programação Java, sendo assim, o sistema não identifica o quanto os desenvolvedores conhecem sobre as classes desenvolvidas durante o projeto.

25

(Ye et al., 2007) – Baseado no framework apresentado na seção 2.2.4, esse trabalho propõe

o STeP_IN, um sistema que possibilita obter uma lista de especialistas através do código- fonte e da comunicação realizada durante o desenvolvimento do projeto. Esse sistema tem como objetivo ajudar os desenvolvedores Java a encontrar as APIs utilizadas no projeto e aprender com exemplos e como os especialistas as usam. Caso o desenvolvedor ainda tenha dúvidas sobre uma determinada API, o sistema recomenda um conjunto de especialistas para ajudá-lo.

A partir do código-fonte e da comunicação, o sistema automaticamente direciona as perguntas a um grupo de especialistas escolhidos por dois critérios: se eles têm um alto grau de conhecimento na API desejada e se têm um bom relacionamento com o desenvolvedor que solicitou ajuda.

A principal vantagem no STeP_IN está na identificação dos relacionamentos existentes entre os desenvolvedores e as informações geradas no decorrer do projeto, porém ao selecionar os especialistas o conteúdo na comunicação entre os desenvolvedores não é analisado, isso impossibilita identificar os assuntos tratados pelas pessoas.

(Kagdi et al., 2008) – Apresenta o xFinder e também tem como objetivo encontrar os

especialistas no código-fonte implementado no projeto. Para isso, a recomendação toma como base a relação entre cada arquivo de código-fonte e os desenvolvedores. Por meio dessas informações, os especialistas mais adequados para cada arquivo são selecionados em função do que lhes é mais útil no momento.

A partir dos dados contidos no histórico de alterações do código-fonte, o XFinder cria dois vetores, o primeiro com a quantidade de alterações, de dias trabalhados e o último dia de trabalho de cada desenvolvedor no arquivo em dúvida e o segundo com o número total de dias de trabalho dos desenvolvedores nos arquivos envolvidos e seu último dia de trabalho nesses. Depois de formar os vetores, é calculada a distância Euclidiana entre os vetores para formar a lista de desenvolvedores indicados.

Ao preencher os vetores com dados temporais, esse sistema possibilita encontrar os desenvolvedores com melhor lembrança sobre como o código-fonte foi implementado,

26 porém assim como no EEL seria possível obter melhores resultados se também fossem analisados as relações existentes entre os arquivos.

(Anvik et al., 2006) – Essa abordagem busca descobrir os desenvolvedores mais indicados a

resolver os problemas reportados no repositório de bugs de um projeto.

A técnica utilizada envolve um algoritmo de aprendizagem de máquina que analisa o repositório de bugs e agrupa-os de acordo com as categorias indicadas pelos usuários. O sistema também aprende os tipos de problemas resolvidos por cada desenvolvedor e gera um classificador para identificar a categoria dos novos problemas inseridos e sugerir um pequeno conjunto de desenvolvedores capazes de resolver o problema.

A fonte de dados utilizada na abordagem possibilita extrair os tipos de atividades desempenhadas pelos desenvolvedores, porém a mesma não contém informações que possibilite obter um nível de especialização mais profundo (o especialista em determinada classe desenvolvida) como o histórico de alterações do código-fonte.

3.3.Conclusão

Esse capítulo apresentou as principais características dos Sistemas de Recomendação, as técnicas para construir os perfis dos especialistas e dos itens (documentos) acessados. Os SRE são destacados como uma variação desses sistemas, na busca das pessoas mais preparadas para solucionar as necessidades dos usuários.

Avaliando os SRE existentes, nota-se a necessidade de utilizar os artefatos gerados durante o desenvolvimento do Software como fontes de informação para encontrar os especialistas. Com exceção do STeP_IN, os demais sistemas não consideram a comunicação realizada no decorrer do projeto.

A ferramenta proposta no próximo capítulo preocupa-se com o nível mais próximo do desenvolvedor, o código-fonte, olhando para seu histórico e evolução, disponível na ferramenta de controle de versões, e ponderando os esforços prévios de comunicação no time de desenvolvimento.

27

Documentos relacionados