• Nenhum resultado encontrado

Predição de falhas em sistemas abertos de requisição de software

N/A
N/A
Protected

Academic year: 2021

Share "Predição de falhas em sistemas abertos de requisição de software"

Copied!
52
0
0

Texto

(1)

Universidade Federal Fluminense

Instituto de Computa¸

ao

Departamento de Ciˆ

encia da Computa¸

ao

LUCAS PINHEIRO PAIM

PREDI ¸

C ˜

AO DE FALHAS EM SISTEMAS

ABERTOS DE REQUISI ¸

C ˜

AO DE SOFTWARE

Niter´

oi-RJ

2017

(2)

LUCAS PINHEIRO PAIM

PREDI ¸C ˜AO DE FALHAS EM SISTEMAS ABERTOS DE REQUISI ¸C ˜AO DE SOFTWARE

Trabalho submetido ao Curso de Bacharelado em Ciˆencia da Computa¸c˜ao da Universidade Federal Fluminense como requisito parcial para a obten¸c˜ao do t´ıtulo de Bacharel em Ciˆencia da Computa¸c˜ao.

Orientadora: Prof. Aline Marins Paes Carvalho

Niter´oi-RJ 2017

(3)
(4)
(5)

v

Agradecimentos

Agrade¸co aos meus pais Afonso e Silvia, pelos esfor¸cos realizados para me proporcionar uma boa educa¸c˜ao, sem a qual eu n˜ao teria chegado at´e aqui. Tamb´em agrade¸co aos meus irm˜aos e minha familia pelo apoio. Agrade¸co a todos meus professores pelas li¸c˜oes

e especialmente minha orientadora, Aline Paes, pelos ensinamentos e pela confian¸ca depositada em mim para realiza¸c˜ao deste trabalho.

(6)

Resumo

Sistemas de Gerenciamento de Requisi¸c˜oes online s˜ao ferramentas que podem ser utilizadas para acompanhar e apoiar o ciclo de vida de um software. ´E atrav´es dessas ferramentas que usu´arios, desenvolvedores e administradores podem reportar defeitos em um software ou podem solicitar melhorias a partir da cria¸c˜ao de uma requisi¸c˜ao. Por´em,

a quantidade de solicita¸c˜oes de um projeto pode ser muito grande e o esfor¸co para analisar todas as requisi¸c˜oes pode se tornar invi´avel. Decidir qual requisi¸c˜ao deve ser priorizada, aceita ou rejeitada se torna uma tarefa complexa. Nesse cen´ario, assumindo

que uma requisi¸c˜ao possui uma falha uma ferramenta que possa classificar o tipo falha poderia ser ´util. Uma requisi¸c˜ao com grandes chances de se tornar uma falha poderia ser

revisada com objetivo de mitigar esse risco. Esse trabalho extrai e analisa dados hist´oricos de requisi¸c˜oes de um projeto real chamado Mozilla Firefox que possuiam alguma falha e utiliza t´ecnicas e algoritmos de Aprendizado de M´aquina para constru¸c˜ao de um modelo de previs˜ao de tipos de falhas de software, a partir de requisi¸c˜oes feitas no

Sistema de Gerenciamento Online chamado Bugzilla. Al´em de atributos estruturais, como quantidade de participantes, data transcorrida entre a requisi¸c˜ao e a associa¸c˜ao de

um desenvolvedor, coment´arios feitos pelos participantes da discuss˜ao tamb´em s˜ao levados em considera¸c˜ao. Parte dos dados das requisi¸c˜oes s˜ao utilizados para treinamento do modelo e outra parte para avalia¸c˜ao. Os resultados experimentais obtidos a partir dos dados n˜ao utilizados para o treinamento s˜ao satisfat´orios e mostram

que esse modelo poderia apoiar administradores no momento de tomar decis˜oes Palavras-chave: Sistemas Abertos de Requisi¸c˜ao de Software; Aprendizado de M´aquina;

(7)

vii

Abstract

Online Feature Request Management Systems are tools used to follow and support the life cycle of a software. From such tools, the stakeholders can report bugs or create feature requests. However, the number of possible bugs and requests in a large project

can be massive and the necessary time and effort to analyze all of them may not be feasible. Deciding which request should be prioritized, accepted or rejected can turn into

a complex task. In this scenario, assuming that a request have some failure, a tool that can predict the type of a possible failure in a request would be useful. One request with

high chances of becoming a failure could be revised in order to mitigate this risk. This work extracts and analyzes historical feature requests and bug reports data of a real

project called Mozilla Firefox and then uses Machine Learning techniques and algorithms to create a model to predict software failures in a Feature Request Management System called Bugzilla. Besides structural attributes such as number of

participants in the discussion and date of an assignment, the words included at the comments are also taken into account. Part of the original data is used to train the model and the other part is used to make predictions from the induced models. The predictive experimental results are satisfactory and show that this model could be useful

to support the stakeholders to take decisions.

Keywords: Open Request Management Systems; Machine Learning; Data Mining; Text Mining; Dimensionality Reduction

(8)

Sum´

ario

Resumo vi Abstract vii Lista de Figuras x Lista de Tabelas xi 1 Introdu¸c˜ao 1

1.1 Objetivos e Contribui¸c˜oes . . . 2

1.2 Organiza¸c˜ao do Texto . . . 3

2 Fundamenta¸c˜ao Te´orica 4 2.1 Sistemas de Gerenciamento de Requisi¸c˜oes de Software . . . 4

2.2 Aprendizado de M´aquina . . . 8

2.2.1 Exemplos de Algoritmos de Aprendizado Supervisionado . . . 10

2.2.2 Redu¸c˜ao de Dimensionalidade . . . 12

2.3 Pr´e-Processamento . . . 13

2.4 Trabalhos Relacionados . . . 15

3 Predi¸c˜ao de Falhas em Projetos de Software com Atributos Estruturais e de Linguagem Natural 18 3.1 Vis˜ao Geral . . . 18

3.2 Extra¸c˜ao de Dados . . . 20

3.3 Sele¸c˜ao de Atributos . . . 24

3.3.1 Tratamento dos Atributos de Linguagem Natural . . . 25

3.4 Indu¸c˜ao do Classificador . . . 26 viii

(9)

ix 4 Resultados Experimentais 28 4.1 Base de Dados . . . 28 4.2 Metodologia Experimental . . . 29 4.3 Resultados . . . 30 4.4 Resultados Obtidos . . . 31 5 Conclus˜ao 36

(10)

Lista de Figuras

2.1 Ciclo de Vida de uma Requisi¸c˜ao. [Bugzilla Lifecycle] . . . 7

2.2 SVM . . . 10

2.3 Sigmoid . . . 12

3.1 Workflow. . . 19

3.2 Requisi¸c˜ao 171702 - Mozilla Firefox. . . 21

3.3 Hist´orico (parte 1) Requisi¸c˜ao 171702 - Mozilla Firefox. . . 23

3.4 Hist´orico (parte 2) Requisi¸c˜ao 171702 - Mozilla Firefox. . . 23

3.5 Coment´arios da Requisi¸c˜ao 171702 - Mozilla Firefox. . . 25

(11)

xi

Lista de Tabelas

4.1 Logistic Regression. . . 31 4.2 Naive Bayes. . . 32 4.3 Random Forest. . . 33 4.4 SVM. . . 33 4.5 SVMS . . . 33

4.6 Matriz Confus˜ao (M´edia) Naive Bayes PCA . . . 34

4.7 Matriz Confus˜ao (Mediana) Naive Bayes PCA . . . 34

4.8 Matriz Confus˜ao (M´edia) Naive Bayes LDA 1000 . . . 34

4.9 Matriz Confus˜ao (Mediana) Naive Bayes LDA 1000 . . . 34

4.10 Matriz Confus˜ao (M´edia) RF LDA 1000 . . . 35

(12)

Cap´ıtulo 1

Introdu¸

ao

Sistemas de Gerenciamento de Requisi¸c˜oes de Software online s˜ao ferramentas utilizadas por pessoas envolvidas em um projeto durante a evolu¸c˜ao de um sistema. A partir de tais sistemas, cujo exemplo mais utilizado e conhecido ´e o Bugzilla1, usu´arios, gerentes e

desenvolvedores podem relatar defeitos e solicitarem melhorias em um

software [Bird et al. 2008]. Os grandes projetos possuem muitas requisi¸c˜oes de software e decidir qual delas deve ser de fato implementada, e dentre estas qual ´e a mais priorit´aria, qual requer mais aten¸c˜ao e o quanto de tempo se deve analisar uma

requisi¸c˜ao acaba se tornando um problema.

Aceitar uma requisi¸c˜ao de software a partir de uma an´alise muito r´apida, sem que todos os requisitos tenham sido entendidos pode impactar negativamente o software no futuro, devido `a introdu¸c˜ao de falhas e consequente interrup¸c˜ao do desenvolvimento. Por outro

lado, uma an´alise muito longa pode ser um desperd´ıcio de tempo e recursos, principalmente se a requisi¸c˜ao for rejeitada. Esse problema se agrava em sistemas de requisi¸c˜ao online, visto que qualquer usu´ario, em qualquer lugar do mundo, pode abrir

uma solicita¸c˜ao. Prever de forma autom´atica quais requisi¸c˜oes tem mais chances de falhar poderia ajudar a tomar uma decis˜ao de aceitar/rejeitar uma requisi¸c˜ao. Essa monografia propr˜oe a constru¸c˜ao de uma ferramenta de previs˜ao de alguns tipos de

falhas em requisi¸c˜oes inseridas em um sistema de utilizando Aprendizado de M´aquina [Mitchell 1997, Abu-Mostafa, Magdon-Ismail e Lin 2012]. Para tanto, ´e essencial que dados hist´oricos sejam coletados de requisi¸c˜oes passadas, ao mesmo tempo

em que uma poss´ıvel falha seja identifica e categorizada, sem a direta interven¸c˜ao

1https : //www.bugzilla.org/

(13)

2 humana.

1.1

Objetivos e Contribui¸

oes

O objetivo principal desta monografia ´e classificar automaticamente o tipo de falha de projeto que pode surgir a partir de uma requisi¸c˜ao de software, usando somente as informa¸c˜oes j´a existentes em um sistema de gerenciamento de requisi¸c˜ao de software. Al´em dos metadados associados `a requisi¸c˜ao, tais como participantes envolvidos, tempo

