• No results found

5 Statens

5.1 Historikk og utvikling

Um repositório digital é um local onde são depositados recursos de informação e/ou metadados sobre recursos de informação (MILLER, 2011). Em processos de desen- volvimento de software, diversos recursos de informação são geralmente organizados e armazenados em repositórios digitais (IEEE, 2012a). Por exemplo, no desenvolvimento de software aberto, os repositórios de software registram conhecimento acumulado pelos participantes no desenvolvimento de software e são usados para anunciar produtos, docu- mentar produtos, prover auxílio a usuários, registrar solicitações de modificações, registrar notificações de defeitos, prover suporte a desenvolvedores, armazenar códigos de software e registrar comunicação entre participantes (DILLON; SIMMONS, 2008; HASSAN, 2008;

são armazenados códigos de software, formulários, definições de interfaces, solicitações de requisitos, notificações de defeitos, mensagens trocadas por desenvolvedores, recursos destinados a auxiliar usuários finais e a prover suporte à colaboração entre desenvolvedores.

Hassan (2008) relaciona as seguintes classes de repositórios de software: repositório histó- rico, repositório run-time e repositório de código. Os repositórios históricos armazenam recursos sobre evoluções dos projetos. Os repositórios run-time armazenam recursos sobre execuções e usos de produtos de software. Os repositórios de código armazenam códigos de software. Sun et al. (2015) relacionam as seguintes classes de repositórios de software: repositório de controle de código fonte, repositório de defeitos (bug) e arquivo (archive) de comunicação. Os repositórios de controle de código fonte armazenam histórico de desenvolvimento do software e recursos de informação sobre mudanças feitas ao código. Os repositórios de defeitos (bug) registram históricos de soluções de defeitos ou solicitações de características (feature) por usuários ou desenvolvedores. Finalmente, são registradas discussões e comunicações sobre projetos nos repositórios da classe arquivo de comunicação.

Em organizações voltadas ao desenvolvimento de software, a quantidade de tempo gasto na recuperação da informação revela frequente interação com informação. Facilitar o acesso a recursos de informação em repositórios de software contribui para aumentar a produtividade e a qualidade em projetos de software. Para serem úteis, esses repositórios precisam prover meios para recuperação da informação. Em ciclo de vida de software, técnicas de recuperação da informação podem ser usadas na solução de problemas variados. Por exemplo, é importante a recuperação da informação nos seguintes contextos: localização de requisitos de software, rastreabilidade entre recursos de informação, reuso de software, realização de medidas sobre sistemas de software (BINKLEY; LAWRIE, 2010), recuperar informação em fóruns (GOTTIPATI; LO; JIANG,2011), recuperar modelos de software ou fragmentos desses modelos (BISLIMOVSKA et al.,2012; ROBLES et al., 2012), recuperar informação sobre componente de software (BRAGA; WERNER; MATTOSO,2006;BRITO et al., 2009; ICHII et al., 2009; ILK et al., 2010; MARTINS et al.,2009; NIE; ZHONG,

2009; SILVESTRI et al.,2006; SINGH,2013; SRINIVAS; RADHAKRISHNA; RAO, 2014;

SUN; MIAO; CAO, 2006; VANDERLEI et al., 2007; YAO; ETZKORN; VIRANI, 2008;

ZHANG et al., 2012) e recuperar informação sobre defeitos (bug) em software (BORG,

2014; CAVALCANTI et al., 2014; CORREA; SUREKA,2013; RAO; MEDEIROS; KAK,

2013).

A recuperação da informação em repositórios de software é frequentemente realizada por meio da comparação entre termos em consultas e termos em descrições de software, em códigos de software ou em comentários em códigos de software. Por exemplo, motores de busca frequentemente tratam códigos como textos onde a semântica de cada termo é desconhecida. Nesse caso, a coincidência entre o termo na consulta e o termo localizado não garante a relevância do recurso recuperado (MCMILLAN et al., 2012). Tang, Liang e Vliet (2011) observam que existem dificuldades na recuperação da informação em

desenvolvimento de software e sugerem que os recursos de informação sejam indexados por meio de ontologias leves e de fácil uso. Existem diversas abordagens para indexar recursos de informação em repositórios de software, por exemplo, por meio de palavras- chave extraídas dos recursos de informação, indexação facetada ou rede semântica. Na primeira abordagem, são extraídas palavras-chave dos recursos de informação e criados índices associando-se palavras-chave aos recursos de informação. As palavras-chave usadas nas consultas são comparadas a palavras-chave usadas como índices. Essa abordagem tem a vantagem da simplicidade, mas a falta de semântica associada às palavras-chave impossibilita determinar se diferentes palavras-chave representam um mesmo conceito. Na segunda abordagem, os especialistas extraem palavras-chave de recursos de informação, as organizam em facetas integrantes de esquemas de classificação e as usam como descritores dos recursos de informação. Essa abordagem é reportada como efetiva, mas requer grande quantidade de trabalho e a avaliação das distâncias conceituais entre termos, o que depende de fatores como experiência e senso comum. Finalmente, a terceira abordagem consiste em prover representação do conhecimento por meio da definição de relações semânticas entre conceitos. Essa abordagem possibilita realizar inferências, mas geralmente apresenta as seguintes desvantagens: requer elevada quantidade de trabalho; provê suporte a domínios de aplicação restritos; e apresenta elevado nível de rigidez (OSTERTAG et al., 1992). Por fim, em projetos de software, pode ser relevante reusar componentes de software. Um componente de software é parte de sistema de software, engloba funcionalidades, interfaces e implementação. Componentes de software podem ser organizados em coleções em repositórios. Nesse contexto, para que componentes de software sejam reusados é necessário recuperá-los dos repositórios onde eles estão armazenados. Existem diversas abordagens para facilitar a recuperação de componentes de software armazenados em repositórios. Em Nidhi e Jatain(2014), são relacionadas diversas abordagens, por exemplo, classificação dos componentes segundo facetas.