decorrido entre a inclus˜ao da requisi¸c˜ao e uma resposta, consideraremos tamb´em os coment´arios inclu´ıdos no sistema, tanto pelos desenvolvedores e gerentes como tamb´em

pelos usu´arios .

Para possibilitar a constru¸c˜ao de um modelo capaz de prever falhas em projetos de requisi¸c˜ao de software a partir da an´alise dos dados de uma requisi¸c˜ao, foram implementados quatro componentes principais: (1) coleta de dados hist´oricos de requisi¸c˜oes de software e classifica¸c˜ao dos tipos de falhas encontradas; (2) convers˜ao dos meta-dados coletados para um formato process´avel por uma ferramenta de aprendizado de m´aquina (3) aplica¸c˜ao de t´ecnicas de Aprendizado de M´aquina para constru¸c˜ao de um modelo de previs˜ao de falhas futuras; (4) an´alise dos resultados obtidos atrav´es dos

testes realizados no modelo.

[Fitzgerald, Letier e Finkelstein 2012] primeiramente definiram alguns tipos de falhas, coletaram atributos a partir de meta-dados (atributos estruturais) e coment´arios das requisi¸c˜oes (atributos de palavras). Depois, os autores usaram os algoritmos Decision Table, Naive Bayes, Linear Regression and M5P-Tree algorithms para predizer o tipo de

falha de que ocorreu em uma requisi¸c˜ao de forma autom´atica. Nesse trabalho, utilizamos os mesmos tipos de falhas definidos no trabalho anterior. Al´em disso, consideramos os algoritmos que obtiveram os melhores e piores resultados, bem como

outros algoritmos que tem se mostrado ´uteis no aprendizado de m´aquina a partir de textos. Como atributos oriundos de palavras tendem a gerar valores esparsos, experimentamos dois algoritmos de redu¸c˜ao de dimensionalidade que n˜ao foram

(14)

1.2

Organiza¸

ao do Texto

Primeiramente ser˜ao explicados os conceitos e fundamentos necess´arios para o entendimento do projeto no cap´ıtulo 2. No cap´ıtulo 3 ser˜ao apresentadas as ferramentas

constru´ıdas para a extra¸c˜ao de dados e para o aprendizado do modelo de previs˜ao de falhas. Os testes realizados e os resultados obtidos ser˜ao apresentados no cap´ıtulo 4. Por

(15)

Cap´ıtulo 2

Fundamenta¸

ao Te´

orica

Nesse capitulo s˜ao abordados os conceitos e defini¸c˜oes necess´arios para o entendimento do trabalho. A Se¸c˜ao 2.1 define e apresenta um exemplo de Sistema de Gerenciamento

de Requisi¸c˜oes de Software, a saber, ´e explicado como o Bugzilla gerencia relat´orios de erros e solicita¸c˜oes de melhorias em softwares diversos. A Se¸c˜ao 2.2 apresenta uma breve

revis˜ao sobre aprendizado de m´aquina. A Se¸c˜ao 2.3 mostra as principais t´ecnicas de pr´e-processamento de texto, e que ser˜ao utilizadas nesse trabalho para tratamento dos

coment´arios de requisi¸c˜oes. Finalmente, a Se¸c˜ao 2.4 revisa os principais pontos associados ao trabalho que motivou o desenvolvimento dessa monografia, bem como

outros trabalhos relacioados ao tema explorado aqui.

2.1

Sistemas de Gerenciamento de Requisi¸

oes de

Software

Sistemas de gerenciamento de requisi¸c˜ao de software s˜ao ferramentas que gerenciam erros (bugs) e requisi¸c˜oes de mudan¸cas de um determinado projeto de software. Muitos

projetos de c´odigo aberto, tais como Firefox 1 e Tomcat 2, bem como alguns softwares

propriet´arios, utilizam tais sistemas para fazer todo gerenciamento e acompanhamento de erros e melhorias de um projeto, tendo como base as requisi¸c˜oes e sugest˜oes de

usu´arios. Atualmente, tais ferramentas s˜ao disponibilizadas online, de forma que qualquer pessoa interessada no uso, melhorias e atualiza¸c˜oes do software ´e capaz de

1

https://www.mozilla.org/en-US/firefox

2http://tomcat.apache.org/

(16)

submeter requisi¸c˜oes de novos atributos, contribuir para discuss˜oes no processo de desenvolvimento, sugerir peda¸cos de c´odigo que resolveriam erros e acompanhar as discuss˜oes e modifica¸c˜oes implementadas. Tanto desenvolvedores, como gerentes e usu´arios podem reportar e particpar da discuss˜ao em trilhas espec´ıficas. Al´em das discuss˜oes, um conjunto de meta-dados costumam ser associados com as requisi¸c˜oes, para que seja poss´ıvel recuperar facilmente informa¸c˜oes como o status da requisi¸c˜ao, o

desenvolvedor associado `a requisi¸c˜ao, outras requisi¸c˜oes relacionadas, etc [Cleland-Huang et al. 2009].

O Bugzilla3 ´e um exemplo bastante conhecido e utilizado de sistema de gerenciamento

de requisi¸c˜ao de software. A partir dele ´e poss´ıvel que qualquer pessoa, seja um usu´ario do software, desenvolvedor, ou administrador, reporte um erro ou fa¸ca uma requisi¸c˜ao de uma melhoria desejada ou necess´aria no software. Uma vez que uma requisi¸c˜ao foi feita,

todos os usu´arios podem fazer coment´arios sobre essa requisi¸c˜ao, anexar arquivos e acompanhar todo o ciclo de vida dessa requisi¸c˜ao.

Particularmente, o ciclo de vida de uma requisi¸c˜ao do Bugzilla ´e especificado de forma simplificada a seguir:

1. Um usu´ario cria uma requisi¸c˜ao reportando um erro ou pedindo uma melhoria do software. Inicialmente, essa requisi¸c˜ao fica com status de ”Unconfirmed”, pois ainda ´

e necess´aria a confirma¸c˜ao de que a situa¸c˜ao relatada pelo usu´ario pode ser v´alida. A partir desse momento, outros usu´arios podem comentar, perguntar e argumentar na requisi¸c˜ao criada.

2. Ap´os algum tempo, um usu´ario que possua um perfil com privil´egios para confirmar uma requisi¸c˜ao e que julgue, a partir das informa¸c˜oes dispon´ıveis, que o pedido feito pelo usu´ario ´e v´alido, muda o status da requisi¸c˜ao para ”New”. O status ”New”significa que a requisi¸c˜ao est´a confirmada, e nesse momento um desenvolvedor pode ser escolhido para desenvolver a altera¸c˜ao no software que (desejavelmente) resolver´a o erro ou a implementa¸c˜ao da melhoria requisitada.

3. Quando um desenvolvedor ´e escolhido, o status da requisi¸c˜ao ´e alterado para ”As-signed”.

3

(17)

6 4. Ao t´ermino do desenvolvimento da requisi¸c˜ao, o status ´e alterado para ”Resolved”.

O status ”Resolved”recebe um dos poss´ıveis tipos de resolu¸c˜ao: FIXED: A corre¸c˜ao do erro (ou melhoria) foi desenvolvida.

DUPLICATE: Existe outra requisi¸c˜ao que fez a mesma solicita¸c˜ao. WONTFIX: A corre¸c˜ao do erro (ou melhoria) n˜ao ser´a desenvolvida. WORKSFORME: N˜ao foi poss´ıvel reproduzir o erro.

INVALID: O pedido feito na requisi¸c˜ao n˜ao ´e v´alido.

5. Ap´os o desenvolvimento, s˜ao realizados testes sobre a requisi¸c˜ao desenvolvida. Caso a requisi¸c˜ao seja de fato aprovada pelos testes de qualidade e a posi¸c˜ao de imple-mentar a melhoria desenvolvida seja mantida, o status da requisi¸c˜ao passa a ser ”Verified”, e o peda¸co de c´odigo desenvolvido est´a livre para ser integrado ao soft-ware. Caso a equipe de qualidade rejeite a implementa¸c˜ao desenvolvida, a requisi¸c˜ao pode ser reaberta, possivelmente voltando para estado de em desenvolvimento. O status de ”REOPEN”ainda pode ser atingido ap´os a verifica¸c˜ao, caso a equipe de qualidade tenha falhado em verificar algum problema, ou o problema tenha apare-cido novamente no software.

6. Ap´os essa integra¸c˜ao, o bug tem seu estado final alterado para ”Closed”.

A figura ?? exibe o ciclo de vida com todos os status poss´ıveis de uma requisi¸c˜ao, bem como as transi¸c˜oes entre eles.

A comunica¸c˜ao em requisi¸c˜oes de software ´e feita atrav´es de coment´arios, e essa comunica¸c˜ao pode ter falhas como ambiguidade, inconsistˆencia e omiss˜oes. Essas falhas

de comunica¸c˜ao podem se transformar em falhas no processo de desenvolvimento de software e no produto. Uma requisi¸c˜ao de software pode ser rejeitada precocemente quando o correto era ser aceita. O tempo at´e que seja notado que a requisi¸c˜ao deveria

ter sido aceita ´e um tempo perdido, pois a requisi¸c˜ao j´a poderia ter sido resolvida e o usu´ario estaria mais satisfeito. Em contrapartida, pode ser que uma requisi¸c˜ao seja aceita precocemente sem que todos os requisitos tenham sido bem entendidos e isso cause

uma falha no futuro, fazendo com que o desenvolvimento seja interrompido, ou um bug seja introduzido. S˜ao esses os tipos de falhas que desejamos prever antes de tomar uma

(18)
(19)

8 decis˜ao de aceitar ou rejeitar uma requisi¸c˜ao de software. Como n˜ao ´e trivial realizar

essas predi¸c˜oes manualmente, ser˜ao utilizadas t´ecnicas de aprendizado de m´aquina.

2.2

Aprendizado de M´

aquina

Estamos acostumados a desenvolver programas em que, a partir de uma entrada, ´e implementado um processamento para transformar tal entrada em uma sa´ıda. Por exemplo, um programa com objetivo de somar dois valores receberia uma entrada (valores “1” e “3”), faria um processamento (somar “1” mais “3”) e produziria como sa´ıda o resultado dessa soma (“4”). A fun¸c˜ao de soma ´e conhecida e por isso ´e f´acil desenvolver esse programa. Existem diversas outras situa¸c˜oes em que a fun¸c˜ao que necessitamos ´e desconhecida. Suponha que queremos desenvolver um programa que classifique se um

email ´e spam ou n˜ao. N˜ao conhecemos nenhuma fun¸c˜ao que possa ser facilmente implementada de forma a fazer esssa determina¸c˜ao.

Assim, para construir essa fun¸c˜ao desconhecida, podemos utilizar t´ecnicas e algoritmos de aprendizado de

m´aquina [Mitchell 1997, Alpaydin 2009, Abu-Mostafa, Magdon-Ismail e Lin 2012]. Poder´ıamos ter, por exemplo, um conjunto de emails antigos e cada email com uma classifica¸c˜ao informando se um email ´e spam ou n˜ao. Esse conjunto de dados ´e chamado

de conjunto de treinamento e ele ´e composto por atributos e uma classe (ou r´otulo). Os atributos s˜ao os dados de entrada, e a classe ´e o dado de sa´ıda. Para o exemplo acima,

os atributos poderiam ser os campos assunto, corpo do email, remetente, destinat´ario, bem como cada palavra que constitui o corpo do email. A classe seria um campo informando se aquele email ´e spam ou n˜ao. O conjunto de treinamento ´e usado para

descobrir de forma autom´atica a fun¸c˜ao desconhecida. Para medir o desempenho da fun¸c˜ao aprendida, ´e necess´ario usar outro conjunto de dados, com emails que n˜ao perten¸cam ao conjunto de treinamento, chamado de conjunto de testes. J´a utilizamos

softwares que possuem aprendizado de m´aquina frequentemente no nosso dia a dia e muitas vezes n˜ao percebemos. Toda vez que fazemos uma busca no Google, existe um algoritmo de aprendizado que aprendeu a classificar p´aginas web. Quando entramos no

nosso email, h´a um filtro que aprendeu a identificar se um email ´e spam ou n˜ao. Formalmente, aprendizado de m´aquina ´e definido a seguir [Mitchell 1997]:

(20)

“Um programa aprende a partir de uma experincia E, com rela¸c˜ao a uma classe de tarefas T , com medida de desempenho P , se seu desempenho em T , medido por P ,

melhora com E.”

Usando o exemplo do programa para classificar um email como spam ou n˜ao-spam e a defini¸c˜ao acima, temos:

• Tarefa T: Classificar emails como spam ou n˜ao-spam.

• Medida de desempenho: Percentagem de emails classificados corretamente.

• Experiˆencia de treinamento: conjunto de dados com emails antigos contendo a clas-sifica¸c˜ao se um email ´e spam ou n˜ao.

As abordagens existentes de Aprendizado de M´aquina s˜ao classificadas em Aprendizado supervisionado, Aprendizado n˜ao-supervisionado e Aprendizado por refor¸co. Em aprendizado de m´aquina supervisionado, tanto os valores dos atributos como o r´otulo do

exemplo s˜ao fornecidos de antem˜ao. Os algoritmos supervisionados podem ser de regress˜ao ou de classifica¸c˜ao. Os algoritmos supervisionados de regress˜ao tˆem por objetivo descobrir uma fun¸c˜ao cuja sa´ıda n˜ao ´e discreta. Suponha que queremos aprender a estimar o valor de uma casa a partir do seu tamanho. Ter´ıamos um conjunto

de treinamento contendo dados hist´oricos de diversas casas com diversos tamanhos e seus respectivos valores. O trabalho do algoritmo seria criar uma fun¸c˜ao h, tal que, dado

um valor x (tamanho da casa), ter´ıamos uma resposta y (valor da casa). Os algoritmos de classifica¸c˜ao tˆem por objetivo descobrir uma fun¸c˜ao cuja sa´ıda ´e discreta. Como exemplo de algoritmo de classifica¸c˜ao temos um programa para classificar se um email ´e spam ou n˜ao. Nesse caso, ter´ıamos um conjunto de treinamento contendo emails antigos com os r´otulos de spam ou n˜ao-spam. O objetivo do algoritmo ´e construir uma fun¸c˜ao

que classifique novos emails como spam ou n˜ao-spam.

No aprendizado n˜ao-supervisionado n˜ao s˜ao especificados r´otulos para os exemplos no conjunto de dados. O algoritmo analisa os exemplos fornecidos e tenta agrup´a-los de alguma maneira. Suponha, por exemplo, uma empresa que tenha um banco de dados de informa¸c˜oes sobre clientes. O objetivo do algoritmo seria agrupar os clientes em diversos

segmentos. O conjunto de treinamento n˜ao contem nenhum r´otulo informando qual cliente pertence a qual grupo, mas mesmo assim o algoritmo faz um agrupamento os

(21)

10 clientes. O algoritmo K-means ´e um exemplo de algoritmo de aprendizado

n˜ao-supervisionados.

Finalmente, no aprendizado de m´aquina por refor¸co os agentes devem aprender o comportamento ideal a partir de feedbacks positivos e negativos. Por exemplo, uma

gorjeta alta para um agente taxista pode significar que o agente fez alguma a¸c˜ao positiva. Em contrapartida um feeback negativo, como a ausˆencia de uma gorjeta pode

significar que o agente fez algo errado ou deixou de fazer alguma a¸c˜ao.

2.2.1

Exemplos de Algoritmos de Aprendizado Supervisionado

Neste trabalho, utilizamos de regras espec´ıficas para rotular os exemplos. Assim, os algoritmos utilizados no trabalho pertencem a categoria de aprendizado supervisionado.

Dessa forma, explicamos com mais detalhes os algoritmos que ser˜ao experimentados no cap´ıtulo 4.

Figura 2.2: SVM

O SVM [Scholkopf e Smola 2001, Cortes e Vapnik 1995] ´e uma t´ecnica de classifica¸c˜ao supervisionada baseada em fun¸c˜oes de kernel. Suponha um ambiente bidimensional em que desejamos separar duas classes distintas (circulos e quadrados) conforme ilustrado na Figura 2.2. Existem diversas maneiras de realizar essa separa¸c˜ao, mas o algoritmo busca

(22)

um hiperplano ´otimo que separa essas duas classes. O hiperplano ´otimo ´e o hiperplano de separa¸c˜ao com margem m´axima. A margem m´axima ´e obtida pela distˆancia entre o

hiperplano e os vetores mais pr´oximos a ele, que s˜ao chamados de vetores suportes. Para encontrar os hiperplanos, ´e necess´ario encontrar os pesos que maximizam a margem entre as classes. Em um exemplo com duas classes, temos as equa¸c˜oes 2.1 e 2.2,

no caso de uma fun¸c˜ao de kernel linear.

wT ∗ xt + w0 ≥ +1 f or rt = +1 (2.1) wT ∗ xt + w0 ≤ −1 f or rt = −1 (2.2) onde wT ´e um vetor de pesos, xT ´e o vetor de atributos, wo ´e o valor do bias e rt ´e o

r´otulo para a classes. O crit´erio tamb´em pode ser relaxado para permitir que alguns exemplos sejam classificados incorretamente, aceitando ent˜ao uma boa margem que n˜ao

necessariamente ´e a ´otima (e que ´e mais dif´ıcil de encontrar). Al´e disso, ´e importante ressaltar que as f´ormulas acima induzem uma separa¸c˜ao linear entre os dados. Quando n˜ao ´e esse o caso, ´e usado um truque de kernel, para transformar o espa¸co de atributos.

Random Forest [Breiman 2001] ´e uma t´ecnica de classifica¸c˜ao supervisionada de aprendizado de m´aquina baseada em diversas ´arvores de decis˜ao. A partir do conjunto

de treinamento inicial s˜ao constru´ıdos diversos subconjuntos aleat´orios, contendo os atributos e seus respectivos r´otulos. Para cada subconjunto criado, uma ´arvore de decis˜ao distinta ´e induzida a partir dos dados. No momento de avalia¸c˜ao, os dados a

serem classificados devem passar por todas ´arvores de decis˜ao e cada uma ter´a uma resposta (diferente ou n˜ao). ´E feito um ranking com as respostas dadas pelas ´arvores de

decis˜ao e aquela resposta com maior valor, ser´a a resposta final.

Naive Bayes ´e uma t´ecnica de classifica¸c˜ao supervisionada de Aprendizado de M´aquina baseada no Teorema de Bayes4. O algoritmo assume que os valores dos atributos s˜ao

independentes dos outros valores. Uma fruta, por exemplo, pode ser classificada como uma melancia se for grande, com exterior de cor verde e interior de cor vermelho. O classificador Naive Bayes considera que esses trˆes atributos (tamanho, cor externa, cor interna) contribuem independentemente para a probabilidade da fruta ser uma melancia. A regress˜ao log´ıstica ´e um tipo de modelo de classifica¸c˜ao probabil´ıstico que possui como

objetivo estimar o valor de classe de uma vari´avel dependente a partir de outras

4

(23)

12 vari´aveis discretas e/ou cont´ınuas [Hosmer 2000]. ´E baseada na fun¸c˜ao sigmoide, ilustrada na figura 2.3, a qual varia entre 0 e 1, logo, indica a probabilidade de algo

acontecer ou n˜ao acontecer.

Figura 2.3: Sigmoid

2.2.2

Redu¸

ao de Dimensionalidade

Em diversas situa¸c˜oes, a quantidade de atributos associados a um exemplo ´e maior do que um algoritmo de aprendizado pode suportar. Outro problema associado `a quantidade de atributos vem do fato que muitas vezes estes n˜ao s˜ao relevantes o suficiente para serem adotados na fun¸c˜ao a ser aprendida. Por´em, ´e dif´ıcil determinar de

antem˜ao e a olho nu quais atributos deveriam ser removidos, de forma a ainda ter uma amostra significativa do problema. Nesses casos, podem ser utilizadas t´ecnicas de

redu¸c˜ao de dimensionalidade [Roweis e Saul 2000]. Nesse trabalho, inclu´ımos a possibilidade de utiliza¸c˜ao de duas t´ecnicas distintas, a saber, a An´alise de Componentes

Principais (PCA) [Jolliffe 2002] e a An´alise de Discriminantes

Lineares(LDA) [Izenman 2013]. A an´alise de Componentes Principais ´e um m´etodo estat´ıstico muito usado para reduzir o n´umero de atributos de um conjunto de dados. O

procedimento usa uma transforma¸c˜ao ortogonal para converter atributos possivelmente correlacionados em um conjunto de atributos linearmente n˜ao correlacionados. Estes

´

ultimos s˜ao chamados de componentes principais. Os atributos que possuem pouca variˆancia entre todos os dados n˜ao tem muita utilidade, por isso o PCA busca por

(24)

atributos que possuam grande variˆancia entre um conjunto de atributos. Novos atributos s˜ao criados atrav´es da combina¸c˜ao dos atributos j´a existentes.

Assim como o PCA, o LDA tamb´em ´e uma transforma¸c˜ao linear usada para redu¸c˜ao de dimensionalidade. No entando, o LDA ´e supervisionado e por isso procura a maximizar

a variˆancia que melhor separa as classes.

2.3

Pr´

e-Processamento

Durante o ciclo de vida de uma requisi¸c˜ao diversos coment´arios s˜ao feitos. Quando o usu´ario reporta um erro, ou sugere uma melhoria, ´e atrav´es daquele primeiro coment´ario

que as pessoas envolvidas no projeto v˜ao tentar interpretar, entender e julgar, a partir das informa¸c˜oes conhecidas, se o reporte do usu´ario ´e valido ou n˜ao. De certa forma, s˜ao as informa¸c˜oes contidas nos coment´arios que possuem a justificativa de uma determinada requisi¸c˜ao ter sido aceita ou rejeitada. ´E prov´avel que falhas nessa comunica¸c˜ao gerem

falhas futuras no software. [Fitzgerald, Letier e Finkelstein 2012] adicionaram ao seu conjunto de treinamento alguns atributos relacionado aos coment´arios. Entendemos que

as informa¸c˜oes contidas nos coment´arios s˜ao importantes e, quando adicionadas como atributos ao nosso conjunto de treinamento podem gerar resultados melhores. Entretanto, para que os textos dos coment´arios possam se tornar atributos do conjunto

de treinamento, ´e necess´ario realizar algumas t´ecnicas de pr´e-processamento de texto. Essas t´ecnicas envolvem a limpeza dos dados, para que apenas as palavras relevantes

sejam consideradas e a convers˜ao dos dados para atributos, usando alguma t´enica espec´ıfica, por exemplo Bag of Words [Nahm e Mooney 2002]. A seguir, especificamos

as t´ecnicas usadas nesse trabalho. • Tratamento de marca¸c˜ao de HTMLs

Tags de marca¸c˜ao HTML/XML e caracteres especiais n˜ao s˜ao relevantes para os algoritmos de aprendizado de m´aquina, por isso ´e importante realizar uma limpeza para remo¸c˜ao desses itens irrelevantes antes de realizar o processamento.

• Tokeniza¸c˜ao: A tokeniza¸c˜ao ´e o primeiro est´agio do pr´e-processamento de um texto. Nele, o texto representado por uma seq¨uˆencia de caracteres ´e agrupado em um pri-meiro n´ıvel segundo fronteiras delimitadas por caracteres primitivos como espa¸co (“

(25)

14 ”), v´ırgula, ponto etc. Cada grupo de caracteres estabelecido no primeiro n´ıvel ´e chamado de token. A seq¨uˆencia desses grupos, por sua vez, ´e chamada de tokens-tream. Tanto os grupos de caracteres, como os delimitadores se tornam tokens na nova seq¨uˆencia, o ´unico caractere descartado ´e o espa¸co em branco. [Aranha 2007] Exemplo: O jogador, que est´a de camisa verde, marcou o gol da vit´oria.

Tokens: [O] [jogador] [,] [que] [est´a] [de] [camisa] [verde] [,] [marcou] [o] [gol] [da] [vit´oria] [.]

• Remo¸c˜ao de Stopwords: Consiste em eliminar palavras que n˜ao devem ser conside-radas no texto, chamadas de stopwords, pois elas n˜ao apresentam relevˆancia para o processo de classifica¸c˜ao. Normalmente, as stopwords s˜ao artigos, pronomes e outras classes de palavras auxiliares.

• Lematiza¸c˜ao: Esse processo consiste em uma normaliza¸c˜ao lingu´ıstica para reduzir as palavras de um texto para uma forma mais simples, removendo prefixos e sufixos e transformando conjuga¸c˜oes verbais para infinitivo. Por exemplo, as palavras gato, gata, gatos, gatas s˜ao todas formas do mesmo lema: gato.

• Sinonimia: sinˆonimos s˜ao palavras bastante diferentes que contˆem o mesmo signi-ficado. Assim, uma t´ecnica utilizada em pr´e-processamento de textos consiste em reduzir v´arios sinˆonimos para um ´unico representante. Como existem diversos tra-balhos apontando a dificuldade de obter sinˆonimos exatos, com alguns linguistas at´e mesmo afirmando que estes n˜ao existem, pois nem sempre guardam o mesmo significado, optamos por n˜ao usar essa t´ecnica no presente trabalho.

Para converter as palavras oriundas da limpeza de dados em atributos, usamos nesse trabalho a t´ecnica de Bag of Words [Zhang, Jin e Zhou 2010]. Essa ´e uma t´ecnica para

classifica¸c˜ao de textos que considera senten¸cas e documentos como um conjunto das palavras que os formam. Assim, as palavras passam a ser o vetor de atributos e alguma medida associada a cada uma delas ser´a o valor. Comumente, s˜ao utilizadas as seguintes

medidas de valora¸c˜ao das palavras:

• Booleano: essa medida usa uma representa¸c˜ao bin´aria como valor dos atributos. Quando a palavra est´a presente no documento, o valor do atributo ´e zero, e caso contr´ario ´e 1.

(26)

• Frequˆencia do termo: nesse caso o valor associado a uma palavra ser´a a quantidade de vezes que ela aparece em um exemplo.

• TF-IDF (term frequency-inverse document frequency): existem algumas palavras que s˜ao muito utilizadas em todos os textos e geralmente n˜ao tˆem tanta relevˆancia

para a classifica¸c˜ao de um documento. Assim, a medida TD-IDF [Baeza-Yates, Ribeiro-Neto et al. 1999] aumenta o valor de uma palavra proporcionalmente `a frequˆencia dessa palavra em

um documento, mas diminui o valor dela de acordo com a frequˆencia em que essa palavra aparece em todos os textos, ou seja, a frequˆencia do termo no exemplo ´e multiplicada por um fator de pondera¸c˜ao. A equa¸c˜ao ?? mostra como esse valor ´e computado tf idf (pi, ej) = tf (pi, ej) × idf (pi) (2.3) idf (pi) = log N #epi (2.4) onde pi´e uma palavra, ejum exemplo, tf(pi, ej) ´e a quantidade de vezes que a palavra

pi aparece no exemplo ej, N ´e a quantidade de exemplos e #epi ´e a quantidade de

exemplos em que a palavra pi aparece.

2.4

Trabalhos Relacionados

[Fitzgerald, Letier e Finkelstein 2012] prop˜oem a constru¸c˜ao de um modelo de previs˜ao de falhas em requisi¸c˜oes de software. Uma requisi¸c˜ao de software pode ser um relato de

um erro ou uma solicita¸c˜ao de melhoria de software. O autor definiu cinco tipos de falhas comuns que acontecem no processo de desenvolvimento de software e criou um

extrator de dados em PHP para colher informa¸c˜oes das requisi¸c˜oes de software de grandes projetos (Apache, Eclipse, Firefox, KDE, Netbeans, Thunderbird, e Wikimedia)

que utilizam o sistema de gerenciamento de requisi¸c˜oes Bugzilla. A partir dos dados extra´ıdos ´e feita uma classifica¸c˜ao das requisi¸c˜oes que possuem falhas de software, baseadas nas cinco tipos de falhas diferentes sugeridas pelo autor. A id´eia ´e criar um modelo de previs˜ao de falhas em requisi¸c˜oes a partir da an´alise de dados hist´oricos de requisi¸c˜oes antigas. Esse modelo aprende com os dados antigos e quando recebe novos

(27)

16 dados de uma requisi¸c˜ao poderia informar a probabilidade de um certo tipo de falha ocorrer baseado no seu aprendizado. Abaixo seguem as descri¸c˜oes dos tipos de falhas

identificadas pelo autor:

• Reported product failure: Quando uma requisi¸c˜ao foi aceita como v´alida, foi de-senvolvida, integrada, mas ap´os algum tempo existe pelo menos um bug report confirmado associado `aquela requisi¸c˜ao.

• Abandoned Implementation: Quando uma feature request foi aceita como v´alida, associada a um desenvolvedor, um peda¸co do c´odigo foi enviado `a requisi¸c˜ao, mas o desenvolvimento daquela feature foi abandonada antes da feature ser integrada ao produto, o que significa que tempo e dinheiro foram desperdi¸cados analisando e desenvolvendo uma feature que foi abandonada.

• Rejection Reversal: Quando uma feature request ´e rejeitada, mas algum tempo depois ela ´e aceita. Essa feature n˜ao deveria ter sido rejeitada. Nesse caso, o tempo desde que a feature foi rejeitada e depois foi aceita ´e perdido. Esse tempo perdido poss´ıvelmente poderia ter sido usado para desenvolver aquela feature, integrado mais rapidamente ao produto e o cliente estaria satisfeito mais rapidamente.

• Stalled development: Quando uma requisi¸c˜ao ´e aceita, mas fica muito tempo sem nenhuma mudan¸ca de status. O tempo em quest˜ao ´e parametriz´avel. Esse tempo de estagna¸c˜ao ´e um tempo perdido em que a feature poderia j´a estar integrada no software ou marcada como uma feature que n˜ao ser´a implementada (WONTFIX). • Removed Feature: Quando uma requisi¸c˜ao ´e aceita, desenvolvida, integrada ao

pro-duto, mas ap´os algum tempo essa feature ´e removida. Foi gasto tempo e dinheiro em discuss˜oes, especifica¸c˜oes e desenvolvimento de uma feature que n˜ao precisava ter sido desenvolvida.

Um ponto a ser observado ´e que para que as falhas sejam identificadas o mais fielmente poss´ıvel `a realidade, ´e necess´ario que os usu´arios dos sistemas de gerenciamento de requisi¸c˜ao de software possuam uma cultura de atualizar os sistemas constantemente. Quanto mais atualiza¸c˜oes corretas e constantes forem feitas nos posts de um projeto,

(28)

Existem outros trabalhos com foco na predi¸c˜ao de falhas de software usando Aprendizado de M´aquina. [Fenton e Neil 1999] fazem uma an´alise sobre a predi¸c˜ao de

falhas de software. Eles analisam v´arias abordagens para detectar se o software ir´a falhar em tempo de execu¸c˜ao. Isso poderia complementar nosso trabalho adicionando

detec¸c˜ao de falhas de tempo de execu¸c˜ao e nos daria uma outra perspectiva sobre porque uma falha pode ocorrer. A abordagem deles tamb´em nos daria um motivo para

uma requisi¸c˜ao n˜ao ser resolvida quando uma futura falha ´e detectada. O artigo ”An Analytical Approach to Architecture-Based Software Reliability Prediction” [Gokhale et al. 1998] aborda o mesmo problema. Ele tenta ver no futuro se

um componente ir´a falhar. A abordagem do autor apresenta uma contribui¸c˜ao interessante para predi¸c˜ao de falhas em tempo de execu¸c˜ao. Isso significa que o tempo gasto naquele componente pode ser usado para sinalizar quando ele falhou. Ele tamb´em

explora outras caracteristicas das falhas que seriam ´uteis observar, como a cobertura de testes no c´odigo. Isso significa que n˜ao h´a componentes suficientes testados no software. Se um componente tem uma baixa cobertura de testes, ele tem mais chance de ter uma

falha em tempo de execu¸c˜ao.

Por ´ultimo, [Procaccino et al. 2002]tentam encontrar o que leva um desenvolvimento de software a falhar. No artigo, eles formulam quais features ou situa¸c˜oes que influenciam

no sucesso, desde o envolvimento de clientes `a defini¸c˜ao do escopo, eles tentam medir sua influˆencia na falha do software. Isso poderia ser usado como uma feature extra no

(29)

Cap´ıtulo 3

Predi¸

ao de Falhas em Projetos de

Software com Atributos Estruturais

e de Linguagem Natural

Nesse capitulo ser˜ao introduzidos os detalhes referentes `a implementa¸c˜ao do arcabou¸co desenvolvido para a predi¸c˜ao de falhas de projeto associadas a requisi¸c˜oes de software. Em linhas gerais, s˜ao necess´arios trˆes processos principais: (1) a coleta dos meta-dados

presentes em uma requisi¸c˜ao com falha, a partir do servi¸co de gerenciamento de requisi¸c˜oes; (2) a convers˜ao e tratamento dos dados brutos para uma base de dados process´avel por uma ferramenta de aprendizado de m´aquina, bem como a defini¸c˜ao da classe de falha; e (3) o processo de treinamento e valida¸c˜ao dos modelos, gerados a partir das bases de dados. Nesse cap´ıtulo, apresentamos a ferramenta desenvolvida, come¸cando

pela vis˜ao geral dos processos utilizados na mesma, e seguindo para uma explica¸c˜ao detalhada de cada componente.

3.1

Vis˜

ao Geral

A Figura 3.1 ilustra em alto n´ıvel os componentes implementados e utilizados no sistema, bem como a comunica¸c˜ao existente entre eles.

Os dados de requisi¸c˜oes de software s˜ao obtidos do Bugzilla1 em formato XML/JSON

por um programa chamado Extrator. Esses dados s˜ao analisados e um conjunto com

1

https://bugzilla.org/

(30)
(31)

20 informa¸c˜oes a respeito das requisi¸c˜oes que apresentaram algum tipo de falha ´e gerado.

Esse conjunto passa por uma limpeza de informa¸c˜oes, de forma a extrair os atributos que foram identicados como relevante em [Fitzgerald, Letier e Finkelstein 2012], bem como o tratamento dos atributos de linguagem natural. Ent˜ao, esse dataset pode ou n˜ao

passar por um processo de redu¸c˜ao de dimensionalidade. Por fim o dataset ´e divido em folds, onde uma parte do conjunto ´e utilizada para treinamento e a outra parte ´e

utilizada para valida¸c˜ao.

3.2

Extra¸

ao de Dados

A extra¸c˜ao dos dados das requisi¸c˜oes de software ´e feita por um extrator desenvolvido na linguagem Java. Esse programa extrator faz uma consulta em uma API [Bugzilla REST API] passando parˆametros espec´ıficos para cada tipo de falha. O resultado dessa consulta s˜ao as requisi¸c˜oes candidatas a possuirem uma falha. Essas requisi¸c˜oes foram denominadas de candidatas pois nesse momento ainda n˜ao ´e poss´ıvel garantir que h´a uma falha. Para cada requisi¸c˜ao candidata ´e feita uma an´alise no campo

hist´orico e algumas regras s˜ao aplicadas para garantir que a requisi¸c˜ao analisada possui uma falha.

A Figura 3.2 ilustra a p´agina principal de uma requisi¸c˜ao de software referente ao projeto Mozilla Firefox.

Para todos tipos de falhas s˜ao utilizados os seguintes parˆametros: • Data inicial, referente `a data de cria¸c˜ao do bug.

• Data Final, referente `a data de cria¸c˜ao do bug. • Produto, referente ao nome do software.

Os demais parˆametros variam de acordo com o tipo de falha que se deseja buscar, conforme a descri¸c˜ao abaixo:

• Parˆametros para Abandoned Implementation: campo status com valor RESOLVED. campo resolution com valor WONTFIX.

(32)

Figura 3.2: Requisi¸c˜ao 171702 - Mozilla Firefox. • Parˆametros para Product Failure:

campo status com valor RESOLVED. campo resolution com valor FIXED. campo depends on n˜ao vazio.

• Parˆametros Rejection Reversal:

campo status com valor VERIFIED. campo resolution com valor FIXED. • Parˆametros Removed Feature:

campo status com valor RESOLVED. campo resolution com valor WONTFIX. • Parˆametros Stalled Development:

campo status com valor ASSIGNED.

O retorno dessa consulta ´e um XML com uma lista dos IDs das requisi¸c˜oes que satisfazem os crit´erios informados. Para cada ID dessa lista, ´e feito uma nova requisi¸c˜ao

(33)

22 As regras a seguir s˜ao verificadas para garantir que uma requisi¸c˜ao possui uma falha. ´E

importante ressaltar que a ordem das regras ´e importante, ou seja, para que um determinado tipo de falha ocorra, os eventos abaixo devem ocorrer na ordem descrita.

• Abandoned Implementation

O campo status possuiu o valor ASSIGNED em algum momento. Houve uma mudan¸ca no campo resolution para WONTFIX. Exemplo: [Abandoned Implementation Failure Example]. • Product Failure

O campo resolution possuiu o valor FIXED em algum momento. O campo depends on foi adicionado.

Exemplo: [Product Failure Example]. • Rejection Reversal

O campo resolution possuiu o valor WONFIX em algum momento. O campo resolution mudou para FIXED.

O campo status mudou de RESOLVED para VERIFIED. Exemplo: [Rejection Reversal Failure Example].

• Removed Feature

O campo resolution possuiu o valor FIXED em algum momento. O campo status mudou de RESOLVED para REOPENED. O campo resolution mudou para WONTFIX.

Exemplo: [Removed Feature Failure Example]. • Stalled Development

O campo status possuiu o valor ASSIGNED em algum momento.

O campo status n˜ao foi alterado por um periodo maior ou igual a 365 dias. Exemplo: [Stalled Development Failure Example].

(34)

As Figuras 3.3 e 3.4 ilustram o hist´orico da requisi¸c˜ao 171702 do projeto Mozilla Firefox. Perceba que em 30-09-2002 o campo resolution teve seu valor alterado para WONTFIX.

Depois, em 20-10-2002 o campo resolution teve seu valor alterado para FIXED e em 17-07-2003 o campo status teve seu valor alterado para VERIFIED. De acordo com

nossas regras estabelecidas, essa sequˆencia de a¸c˜oes caracteriza a falha Rejection Reversal.

Figura 3.3: Hist´orico (parte 1) Requisi¸c˜ao 171702 - Mozilla Firefox.

(35)

24

3.3

Sele¸

ao de Atributos

Uma vez confirmado que uma requisi¸c˜ao possui um tipo de falha, ´e feita uma nova requisi¸c˜ao na API [Bugzilla REST API], solicitando todas as informa¸c˜oes da requisi¸c˜ao,

inclusive os coment´arios. A partir de todas essas informa¸c˜oes, s˜ao constru´ıdos os atributos descritos abaixo, que chamamos de estruturais, para distinguir dos atributos

de linguagem:

• bugId: n´umero que identifica uma requisi¸c˜ao de software.

• feature1: n´umero de participantes na discuss˜ao (a quantidade de usu´arios, desen-volvedores ou gerentes que fizeram algum coment´ario).

• feature2: n´umero total de envolvidos (a quantidade de elementos no conjunto uni˜ao dos participantes na discuss˜ao e dos integrantes da CC − list).

• feature3: n´umero de participantes (a quantidade de elementos no conjunto uni˜ao dos participantes na discuss˜ao e de quem recebeu a atribui¸c˜ao de desenvolver o software (campo assigned − to da CC − list)).

• feature4 n´umero de posts feitos pela pessoa que iniciou a requisi¸c˜ao da melhoria ou reparo.

• feature5: porcentagem de posts feitos pela pessoa que iniciou a requisi¸c˜ao da me-lhoria ou reparo.

• feature6: n´umero de posts feitos pela pessoa que recebeu a atribui¸c˜ao de desenvolver a requisi¸c˜ao.

• feature7: porcentagem de posts feitos pela pessoa que recebeu a atribui¸c˜ao de de-senvolver a requisi¸c˜ao.

• feature8: n´umero total de posts (coment´arios). • feature9: m´edia de palavras em cada post.

• feature10: n´umero total de palavras em toda a discuss˜ao.

(36)

• feature12: m´edia do tempo decorrido entre os coment´arios. • feature13: maior tempo decorrido entre os comen´arios.

• feature14: tempo total decorrido do in´ıcio ao fim da discuss˜ao. ´

E poss´ıvel notar o campo CC − list na imagem 3.2.

3.3.1

Tratamento dos Atributos de Linguagem Natural

A figura 3.5 ilustra alguns coment´arios realizados na requisi¸c˜ao 171702 do projeto Mozilla Firefox.

Figura 3.5: Coment´arios da Requisi¸c˜ao 171702 - Mozilla Firefox.

Todos os coment´arios de uma requisi¸c˜ao passam por um tratamento para que seja poss´ıvel que palavras se tornem atributos do dataset. Esse processo de limpeza ´e feito por um script escrito na linguagem Python que inicialmente remove caracteres especiais

e marca¸c˜oes de HTML. A seguir, s˜ao executados os processos de tokeniza¸c˜ao, lematiza¸c˜ao e remo¸c˜ao de stop words, usando a ferramenta escrita em Python Natural

Language Toolkit (NLTK) [Bird 2006]. Por ´ultimo, para que seja poss´ıvel usar a abordagem de Bag of Words, ´e executada a vetoriza¸c˜ao de palavras usando a classe CountV ectorizer presente na biblioteca Scikit-Learn [Pedregosa et al. 2011]. Ao final,

(37)

26 s˜ao criados novos atributos contendo a frequˆencia de cada palavra considerada como

relevante pelo passo anterior.

Abaixo s˜ao descritos os passos de pr´e-processamento de texto em alto n´ıvel: • remover marca¸c˜oes HTML

• remover carateres especiais • lematizar palavras

• remover stop words

• criar atributos bag of words

3.4

Indu¸

ao do Classificador

Redu¸c˜ao de Dimensionalidade Como as palavras dos coment´arios das requisi¸c˜oes de software s˜ao transformados em atributos, ´e poss´ıvel que o conjunto de treinamento fique com um n´umero muito alto de atributos. Assim, antes da indu¸c˜ao do classificador

propriamente dito, foram utilizadas as duas t´ecnicas de redu¸c˜ao de dimensionalidade abaixo, com o objetivo de selecionar os atributos mais importantes para o treinamento e descartar os menos importantes. Ambos os m´etodos foram executados a partir do kit de ferramentas de aprendizado de m´aquina chamado SciKit- Learn [Pedregosa et al. 2011]. • Principal component analysis (PCA), presente no m´odulo decomposition do

SciKit-Learn.

• Linear discriminant analysis (LDA), presente no m´odulo discriminant analysis do SciKit-Learn.

Finalmente, os classificadores podem ser gerados a partir do conjunto de dados reduzido pelo PCA ou LDA, ou ainda sem o processo de redu¸c˜ao, usando o conjunto original.

Para a execu¸c˜ao do classificador, ´e utilizado o m´etodo de valida¸c˜ao cruzada estratificada [Kohavi et al. 1995], que mant´em a propor¸c˜ao de exemplos de cada classe nos folds. A separa¸c˜ao dos conjuntos ´e feita antecipadamente `a indu¸c˜ao do classificador,

de forma a comparar corretamente os mesmos conjuntos de valida¸c˜ao. Para tanto, s˜ao utilizados m´etodos da classe StratifiedKFold, presente no pacote model selection,

(38)

Classificadores Finalmente, os modelos podem ser induzidos usando algoritmos de aprendizado supervisionados. ´E importante ressaltar que o algoritmo de classifica¸c˜ao deve conseguir lidar com m´ultiplas classes (e n˜ao apenas uma classe bin´aria), pois temos 5 poss´ıveis falhas como r´otulo. Os algoritmos cujos resultados ser˜ao exibidos no pr´oximo

cap´ıtulo e suas respectivas implementa¸c˜oes no Sci kit Learn s˜ao: • Support Vector Machines, presente no pacote sklearn.

• Random Forest, presente no pacote sklearn.ensemble. • Naive Bayes, presente no pacote sklearn.naive bayes.

• Logistic Regression, presente no pacote sklearn.linear mode.

As implementa¸c˜oes dos algoritmos de classifica¸c˜ao tamb´em foram utilizadas a partir do Kit de ferramentas Scikit-Learn. ´E importante salientar que a escolha dos algoritmos se

deu pelas seguintes raz˜oes: (1) o estudo anterior [Fitzgerald, Letier e Finkelstein 2012] apresentou os melhores resultados com o algoritmo Logistic Regression, considerando,

al´em dele, um algoritmo que aprende uma ´arvore de decis˜ao, outro que aprende uma tabela de decis˜ao e o Naive Bayes. Os dois ´ultimos casos apresentaram os piores resultados. Assim, consideramos o algoritmo que se comportou melhor no estudo anterior, mas tamb´em o que se comportou pior, pois gostar´ıamos de ver seus resultados com um m´etodo de redu¸c˜ao de dimensionalidade. ´E importante ressaltar que o m´etodo de Bag-of-Words tem uma tendˆencia a gerar tabelas muito esparsas, pois muitas palavras aparecer˜ao apenas poucas vezes em alguns exemplos, o que pode prejudicar os resultados do algoritmo. Dessa forma, ao usar o m´etodo PCA, que combina atributos com pouca variˆancia, ´e poss´ıvel que a esparsidade seja diminu´ıda e os resultados fiquem melhores. Al´em do Naive Bayes e do Logistic Regression, selecionamos o algoritmo indutor de

SVMs, visto que esta ´e uma das t´ecnicas que apresenta melhores resultados em problemas de classifica¸c˜ao, e o Random Forest, por ser um m´etodo que combina v´arias classificadores (´arvores de decis˜ao), na tentativa de produzir um resultado final melhor.

(39)

Cap´ıtulo 4

Resultados Experimentais

Nesse cap´ıtulo ´e apresentada uma prova de conceito sobre a aplica¸c˜ao desenvolvida. Na se¸c˜ao 4.1 ser˜ao mostrados os parˆametros escolhidos e amostras obtidas. Na se¸c˜ao 4.2 ser˜ao mostradas as t´ecnicas de Aprendizado de M´aquina que foram aplicadas e na se¸c˜ao

4.3 ser˜ao mostrados os resultados obtidos.

4.1

Base de Dados

O sistema de requisi¸c˜ao utilizado para fazer a coleta foi o Bugzilla. Como queremos verificar o desempenho da predi¸c˜ao em requisi¸c˜oes futuras, coletamos os dados at´e a data da rejei¸c˜ao, no caso da falha de Rejection Reversal e at´e a data em que o software foi associado para desenvolvimento, no caso das demais falhas. Os dados de requisi¸c˜oes de software foram obtidos do projeto Mozilla Firefox1. A motiva¸c˜ao para escolha desse

projeto ´e o alto n´umero de requisi¸c˜oes de software dispon´ıveis. Os seguintes crit´erios de filtro foram utilizados para a busca dos dados:

• Produto: Firefox

• Data inicial: 01/01/2001 • Data final: 31/12/2016

As regras citadas na se¸c˜ao 3.2 para determinar se uma requisi¸c˜ao possui uma falha foram aplicadas ao resultado da consulta e abaixo ´e apresentada uma rela¸c˜ao entre os

tipos de falha e a quantidade de falhas obtidas:

1https://bugzilla.mozilla.org/

(40)

• Abandoned Implemenation (216) • Product Failure (1430)

• Rejection Reversal (50) • Removed Feature (16) • Stalled Development (153)

Para cada categoria de falha foi gerado um arquivo com todos os atributos mostrados na se¸c˜ao 3.3. A partir desse arquivo com todos atributos ´e feita a limpeza dos coment´arios

para que sejam gerados os atributos referentes `as palavras, conforme explicado na subse¸c˜ao 3.3.1. Assim, s˜ao criados os atributos referentes a cada palavra, onde o valor

desses atributos ´e a frequˆencia dessa palavra no texto (bag of words). Esses novos atributos s˜ao adicionados no arquivo. Por fim, o arquivo ficou com 1865 linhas

(exemplos) e 5016 colunas (atributos).

4.2

Metodologia Experimental

Foram executadas diversas combina¸c˜oes de algoritmos com objetivo de analisar quais desempenhariam um melhor resultado. Nessa Se¸c˜ao s˜ao descritas quais foram as t´ecnicas e algoritmos utilizados. A t´ecnica de valida¸c˜ao cruzada foi utilizada em todas

execu¸c˜oes, com fold de tamanho 5, na tentativa de obter uma amostra n˜ao muito reduzida da classe minorit´aria em cada conjunto de valida¸c˜ao. Abaixo seguem as

descri¸c˜oes dos nomes dados aos experimentos de combina¸c˜oes dos algoritmos: • LR = Logistic Regression

• SVM = C-Support Vector Classification, com parˆametro (kernel=’rbf’) • SVMS = C-Support Vector Classification, com parˆametro (kernel=’sigmoid’) • NAIVE = Gaussian Naive Bayes

• RF = Random Forest, com 10 ´arvores.

• LDA X = Latent Dirichlet Allocation, onde X ´e o n´umero de t´opicos utilizado como parˆametro.

(41)

30 • PCA = Principal component analysis

4.3

Resultados

As tabelas 4.1, 4.2, 4.3, 4.4 e 4.5 apresentam os resultados obtidos em cada t´ecnica utilizada. Observa-se que o dataset utilizado foi o mesmo para todas abordagens, mas

h´a uma diferen¸ca da quantidade de atributos devido a redu¸c˜ao de dimensionalidade. Para comparar os resultados, usamos as seguintes medidas, considerando cada tipo de

falha:

• True Positive, que indica a quantidade de exemplos em que o modelo acertou a falha espec´ıfica.

• False Positive, que representa a quantidade de exemplos em que o modelo indicou que havia uma falha espec´ıfica, mas n˜ao havia.

• False Negative, que representa a quantidade de exemplos em que o modelo n˜ao indicou que havia uma falha espec´ıfica, mas havia.

• Precision, que ´e ´e definido pela equa¸c˜ao 4.1 T rueP ositive

T rueP ositive + F alseP ositive (4.1) • Recall ´e definido pela equa¸c˜ao 4.2

T rueP ositive

T rueP ositive + F alseN egatives (4.2) • Score (F-measure) ´e definido pela equa¸c˜ao 4.3 que ´e a m´edia, considerando os valores de cada classe. Foi utilizada a classe f1 score presente no pacote sklearn.metrics. da biblioteca Scikit-Learn.

2 × P recision × Recall

(42)

4.4

Resultados Obtidos

O gr´afico 4.1 mostra a rela¸c˜ao entre os algoritmos executados e os scores obtidos, considerando ou n˜ao o m´etodo de redu¸c˜ao de dimensionalidade. De modo geral, o algoritmo que apresentou o melhor desempenho foi o Random Forest, pois obteve resultados de score acima de 70% para todos os casos. De fato, esse algoritmo ´e reportado na literatura como um dos melhores classificadores atualmente, por combinar

v´arios classificadores em um.

Podemos perceber que a combina¸c˜ao do algoritmo Logistic Regression com os m´etodos de redu¸c˜ao de dimensionalidade pioraram seu desempenho. Esse n˜ao foi o caso do algoritmo Naive Bayes especificamente com o PCA, que foi o melhor resultado de score obtido dentre todos. Com isso, podemos verificar o que foi apontado na se¸c˜ao anterior, ou seja, que o Naive Bayes, considerando um m´etodo de redu¸c˜ao de dimensionalidade, pode obter resultados melhores. Em contrapartida, o Naive Bayes LDA1000 obteve o

pior desempenho de todos. Por outro lado, o uso do PCA com o Random Forest aumentou ligeiramente o desempenho desse classificador, enquanto os m´etodos de redu¸c˜ao de dimensionalidade n˜ao fizeram diferen¸ca para o SVM, considerando ambas as

fun¸c˜oes de kernel avaliadas, conforme ilustrado no gr´afico 4.1. O gr´afico 4.1 ilustra os resutlados obtidos cada classificador.

As Tabelas 4.1, 4.2, 4.3, 4.4 mostram os valores exatos de F-Measure obtidos para cada algoritmo, considerando o uso ou n˜ao da redu¸c˜ao de dimensionalidade.

Tabela 4.1: Logistic Regression. Algoritmo Score Atributos LR 0.7118741249 5016 LR LDA 10 0.6655410705 10 LR LDA 100 0.6655410705 100 LR LDA 1000 0.6655410705 1000 LR LDA 2500 0.6655410705 2500 LR PCA 0.4653787013 1865

As Tabelas 4.6, 4.7, 4.8 e 4.9 mostram as matrizes de confus˜ao media e mediana dos algoritmos que apresentaram o melhor e pior score respectivamente.

(43)

32

Figura 4.1: Resultados Tabela 4.2: Naive Bayes.

Algoritmo Score Atributos NAIVE 0.6056121937 5016 NAIVE LDA 10 0.2252752526 10 NAIVE LDA 100 0.1611353361 100 NAIVE LDA 1000 0.0590723223 1000 NAIVE LDA 2500 0.112579222 2500 NAIVE PCA 0.8297727133 1865

As tabelas 4.10 e 4.11 exibem as matrizes de confus˜ao do Random Forest LDA 1000. As classes das matrizes de confus˜ao seguem a seguinte legenda:

• classe1: Abandoned Implementation • classe2: Product Failure

• classe3: Rejection Reversal • classe4: Removed Feature

(44)

Tabela 4.3: Random Forest.

Algoritmo Score Atributos RF 0.7211616791 5016 RF LDA 10 0.7307122836 10 RF LDA 100 0.7132594853 100 RF LDA 1000 0.7419300619 1000 RF LDA 2500 0.7288338979 2500 RF PCA 0.7604083831 1865 Tabela 4.4: SVM.

Algoritmo Score Atributos SVM 0.6655410705 5016 SVM LDA 10 0.6655410705 10 SVM LDA 100 0.6655410705 100 SVM LDA 1000 0.6655410705 1000 SVM LDA 2500 0.6655410705 2500 SVM PCA 0.6655410705 1865 Tabela 4.5: SVMS

Algoritmo Score Atributos SVMS 0.6655410705 5016 SVMS LDA 10 0.6655410705 10 SVMS LDA 100 0.6655410705 100 SVMS LDA 1000 0.6655410705 1000 SVMS LDA 2500 0.6655410705 2500 SVMS PCA 0.6655410705 1865 • classe5: Stalled Development

Podemos ver que boa parte dos erros cometidos foram de classificar outras classes como a classe 2. Isso era de se esperar, visto que essa ´e a classe majorit´aria. De todo modo, podemos ver que o melhor resultado acerta mais as classes do que erra para a maioria

(45)

34 Tabela 4.6: Matriz Confus˜ao (M´edia) Naive Bayes PCA

classe1 classe2 classe3 classe4 classe5 classe1 42.20 1.00 0.00 0.00 0.00 classe2 36.00 231.00 14.00 0.00 5.00 classe3 0.00 0.60 8.60 0.00 0.80 classe4 0.00 0.20 2.20 0.40 0.40 classe5 0.00 0.60 10.00 0.80 19.20 Tabela 4.7: Matriz Confus˜ao (Mediana) Naive Bayes PCA

classe1 classe2 classe3 classe4 classe5 classe1 42.00 1.00 0.00 0.00 0.00 classe2 0.00 282.00 0.00 0.00 2.00 classe3 0.00 0.00 9.00 0.00 0.00 classe4 0.00 0.00 3.00 0.00 0.00 classe5 0.00 0.00 8.00 0.00 23.00 Tabela 4.8: Matriz Confus˜ao (M´edia) Naive Bayes LDA 1000

classe1 classe2 classe3 classe4 classe5 classe1 12.20 0.20 30.00 0.40 0.40 classe2 77.00 8.60 186.60 2.00 11.80 classe3 2.40 0.20 7.40 0.00 0.00 classe4 0.60 0.20 2.40 0.00 0.00 classe5 9.60 0.40 19.20 0.40 1.00

Tabela 4.9: Matriz Confus˜ao (Mediana) Naive Bayes LDA 1000 classe1 classe2 classe3 classe4 classe5 classe1 0.00 0.00 40.00 0.00 0.00 classe2 5.00 7.00 256.00 0.00 13.00 classe3 0.00 0.00 9.00 0.00 0.00 classe4 0.00 0.00 3.00 0.00 0.00 classe5 0.00 0.00 26.00 0.00 1.00

(46)

Tabela 4.10: Matriz Confus˜ao (M´edia) RF LDA 1000 classe1 classe2 classe3 classe4 classe5 classe1 27.80 15.00 0.00 0.00 0.40 classe2 22.80 246.80 3.20 0.40 12.80 classe3 0.00 6.60 2.40 0.00 1.00 classe4 0.00 2.40 0.40 0.00 0.40 classe5 0.20 25.00 1.00 0.00 4.40 Tabela 4.11: Matriz Confus˜ao (Mediana) RF LDA 1000

classe1 classe2 classe3 classe4 classe5 classe1 26.00 17.00 0.00 0.00 0.00 classe2 2.00 272.00 1.00 0.00 6.00 classe3 0.00 6.00 2.00 0.00 1.00 classe4 0.00 2.00 0.00 0.00 0.00 classe5 0.00 25.00 1.00 0.00 5.00

(47)

Cap´ıtulo 5

Conclus˜

ao

Esse trabalho tinha por objetivo a constru¸c˜ao de uma ferramenta de previs˜ao de falhas em projetos de software, a partir de solicita¸c˜oes de melhorias ou reparos relatadas em

Sistemas de Gerenciamentos de Requisi¸c˜oes online. Para obter um modelo preditivo, foram utilizadas t´ecnicas de Aprendizado de M´aquina. Como metodologia, primeiramente, foram coletadas informa¸c˜oes de diversas requisi¸c˜oes existentes e depois foram aplicadas algumas regras para obtermos aquelas requisi¸c˜oes que possuiam algum dos tipos de falhas, definidas em um estudo anterior. A partir do conjunto de dados das

requisi¸c˜oes de software com falhas, foram criados atributos estruturais e atributos de palavras, coletadas a partir da discuss˜ao realizada pelos usu´arios, desenvolvedores e gerenciadores da requisi¸c˜ao. Para que as palavras pudessem ser vistas como atributos na base de dados, foram aplicadas t´ecnicas de pr´e-processamento de texto, com o intuito de

dimunir a quantidade de palavras relevantes, e o m´etodo de Bag of Words, para que valores pudessem ser atribu´ıdos a tais palavras.

Geralmente, o conjunto de atributos gerados pelo m´etodo de Bag-of-words ´e demasiadamente grande e esparso. Assim, os testes tamb´em utilizaram dois m´etodos de

redu¸c˜ao de dimensionalidade a partir do conjunto de atributos original. Com a t´ecnica de valida¸c˜ao cruzada, separamos uma parte do conjunto de dados para o treinamento e

constru¸c˜ao do modelo, enquanto outra parte foi separada para teste e avalia¸c˜ao do mesmo. Ap´os a aplica¸c˜ao de diversas t´ecnicas e algoritmos variados de classifica¸c˜ao foi

feita uma an´alise entre os resultados obtidos.

Os dados utilizados nesse trabalho s˜ao referentes ao projeto Mozilla Firefox. Podemos constatar que o melhor resultado obtido foi aplicando o Naive Bayes com o m´etodo PCA

(48)

de redu¸c˜ao de dimensionalidade, cuja medida F ficou em 0,82. O m´etodo Random Forest com PCA tamb´em obteve um score bom, de 0.76. Outro ponto de observa¸c˜ao ´e que a redu¸c˜ao de dimensionalidade n˜ao impactou o SVM, pois obtivemos o mesmo score com e

sem a aplica¸c˜ao da redu¸c˜ao de dimensionalidade. O Logistic Regression funcionou melhor sem redu¸c˜ao de dimensionalidade, chegando a um score de 0.71. O pior desempenho encontrado foi o LDA com 1000 t´opicos + Naive Bayes, com score de 0.05.

Esse trabalho analisou somente dados do Projeto Mozilla Firefox. Como trabalhos futuros, poderiam ser analisados dados de outros projetos. Al´em disso, seria interessante

identificar quais os atributos que se mostraram mais relevantes para os melhores resultados obtidos, na tentativa de explicar o motivo da falha.

Nesse trabalho foram utilizados as t´ecnicas PCA e LDA com objetivo de reduzir a esparsidade nas tabelas geradas pelo Bag-of-Words, em um trabalho futuro outras t´ecnicas de redu¸c˜ao de dimensionalidade e sele¸c˜ao de atributos poderiam ser aplicadas. Outra poss´ıvel extens˜ao ´e incluir n˜ao apenas os casos de falha, como tamb´em os casos de

sucesso, para que o modelo de predi¸c˜ao possa classificar tamb´em requisi¸c˜oes que n˜ao apresentar˜ao falhas. Nesse caso, um modelo

hier´arquico [Cesa-Bianchi, Gentile e Zaniboni 2006] pode ser aplicado, de forma que primeiro seja classificada a falha ou sucesso e em seguida o tipo da falha. Outra

possibilidade ´e incluir atributos obtidos de um m´etodo de an´alise de

sentimentos [Liu e Zhang 2012], de forma que sentimentos positivos e negativos possam tamb´em ser usados para indicar qual o caminho que os coment´arios est˜ao apontando.

Finalmente, como os relacionamentos entre os usu´arios e desenvolvedores e seus coment´arios e entre as pr´oprias requisi¸c˜oes tamb´em podem ser bons indicativos de

poss´ıveis falhas, gostar´ıamos de aplicar t´ecnicas de Aprendizado

Relacional [Raedt 2008, Getoor 2007] para que atributos desse tipo sejam levados em considera¸c˜ao.

(49)

Referˆ

encias Bibliogr´

aficas

[Abandoned Implementation Failure Example]ABANDONED Implementation Failure Example. [Online; accessed December 28, 2016]. Dispon´ıvel em: <https : //bz.apache.org/bugzilla/showactivity.cgi?id = 34868>.

[Abu-Mostafa, Magdon-Ismail e Lin 2012]ABU-MOSTAFA, Y. S.; MAGDON-ISMAIL, M.; LIN, H.-T. Learning from data. [S.l.]: AMLBook Singapore, 2012. v. 4.

[Alpaydin 2009]ALPAYDIN, E. Introduction to Machine Learning. second. [S.l.]: The MIT Press, 2009.

[Aranha 2007]ARANHA, C. N. Uma abordagem de pr´e-processamento autom´atico para minera¸c˜ao de textos em portuguˆes: Sob o enfoque da inteligˆencia computacional. 2007. [Baeza-Yates, Ribeiro-Neto et al. 1999]BAEZA-YATES, R.; RIBEIRO-NETO, B. et al.

Modern information retrieval. [S.l.]: ACM press New York, 1999. v. 463.

[Bird et al. 2008]BIRD, C. et al. Latent social structure in open source projects. In: Proce-edings of the 16th ACM SIGSOFT International Symposium on Foundations of Software Engineering, 2008, Atlanta, Georgia, USA, November 9-14, 2008. [S.l.]: ACM, 2008. p. 24–35. ISBN 978-1-59593-995-1.

[Bird 2006]BIRD, S. Nltk: the natural language toolkit. In: ASSOCIATION FOR COM-PUTATIONAL LINGUISTICS. Proceedings of the COLING/ACL on Interactive pre-sentation sessions. [S.l.], 2006. p. 69–72.

[Breiman 2001]BREIMAN, L. Random forests. Machine learning, Springer, v. 45, n. 1, p. 5–32, 2001.

[Bugzilla Lifecycle]BUGZILLA Lifecycle. [Online; accessed July 9, 2016]. Dispon´ıvel em: <https://www.bugzilla.org/docs/2.18/html/lifecycle.html>.

(50)

[Bugzilla REST API]BUGZILLA REST API. [Online; accessed December 28, 2016]. Dis-pon´ıvel em: <https : //wiki.mozilla.org/Bugzilla : RESTAP I>.

[Cesa-Bianchi, Gentile e Zaniboni 2006]CESA-BIANCHI, N.; GENTILE, C.; ZANI-BONI, L. Incremental algorithms for hierarchical classification. Journal of Machine Le-arning Research, v. 7, n. Jan, p. 31–54, 2006.

[Cleland-Huang et al. 2009]CLELAND-HUANG, J. et al. Automated support for mana-ging feature requests in open forums. Communications of the ACM, ACM, v. 52, n. 10, p. 68–74, 2009.

[Cortes e Vapnik 1995]CORTES, C.; VAPNIK, V. Support-vector networks. Machine le-arning, Springer, v. 20, n. 3, p. 273–297, 1995.

[Fenton e Neil 1999]FENTON, N. E.; NEIL, M. A critique of software defect prediction models. Software Engineering, IEEE Transactions on, IEEE, v. 25, n. 5, p. 675–689, 1999.

[Fitzgerald, Letier e Finkelstein 2012]FITZGERALD, C.; LETIER, E.; FINKELSTEIN, A. Early failure prediction in feature request management systems: an ex-tended study. Requir. Eng., v. 17, n. 2, p. 117–132, 2012. Dispon´ıvel em: <http://dx.doi.org/10.1007/s00766-012-0150-7>.

[Getoor 2007]GETOOR, L. Introduction to statistical relational learning. [S.l.]: MIT press, 2007.

[Gokhale et al. 1998]GOKHALE, S. S. et al. An analytical approach to architecture-based software reliability prediction. In: IEEE. Computer Performance and Dependability Sym-posium, 1998. IPDS’98. Proceedings. IEEE International. [S.l.], 1998. p. 13–22.

[Hosmer 2000]HOSMER, S. L. D. W. Applied Logistic Regression. [S.l.: s.n.], 2000. [Izenman 2013]IZENMAN, A. J. Linear discriminant analysis. In: Modern Multivariate

Statistical Techniques. [S.l.]: Springer, 2013. p. 237–280.

[Jolliffe 2002]JOLLIFFE, I. Principal component analysis. [S.l.]: Wiley Online Library, 2002.

(51)

40 [Kohavi et al. 1995]KOHAVI, R. et al. A study of cross-validation and bootstrap for accu-racy estimation and model selection. In: Ijcai. [S.l.: s.n.], 1995. v. 14, n. 2, p. 1137–1145. [Liu e Zhang 2012]LIU, B.; ZHANG, L. A survey of opinion mining and sentiment

analy-sis. In: Mining text data. [S.l.]: Springer, 2012. p. 415–463.

[Mitchell 1997]MITCHELL, T. Machine Learning. New York: McGraw-Hill, 1997.

[Nahm e Mooney 2002]NAHM, U. Y.; MOONEY, R. J. Text mining with information extraction. In: AAAI 2002 Spring Symposium on Mining Answers from Texts and Kno-wledge Bases. [S.l.: s.n.], 2002. v. 1.

[Pedregosa et al. 2011]PEDREGOSA, F. et al. Scikit-learn: Machine learning in python. Journal of Machine Learning Research, v. 12, n. Oct, p. 2825–2830, 2011.

[Procaccino et al. 2002]PROCACCINO, J. D. et al. Case study: factors for early pre-diction of software development success. Information and software technology, Elsevier, v. 44, n. 1, p. 53–62, 2002.

[Product Failure Example]PRODUCT Failure Example. [Online; accessed December 28, 2016]. Dispon´ıvel em: <https : //bugzilla.mozilla.org/showactivity.cgi?id = 451995>.

[Raedt 2008]RAEDT, L. D. Logical and relational learning. [S.l.]: Springer Science & Business Media, 2008.

[Rejection Reversal Failure Example]REJECTION Reversal Failure Exam-ple. [Online; accessed December 28, 2016]. Dispon´ıvel em: <https : //bugzilla.mozilla.org/showactivity.cgi?id = 171702>.

[Removed Feature Failure Example]REMOVED Feature Failure Exam-ple. [Online; accessed December 28, 2016]. Dispon´ıvel em: <https : //netbeans.org/bugzilla/showactivity.cgi?id = 171465>.

[Roweis e Saul 2000]ROWEIS, S. T.; SAUL, L. K. Nonlinear dimensionality reduction by locally linear embedding. Science, American Association for the Advancement of Science, v. 290, n. 5500, p. 2323–2326, 2000.

[Scholkopf e Smola 2001]SCHOLKOPF, B.; SMOLA, A. J. Learning with kernels: support vector machines, regularization, optimization, and beyond. [S.l.]: MIT press, 2001.

(52)

[Stalled Development Failure Example]STALLED Development Failure Exam-ple. [Online; accessed December 28, 2016]. Dispon´ıvel em: <https : //bugzilla.mozilla.org/showactivity.cgi?id = 1130284>.

[Zhang, Jin e Zhou 2010]ZHANG, Y.; JIN, R.; ZHOU, Z.-H. Understanding bag-of-words model: a statistical framework. International Journal of Machine Learning and Cyber-netics, Springer, v. 1, n. 1-4, p. 43–52, 2010.

Referências

Documentos relacionados

Eu considero a duplicação como o coração de um sistema para multinível porque se ela não acontecer, você não se beneficiará daquilo que mais nos seduz: a possibilidade de

Durantes nove dias, 30 de abril a 11 de maio, a CEDEAO for- mou em Eurotrace SQL quatro colaboradores do INE, dois do sexo feminino e dois do sexo masculino, um do Depar- tamento

A origem do nome Açaí é que nós justamente tivemos o trabalho né, foi o processo foi feito com o SEBRAE né, foi dado as aulas pra nós, aí então, lá no curso ela pediu pra

A função gerente de obras torna-se cada vez mais necessária na construção civil, pois o setor está cada vez mais desenvolvendo e aprimorando a área de coordenação

Na Nova Zelândia em sistemas pastoris as vacas produzem em média 17 litros de leite ao dia, enquanto nos produtores analisados neste estudo a média de

No caso de uma apresentação de Artigo em formato Áudio, o arquivo deverá ser enviado em CD por correio postal para:.. Comitê Editorial INFEIES - RM

Além disso, a falta de esclarecimento de toda a comunidade escolar sobre sua importância para a melhoria do desempenho dos educandos também contribuiu para que os pais não o

Objeto: Pregão Eletrônico - Re- gistro de Preços para a eventual aquisição de materiais de audiovisual e tecnologia da informação para atender ao Campus Blumenau da